From 46a87b31d9221228a28873686f6622c721eda545 Mon Sep 17 00:00:00 2001 From: cubefury Date: Wed, 21 Jan 2026 18:55:17 +0800 Subject: [PATCH 1/4] Add hot db reload --- .../command/CommandVending.java | 2 + .../command/vending/SubCmdAdd.java | 1 - .../command/vending/SubCmdReload.java | 50 +++++++++++++++++++ .../handlers/SaveLoadHandler.java | 9 ++++ 4 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/cubefury/vendingmachine/command/vending/SubCmdReload.java diff --git a/src/main/java/com/cubefury/vendingmachine/command/CommandVending.java b/src/main/java/com/cubefury/vendingmachine/command/CommandVending.java index bf7b78d..0652d86 100644 --- a/src/main/java/com/cubefury/vendingmachine/command/CommandVending.java +++ b/src/main/java/com/cubefury/vendingmachine/command/CommandVending.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Map; +import com.cubefury.vendingmachine.command.vending.SubCmdReload; import net.minecraft.command.CommandBase; import net.minecraft.command.ICommandSender; import net.minecraft.util.ChatComponentText; @@ -22,6 +23,7 @@ public class CommandVending extends CommandBase { register(new SubCmdAdd()); register(new SubCmdSet()); register(new SubCmdReset()); + register(new SubCmdReload()); } private static void register(IVendingSubcommand cmd) { diff --git a/src/main/java/com/cubefury/vendingmachine/command/vending/SubCmdAdd.java b/src/main/java/com/cubefury/vendingmachine/command/vending/SubCmdAdd.java index ce3f3fd..22b774c 100644 --- a/src/main/java/com/cubefury/vendingmachine/command/vending/SubCmdAdd.java +++ b/src/main/java/com/cubefury/vendingmachine/command/vending/SubCmdAdd.java @@ -36,7 +36,6 @@ public void execute(ICommandSender sender, String[] args) throws CommandExceptio boolean allCurrency = false; CurrencyType type = null; int amount = 0; - VendingMachine.LOG.info(args.length); switch (args.length) { case 2: { diff --git a/src/main/java/com/cubefury/vendingmachine/command/vending/SubCmdReload.java b/src/main/java/com/cubefury/vendingmachine/command/vending/SubCmdReload.java new file mode 100644 index 0000000..fadfa0b --- /dev/null +++ b/src/main/java/com/cubefury/vendingmachine/command/vending/SubCmdReload.java @@ -0,0 +1,50 @@ +package com.cubefury.vendingmachine.command.vending; + +import com.cubefury.vendingmachine.handlers.SaveLoadHandler; +import com.cubefury.vendingmachine.network.handlers.NetTradeDbSync; +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.util.ChatComponentText; + +import java.util.Collections; +import java.util.List; + +public class SubCmdReload implements IVendingSubcommand { + + @Override + public String getName() { + return "reload"; + } + + @Override + public String getUsage(ICommandSender sender) { + return "/vending reload database"; + } + + @Override + public void execute(ICommandSender sender, String[] args) throws CommandException { + if (args.length != 1) { + sender.addChatMessage(new ChatComponentText("Usage: " + getUsage(sender))); + return; + } + + SaveLoadHandler.INSTANCE.reloadDatabase(); + NetTradeDbSync.sendDatabase(null, false); + + sender.addChatMessage(new ChatComponentText("Reloaded Trade Database")); + } + + @Override + public List tabComplete(ICommandSender sender, String[] args) { + switch (args.length) { + case 0: { + return CommandBase + .getListOfStringsFromIterableMatchingLastWord(args, Collections.singletonList("database")); + } + default: { + return null; + } + } + } +} diff --git a/src/main/java/com/cubefury/vendingmachine/handlers/SaveLoadHandler.java b/src/main/java/com/cubefury/vendingmachine/handlers/SaveLoadHandler.java index 9678b38..03f0cd7 100644 --- a/src/main/java/com/cubefury/vendingmachine/handlers/SaveLoadHandler.java +++ b/src/main/java/com/cubefury/vendingmachine/handlers/SaveLoadHandler.java @@ -12,6 +12,7 @@ import java.util.concurrent.Future; import java.util.stream.Collectors; +import com.cubefury.vendingmachine.network.handlers.NetTradeDbSync; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.server.MinecraftServer; @@ -131,4 +132,12 @@ public void unloadAll() { TradeManager.INSTANCE.clearTradeState(null); } + public void reloadDatabase() { + TradeDatabase.INSTANCE.clear(); + TradeManager.INSTANCE.clearTradeState(null); + + loadDatabase(); + loadTradeState(); + } + } From cde6546ff306c9c90834d14b03d2c7d1a733daa7 Mon Sep 17 00:00:00 2001 From: cubefury Date: Sun, 1 Feb 2026 14:15:31 +0800 Subject: [PATCH 2/4] spotless --- .../cubefury/vendingmachine/command/CommandVending.java | 2 +- .../vendingmachine/command/vending/SubCmdAdd.java | 1 - .../vendingmachine/command/vending/SubCmdReload.java | 9 +++++---- .../vendingmachine/handlers/SaveLoadHandler.java | 1 - 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/cubefury/vendingmachine/command/CommandVending.java b/src/main/java/com/cubefury/vendingmachine/command/CommandVending.java index 0652d86..11ce899 100644 --- a/src/main/java/com/cubefury/vendingmachine/command/CommandVending.java +++ b/src/main/java/com/cubefury/vendingmachine/command/CommandVending.java @@ -5,13 +5,13 @@ import java.util.List; import java.util.Map; -import com.cubefury.vendingmachine.command.vending.SubCmdReload; import net.minecraft.command.CommandBase; import net.minecraft.command.ICommandSender; import net.minecraft.util.ChatComponentText; import com.cubefury.vendingmachine.command.vending.IVendingSubcommand; import com.cubefury.vendingmachine.command.vending.SubCmdAdd; +import com.cubefury.vendingmachine.command.vending.SubCmdReload; import com.cubefury.vendingmachine.command.vending.SubCmdReset; import com.cubefury.vendingmachine.command.vending.SubCmdSet; diff --git a/src/main/java/com/cubefury/vendingmachine/command/vending/SubCmdAdd.java b/src/main/java/com/cubefury/vendingmachine/command/vending/SubCmdAdd.java index 22b774c..6d6d718 100644 --- a/src/main/java/com/cubefury/vendingmachine/command/vending/SubCmdAdd.java +++ b/src/main/java/com/cubefury/vendingmachine/command/vending/SubCmdAdd.java @@ -12,7 +12,6 @@ import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.util.ChatComponentText; -import com.cubefury.vendingmachine.VendingMachine; import com.cubefury.vendingmachine.command.Utils; import com.cubefury.vendingmachine.storage.NameCache; import com.cubefury.vendingmachine.trade.CurrencyType; diff --git a/src/main/java/com/cubefury/vendingmachine/command/vending/SubCmdReload.java b/src/main/java/com/cubefury/vendingmachine/command/vending/SubCmdReload.java index fadfa0b..47b625a 100644 --- a/src/main/java/com/cubefury/vendingmachine/command/vending/SubCmdReload.java +++ b/src/main/java/com/cubefury/vendingmachine/command/vending/SubCmdReload.java @@ -1,14 +1,15 @@ package com.cubefury.vendingmachine.command.vending; -import com.cubefury.vendingmachine.handlers.SaveLoadHandler; -import com.cubefury.vendingmachine.network.handlers.NetTradeDbSync; +import java.util.Collections; +import java.util.List; + import net.minecraft.command.CommandBase; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; import net.minecraft.util.ChatComponentText; -import java.util.Collections; -import java.util.List; +import com.cubefury.vendingmachine.handlers.SaveLoadHandler; +import com.cubefury.vendingmachine.network.handlers.NetTradeDbSync; public class SubCmdReload implements IVendingSubcommand { diff --git a/src/main/java/com/cubefury/vendingmachine/handlers/SaveLoadHandler.java b/src/main/java/com/cubefury/vendingmachine/handlers/SaveLoadHandler.java index 03f0cd7..8f4542d 100644 --- a/src/main/java/com/cubefury/vendingmachine/handlers/SaveLoadHandler.java +++ b/src/main/java/com/cubefury/vendingmachine/handlers/SaveLoadHandler.java @@ -12,7 +12,6 @@ import java.util.concurrent.Future; import java.util.stream.Collectors; -import com.cubefury.vendingmachine.network.handlers.NetTradeDbSync; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.server.MinecraftServer; From 9c95a7e67b8dba1e486cdc3c15d41aee75c76b90 Mon Sep 17 00:00:00 2001 From: cubefury Date: Sun, 1 Feb 2026 14:40:17 +0800 Subject: [PATCH 3/4] fix crash when opening UI after reload. --- .../java/com/cubefury/vendingmachine/trade/TradeManager.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/com/cubefury/vendingmachine/trade/TradeManager.java b/src/main/java/com/cubefury/vendingmachine/trade/TradeManager.java index e5368f9..84cf5cf 100644 --- a/src/main/java/com/cubefury/vendingmachine/trade/TradeManager.java +++ b/src/main/java/com/cubefury/vendingmachine/trade/TradeManager.java @@ -168,6 +168,11 @@ public void clearTradeState(@Nullable UUID player) { tradeGroupStates.forEach((uuid, tgs) -> tgs.clearTradeState(player)); clearCurrency(player); clearNotificationQueue(player); + if (player == null) { + availableTrades.clear(); + } else { + availableTrades.remove(player); + } } public TradeHistory getTradeState(@Nonnull UUID player, TradeGroup tg) { From ed7ecc569255374b7aa44b05148bcbc11af0a527 Mon Sep 17 00:00:00 2001 From: cubefury Date: Sun, 1 Feb 2026 15:24:56 +0800 Subject: [PATCH 4/4] Fix command behaviour. --- .../cubefury/vendingmachine/command/vending/SubCmdReload.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/cubefury/vendingmachine/command/vending/SubCmdReload.java b/src/main/java/com/cubefury/vendingmachine/command/vending/SubCmdReload.java index 47b625a..b1abf61 100644 --- a/src/main/java/com/cubefury/vendingmachine/command/vending/SubCmdReload.java +++ b/src/main/java/com/cubefury/vendingmachine/command/vending/SubCmdReload.java @@ -25,7 +25,7 @@ public String getUsage(ICommandSender sender) { @Override public void execute(ICommandSender sender, String[] args) throws CommandException { - if (args.length != 1) { + if (args.length != 1 || args[0].compareTo("database") != 0) { sender.addChatMessage(new ChatComponentText("Usage: " + getUsage(sender))); return; } @@ -39,7 +39,7 @@ public void execute(ICommandSender sender, String[] args) throws CommandExceptio @Override public List tabComplete(ICommandSender sender, String[] args) { switch (args.length) { - case 0: { + case 1: { return CommandBase .getListOfStringsFromIterableMatchingLastWord(args, Collections.singletonList("database")); }