From 698aceafc07704ea2cfbcfc1588e3d1dd9d28fb6 Mon Sep 17 00:00:00 2001 From: Big Pappa Date: Wed, 10 Jun 2026 12:32:59 -0500 Subject: [PATCH] Development Milestone: Finished and ready for testing. --- .../rsauger/config/ConfigManager.java | 22 --- .../rsauger/database/DatabaseManager.java | 13 +- .../rsscripting/rsauger/gui/RSMainMenu.java | 110 ++++++++----- .../rsauger/gui/session/GuiSession.java | 10 +- .../gui/session/GuiSessionManager.java | 12 +- .../rsauger/listeners/RSConvertListener.java | 1 - .../rsauger/listeners/RSFilterListener.java | 5 - .../rsauger/listeners/RSMenuListener.java | 65 +++++++- .../rsauger/machine/AugerValidator.java | 30 ++-- .../rsauger/managers/MachineManager.java | 154 +++++++++++------- .../rsscripting/rsauger/tasks/AugerTask.java | 78 +++++++++ .../rsauger/utils/RSConstants.java | 10 -- .../rsauger/utils/RSMessageUtils.java | 54 ------ src/main/resources/ToDo.md | 21 --- 14 files changed, 323 insertions(+), 262 deletions(-) delete mode 100644 src/main/resources/ToDo.md diff --git a/src/main/java/com/rsscripting/rsauger/config/ConfigManager.java b/src/main/java/com/rsscripting/rsauger/config/ConfigManager.java index dc81da6..494baf9 100644 --- a/src/main/java/com/rsscripting/rsauger/config/ConfigManager.java +++ b/src/main/java/com/rsscripting/rsauger/config/ConfigManager.java @@ -1,11 +1,9 @@ package com.rsscripting.rsauger.config; import com.rsscripting.rsauger.RSAuger; -import org.bukkit.configuration.file.FileConfiguration; public class ConfigManager { - private static FileConfiguration config; /* |-------------------------------------------------------------------------- @@ -18,10 +16,6 @@ public class ConfigManager { RSAuger.getInstance() .saveDefaultConfig(); - config = - RSAuger.getInstance() - .getConfig(); - } /* @@ -35,22 +29,6 @@ public class ConfigManager { RSAuger.getInstance() .reloadConfig(); - config = - RSAuger.getInstance() - .getConfig(); - - } - - /* - |-------------------------------------------------------------------------- - | GET CONFIG - |-------------------------------------------------------------------------- - */ - - public static FileConfiguration get() { - - return config; - } } \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rsauger/database/DatabaseManager.java b/src/main/java/com/rsscripting/rsauger/database/DatabaseManager.java index 54acb74..a82f079 100644 --- a/src/main/java/com/rsscripting/rsauger/database/DatabaseManager.java +++ b/src/main/java/com/rsscripting/rsauger/database/DatabaseManager.java @@ -108,12 +108,12 @@ public class DatabaseManager { destination_world TEXT, destination_x INTEGER, destination_y INTEGER, - destination_z INTEGER, + destination_z INTEGER, machine_type TEXT, paused INTEGER DEFAULT 0, state TEXT DEFAULT 'ACTIVE', filter_mode TEXT DEFAULT 'ALLOW_ALL', - created_at TEXT + created_at TEXT ) """ ); @@ -161,14 +161,12 @@ public class DatabaseManager { ensureColumnExists( connection, - "machines", "state", "TEXT DEFAULT 'ACTIVE'" ); ensureColumnExists( connection, - "machines", "error_reason", "TEXT" ); @@ -189,7 +187,6 @@ public class DatabaseManager { private static void ensureColumnExists( Connection connection, - String table, String column, String definition ) { @@ -202,7 +199,7 @@ public class DatabaseManager { .getColumns( null, null, - table, + "machines", column ) @@ -211,9 +208,7 @@ public class DatabaseManager { if (!columns.next()) { connection.createStatement().execute( - "ALTER TABLE " - + table - + " ADD COLUMN " + "ALTER TABLE machines ADD COLUMN " + column + " " + definition diff --git a/src/main/java/com/rsscripting/rsauger/gui/RSMainMenu.java b/src/main/java/com/rsscripting/rsauger/gui/RSMainMenu.java index c641ecf..c90de8c 100644 --- a/src/main/java/com/rsscripting/rsauger/gui/RSMainMenu.java +++ b/src/main/java/com/rsscripting/rsauger/gui/RSMainMenu.java @@ -1,9 +1,9 @@ package com.rsscripting.rsauger.gui; +import com.rsscripting.rsauger.machine.MachineError; import com.rsscripting.rsauger.utils.RSConstants; import com.rsscripting.rsauger.utils.RSMenuUtils; import com.rsscripting.rsauger.managers.MachineManager; -import com.rsscripting.rsauger.utils.RSMessageUtils; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; @@ -77,45 +77,77 @@ public class RSMainMenu { block ); - menu.setItem( - 6, - RSMenuUtils.createMenuItem( - - paused - ? Material.RED_DYE - : Material.GREEN_DYE, - - paused - ? "§cPaused" - : "§aRunning" - - ) - ); - - /* - |-------------------------------------------------------------------------- - | RECALIBRATE - |-------------------------------------------------------------------------- - */ - - menu.setItem( - 11, - RSMenuUtils.createMenuItem( - - Material.LIGHTNING_ROD, - - "§bRecalibrate", - - List.of( - "§7Rescan the lightning rod shaft.", - "§7", - "§7Rediscover the source and", - "§7destination containers." - ) - - ) + MachineError error = + MachineManager.getMachineError( + block ); + if (error != MachineError.NONE) { + + String errorMessage = + switch (error) { + + case MISSING_TARGET -> + "§7Missing target container."; + + case MISSING_SOURCE -> + "§7Missing source container."; + + case INVALID_TARGET -> + "§7Target container is invalid."; + + case INVALID_SOURCE -> + "§7Source container is invalid."; + + case INVALID_CONFIGURATION -> + "§7Machine configuration is invalid."; + + case SHAFT_BROKEN -> + "§7Lightning rod shaft is broken."; + + default -> + "§7Unknown error."; + + }; + + menu.setItem( + 6, + RSMenuUtils.createMenuItem( + + Material.RED_DYE, + + "§cError", + + List.of( + errorMessage, + "§7", + "§7Machine is paused.", + "§7Repair and recalibrate." + ) + + ) + ); + + } + else { + + menu.setItem( + 6, + RSMenuUtils.createMenuItem( + + paused + ? Material.RED_DYE + : Material.GREEN_DYE, + + paused + ? "§cPaused" + : "§aRunning" + + ) + ); + + } + /* |-------------------------------------------------------------------------- | FILTER @@ -123,7 +155,7 @@ public class RSMainMenu { */ menu.setItem( - 15, + 13, RSMenuUtils.createMenuItem( Material.HOPPER, diff --git a/src/main/java/com/rsscripting/rsauger/gui/session/GuiSession.java b/src/main/java/com/rsscripting/rsauger/gui/session/GuiSession.java index 310d934..3ef827b 100644 --- a/src/main/java/com/rsscripting/rsauger/gui/session/GuiSession.java +++ b/src/main/java/com/rsscripting/rsauger/gui/session/GuiSession.java @@ -2,20 +2,12 @@ package com.rsscripting.rsauger.gui.session; import org.bukkit.block.Block; -import java.util.UUID; - public class GuiSession { - private final UUID playerUuid; - private Block selectedBlock; - public GuiSession(UUID playerUuid) { - this.playerUuid = playerUuid; - } + public GuiSession() { - public UUID getPlayerUuid() { - return playerUuid; } public Block getSelectedBlock() { diff --git a/src/main/java/com/rsscripting/rsauger/gui/session/GuiSessionManager.java b/src/main/java/com/rsscripting/rsauger/gui/session/GuiSessionManager.java index 39c1f7f..648433c 100644 --- a/src/main/java/com/rsscripting/rsauger/gui/session/GuiSessionManager.java +++ b/src/main/java/com/rsscripting/rsauger/gui/session/GuiSessionManager.java @@ -17,17 +17,7 @@ public class GuiSessionManager { return sessions.computeIfAbsent( player.getUniqueId(), - GuiSession::new - ); - - } - - public static void removeSession( - Player player - ) { - - sessions.remove( - player.getUniqueId() + uuid -> new GuiSession() ); } diff --git a/src/main/java/com/rsscripting/rsauger/listeners/RSConvertListener.java b/src/main/java/com/rsscripting/rsauger/listeners/RSConvertListener.java index d39259e..bd59360 100644 --- a/src/main/java/com/rsscripting/rsauger/listeners/RSConvertListener.java +++ b/src/main/java/com/rsscripting/rsauger/listeners/RSConvertListener.java @@ -8,7 +8,6 @@ import com.rsscripting.rsauger.gui.session.GuiSession; import com.rsscripting.rsauger.gui.session.GuiSessionManager; import com.rsscripting.rsauger.utils.RSMessageUtils; -import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; diff --git a/src/main/java/com/rsscripting/rsauger/listeners/RSFilterListener.java b/src/main/java/com/rsscripting/rsauger/listeners/RSFilterListener.java index 258a0c6..71d8e66 100644 --- a/src/main/java/com/rsscripting/rsauger/listeners/RSFilterListener.java +++ b/src/main/java/com/rsscripting/rsauger/listeners/RSFilterListener.java @@ -17,11 +17,6 @@ import org.bukkit.inventory.ItemStack; public class RSFilterListener implements Listener { - - - - - private final RSConvertListener conversionListener; diff --git a/src/main/java/com/rsscripting/rsauger/listeners/RSMenuListener.java b/src/main/java/com/rsscripting/rsauger/listeners/RSMenuListener.java index 61ffb8e..cfb309c 100644 --- a/src/main/java/com/rsscripting/rsauger/listeners/RSMenuListener.java +++ b/src/main/java/com/rsscripting/rsauger/listeners/RSMenuListener.java @@ -1,7 +1,7 @@ package com.rsscripting.rsauger.listeners; -import com.rsscripting.rsauger.config.ConfigManager; import com.rsscripting.rsauger.machine.AugerEndpoints; +import com.rsscripting.rsauger.machine.MachineError; import com.rsscripting.rsauger.managers.MachineManager; import com.rsscripting.rsauger.gui.*; import com.rsscripting.rsauger.utils.RSConstants; @@ -193,15 +193,64 @@ public class RSMenuListener if (event.getRawSlot() == 6) { - boolean paused = - MachineManager.isPaused( + if ( + + MachineManager.getMachineError( + block + ) != MachineError.NONE + + ) { + + AugerValidationResult result = + AugerValidator.validate( + block + ); + + if (!result.isValid()) { + + RSMessageUtils.error( + player, + "Cannot restart machine until the error is repaired." + ); + + RSMainMenu.open( + player, block ); - MachineManager.setPaused( - block, - !paused - ); + return; + + } + + MachineManager.setEndpoints( + block, + result.getEndpoints() + ); + + MachineManager.clearMachineError( + block + ); + + MachineManager.setPaused( + block, + false + ); + + } + + else { + + boolean paused = + MachineManager.isPaused( + block + ); + + MachineManager.setPaused( + block, + !paused + ); + + } RSMainMenu.open( player, @@ -218,7 +267,7 @@ public class RSMenuListener |-------------------------------------------------------------------------- */ - if (event.getRawSlot() == 15) { + if (event.getRawSlot() == 13) { RSFilterMenu.open( player, diff --git a/src/main/java/com/rsscripting/rsauger/machine/AugerValidator.java b/src/main/java/com/rsscripting/rsauger/machine/AugerValidator.java index 00ee76c..ab2101a 100644 --- a/src/main/java/com/rsscripting/rsauger/machine/AugerValidator.java +++ b/src/main/java/com/rsscripting/rsauger/machine/AugerValidator.java @@ -28,18 +28,9 @@ public class AugerValidator { Block machine ) { - BlockFace sourceDirection = - getSourceDirection( - machine - ); - - if (sourceDirection == null) { - - return null; - - } - - return sourceDirection; + return getSourceDirection( + machine + ); } @@ -119,6 +110,21 @@ public class AugerValidator { machine ); + if (destinationDirection == null) { + + messages.add( + "Could not determine destination direction." + ); + + return new AugerValidationResult( + false, + null, + messages, + MachineError.INVALID_CONFIGURATION + ); + + } + Block current = machine.getRelative( destinationDirection diff --git a/src/main/java/com/rsscripting/rsauger/managers/MachineManager.java b/src/main/java/com/rsscripting/rsauger/managers/MachineManager.java index c0ccd1b..77bfe70 100644 --- a/src/main/java/com/rsscripting/rsauger/managers/MachineManager.java +++ b/src/main/java/com/rsscripting/rsauger/managers/MachineManager.java @@ -2,23 +2,20 @@ package com.rsscripting.rsauger.managers; import com.rsscripting.rsauger.database.DatabaseManager; import com.rsscripting.rsauger.machine.AugerEndpoints; +import com.rsscripting.rsauger.RSAuger; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.UUID; import java.util.Base64; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.ByteArrayInputStream; import java.util.HashMap; import java.util.Map; -import org.bukkit.util.io.BukkitObjectInputStream; + import org.bukkit.inventory.ItemStack; import org.bukkit.block.Block; import org.bukkit.entity.Player; -import org.bukkit.util.io.BukkitObjectOutputStream; import org.bukkit.Bukkit; import org.bukkit.World; @@ -81,7 +78,9 @@ public class MachineManager { catch (Exception e) { - e.printStackTrace(); + logException( + e + ); return false; @@ -142,7 +141,9 @@ public class MachineManager { catch (Exception e) { - e.printStackTrace(); + logException( + e + ); } @@ -246,7 +247,9 @@ public class MachineManager { catch (Exception e) { - e.printStackTrace(); + logException( + e + ); } @@ -336,7 +339,9 @@ public class MachineManager { catch (Exception e) { - e.printStackTrace(); + logException( + e + ); } @@ -403,7 +408,9 @@ public class MachineManager { catch (Exception e) { - e.printStackTrace(); + logException( + e + ); } @@ -484,7 +491,9 @@ public class MachineManager { catch (Exception e) { - e.printStackTrace(); + logException( + e + ); return false; @@ -599,7 +608,9 @@ public class MachineManager { catch (Exception e) { - e.printStackTrace(); + logException( + e + ); } @@ -739,7 +750,9 @@ public class MachineManager { catch (Exception e) { - e.printStackTrace(); + logException( + e + ); } @@ -824,7 +837,9 @@ public class MachineManager { catch (Exception e) { - e.printStackTrace(); + logException( + e + ); } @@ -836,7 +851,7 @@ public class MachineManager { return getMachineState( block - ) == MachineState.PAUSED; + ) != MachineState.ACTIVE; } @@ -895,7 +910,9 @@ public class MachineManager { catch (Exception e) { - e.printStackTrace(); + logException( + e + ); } @@ -960,7 +977,9 @@ public class MachineManager { catch (Exception e) { - e.printStackTrace(); + logException( + e + ); } @@ -1027,7 +1046,9 @@ public class MachineManager { catch (Exception e) { - e.printStackTrace(); + logException( + e + ); } @@ -1090,7 +1111,9 @@ public class MachineManager { catch (Exception e) { - e.printStackTrace(); + logException( + e + ); } @@ -1102,30 +1125,18 @@ public class MachineManager { try { - ByteArrayOutputStream outputStream = - new ByteArrayOutputStream(); - - BukkitObjectOutputStream dataOutput = - new BukkitObjectOutputStream( - outputStream - ); - - dataOutput.writeObject( - itemStack - ); - - dataOutput.close(); - return Base64.getEncoder() .encodeToString( - outputStream.toByteArray() + itemStack.serializeAsBytes() ); } - catch (IOException e) { + catch (Exception e) { - e.printStackTrace(); + logException( + e + ); } @@ -1218,7 +1229,9 @@ public class MachineManager { catch (Exception e) { - e.printStackTrace(); + logException( + e + ); } @@ -1230,31 +1243,20 @@ public class MachineManager { try { - byte[] data = + return ItemStack.deserializeBytes( Base64.getDecoder() .decode( serializedItem - ); - - BukkitObjectInputStream inputStream = - new BukkitObjectInputStream( - new ByteArrayInputStream( - data ) - ); - - ItemStack itemStack = - (ItemStack) inputStream.readObject(); - - inputStream.close(); - - return itemStack; + ); } catch (Exception e) { - e.printStackTrace(); + logException( + e + ); } @@ -1333,7 +1335,9 @@ public class MachineManager { catch (Exception e) { - e.printStackTrace(); + logException( + e + ); } @@ -1415,7 +1419,9 @@ public class MachineManager { catch (Exception e) { - e.printStackTrace(); + logException( + e + ); } @@ -1480,7 +1486,9 @@ public class MachineManager { catch (Exception e) { - e.printStackTrace(); + logException( + e + ); } @@ -1543,7 +1551,9 @@ public class MachineManager { catch (Exception e) { - e.printStackTrace(); + logException( + e + ); } @@ -1610,7 +1620,9 @@ public class MachineManager { catch (Exception e) { - e.printStackTrace(); + logException( + e + ); } @@ -1682,7 +1694,9 @@ public class MachineManager { catch (Exception e) { - e.printStackTrace(); + logException( + e + ); } @@ -1759,7 +1773,9 @@ public class MachineManager { catch (Exception e) { - e.printStackTrace(); + logException( + e + ); } @@ -1829,7 +1845,9 @@ public class MachineManager { catch (Exception e) { - e.printStackTrace(); + logException( + e + ); } @@ -1837,6 +1855,20 @@ public class MachineManager { } + private static void logException( + Exception e + ) { + + RSAuger.getInstance() + .getLogger() + .severe( + e.getMessage() + ); + + e.printStackTrace(); + + } + public static void clearMachineError( Block block ) { diff --git a/src/main/java/com/rsscripting/rsauger/tasks/AugerTask.java b/src/main/java/com/rsscripting/rsauger/tasks/AugerTask.java index f5b40c6..9733bc8 100644 --- a/src/main/java/com/rsscripting/rsauger/tasks/AugerTask.java +++ b/src/main/java/com/rsscripting/rsauger/tasks/AugerTask.java @@ -2,14 +2,20 @@ package com.rsscripting.rsauger.tasks; import com.rsscripting.rsauger.machine.AugerValidationResult; import com.rsscripting.rsauger.machine.AugerValidator; +import com.rsscripting.rsauger.machine.MachineState; import com.rsscripting.rsauger.managers.MachineManager; import com.rsscripting.rsauger.machine.AugerEndpoints; +import com.rsscripting.rsauger.managers.RSConversionManager; +import com.rsscripting.rsauger.utils.RSKeys; import org.bukkit.block.Container; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.block.Block; import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.Particle; +import org.bukkit.block.data.type.LightningRod; +import org.bukkit.block.BlockFace; public class AugerTask extends BukkitRunnable { @@ -19,6 +25,43 @@ public class AugerTask extends BukkitRunnable { for (Block machine : MachineManager.getAllMachines()) { + if ( + + MachineManager.getMachineState( + machine + ) == MachineState.ERROR + + ) { + + LightningRod rod = + (LightningRod) machine.getBlockData(); + + BlockFace facing = + rod.getFacing(); + + double yOffset = 0.35; + + if (facing == BlockFace.UP + || facing == BlockFace.DOWN) { + + yOffset = 0.2; + + } + + machine.getWorld().spawnParticle( + Particle.ANGRY_VILLAGER, + machine.getLocation().add( + 0.5, + yOffset, + 0.5 + ), + 3 + ); + + continue; + + } + if (MachineManager.isPaused( machine )) { @@ -99,6 +142,41 @@ public class AugerTask extends BukkitRunnable { } + String filterMode = + MachineManager.getFilterMode( + machine + ); + + boolean matchesFilter = + RSConversionManager.containsFilterItem( + machine, + item + ); + + if (filterMode.equals( + RSKeys.FILTER_WHITELIST + )) { + + if (!matchesFilter) { + + continue; + + } + + } + + else if (filterMode.equals( + RSKeys.FILTER_BLACKLIST + )) { + + if (matchesFilter) { + + continue; + + } + + } + ItemStack transfer = item.clone(); diff --git a/src/main/java/com/rsscripting/rsauger/utils/RSConstants.java b/src/main/java/com/rsscripting/rsauger/utils/RSConstants.java index de8dccd..0b65dc4 100644 --- a/src/main/java/com/rsscripting/rsauger/utils/RSConstants.java +++ b/src/main/java/com/rsscripting/rsauger/utils/RSConstants.java @@ -52,16 +52,6 @@ public class RSConstants { public static final Material REQUIRED_HELD_ITEM = Material.STICK; - /* - |-------------------------------------------------------------------------- - | REQUIRED TARGET ENTITY - |-------------------------------------------------------------------------- - */ - - public static final Material - REQUIRED_TARGET_BLOCK = - Material.LIGHTNING_ROD; - /* |-------------------------------------------------------------------------- | MENU SETTINGS diff --git a/src/main/java/com/rsscripting/rsauger/utils/RSMessageUtils.java b/src/main/java/com/rsscripting/rsauger/utils/RSMessageUtils.java index 8a7f25d..89828f0 100644 --- a/src/main/java/com/rsscripting/rsauger/utils/RSMessageUtils.java +++ b/src/main/java/com/rsscripting/rsauger/utils/RSMessageUtils.java @@ -59,33 +59,6 @@ public class RSMessageUtils { } - /* - |-------------------------------------------------------------------------- - | WARNING - |-------------------------------------------------------------------------- - */ - - public static void warning( - Player player, - String message - ) { - - player.sendMessage( - - PREFIX.append( - - Component.text( - message - ).color( - NamedTextColor.YELLOW - ) - - ) - - ); - - } - /* |-------------------------------------------------------------------------- | ERROR @@ -140,31 +113,4 @@ public class RSMessageUtils { } - /* - |-------------------------------------------------------------------------- - | ADMIN - |-------------------------------------------------------------------------- - */ - - public static void admin( - Player player, - String message - ) { - - player.sendMessage( - - PREFIX.append( - - Component.text( - message - ).color( - NamedTextColor.GOLD - ) - - ) - - ); - - } - } \ No newline at end of file diff --git a/src/main/resources/ToDo.md b/src/main/resources/ToDo.md deleted file mode 100644 index 46b320b..0000000 --- a/src/main/resources/ToDo.md +++ /dev/null @@ -1,21 +0,0 @@ -#### To Do list - -# Plugin Specific (RS-ItemMagnet) -- Refactor to RS-ItemMagnet. -- Set plugin name/version/permissions -- set up GitHub version for version checker. -- add in target assigned hopper on convert -- add in magnet logic -- add in filter logic - -# Optional (Needs discussion with partner) - -- identifier when RS-ItemMagnet inoperable. (Sparkles?) - - -# Additional menu options - -- Select new hopper target. - - -