diff --git a/src/main/java/sh/okx/railswitch/RailSwitch.java b/src/main/java/sh/okx/railswitch/RailSwitch.java index fb81eb1..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; @@ -9,6 +11,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 +30,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)); } @@ -67,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 new file mode 100644 index 0000000..31add0b --- /dev/null +++ b/src/main/java/sh/okx/railswitch/listener/SignInteractListener.java @@ -0,0 +1,45 @@ +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); + + if(!dest.isEmpty()) + 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()) + plugin.setDestination(player, dest); + } + } + } + } + } +}