From f55d18d469fc4ec8a89b8b4b65b77193b1175fb5 Mon Sep 17 00:00:00 2001 From: Kyle Date: Fri, 5 Jul 2019 00:05:30 -0400 Subject: [PATCH 1/3] Added interactive signs --- .../java/sh/okx/railswitch/RailSwitch.java | 2 + .../listener/SignInteractListener.java | 54 +++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 src/main/java/sh/okx/railswitch/listener/SignInteractListener.java diff --git a/src/main/java/sh/okx/railswitch/RailSwitch.java b/src/main/java/sh/okx/railswitch/RailSwitch.java index fb81eb1..0567800 100644 --- a/src/main/java/sh/okx/railswitch/RailSwitch.java +++ b/src/main/java/sh/okx/railswitch/RailSwitch.java @@ -9,6 +9,7 @@ import sh.okx.railswitch.database.RailSwitchDatabase; import sh.okx.railswitch.database.SQLiteConnectionPool; import sh.okx.railswitch.listener.DectorRailActivateListener; +import sh.okx.railswitch.listener.SignInteractListener; public class RailSwitch extends JavaPlugin { private boolean timings; @@ -27,6 +28,7 @@ public void onEnable() { PluginManager pm = getServer().getPluginManager(); pm.registerEvents(new DectorRailActivateListener(this), this); + pm.registerEvents(new SignInteractListener(this), this); getCommand("setdestination").setExecutor(new SetDestinationCommand(this)); } diff --git a/src/main/java/sh/okx/railswitch/listener/SignInteractListener.java b/src/main/java/sh/okx/railswitch/listener/SignInteractListener.java new file mode 100644 index 0000000..286a7f2 --- /dev/null +++ b/src/main/java/sh/okx/railswitch/listener/SignInteractListener.java @@ -0,0 +1,54 @@ +package sh.okx.railswitch.listener; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.Sign; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import sh.okx.railswitch.RailSwitch; +public class SignInteractListener implements Listener { + private final RailSwitch plugin; + + public SignInteractListener(RailSwitch plugin) { + this.plugin = plugin; + } + + @EventHandler + public void on(PlayerInteractEvent e) { + if(e.getAction() == Action.RIGHT_CLICK_BLOCK) { + Block b = e.getClickedBlock(); + if(b.getType() == Material.SIGN_POST || b.getType() == Material.WALL_SIGN) { + Sign s = (Sign) b.getState(); + for(int i = 0; i < 4; i++) { + String line = s.getLine(i); + if(line.toLowerCase().startsWith("/dest ")) { + Player player = e.getPlayer(); + String dest = line.substring(6); + + trySetDest(player, dest); + } else if(i < 3 && line.toLowerCase().endsWith("/dest")) { + Player player = e.getPlayer(); + String dest = s.getLine(i + 1); + + trySetDest(player, dest); + } + } + } + } + } + + public void trySetDest(Player player, String dest) { + if (!plugin.isValidDestination(dest)) { + player.sendMessage(ChatColor.RED + "Destinations can not be more than 40 characters and may only use alphanumerical characters and ASCII symbols."); + return; + } + + plugin.getDatabase().setPlayerDestination(player, dest); + player.sendMessage(ChatColor.GREEN + "Set your rail destination to: " + dest); + return; + } +} From 1986f86bd69fec651f3a449fdc73744786629cb8 Mon Sep 17 00:00:00 2001 From: Kyle Date: Fri, 5 Jul 2019 00:12:42 -0400 Subject: [PATCH 2/3] Empty destinations on signs no longer do anything --- .../sh/okx/railswitch/listener/SignInteractListener.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/sh/okx/railswitch/listener/SignInteractListener.java b/src/main/java/sh/okx/railswitch/listener/SignInteractListener.java index 286a7f2..ad635f4 100644 --- a/src/main/java/sh/okx/railswitch/listener/SignInteractListener.java +++ b/src/main/java/sh/okx/railswitch/listener/SignInteractListener.java @@ -29,12 +29,14 @@ public void on(PlayerInteractEvent e) { Player player = e.getPlayer(); String dest = line.substring(6); - trySetDest(player, dest); + if(!dest.isEmpty()) + trySetDest(player, dest); } else if(i < 3 && line.toLowerCase().endsWith("/dest")) { Player player = e.getPlayer(); String dest = s.getLine(i + 1); - trySetDest(player, dest); + if(!dest.isEmpty()) + trySetDest(player, dest); } } } From 954e4c8e7a6d9cb98f18522c517fffcf0993f329 Mon Sep 17 00:00:00 2001 From: Kyle Date: Mon, 29 Jul 2019 12:30:40 -0400 Subject: [PATCH 3/3] Move setDestination code to a common function --- src/main/java/sh/okx/railswitch/RailSwitch.java | 13 +++++++++++++ .../sh/okx/railswitch/SetDestinationCommand.java | 8 ++------ .../railswitch/listener/SignInteractListener.java | 15 ++------------- 3 files changed, 17 insertions(+), 19 deletions(-) diff --git a/src/main/java/sh/okx/railswitch/RailSwitch.java b/src/main/java/sh/okx/railswitch/RailSwitch.java index 0567800..56f7cd1 100644 --- a/src/main/java/sh/okx/railswitch/RailSwitch.java +++ b/src/main/java/sh/okx/railswitch/RailSwitch.java @@ -1,7 +1,9 @@ package sh.okx.railswitch; import com.google.common.base.CharMatcher; +import org.bukkit.ChatColor; import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Player; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; import sh.okx.railswitch.database.ConnectionPool; @@ -69,6 +71,17 @@ public boolean isValidDestination(String message) { .or(CharMatcher.anyOf("!\"#$%&'()*+,-./;:<=>?@[]\\^_`{|}~")).matchesAllOf(message); } + public boolean setDestination(Player player, String dest) { + if (!isValidDestination(dest)) { + player.sendMessage(ChatColor.RED + "Destinations can not be more than 40 characters and may only use alphanumerical characters and ASCII symbols."); + return true; + } + + getDatabase().setPlayerDestination(player, dest); + player.sendMessage(ChatColor.GREEN + "Set your rail destination to: " + dest); + return false; + } + public boolean isTimings() { return timings; } diff --git a/src/main/java/sh/okx/railswitch/SetDestinationCommand.java b/src/main/java/sh/okx/railswitch/SetDestinationCommand.java index 8b2d7a2..7609acb 100644 --- a/src/main/java/sh/okx/railswitch/SetDestinationCommand.java +++ b/src/main/java/sh/okx/railswitch/SetDestinationCommand.java @@ -28,13 +28,9 @@ public boolean onCommand(CommandSender sender, Command command, String label, St } String dest = args[0]; - if (!plugin.isValidDestination(dest)) { - player.sendMessage(ChatColor.RED + "Destinations can not be more than 40 characters and may only use alphanumerical characters and ASCII symbols."); - return true; - } - plugin.getDatabase().setPlayerDestination(player, dest); - player.sendMessage(ChatColor.GREEN + "Set your rail destination to: " + dest); + plugin.setDestination(player, dest); + return true; } } diff --git a/src/main/java/sh/okx/railswitch/listener/SignInteractListener.java b/src/main/java/sh/okx/railswitch/listener/SignInteractListener.java index ad635f4..31add0b 100644 --- a/src/main/java/sh/okx/railswitch/listener/SignInteractListener.java +++ b/src/main/java/sh/okx/railswitch/listener/SignInteractListener.java @@ -30,27 +30,16 @@ public void on(PlayerInteractEvent e) { String dest = line.substring(6); if(!dest.isEmpty()) - trySetDest(player, dest); + plugin.setDestination(player, dest); } else if(i < 3 && line.toLowerCase().endsWith("/dest")) { Player player = e.getPlayer(); String dest = s.getLine(i + 1); if(!dest.isEmpty()) - trySetDest(player, dest); + plugin.setDestination(player, dest); } } } } } - - public void trySetDest(Player player, String dest) { - if (!plugin.isValidDestination(dest)) { - player.sendMessage(ChatColor.RED + "Destinations can not be more than 40 characters and may only use alphanumerical characters and ASCII symbols."); - return; - } - - plugin.getDatabase().setPlayerDestination(player, dest); - player.sendMessage(ChatColor.GREEN + "Set your rail destination to: " + dest); - return; - } }