Add f fly
This commit is contained in:
parent
cf8852524e
commit
f35c040af7
@ -38,6 +38,8 @@ permissions:
|
|||||||
factions.flag.list: {description: list flags, default: false}
|
factions.flag.list: {description: list flags, default: false}
|
||||||
factions.flag.set: {description: set flags, default: false}
|
factions.flag.set: {description: set flags, default: false}
|
||||||
factions.flag.show: {description: show flags, default: false}
|
factions.flag.show: {description: show flags, default: false}
|
||||||
|
factions.fly: {description: faction fly, default: false}
|
||||||
|
factions.fly.other: {description: set faction fly for others, default: false}
|
||||||
factions.invite: {description: manage invites, default: false}
|
factions.invite: {description: manage invites, default: false}
|
||||||
factions.invite.list: {description: list invited players, default: false}
|
factions.invite.list: {description: list invited players, default: false}
|
||||||
factions.invite.list.other: {description: list invited players of another factions, default: false}
|
factions.invite.list.other: {description: list invited players of another factions, default: false}
|
||||||
@ -142,6 +144,8 @@ permissions:
|
|||||||
factions.flag.list: true
|
factions.flag.list: true
|
||||||
factions.flag.set: true
|
factions.flag.set: true
|
||||||
factions.flag.show: true
|
factions.flag.show: true
|
||||||
|
factions.fly: true
|
||||||
|
factions.fly.other: true
|
||||||
factions.home: true
|
factions.home: true
|
||||||
factions.invite: true
|
factions.invite: true
|
||||||
factions.invite.list: true
|
factions.invite.list: true
|
||||||
@ -243,6 +247,7 @@ permissions:
|
|||||||
factions.leader.any: true
|
factions.leader.any: true
|
||||||
factions.officer.any: true
|
factions.officer.any: true
|
||||||
factions.access.any: true
|
factions.access.any: true
|
||||||
|
factions.fly.other: true
|
||||||
factions.setpower: true
|
factions.setpower: true
|
||||||
factions.kit.rank1:
|
factions.kit.rank1:
|
||||||
default: false
|
default: false
|
||||||
@ -280,6 +285,7 @@ permissions:
|
|||||||
factions.flag.list: true
|
factions.flag.list: true
|
||||||
factions.flag.set: true
|
factions.flag.set: true
|
||||||
factions.flag.show: true
|
factions.flag.show: true
|
||||||
|
factions.fly: true
|
||||||
factions.home: true
|
factions.home: true
|
||||||
factions.invite: true
|
factions.invite: true
|
||||||
factions.invite.list: true
|
factions.invite.list: true
|
||||||
|
@ -33,6 +33,7 @@ import com.massivecraft.factions.engine.EngineFlagExplosion;
|
|||||||
import com.massivecraft.factions.engine.EngineFlagFireSpread;
|
import com.massivecraft.factions.engine.EngineFlagFireSpread;
|
||||||
import com.massivecraft.factions.engine.EngineFlagSpawn;
|
import com.massivecraft.factions.engine.EngineFlagSpawn;
|
||||||
import com.massivecraft.factions.engine.EngineFlagZombiegrief;
|
import com.massivecraft.factions.engine.EngineFlagZombiegrief;
|
||||||
|
import com.massivecraft.factions.engine.EngineFly;
|
||||||
import com.massivecraft.factions.engine.EngineLastActivity;
|
import com.massivecraft.factions.engine.EngineLastActivity;
|
||||||
import com.massivecraft.factions.engine.EngineMotd;
|
import com.massivecraft.factions.engine.EngineMotd;
|
||||||
import com.massivecraft.factions.engine.EngineMoveChunk;
|
import com.massivecraft.factions.engine.EngineMoveChunk;
|
||||||
@ -220,6 +221,7 @@ public class Factions extends MassivePlugin
|
|||||||
EngineFlagFireSpread.class,
|
EngineFlagFireSpread.class,
|
||||||
EngineFlagSpawn.class,
|
EngineFlagSpawn.class,
|
||||||
EngineFlagZombiegrief.class,
|
EngineFlagZombiegrief.class,
|
||||||
|
EngineFly.class,
|
||||||
EngineLastActivity.class,
|
EngineLastActivity.class,
|
||||||
EngineMotd.class,
|
EngineMotd.class,
|
||||||
EngineMoveChunk.class,
|
EngineMoveChunk.class,
|
||||||
|
@ -37,6 +37,8 @@ public enum Perm implements Identified
|
|||||||
FLAG_LIST,
|
FLAG_LIST,
|
||||||
FLAG_SET,
|
FLAG_SET,
|
||||||
FLAG_SHOW,
|
FLAG_SHOW,
|
||||||
|
FLY,
|
||||||
|
FLY_OTHER,
|
||||||
HOME,
|
HOME,
|
||||||
INVITE,
|
INVITE,
|
||||||
INVITE_LIST,
|
INVITE_LIST,
|
||||||
|
@ -54,6 +54,7 @@ public class CmdFactions extends FactionsCommand
|
|||||||
public CmdFactionsRelationOld cmdFactionsRelationOldEnemy = new CmdFactionsRelationOld("enemy");
|
public CmdFactionsRelationOld cmdFactionsRelationOldEnemy = new CmdFactionsRelationOld("enemy");
|
||||||
public CmdFactionsPerm cmdFactionsPerm = new CmdFactionsPerm();
|
public CmdFactionsPerm cmdFactionsPerm = new CmdFactionsPerm();
|
||||||
public CmdFactionsFlag cmdFactionsFlag = new CmdFactionsFlag();
|
public CmdFactionsFlag cmdFactionsFlag = new CmdFactionsFlag();
|
||||||
|
public CmdFactionsFly cmdFactionsFly = new CmdFactionsFly();
|
||||||
public CmdFactionsUnstuck cmdFactionsUnstuck = new CmdFactionsUnstuck();
|
public CmdFactionsUnstuck cmdFactionsUnstuck = new CmdFactionsUnstuck();
|
||||||
public CmdFactionsOverride cmdFactionsOverride = new CmdFactionsOverride();
|
public CmdFactionsOverride cmdFactionsOverride = new CmdFactionsOverride();
|
||||||
public CmdFactionsDisband cmdFactionsDisband = new CmdFactionsDisband();
|
public CmdFactionsDisband cmdFactionsDisband = new CmdFactionsDisband();
|
||||||
|
63
src/com/massivecraft/factions/cmd/CmdFactionsFly.java
Normal file
63
src/com/massivecraft/factions/cmd/CmdFactionsFly.java
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
package com.massivecraft.factions.cmd;
|
||||||
|
|
||||||
|
import com.massivecraft.factions.engine.EngineFly;
|
||||||
|
import com.massivecraft.factions.entity.MPlayer;
|
||||||
|
import com.massivecraft.massivecore.MassiveException;
|
||||||
|
import com.massivecraft.massivecore.command.MassiveCommandToggle;
|
||||||
|
import com.massivecraft.massivecore.engine.EngineMassiveCorePlayerUpdate;
|
||||||
|
import com.massivecraft.massivecore.ps.PS;
|
||||||
|
import com.massivecraft.massivecore.util.IdUtil;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
public class CmdFactionsFly extends MassiveCommandToggle
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static CmdFactionsFly i = new CmdFactionsFly();
|
||||||
|
public static CmdFactionsFly get() { return i; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public CmdFactionsFly()
|
||||||
|
{
|
||||||
|
super();
|
||||||
|
this.setAliases("fly");
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName()
|
||||||
|
{
|
||||||
|
return "faction flying";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean getValue() throws MassiveException
|
||||||
|
{
|
||||||
|
return MPlayer.get(sender).isFlying();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(boolean value) throws MassiveException
|
||||||
|
{
|
||||||
|
MPlayer mplayer = MPlayer.get(sender);
|
||||||
|
Player player = IdUtil.getPlayer(sender);
|
||||||
|
if (player == null) throw new MassiveException().addMsg("<b>Could not find player.");
|
||||||
|
|
||||||
|
PS ps = PS.valueOf(player);
|
||||||
|
if (value && !EngineFly.canFlyInTerritory(mplayer, ps))
|
||||||
|
{
|
||||||
|
throw new MassiveException().addMsg("<b>You can't fly where you are.");
|
||||||
|
}
|
||||||
|
|
||||||
|
mplayer.setFlying(value);
|
||||||
|
EngineMassiveCorePlayerUpdate.update(player, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
101
src/com/massivecraft/factions/engine/EngineFly.java
Normal file
101
src/com/massivecraft/factions/engine/EngineFly.java
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
package com.massivecraft.factions.engine;
|
||||||
|
|
||||||
|
import com.massivecraft.factions.entity.BoardColl;
|
||||||
|
import com.massivecraft.factions.entity.Faction;
|
||||||
|
import com.massivecraft.factions.entity.MConf;
|
||||||
|
import com.massivecraft.factions.entity.MFlag;
|
||||||
|
import com.massivecraft.factions.entity.MPlayer;
|
||||||
|
import com.massivecraft.massivecore.Engine;
|
||||||
|
import com.massivecraft.massivecore.event.EventMassiveCorePlayerUpdate;
|
||||||
|
import com.massivecraft.massivecore.ps.PS;
|
||||||
|
import com.massivecraft.massivecore.util.MUtil;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.player.PlayerMoveEvent;
|
||||||
|
|
||||||
|
public class EngineFly extends Engine
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static EngineFly i = new EngineFly();
|
||||||
|
public static EngineFly get() { return i; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// LISTENER
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||||
|
public void onMassiveCorePlayerUpdate(EventMassiveCorePlayerUpdate event)
|
||||||
|
{
|
||||||
|
// If we are updating a player ...
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
if (MUtil.isntPlayer(player)) return;
|
||||||
|
|
||||||
|
// ... and that player isn't in creative or spectator mode ...
|
||||||
|
if (EventMassiveCorePlayerUpdate.isFlyAllowed(player, false)) return;
|
||||||
|
|
||||||
|
// ... and the player is alive ...
|
||||||
|
if (player.isDead()) return;
|
||||||
|
|
||||||
|
MPlayer mplayer = MPlayer.get(player);
|
||||||
|
|
||||||
|
// ... and the player enables flying ...
|
||||||
|
if (!mplayer.isFlying()) return;
|
||||||
|
|
||||||
|
// ... and the player enables flying ...
|
||||||
|
if (!canFlyInTerritory(mplayer, PS.valueOf(player))) return;
|
||||||
|
|
||||||
|
// ... set allowed ...
|
||||||
|
event.setAllowed(true);
|
||||||
|
|
||||||
|
// ... set speed ...
|
||||||
|
event.setFlySpeed(MConf.get().flySpeed);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
|
public void moveChunkDetect(PlayerMoveEvent event)
|
||||||
|
{
|
||||||
|
// If the player is moving from one chunk to another ...
|
||||||
|
if (MUtil.isSameChunk(event)) return;
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
if (MUtil.isntPlayer(player)) return;
|
||||||
|
|
||||||
|
// ... gather info on the player and the move ...
|
||||||
|
MPlayer mplayer = MPlayer.get(player);
|
||||||
|
PS chunkTo = PS.valueOf(event.getTo()).getChunk(true);
|
||||||
|
|
||||||
|
// ... and they are currently flying ...
|
||||||
|
if (!mplayer.isFlying()) return;
|
||||||
|
|
||||||
|
// ... but can't fly at the new place ...
|
||||||
|
if (canFlyInTerritory(mplayer, chunkTo)) return;
|
||||||
|
|
||||||
|
// ... then perhaps they should not be
|
||||||
|
mplayer.setFlying(false);
|
||||||
|
deactivateForPlayer(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean canFlyInTerritory(MPlayer mplayer, PS ps)
|
||||||
|
{
|
||||||
|
Faction faction = mplayer.getFaction();
|
||||||
|
Faction locationFaction = BoardColl.get().getFactionAt(ps.getChunk(true));
|
||||||
|
|
||||||
|
if (faction != locationFaction) return false;
|
||||||
|
if (!faction.getFlag(MFlag.getFlagFly())) return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void deactivateForPlayer(Player player)
|
||||||
|
{
|
||||||
|
EventMassiveCorePlayerUpdate.resetFlyAllowed(player);
|
||||||
|
EventMassiveCorePlayerUpdate.resetFlyActive(player);
|
||||||
|
EventMassiveCorePlayerUpdate.resetFlySpeed(player);
|
||||||
|
|
||||||
|
EventMassiveCorePlayerUpdate.run(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -322,6 +322,9 @@ public class MConf extends Entity<MConf>
|
|||||||
// Make faction disbanding a confirmation thing
|
// Make faction disbanding a confirmation thing
|
||||||
public boolean requireConfirmationForFactionDisbanding = true;
|
public boolean requireConfirmationForFactionDisbanding = true;
|
||||||
|
|
||||||
|
// At what speed can players fly with /f fly?
|
||||||
|
public float flySpeed = 0.1f;
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// DENY COMMANDS
|
// DENY COMMANDS
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
@ -34,6 +34,7 @@ public class MFlag extends Entity<MFlag> implements Prioritized, Registerable, N
|
|||||||
public final static transient String ID_PERMANENT = "permanent";
|
public final static transient String ID_PERMANENT = "permanent";
|
||||||
public final static transient String ID_PEACEFUL = "peaceful";
|
public final static transient String ID_PEACEFUL = "peaceful";
|
||||||
public final static transient String ID_INFPOWER = "infpower";
|
public final static transient String ID_INFPOWER = "infpower";
|
||||||
|
public final static transient String ID_FLY = "fly";
|
||||||
|
|
||||||
public final static transient int PRIORITY_OPEN = 1_000;
|
public final static transient int PRIORITY_OPEN = 1_000;
|
||||||
public final static transient int PRIORITY_MONSTERS = 2_000;
|
public final static transient int PRIORITY_MONSTERS = 2_000;
|
||||||
@ -50,6 +51,7 @@ public class MFlag extends Entity<MFlag> implements Prioritized, Registerable, N
|
|||||||
public final static transient int PRIORITY_PERMANENT = 13_000;
|
public final static transient int PRIORITY_PERMANENT = 13_000;
|
||||||
public final static transient int PRIORITY_PEACEFUL = 14_000;
|
public final static transient int PRIORITY_PEACEFUL = 14_000;
|
||||||
public final static transient int PRIORITY_INFPOWER = 15_000;
|
public final static transient int PRIORITY_INFPOWER = 15_000;
|
||||||
|
public final static transient int PRIORITY_FLY = 16_000;
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// META: CORE
|
// META: CORE
|
||||||
@ -89,6 +91,7 @@ public class MFlag extends Entity<MFlag> implements Prioritized, Registerable, N
|
|||||||
getFlagPermanent();
|
getFlagPermanent();
|
||||||
getFlagPeaceful();
|
getFlagPeaceful();
|
||||||
getFlagInfpower();
|
getFlagInfpower();
|
||||||
|
getFlagFly();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static MFlag getFlagOpen() { return getCreative(PRIORITY_OPEN, ID_OPEN, ID_OPEN, "Can the faction be joined without an invite?", "Anyone can join. No invite required.", "An invite is required to join.", false, true, true); }
|
public static MFlag getFlagOpen() { return getCreative(PRIORITY_OPEN, ID_OPEN, ID_OPEN, "Can the faction be joined without an invite?", "Anyone can join. No invite required.", "An invite is required to join.", false, true, true); }
|
||||||
@ -106,6 +109,7 @@ public class MFlag extends Entity<MFlag> implements Prioritized, Registerable, N
|
|||||||
public static MFlag getFlagPermanent() { return getCreative(PRIORITY_PERMANENT, ID_PERMANENT, ID_PERMANENT, "Is the faction immune to deletion?", "The faction can NOT be deleted.", "The faction can be deleted.", false, false, true); }
|
public static MFlag getFlagPermanent() { return getCreative(PRIORITY_PERMANENT, ID_PERMANENT, ID_PERMANENT, "Is the faction immune to deletion?", "The faction can NOT be deleted.", "The faction can be deleted.", false, false, true); }
|
||||||
public static MFlag getFlagPeaceful() { return getCreative(PRIORITY_PEACEFUL, ID_PEACEFUL, ID_PEACEFUL, "Is the faction in truce with everyone?", "The faction is in truce with everyone.", "The faction relations work as usual.", false, false, true); }
|
public static MFlag getFlagPeaceful() { return getCreative(PRIORITY_PEACEFUL, ID_PEACEFUL, ID_PEACEFUL, "Is the faction in truce with everyone?", "The faction is in truce with everyone.", "The faction relations work as usual.", false, false, true); }
|
||||||
public static MFlag getFlagInfpower() { return getCreative(PRIORITY_INFPOWER, ID_INFPOWER, ID_INFPOWER, "Does the faction have infinite power?", "The faction has infinite power.", "The faction power works as usual.", false, false, true); }
|
public static MFlag getFlagInfpower() { return getCreative(PRIORITY_INFPOWER, ID_INFPOWER, ID_INFPOWER, "Does the faction have infinite power?", "The faction has infinite power.", "The faction power works as usual.", false, false, true); }
|
||||||
|
public static MFlag getFlagFly() { return getCreative(PRIORITY_FLY, ID_FLY, ID_FLY, "Is flying allowed for members in faction territory?", "Members can fly in faction territory.", "Members can not fly in faction territory.", false, false, true); }
|
||||||
|
|
||||||
public static MFlag getCreative(int priority, String id, String name, String desc, String descYes, String descNo, boolean standard, boolean editable, boolean visible)
|
public static MFlag getCreative(int priority, String id, String name, String desc, String descYes, String descNo, boolean standard, boolean editable, boolean visible)
|
||||||
{
|
{
|
||||||
|
@ -175,6 +175,9 @@ public class MPlayer extends SenderEntity<MPlayer> implements FactionsParticipat
|
|||||||
// Null means default specified in MConf.
|
// Null means default specified in MConf.
|
||||||
private Boolean territoryInfoTitles = null;
|
private Boolean territoryInfoTitles = null;
|
||||||
|
|
||||||
|
// Is the player doing faction flying?
|
||||||
|
private Boolean flying = null;
|
||||||
|
|
||||||
// The Faction this player is currently autoclaiming for.
|
// The Faction this player is currently autoclaiming for.
|
||||||
// Null means the player isn't auto claiming.
|
// Null means the player isn't auto claiming.
|
||||||
// NOTE: This field will not be saved to the database ever.
|
// NOTE: This field will not be saved to the database ever.
|
||||||
@ -582,6 +585,20 @@ public class MPlayer extends SenderEntity<MPlayer> implements FactionsParticipat
|
|||||||
this.changed();
|
this.changed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// FIELD: fly
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public boolean isFlying()
|
||||||
|
{
|
||||||
|
return this.convertGet(this.flying, false, Perm.FLY);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFlying(Boolean flying)
|
||||||
|
{
|
||||||
|
this.flying = this.convertSet(flying, this.flying, false);
|
||||||
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// TITLE, NAME, FACTION NAME AND CHAT
|
// TITLE, NAME, FACTION NAME AND CHAT
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
Loading…
Reference in New Issue
Block a user