mirror of
https://github.com/Multiverse/Multiverse-Core.git
synced 2024-12-01 06:53:46 +01:00
Inital allow flight code, if we use it
This commit is contained in:
parent
e8a72d19e1
commit
49fd9e81d1
@ -171,6 +171,9 @@ public class MVWorld implements MultiverseWorld {
|
||||
"There is no help available for this variable. Go bug Rigby90 about it.", "setActualKeepSpawnInMemory"));
|
||||
this.propertyList.put("autoload", fac.getNewProperty("autoload", true,
|
||||
"Set this to false ONLY if you don't want this world to load itself on server restart."));
|
||||
this.propertyList.put("allowflight", fac.getNewProperty("allowflight", false,
|
||||
"Set this to false ONLY if you don't want this world to load itself on server restart.",
|
||||
"setActualAllowFlight"));
|
||||
this.propertyList.put("bedrespawn", fac.getNewProperty("bedrespawn", true, "If a player dies in this world, shoudld they go to their bed?"));
|
||||
this.propertyList.put("time", fac.getNewProperty("time", "", "Set the time to whatever you want! (Will NOT freeze time)", "setActualTime", true));
|
||||
this.getKnownProperty("spawn", Location.class).setValue(this.readSpawnFromConfig(this.getCBWorld()));
|
||||
@ -218,9 +221,20 @@ public class MVWorld implements MultiverseWorld {
|
||||
this.setActualDifficulty();
|
||||
this.setActualGameMode();
|
||||
this.setActualSpawn();
|
||||
this.setActualAllowFlight();
|
||||
this.syncMobs();
|
||||
}
|
||||
|
||||
private boolean setActualAllowFlight() {
|
||||
for (Player p : this.plugin.getServer().getWorld(this.getName()).getPlayers()) {
|
||||
this.plugin.log(Level.FINER, String.format("Changing %s's permission to fly in %s to %s",
|
||||
p.getName(), this.getKnownProperty("allowflight", GameMode.class).getValue().toString(),
|
||||
this.getAlias()));
|
||||
this.plugin.getPlayerListener().handleAllowFlight(p, this);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Used by the active PVP-property to set the "actual" PVP-property.
|
||||
* @return True if the property was successfully set.
|
||||
@ -896,10 +910,6 @@ public class MVWorld implements MultiverseWorld {
|
||||
/**
|
||||
* Sets the actual gamemode by iterating through players.
|
||||
*
|
||||
* gameMode is not used, but it's in the reflection template.
|
||||
*
|
||||
* Needs a bit o' refactoring.
|
||||
*
|
||||
* @return True if the gamemodes of players were set successfully. (always)
|
||||
*/
|
||||
public boolean setActualGameMode() {
|
||||
@ -1182,6 +1192,22 @@ public class MVWorld implements MultiverseWorld {
|
||||
return this.getKnownProperty("portalform", AllowedPortalType.class).getValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public boolean isFlightAllowed() {
|
||||
return this.getKnownProperty("flightallowed", Boolean.class).getValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public void setFlightAllowed(boolean flightAllowed) {
|
||||
this.setKnownProperty("flightallowed", Boolean.toString(flightAllowed), null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Used by the active time-property to set the "actual" property.
|
||||
* @return True if the property was successfully set.
|
||||
|
@ -588,4 +588,25 @@ public interface MultiverseWorld {
|
||||
* @return The type of portals that are allowed.
|
||||
*/
|
||||
AllowedPortalType getAllowedPortals();
|
||||
|
||||
/**
|
||||
* Gets whether or not flight is allowed in this world.
|
||||
* <p>
|
||||
* It should be noted that this refers to clientside flying. Creative
|
||||
* mode will always allow server based flying.
|
||||
*
|
||||
* @return True if flight is allowed.
|
||||
*/
|
||||
boolean isFlightAllowed();
|
||||
|
||||
/**
|
||||
* Sets whether or not flight is allowed in this world.
|
||||
* <p>
|
||||
* It should be noted that this refers to clientside flying. Creative
|
||||
* mode will always allow server based flying.
|
||||
*
|
||||
* @param flightAllowed Wheter or not flight is allowed in this world.
|
||||
*/
|
||||
void setFlightAllowed(boolean flightAllowed);
|
||||
|
||||
}
|
||||
|
@ -300,7 +300,7 @@ public class MVPlayerListener implements Listener {
|
||||
*/
|
||||
public void handleGameMode(final Player player, final MultiverseWorld world) {
|
||||
// We perform this task one tick later to MAKE SURE that the player actually reaches the
|
||||
// destination world, otherwise we'd be changing the player mode if they havent moved anywhere.
|
||||
// destination world, otherwise we'd be changing the player mode if they haven't moved anywhere.
|
||||
if (!this.pt.playerCanIgnoreGameModeRestriction(world, player)) {
|
||||
this.plugin.log(Level.FINE, "Handeling gamemode for player: " + player.getName());
|
||||
this.plugin.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin,
|
||||
@ -308,9 +308,6 @@ public class MVPlayerListener implements Listener {
|
||||
public void run() {
|
||||
// Check that the player is in the new world and they haven't been teleported elsewhere or the event cancelled.
|
||||
if (player.getWorld() == world.getCBWorld()) {
|
||||
MultiverseCore.staticLog(Level.FINE, "Handling gamemode for player: " + player.getName() + ", " + world.getGameMode().toString());
|
||||
MultiverseCore.staticLog(Level.FINE, "PWorld: " + player.getWorld());
|
||||
MultiverseCore.staticLog(Level.FINE, "AWorld: " + world);
|
||||
player.setGameMode(world.getGameMode());
|
||||
} else {
|
||||
MultiverseCore.staticLog(Level.FINE,
|
||||
@ -323,4 +320,32 @@ public class MVPlayerListener implements Listener {
|
||||
this.plugin.log(Level.FINE, "Player: " + player.getName() + " is IMMUNE to gamemode changes!");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles the allowflight attribute for the specified {@link Player}.
|
||||
* @param player The {@link Player}.
|
||||
* @param world The world the player is in.
|
||||
*/
|
||||
public void handleAllowFlight(final Player player, final MultiverseWorld world) {
|
||||
// We perform this task one tick later to MAKE SURE that the player actually reaches the
|
||||
// destination world, otherwise we'd be changing the player mode if they haven't moved anywhere.
|
||||
if (!this.pt.playerCanIgnoreAllowFlightRestriction(world, player)) {
|
||||
this.plugin.log(Level.FINE, "Handeling flight for player: " + player.getName());
|
||||
this.plugin.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin,
|
||||
new Runnable() {
|
||||
public void run() {
|
||||
// Check that the player is in the new world and they haven't been teleported elsewhere or the event cancelled.
|
||||
if (player.getWorld() == world.getCBWorld()) {
|
||||
player.setAllowFlight(world.isFlightAllowed());
|
||||
} else {
|
||||
MultiverseCore.staticLog(Level.FINE,
|
||||
String.format("The gamemode was NOT changed for player '%s' because he is now in world '%s' instead of world '%s'",
|
||||
player.getName(), player.getWorld().getName(), world.getName()));
|
||||
}
|
||||
}
|
||||
}, 1L);
|
||||
} else {
|
||||
this.plugin.log(Level.FINE, "Player: " + player.getName() + " is IMMUNE to flight changes!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -50,6 +50,21 @@ public class MVPermissions implements PermissionsInterface {
|
||||
return p.hasPermission("mv.bypass.gamemode." + w.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a Player can ignore GameMode restrictions for world they travel to.
|
||||
*
|
||||
* @param p The {@link Player} to check.
|
||||
* @param w The {@link MultiverseWorld} the player wants to teleport to.
|
||||
* @return True if they should bypass restrictions.
|
||||
*/
|
||||
public boolean canIgnoreAllowFlightRestriction(Player p, MultiverseWorld w) {
|
||||
if (p.hasPermission("mv.bypass.allowflight.*")) {
|
||||
this.plugin.log(Level.FINER, "Player has mv.bypass.allowflight.* they can fly!");
|
||||
return true;
|
||||
}
|
||||
return p.hasPermission("mv.bypass.allowflight." + w.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a Player can teleport to the Destination world from there current world.
|
||||
*
|
||||
|
@ -246,4 +246,21 @@ public class PermissionTools {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks to see if a player should bypass allow-flight restrictions.
|
||||
*
|
||||
* @param toWorld world travelling to.
|
||||
* @param teleportee player travelling.
|
||||
* @return True if they should bypass restrictions
|
||||
*/
|
||||
public boolean playerCanIgnoreAllowFlightRestriction(MultiverseWorld toWorld, Player teleportee) {
|
||||
if (toWorld != null) {
|
||||
return this.plugin.getMVPerms().canIgnoreAllowFlightRestriction(teleportee, toWorld);
|
||||
} else {
|
||||
// TODO: Determine if this value is false because a world didn't exist
|
||||
// or if it was because a world wasn't imported.
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user