diff --git a/server/src/main/java/dev/plex/command/impl/ToggleCMD.java b/server/src/main/java/dev/plex/command/impl/ToggleCMD.java index cb578f4..eb3d313 100644 --- a/server/src/main/java/dev/plex/command/impl/ToggleCMD.java +++ b/server/src/main/java/dev/plex/command/impl/ToggleCMD.java @@ -31,6 +31,7 @@ public class ToggleCMD extends PlexCommand sender.sendMessage(PlexUtils.mmDeserialize(" - Explosions" + status("explosions"))); sender.sendMessage(PlexUtils.mmDeserialize(" - Fluidspread" + status("fluidspread"))); sender.sendMessage(PlexUtils.mmDeserialize(" - Drops" + status("drops"))); + sender.sendMessage(PlexUtils.mmDeserialize(" - Redstone" + status("redstone"))); return null; } switch (args[0].toLowerCase()) @@ -47,6 +48,10 @@ public class ToggleCMD extends PlexCommand { return toggle("drops"); } + case "redstone" -> + { + return toggle("redstone"); + } default -> { return messageComponent("invalidToggle"); diff --git a/server/src/main/java/dev/plex/listener/impl/BlockListener.java b/server/src/main/java/dev/plex/listener/impl/BlockListener.java index 7430051..e135837 100644 --- a/server/src/main/java/dev/plex/listener/impl/BlockListener.java +++ b/server/src/main/java/dev/plex/listener/impl/BlockListener.java @@ -13,6 +13,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.block.BlockRedstoneEvent; public class BlockListener extends PlexListener { @@ -38,9 +39,8 @@ public class BlockListener extends PlexListener { blockedBlocks.add(Material.valueOf(block.toUpperCase())); } - catch (IllegalArgumentException e) + catch (IllegalArgumentException ignored) { - // } } } diff --git a/server/src/main/java/dev/plex/listener/impl/TogglesListener.java b/server/src/main/java/dev/plex/listener/impl/TogglesListener.java index b212336..5924332 100644 --- a/server/src/main/java/dev/plex/listener/impl/TogglesListener.java +++ b/server/src/main/java/dev/plex/listener/impl/TogglesListener.java @@ -3,6 +3,7 @@ package dev.plex.listener.impl; import dev.plex.listener.PlexListener; import org.bukkit.event.EventHandler; import org.bukkit.event.block.BlockFromToEvent; +import org.bukkit.event.block.BlockRedstoneEvent; import org.bukkit.event.entity.ExplosionPrimeEvent; import org.bukkit.event.player.PlayerDropItemEvent; @@ -34,4 +35,18 @@ public class TogglesListener extends PlexListener event.setCancelled(true); } } + + /* I have no idea if this is the best way to do this + There is a very weird bug where if you try to create a loop using two repeaters and a lever, after disabling + and re-enabling redstone, you are unable to recreate the loop with a lever. Using a redstone torch works fine. + Using a lever works fine also as long as you never toggle redstone. + */ + @EventHandler + public void onBlockRedstone(BlockRedstoneEvent event) + { + if (!plugin.toggles.getBoolean("redstone")) + { + event.setNewCurrent(0); + } + } } diff --git a/server/src/main/java/dev/plex/menu/ToggleMenu.java b/server/src/main/java/dev/plex/menu/ToggleMenu.java index b6d23b4..1eff0c4 100644 --- a/server/src/main/java/dev/plex/menu/ToggleMenu.java +++ b/server/src/main/java/dev/plex/menu/ToggleMenu.java @@ -21,10 +21,11 @@ public class ToggleMenu extends AbstractMenu implements PlexBase public ToggleMenu() { super("§a§lToggles"); - Inventory inventory = Bukkit.createInventory(null, 54, PlexUtils.mmDeserialize("Toggles")); + Inventory inventory = Bukkit.createInventory(null, 9, PlexUtils.mmDeserialize("Toggles")); resetExplosionItem(inventory); resetFluidspreadItem(inventory); resetDropsItem(inventory); + resetRedstoneItem(inventory); inventories.add(inventory); } @@ -77,6 +78,12 @@ public class ToggleMenu extends AbstractMenu implements PlexBase resetDropsItem(inv); event.getWhoClicked().sendMessage(PlexUtils.mmDeserialize("Toggled drops.")); } + if (item.getType() == Material.REDSTONE) + { + plugin.toggles.set("redstone", !plugin.toggles.getBoolean("redstone")); + resetRedstoneItem(inv); + event.getWhoClicked().sendMessage(PlexUtils.mmDeserialize("Toggled redstone.")); + } } public int getCurrentInventoryIndex(Inventory inventory) @@ -125,4 +132,14 @@ public class ToggleMenu extends AbstractMenu implements PlexBase feather.setItemMeta(featherItemMeta); inventory.setItem(2, feather); } + + private void resetRedstoneItem(Inventory inventory) + { + ItemStack redstone = new ItemStack(Material.REDSTONE); + ItemMeta redstoneItemMeta = redstone.getItemMeta(); + redstoneItemMeta.displayName(PlexUtils.mmDeserialize("Redstone")); + redstoneItemMeta.lore(List.of(PlexUtils.mmDeserialize("Redstone is " + (plugin.toggles.getBoolean("redstone") ? "enabled" : "disabled")))); + redstone.setItemMeta(redstoneItemMeta); + inventory.setItem(3, redstone); + } } diff --git a/server/src/main/resources/toggles.yml b/server/src/main/resources/toggles.yml index 89ddf1f..5baf5ea 100644 --- a/server/src/main/resources/toggles.yml +++ b/server/src/main/resources/toggles.yml @@ -7,4 +7,7 @@ explosions: false fluidspread: true # Should drops be enabled? -drops: true \ No newline at end of file +drops: true + +# Should redstone be enabled? +redstone: true \ No newline at end of file