diff --git a/src/main/java/com/wimbli/WorldBorder/BorderCheckTask.java b/src/main/java/com/wimbli/WorldBorder/BorderCheckTask.java index 31ee474..681cd80 100644 --- a/src/main/java/com/wimbli/WorldBorder/BorderCheckTask.java +++ b/src/main/java/com/wimbli/WorldBorder/BorderCheckTask.java @@ -89,8 +89,12 @@ public class BorderCheckTask implements Runnable ride.setVelocity(new Vector(0, 0, 0)); ride.teleport(rideLoc); } - setPassengerDelayed(ride, player, player.getName(), 10); - handlingVehicle = true; + + if (Config.RemountTicks() > 0) + { + setPassengerDelayed(ride, player, player.getName(), Config.RemountTicks()); + handlingVehicle = true; + } } } diff --git a/src/main/java/com/wimbli/WorldBorder/Config.java b/src/main/java/com/wimbli/WorldBorder/Config.java index ab42213..93a3cc6 100644 --- a/src/main/java/com/wimbli/WorldBorder/Config.java +++ b/src/main/java/com/wimbli/WorldBorder/Config.java @@ -44,6 +44,7 @@ public class Config private static boolean portalRedirection = true; private static boolean dynmapEnable = true; private static String dynmapMessage; + private static int remountDelayTicks = 0; // for monitoring plugin efficiency // public static long timeUsed = 0; @@ -267,6 +268,23 @@ public class Config return timerTicks; } + public static void setRemountTicks(int ticks) + { + remountDelayTicks = ticks; + if (remountDelayTicks == 0) + Log("Remount delay set to 0. Players will be left dismounted when knocked back from the border while on a vehicle."); + else + Log("Remount delay set to " + remountDelayTicks + " tick(s). That is roughly " + (remountDelayTicks * 50) + "ms / " + (((double)remountDelayTicks * 50.0) / 1000.0) + " seconds."); + if (ticks < 10) + LogWarn("setting the remount delay to less than 10 (and greater than 0) is not recommended. This can lead to nasty client glitches."); + save(true); + } + + public static int RemountTicks() + { + return remountDelayTicks; + } + public static void setDynmapBorderEnabled(boolean enable) { @@ -437,6 +455,7 @@ public class Config portalRedirection = cfg.getBoolean("portal-redirection", true); knockBack = cfg.getDouble("knock-back-dist", 3.0); timerTicks = cfg.getInt("timer-delay-ticks", 5); + remountDelayTicks = cfg.getInt("remount-delay-ticks", 0); dynmapEnable = cfg.getBoolean("dynmap-border-enabled", true); dynmapMessage = cfg.getString("dynmap-border-message", "The border of the world."); LogConfig("Using " + (ShapeName()) + " border, knockback of " + knockBack + " blocks, and timer delay of " + timerTicks + "."); @@ -521,6 +540,7 @@ public class Config cfg.set("portal-redirection", portalRedirection); cfg.set("knock-back-dist", knockBack); cfg.set("timer-delay-ticks", timerTicks); + cfg.set("remount-delay-ticks", remountDelayTicks); cfg.set("dynmap-border-enabled", dynmapEnable); cfg.set("dynmap-border-message", dynmapMessage); diff --git a/src/main/java/com/wimbli/WorldBorder/WBCommand.java b/src/main/java/com/wimbli/WorldBorder/WBCommand.java index 32a64de..ccc00a5 100644 --- a/src/main/java/com/wimbli/WorldBorder/WBCommand.java +++ b/src/main/java/com/wimbli/WorldBorder/WBCommand.java @@ -679,6 +679,39 @@ public class WBCommand implements CommandExecutor cmdTrim(sender, player, world, confirm, cancel, pause, pad, frequency); } + // "remount" command from player or console + else if (split.length == 2 && split[0].equalsIgnoreCase("remount")) + { + if (!Config.HasPermission(player, "remount")) return true; + + int delay = 0; + try + { + delay = Integer.parseInt(split[1]); + if (delay < 0) + throw new NumberFormatException(); + } + catch(NumberFormatException ex) + { + sender.sendMessage(clrErr + "The remount delay must be an integer of 0 or higher. Setting to 0 will disable remounting."); + return true; + } + + Config.setRemountTicks(delay); + + if (player != null) + { + if (delay == 0) + sender.sendMessage("Remount delay set to 0. Players will be left dismounted when knocked back from the border while on a vehicle."); + else + { + sender.sendMessage("Remount delay set to " + delay + " tick(s). That is roughly " + (delay * 50) + "ms / " + (((double)delay * 50.0) / 1000.0) + " seconds. Setting to 0 would disable remounting."); + if (delay < 10) + sender.sendMessage(clrErr + "WARNING:" + clrDesc + " setting this to less than 10 (and greater than 0) is not recommended. This can lead to nasty client glitches."); + } + } + } + // "dynmap" command from player or console else if (split.length == 2 && split[0].equalsIgnoreCase("dynmap")) { @@ -801,11 +834,11 @@ public class WBCommand implements CommandExecutor if (page == 0 || page == 3) { sender.sendMessage(cmd+" whoosh " + clrReq + "" + clrDesc + " - turn knockback effect on or off."); - sender.sendMessage(cmd+" portal " + clrReq + "" + clrDesc + " - turn portal redirection on or off."); sender.sendMessage(cmd+" getmsg" + clrDesc + " - display border message."); sender.sendMessage(cmd+" setmsg " + clrReq + "" + clrDesc + " - set border message."); sender.sendMessage(cmd+" knockback " + clrReq + "" + clrDesc + " - how far to move the player back."); sender.sendMessage(cmd+" delay " + clrReq + "" + clrDesc + " - time between border checks."); + sender.sendMessage(cmd+" remount " + clrReq + "" + clrDesc + " - player remount delay after knockback."); sender.sendMessage(cmd+" dynmap " + clrReq + "" + clrDesc + " - turn DynMap border display on or off."); sender.sendMessage(cmd+" dynmapmsg " + clrReq + "" + clrDesc + " - DynMap border labels will show this."); if (page == 3) @@ -813,6 +846,7 @@ public class WBCommand implements CommandExecutor } if (page == 0 || page == 4) { + sender.sendMessage(cmd+" portal " + clrReq + "" + clrDesc + " - turn portal redirection on or off."); sender.sendMessage(cmd+" reload" + clrDesc + " - re-load data from config.yml."); sender.sendMessage(cmd+" debug " + clrReq + "" + clrDesc + " - turn console debug output on or off."); if (page == 4) diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index da8d063..a42133d 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ name: WorldBorder author: Brettflan description: Efficient, feature-rich plugin for limiting the size of your worlds. -version: 1.7.3 +version: 1.7.3_dev main: com.wimbli.WorldBorder.WorldBorder softdepend: - dynmap @@ -32,6 +32,7 @@ commands: / [world] fill [freq] [pad] - generate world out to border. / [world] trim [freq] [pad] - trim world outside of border. / bypass [player] [on/off] - let player go beyond border. + / remount - delay before remounting after knockback. / dynmap - turn DynMap border display on or off. / dynmapmsg - DynMap border labels will show this. / debug - turn debug mode on or off. @@ -60,6 +61,7 @@ permissions: worldborder.bypass: true worldborder.wrap: true worldborder.portal: true + worldborder.remount: true worldborder.set: description: Can set borders for any world default: op @@ -114,6 +116,9 @@ permissions: worldborder.portal: description: Can enable/disable portal redirection to be inside border default: op + worldborder.remount: + description: Can set the delay before remounting a player to their vehicle after knockback + default: op worldborder.dynmap: description: Can enable/disable DynMap border display integration default: op