package nl.sbdeveloper.themeparkplus.commands; import nl.iobyte.themepark.api.API; import nl.iobyte.themepark.api.attraction.Attraction; import nl.sbdeveloper.themeparkplus.ThemeParkPlus; import nl.sbdeveloper.themeparkplus.api.PlusAPI; import nl.sbdeveloper.themeparkplus.api.enums.WalkingDirection; import nl.sbdeveloper.themeparkplus.api.objects.Gate; import nl.sbdeveloper.themeparkplus.util.ConfigUtil; import nl.sbdeveloper.themeparkplus.util.Cuboid; import nl.sbdeveloper.themeparkplus.util.LGUtil; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import java.util.Collections; public class TPPCMD implements CommandExecutor { public boolean onCommand(@NotNull CommandSender sender, @NotNull Command cmd, @NotNull String label, @NotNull String[] args) { if (args.length == 0) { return helpCommand(sender); } else if (args[0].equalsIgnoreCase("info") && args.length == 1) { return infoCommand(sender); } else if (args[0].equalsIgnoreCase("opengate") && args.length == 5) { if (!sender.hasPermission("tpp.opengate")) { sender.sendMessage(ConfigUtil.getMessage("General.NoPermission")); return true; } return openGate(sender, args, 0, null); } else if (args[0].equalsIgnoreCase("opengate") && args.length == 6) { if (!sender.hasPermission("tpp.opengate")) { sender.sendMessage(ConfigUtil.getMessage("General.NoPermission")); return true; } try { int amount = Integer.parseInt(args[5]); return openGate(sender, args, amount, null); } catch (NumberFormatException ex) { try { WalkingDirection dir = WalkingDirection.valueOf(args[5]); return openGate(sender, args, 0, dir); } catch (Exception ex2) { sender.sendMessage(ConfigUtil.getMessage("Gates.UnknownDirAndAmount")); return true; } } } else if (args[0].equalsIgnoreCase("opengate") && args.length == 7) { if (!sender.hasPermission("tpp.opengate")) { sender.sendMessage(ConfigUtil.getMessage("General.NoPermission")); return true; } int amount; WalkingDirection dir; try { amount = Integer.parseInt(args[5]); } catch (NumberFormatException ex) { sender.sendMessage(ConfigUtil.getMessage("General.IncorrectAmount")); ex.printStackTrace(); return true; } try { dir = WalkingDirection.valueOf(args[6]); } catch (Exception ex2) { sender.sendMessage(ConfigUtil.getMessage("Gates.UnknownDir")); return true; } return openGate(sender, args, amount, dir); } else if (args[0].equalsIgnoreCase("closegate") && args.length == 5) { if (!sender.hasPermission("tpp.closegate")) { sender.sendMessage(ConfigUtil.getMessage("General.NoPermission")); return true; } return closeGate(sender, args); } else if (args[0].equalsIgnoreCase("lampon") && args.length == 5) { if (!sender.hasPermission("tpp.lampon")) { sender.sendMessage(ConfigUtil.getMessage("General.NoPermission")); return true; } return lampTurnOnCommand(sender, args, 0); } else if (args[0].equalsIgnoreCase("lampon") && args.length == 6) { if (!sender.hasPermission("tpp.lampon")) { sender.sendMessage(ConfigUtil.getMessage("General.NoPermission")); return true; } int amount; try { amount = Integer.parseInt(args[5]); } catch (NumberFormatException ex) { sender.sendMessage(ConfigUtil.getMessage("General.IncorrectAmount")); return true; } return lampTurnOnCommand(sender, args, amount); } else if (args[0].equalsIgnoreCase("lampoff") && args.length == 5) { if (!sender.hasPermission("tpp.lampoff")) { sender.sendMessage(ConfigUtil.getMessage("General.NoPermission")); return true; } return lampTurnOffCommand(sender, args); } else if (args[0].equalsIgnoreCase("lampson") && args.length == 8) { if (!sender.hasPermission("tpp.lampson")) { sender.sendMessage(ConfigUtil.getMessage("General.NoPermission")); return true; } return lampsTurnOnCommand(sender, args, 0); } else if (args[0].equalsIgnoreCase("lampson") && args.length == 9) { if (!sender.hasPermission("tpp.lampson")) { sender.sendMessage(ConfigUtil.getMessage("General.NoPermission")); return true; } int amount; try { amount = Integer.parseInt(args[8]); } catch (NumberFormatException ex) { sender.sendMessage(ConfigUtil.getMessage("General.IncorrectAmount")); return true; } return lampsTurnOnCommand(sender, args, amount); } else if (args[0].equalsIgnoreCase("lampsoff") && args.length == 8) { if (!sender.hasPermission("tpp.lampsoff")) { sender.sendMessage(ConfigUtil.getMessage("General.NoPermission")); return true; } return lampsTurnOffCommand(sender, args); } else if (args[0].equalsIgnoreCase("givefpticket") && (args.length == 2 || args.length == 3)) { if (!sender.hasPermission("tpp.givefpticket")) { sender.sendMessage(ConfigUtil.getMessage("General.NoPermission")); return true; } return giveFPTicketCommand(sender, args); } return helpCommand(sender); } private boolean giveFPTicketCommand(CommandSender sender, String[] args) { if (args.length == 2 && !(sender instanceof Player)) { sender.sendMessage(ConfigUtil.getMessage("General.NoPlayer")); return true; } if (!API.isAttraction(args[1])) { sender.sendMessage(ConfigUtil.getMessage("Fastpass.UnknownRide", Collections.singletonMap("%ridename%", args[1]))); return true; } Attraction att = API.getAttraction(args[1]); Player target; if (args.length == 3) { target = Bukkit.getPlayer(args[2]); if (target == null) { sender.sendMessage(ConfigUtil.getMessage("Fastpass.UnknownPlayer", Collections.singletonMap("%playername%", args[2]))); return true; } } else { target = (Player) sender; } ItemStack ticket = PlusAPI.getFastpassTicket(att); if (ticket == null) return true; target.getInventory().addItem(ticket); sender.sendMessage(ConfigUtil.getMessage("Fastpass.Given")); return true; } private boolean infoCommand(@NotNull CommandSender sender) { sender.sendMessage("§1=================================="); sender.sendMessage("§6ThemeParkPlus plugin made by §aSBDeveloper"); sender.sendMessage("§6Version: " + ThemeParkPlus.getInstance().getDescription().getVersion()); sender.sendMessage("§6Type /themeparkplus help for more information!"); sender.sendMessage("§1=================================="); return true; } private boolean helpCommand(@NotNull CommandSender sender) { sender.sendMessage("§8ThemeParkPlus commands:"); sender.sendMessage("§6/themeparkplus info§f: Gives you information about the plugin."); sender.sendMessage("§6/themeparkplus help§f: Gives you this help page."); sender.sendMessage(" "); sender.sendMessage("§6/themeparkplus opengate [Player Count/Direction] [Direction]§f: Open a gate!"); sender.sendMessage("§6/themeparkplus closegate §f: Close a gate!"); sender.sendMessage(" "); sender.sendMessage("§6/themeparkplus lampon [Seconds on] §f: Turn a lamp on!"); sender.sendMessage("§6/themeparkplus lampoff §f: Turn a lamp off!"); sender.sendMessage("§6/themeparkplus lampson [Seconds on]§f: Turn multiple lamps on."); sender.sendMessage("§6/themeparkplus lampsoff §f: Turn multiple lamps off."); sender.sendMessage(" "); sender.sendMessage("§6/themeparkplus givefpticket [Player]§f: Give yourself or someone else a Fastpass ticket (for free)."); return true; } private boolean openGate(CommandSender sender, @NotNull String[] args, int amount, WalkingDirection dir) { World bworld = Bukkit.getWorld(args[1]); double bx = Double.parseDouble(args[2]); double by = Double.parseDouble(args[3]); double bz = Double.parseDouble(args[4]); Location loc = new Location(bworld, bx, by, bz); Gate gate = null; if (amount != 0 && dir == null) { //GEEN ONEWAY MET WEL AANTAL gate = new Gate(loc, amount); } else if (amount == 0 && dir != null) { //ONE WAY ZONDER AANTAL gate = new Gate(loc, dir); } else if (amount != 0) { //WEL ONE WAY MET WEL AANTAL gate = new Gate(loc, amount, dir); } if (gate != null) { PlusAPI.addGate(gate); ThemeParkPlus.getData().save(); } Block b = loc.getBlock(); if (LGUtil.isOpenable(b)) { if (LGUtil.isOpen(b)) { sender.sendMessage(ConfigUtil.getMessage("Gates.AlreadyOpen")); return true; } if (gate != null && gate.isDirectional()) { LGUtil.openGate(b, gate.getDirection().getBlockFace()); } else { LGUtil.openGate(b); } } else { sender.sendMessage(ConfigUtil.getMessage("Gates.NoGate")); return true; } if (amount == 0) { if (ConfigUtil.sendConsole(sender)) sender.sendMessage(ConfigUtil.getMessage("Gates.Opened")); } else { if (ConfigUtil.sendConsole(sender)) sender.sendMessage(ConfigUtil.getMessage("Gates.OpenedAmount", Collections.singletonMap("%amount%", String.valueOf(amount)))); } return true; } private boolean closeGate(CommandSender sender, @NotNull String[] args) { World bworld = Bukkit.getWorld(args[1]); double bx = Double.parseDouble(args[2]); double by = Double.parseDouble(args[3]); double bz = Double.parseDouble(args[4]); Location loc = new Location(bworld, bx, by, bz); Block b = loc.getBlock(); if (LGUtil.isOpenable(b)) { Gate gate = PlusAPI.getGate(loc); if (gate != null) { PlusAPI.removeGate(gate); ThemeParkPlus.getData().save(); } if (!LGUtil.isOpen(b)) { sender.sendMessage(ConfigUtil.getMessage("Gates.AlreadyClosed")); return true; } LGUtil.closeGate(b); } else { sender.sendMessage(ConfigUtil.getMessage("Gates.NoGate")); return true; } if (ConfigUtil.sendConsole(sender)) sender.sendMessage(ConfigUtil.getMessage("Gates.Closed")); return true; } private boolean lampTurnOnCommand(CommandSender sender, @NotNull String[] args, int secOn) { World bworld = Bukkit.getWorld(args[1]); double bx = Double.parseDouble(args[2]); double by = Double.parseDouble(args[3]); double bz = Double.parseDouble(args[4]); Location loc = new Location(bworld, bx, by, bz); Block block = loc.getBlock(); if (secOn == 0) { if (!LGUtil.zetLampAan(block)) { sender.sendMessage(ConfigUtil.getMessage("Lamp.ErrorOn")); return true; } if (ConfigUtil.sendConsole(sender)) sender.sendMessage(ConfigUtil.getMessage("Lamp.TurnedOn")); } else { if (!LGUtil.zetLampAan(block)) { sender.sendMessage(ConfigUtil.getMessage("Lamp.ErrorOn")); return true; } Bukkit.getScheduler().runTaskLater(ThemeParkPlus.getInstance(), () -> LGUtil.zetLampUit(block), secOn * 20); if (ConfigUtil.sendConsole(sender)) sender.sendMessage(ConfigUtil.getMessage("Lamp.TurnedOnSec", Collections.singletonMap("%sec%", String.valueOf(secOn)))); } return true; } private boolean lampTurnOffCommand(CommandSender sender, @NotNull String[] args) { World bworld = Bukkit.getWorld(args[1]); double bx = Double.parseDouble(args[2]); double by = Double.parseDouble(args[3]); double bz = Double.parseDouble(args[4]); Location loc = new Location(bworld, bx, by, bz); if (!LGUtil.zetLampUit(loc.getBlock())) { sender.sendMessage(ConfigUtil.getMessage("Lamp.ErrorOff")); return true; } if (ConfigUtil.sendConsole(sender)) sender.sendMessage(ConfigUtil.getMessage("Lamp.TurnedOff")); return true; } private boolean lampsTurnOnCommand(CommandSender sender, @NotNull String[] args, int secOn) { World bworld = Bukkit.getWorld(args[1]); double bx = Double.parseDouble(args[2]); double by = Double.parseDouble(args[3]); double bz = Double.parseDouble(args[4]); double bx2 = Double.parseDouble(args[5]); double by2 = Double.parseDouble(args[6]); double bz2 = Double.parseDouble(args[7]); Location loc = new Location(bworld, bx, by, bz); Location loc2 = new Location(bworld, bx2, by2, bz2); Cuboid cub = new Cuboid(loc, loc2); if (secOn == 0) { Bukkit.getScheduler().runTaskAsynchronously(ThemeParkPlus.getInstance(), () -> cub.getBlocks().forEach(block -> { if (block.getType().name().contains("REDSTONE_LAMP")) Bukkit.getScheduler().runTask(ThemeParkPlus.getInstance(), () -> LGUtil.zetLampAan(block)); })); if (ConfigUtil.sendConsole(sender)) sender.sendMessage(ConfigUtil.getMessage("Lamps.TurnedOn")); } else { Bukkit.getScheduler().runTaskAsynchronously(ThemeParkPlus.getInstance(), () -> cub.getBlocks().forEach(block -> { if (block.getType().name().contains("REDSTONE_LAMP")) Bukkit.getScheduler().runTask(ThemeParkPlus.getInstance(), () -> LGUtil.zetLampAan(block)); })); Bukkit.getScheduler().runTaskLaterAsynchronously(ThemeParkPlus.getInstance(), () -> cub.getBlocks().forEach(block -> { if (block.getType().name().contains("REDSTONE_LAMP")) Bukkit.getScheduler().runTask(ThemeParkPlus.getInstance(), () -> LGUtil.zetLampUit(block)); }), secOn * 20); if (ConfigUtil.sendConsole(sender)) sender.sendMessage(ConfigUtil.getMessage("Lamps.TurnedOnSec", Collections.singletonMap("%sec%", String.valueOf(secOn)))); } return true; } private boolean lampsTurnOffCommand(@NotNull CommandSender sender, @NotNull String[] args) { World bworld = Bukkit.getWorld(args[1]); double bx = Double.parseDouble(args[2]); double by = Double.parseDouble(args[3]); double bz = Double.parseDouble(args[4]); double bx2 = Double.parseDouble(args[5]); double by2 = Double.parseDouble(args[6]); double bz2 = Double.parseDouble(args[7]); Location loc = new Location(bworld, bx, by, bz); Location loc2 = new Location(bworld, bx2, by2, bz2); Cuboid cub = new Cuboid(loc, loc2); Bukkit.getScheduler().runTaskAsynchronously(ThemeParkPlus.getInstance(), () -> cub.getBlocks().forEach(block -> { if (block.getType().name().contains("REDSTONE_LAMP")) Bukkit.getScheduler().runTask(ThemeParkPlus.getInstance(), () -> LGUtil.zetLampUit(block)); })); if (ConfigUtil.sendConsole(sender)) sender.sendMessage(ConfigUtil.getMessage("Lamps.TurnedOff")); return true; } }