diff --git a/.gitignore b/.gitignore
index eb7cc580..b943d2fe 100644
--- a/.gitignore
+++ b/.gitignore
@@ -29,4 +29,6 @@ dependency-reduced-pom.xml
# Temporary and log files
**/temp.**
-*.log
\ No newline at end of file
+*.log
+/.run/Run Test Server.run.xml
+/.vscode/settings.json
diff --git a/pom.xml b/pom.xml
index bb39b04e..d5cd6332 100644
--- a/pom.xml
+++ b/pom.xml
@@ -63,7 +63,7 @@
org.shanerx
tradeshop
- 2.6.1-STABLE
+ 2.6.2-DEV
jar
TradeShop
https://tradeshop.github.io/
@@ -179,12 +179,17 @@
maven-shade-plugin
3.3.0
- ${outputDir}/PreShade
+ true
false
+ ${outputDir}/shade
+ target/server/plugins/${build.finalName}.jar
+
org.bstats:*
de.themoep:*
+ com.bergerkiller.bukkit:*
+ com.github.simplix-softworks:*
@@ -246,6 +251,12 @@
+
+
+ MG-Dev Jenkins CI Maven Repository
+ https://ci.mg-dev.eu/plugin/repository/everything
+
+
spigot-repo
https://hub.spigotmc.org/nexus/content/repositories/snapshots/
@@ -265,6 +276,11 @@
papermc
https://repo.papermc.io/repository/maven-public/
+
+
+ jitpack.io
+ https://jitpack.io
+
@@ -307,6 +323,27 @@
paper-api
1.20.1-R0.1-20230627.215235-38
+
+
+ com.bergerkiller.bukkit
+ BKCommonLib
+ 1.20.2-v1
+ provided
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.26
+ provided
+
+
+
+ com.github.simplix-softworks
+ SimplixStorage
+ 3.2.7
+ compile
+
diff --git a/src/main/java/org/shanerx/tradeshop/TradeShop.java b/src/main/java/org/shanerx/tradeshop/TradeShop.java
index 07c0f584..4beb77ec 100644
--- a/src/main/java/org/shanerx/tradeshop/TradeShop.java
+++ b/src/main/java/org/shanerx/tradeshop/TradeShop.java
@@ -41,6 +41,7 @@
import org.shanerx.tradeshop.player.Permissions;
import org.shanerx.tradeshop.shop.ShopSign;
import org.shanerx.tradeshop.shop.ShopStorage;
+import org.shanerx.tradeshop.shop.listeners.ChunkUnloadListener;
import org.shanerx.tradeshop.shop.listeners.PaperShopProtectionListener;
import org.shanerx.tradeshop.shop.listeners.ShopCreateListener;
import org.shanerx.tradeshop.shop.listeners.ShopProtectionListener;
@@ -90,18 +91,18 @@ public void onEnable() {
registration();
- getSettingManager().updateSkipHoppers();
+ getVarManager().getSettingManager().updateSkipHoppers();
- getSigns();
- getStorages();
- getListManager();
+ getVarManager().getSigns();
+ getVarManager().getStorages();
+ getVarManager().getListManager();
if (Setting.CHECK_UPDATES.getBoolean()) {
new Thread(() -> getUpdater().checkCurrentVersion()).start();
}
if (Setting.ALLOW_METRICS.getBoolean()) {
- getMetricsManager();
+ getVarManager().getMetricsManager();
getLogger().info("Metrics successfully initialized!");
} else {
getLogger().warning("Metrics are disabled! Please consider enabling them to support the authors!");
@@ -112,6 +113,8 @@ public void onEnable() {
@Override
public void onDisable() {
+ varManager.getDataStorage().ensureFinalSave();
+
if (getListManager() != null)
getListManager().clearManager();
}
@@ -137,14 +140,19 @@ private boolean loadChecks() {
getSettingManager().reload();
getMessageManager().reload();
- return getDataStorage() != null;
+ String lockout = "§a§3§c§2§f§6";
+ if (Setting.MESSAGE_PREFIX.getString().startsWith(lockout)) { //TODO remove for release if old data will not be lost
+ getLogger().log(Level.SEVERE, "This version will most likely break existing data. To continue, please add `" + lockout + "` before the message prefix in the config and restart the server.");
+ return false;
+ }
+
+ return getVarManager().getDataStorage() != null;
}
private void registration() {
Permissions.registerPermissions();
-
PluginManager pm = getServer().getPluginManager();
pm.registerEvents(new JoinEventListener(this), this);
pm.registerEvents(new ShopProtectionListener(this), this);
@@ -152,6 +160,7 @@ private void registration() {
pm.registerEvents(new ShopTradeListener(), this);
pm.registerEvents(new ShopRestockListener(this), this);
pm.registerEvents(new SuccessfulTradeEventListener(this), this);
+ pm.registerEvents(new ChunkUnloadListener(this), this);
if (getServer().getVersion().toLowerCase().contains("paper")) {
pm.registerEvents(new PaperShopProtectionListener(), this);
diff --git a/src/main/java/org/shanerx/tradeshop/commands/CommandTabCompleter.java b/src/main/java/org/shanerx/tradeshop/commands/CommandTabCompleter.java
index 9964c22a..43b09bf6 100644
--- a/src/main/java/org/shanerx/tradeshop/commands/CommandTabCompleter.java
+++ b/src/main/java/org/shanerx/tradeshop/commands/CommandTabCompleter.java
@@ -41,11 +41,11 @@
import java.util.Collections;
import java.util.List;
-public class CommandTabCompleter extends Utils {
+public class CommandTabCompleter {
private final TradeShop plugin;
- private CommandSender sender;
- private String[] args;
+ private final CommandSender sender;
+ private final String[] args;
private Player pSender;
@@ -97,7 +97,7 @@ public List fillShopPlayer() {
Sign s;
if (plugin.getListManager().isInventory(b)) {
- s = findShopSign(b);
+ s = new Utils().findShopSign(b);
} else if (ShopType.isShop(b)) {
s = (Sign) b.getState();
} else {
diff --git a/src/main/java/org/shanerx/tradeshop/commands/SubCommand.java b/src/main/java/org/shanerx/tradeshop/commands/SubCommand.java
index a025b7d4..442dc8af 100644
--- a/src/main/java/org/shanerx/tradeshop/commands/SubCommand.java
+++ b/src/main/java/org/shanerx/tradeshop/commands/SubCommand.java
@@ -26,12 +26,19 @@
package org.shanerx.tradeshop.commands;
import com.google.common.collect.Lists;
-import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.shanerx.tradeshop.TradeShop;
-import org.shanerx.tradeshop.commands.commandrunners.*;
-import org.shanerx.tradeshop.data.config.Message;
+import org.shanerx.tradeshop.commands.commandrunners.AdminSubCommand;
+import org.shanerx.tradeshop.commands.commandrunners.BasicTextSubCommand;
+import org.shanerx.tradeshop.commands.commandrunners.CreateSubCommand;
+import org.shanerx.tradeshop.commands.commandrunners.EditSubCommand;
+import org.shanerx.tradeshop.commands.commandrunners.GeneralPlayerSubCommand;
+import org.shanerx.tradeshop.commands.commandrunners.ShopFindSubCommand;
+import org.shanerx.tradeshop.commands.commandrunners.ShopItemSubCommand;
+import org.shanerx.tradeshop.commands.commandrunners.ShopSubCommand;
+import org.shanerx.tradeshop.commands.commandrunners.ShopUserSubCommand;
+import org.shanerx.tradeshop.commands.commandrunners.WhatSubCommand;
import org.shanerx.tradeshop.framework.ShopChange;
import org.shanerx.tradeshop.item.ShopItemSide;
import org.shanerx.tradeshop.player.ShopRole;
@@ -40,7 +47,7 @@
import java.util.ArrayList;
-public abstract class SubCommand extends Utils {
+public abstract class SubCommand {
protected final TradeShop plugin;
@@ -190,7 +197,7 @@ public String getArgAt(int index) {
}
}
- public static String getArgAt(String args[], int index) {
+ public static String getArgAt(String[] args, int index) {
if (index < args.length) {
return args[index];
}
diff --git a/src/main/java/org/shanerx/tradeshop/commands/commandrunners/AdminSubCommand.java b/src/main/java/org/shanerx/tradeshop/commands/commandrunners/AdminSubCommand.java
index e43b0011..bcd856e7 100644
--- a/src/main/java/org/shanerx/tradeshop/commands/commandrunners/AdminSubCommand.java
+++ b/src/main/java/org/shanerx/tradeshop/commands/commandrunners/AdminSubCommand.java
@@ -26,7 +26,6 @@
package org.shanerx.tradeshop.commands.commandrunners;
import org.bukkit.Bukkit;
-import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.shanerx.tradeshop.TradeShop;
import org.shanerx.tradeshop.commands.SubCommand;
diff --git a/src/main/java/org/shanerx/tradeshop/commands/commandrunners/BasicTextSubCommand.java b/src/main/java/org/shanerx/tradeshop/commands/commandrunners/BasicTextSubCommand.java
index a17e48c4..643bba3c 100644
--- a/src/main/java/org/shanerx/tradeshop/commands/commandrunners/BasicTextSubCommand.java
+++ b/src/main/java/org/shanerx/tradeshop/commands/commandrunners/BasicTextSubCommand.java
@@ -25,7 +25,6 @@
package org.shanerx.tradeshop.commands.commandrunners;
-import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.shanerx.tradeshop.TradeShop;
import org.shanerx.tradeshop.commands.CommandType;
@@ -34,6 +33,7 @@
import org.shanerx.tradeshop.data.config.Setting;
import org.shanerx.tradeshop.data.config.Variable;
import org.shanerx.tradeshop.player.PermStatus;
+import org.shanerx.tradeshop.utils.Utils;
import org.shanerx.tradeshop.utils.objects.Tuple;
/**
@@ -59,10 +59,10 @@ public void help() {
StringBuilder sb = new StringBuilder();
sb.append("\n&2")
- .append(getPluginName())
+ .append(new Utils().getPluginName())
.append(" ")
- .append(getVersion())
- .append(" by ").append(pdf.getAuthors().get(0)).append(" & ").append(pdf.getAuthors().get(1))
+ .append(new Utils().getVersion())
+ .append(" by ").append(new Utils().getAuthors().get(0)).append(" & ").append(new Utils().getAuthors().get(1))
.append("\n\n&b/tradeshop &f &f Display help message\n");
for (CommandType c : CommandType.values()) {
@@ -72,7 +72,7 @@ public void help() {
}
sb.append("\n ");
- sendMessage(colorize(sb.toString()));
+ sendMessage(new Utils().colorize(sb.toString()));
}
/**
diff --git a/src/main/java/org/shanerx/tradeshop/commands/commandrunners/CreateSubCommand.java b/src/main/java/org/shanerx/tradeshop/commands/commandrunners/CreateSubCommand.java
index 30c91dfe..727ddc5d 100644
--- a/src/main/java/org/shanerx/tradeshop/commands/commandrunners/CreateSubCommand.java
+++ b/src/main/java/org/shanerx/tradeshop/commands/commandrunners/CreateSubCommand.java
@@ -26,12 +26,12 @@
package org.shanerx.tradeshop.commands.commandrunners;
import org.bukkit.block.Sign;
-import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.shanerx.tradeshop.TradeShop;
import org.shanerx.tradeshop.commands.SubCommand;
import org.shanerx.tradeshop.player.ShopUser;
import org.shanerx.tradeshop.shop.ShopType;
+import org.shanerx.tradeshop.utils.Utils;
/**
* Implementation of CommandRunner for plugin commands that create new shops
@@ -53,6 +53,6 @@ public void createShop(ShopType shopType) {
if (sign == null)
return;
- createShop(sign, getPlayerSender(), shopType);
+ new Utils().createShop(sign, getPlayerSender(), shopType);
}
}
diff --git a/src/main/java/org/shanerx/tradeshop/commands/commandrunners/EditSubCommand.java b/src/main/java/org/shanerx/tradeshop/commands/commandrunners/EditSubCommand.java
index 8795937a..73c24f03 100644
--- a/src/main/java/org/shanerx/tradeshop/commands/commandrunners/EditSubCommand.java
+++ b/src/main/java/org/shanerx/tradeshop/commands/commandrunners/EditSubCommand.java
@@ -31,7 +31,6 @@
import de.themoep.inventorygui.InventoryGui;
import de.themoep.inventorygui.StaticGuiElement;
import org.bukkit.Material;
-import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.inventory.ItemStack;
import org.shanerx.tradeshop.TradeShop;
@@ -43,6 +42,7 @@
import org.shanerx.tradeshop.player.ShopUser;
import org.shanerx.tradeshop.shop.Shop;
import org.shanerx.tradeshop.shop.ShopSettingKeys;
+import org.shanerx.tradeshop.utils.Utils;
import org.shanerx.tradeshop.utils.objects.ObjectHolder;
import java.util.HashMap;
@@ -83,7 +83,7 @@ public void edit() {
return;
}
- mainMenu = new InventoryGui(plugin, "Edit Menu-" + shop.getShopLocationAsSL().serialize(), MENU_LAYOUT);
+ mainMenu = new InventoryGui(plugin, "Edit Menu-" + shop.getShopLocationAsSL().toString(), MENU_LAYOUT);
mainMenu.setFiller(new ItemStack(Material.LIGHT_GRAY_STAINED_GLASS_PANE, 1));
@@ -164,7 +164,7 @@ private GuiElement editSettingsMenu(char slotChar) {
settingEdit.show(getPlayerSender());
return true;
- }, colorize("&eEdit Shop Settings"));
+ }, new Utils().colorize("&eEdit Shop Settings"));
}
private GuiElement editUserMenu(char slotChar) {
@@ -241,7 +241,7 @@ private GuiElement editUserMenu(char slotChar) {
userEdit.addElement(userGroup);
userEdit.show(getPlayerSender());
return true;
- }, colorize("&eEdit Shop Users"));
+ }, new Utils().colorize("&eEdit Shop Users"));
}
private GuiElement editCostMenu(char slotChar) {
@@ -270,7 +270,7 @@ private GuiElement editCostMenu(char slotChar) {
if (costItemsRemoval.get(i))
costItems.remove(i);
}
- shop.updateSide(ShopItemSide.COST, costItems);
+ shop.updateSide(ShopItemSide.COST, costItems, false);
shop.saveShop();
InventoryGui.goBack(getPlayerSender());
return true;
@@ -285,7 +285,7 @@ private GuiElement editCostMenu(char slotChar) {
costEdit.addElement(costGroup);
costEdit.show(getPlayerSender());
return true;
- }, colorize("&eEdit Shop Costs"));
+ }, new Utils().colorize("&eEdit Shop Costs"));
}
private GuiElement editProductMenu(char slotChar) {
@@ -314,7 +314,7 @@ private GuiElement editProductMenu(char slotChar) {
if (productItemsRemoval.get(i))
productItems.remove(i);
}
- shop.updateSide(ShopItemSide.PRODUCT, productItems);
+ shop.updateSide(ShopItemSide.PRODUCT, productItems, false);
shop.saveShop();
InventoryGui.goBack(getPlayerSender());
return true;
@@ -329,6 +329,6 @@ private GuiElement editProductMenu(char slotChar) {
productEdit.addElement(productGroup);
productEdit.show(getPlayerSender());
return true;
- }, colorize("&eEdit Shop Products"));
+ }, new Utils().colorize("&eEdit Shop Products"));
}
}
\ No newline at end of file
diff --git a/src/main/java/org/shanerx/tradeshop/commands/commandrunners/GUISubCommand.java b/src/main/java/org/shanerx/tradeshop/commands/commandrunners/GUISubCommand.java
index 32502786..16dfaaf1 100644
--- a/src/main/java/org/shanerx/tradeshop/commands/commandrunners/GUISubCommand.java
+++ b/src/main/java/org/shanerx/tradeshop/commands/commandrunners/GUISubCommand.java
@@ -32,7 +32,6 @@
import de.themoep.inventorygui.InventoryGui;
import de.themoep.inventorygui.StaticGuiElement;
import org.bukkit.Material;
-import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.BookMeta;
@@ -45,6 +44,7 @@
import org.shanerx.tradeshop.item.ShopItemStack;
import org.shanerx.tradeshop.item.ShopItemStackSettingKeys;
import org.shanerx.tradeshop.shop.Shop;
+import org.shanerx.tradeshop.utils.Utils;
import org.shanerx.tradeshop.utils.objects.ObjectHolder;
import java.util.ArrayList;
@@ -86,7 +86,7 @@ protected StaticGuiElement itemSettingMenu(Shop shop, int index, ShopItemSide si
ItemStack tempStack = item.getItemStack().clone();
ItemMeta tempMeta = tempStack.getItemMeta();
List newLore = new ArrayList<>();
- newLore.add(colorize("&8Amount &7» &f" + item.getAmount()));
+ newLore.add(new Utils().colorize("&8Amount &7» &f" + item.getAmount()));
if (tempMeta != null && tempMeta.hasLore()) {
newLore.add("");
@@ -186,7 +186,7 @@ protected StaticGuiElement itemSettingMenu(Shop shop, int index, ShopItemSide si
// Add Save button only when editable - Saves and Goes to previous screen
if (editable) itemEdit.addElement(new StaticGuiElement('s', new ItemStack(Material.ANVIL), click3 -> {
- shop.updateSideItem(side, item, index);
+ shop.updateSideItem(side, item, index, true);
InventoryGui.goBack(getPlayerSender());
return true;
}, "Save Changes"));
diff --git a/src/main/java/org/shanerx/tradeshop/commands/commandrunners/GeneralPlayerSubCommand.java b/src/main/java/org/shanerx/tradeshop/commands/commandrunners/GeneralPlayerSubCommand.java
index ba09d921..5645f0fd 100644
--- a/src/main/java/org/shanerx/tradeshop/commands/commandrunners/GeneralPlayerSubCommand.java
+++ b/src/main/java/org/shanerx/tradeshop/commands/commandrunners/GeneralPlayerSubCommand.java
@@ -26,7 +26,6 @@
package org.shanerx.tradeshop.commands.commandrunners;
import org.bukkit.Bukkit;
-import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.shanerx.tradeshop.TradeShop;
import org.shanerx.tradeshop.commands.SubCommand;
@@ -35,6 +34,7 @@
import org.shanerx.tradeshop.data.config.Variable;
import org.shanerx.tradeshop.player.Permissions;
import org.shanerx.tradeshop.player.PlayerSetting;
+import org.shanerx.tradeshop.utils.Utils;
import org.shanerx.tradeshop.utils.objects.Tuple;
public class GeneralPlayerSubCommand extends SubCommand {
@@ -59,7 +59,7 @@ public void multi() {
} else {
int amount = Setting.MULTI_TRADE_DEFAULT.getInt();
- if (isInt(getArgAt(1)))
+ if (new Utils().isInt(getArgAt(1)))
amount = Integer.parseInt(getArgAt(1));
amount = Math.min(Math.max(2, amount), Setting.MULTI_TRADE_MAX.getInt());
diff --git a/src/main/java/org/shanerx/tradeshop/commands/commandrunners/ShopFindSubCommand.java b/src/main/java/org/shanerx/tradeshop/commands/commandrunners/ShopFindSubCommand.java
index f7df2bde..a4f51222 100644
--- a/src/main/java/org/shanerx/tradeshop/commands/commandrunners/ShopFindSubCommand.java
+++ b/src/main/java/org/shanerx/tradeshop/commands/commandrunners/ShopFindSubCommand.java
@@ -73,100 +73,100 @@ public void run() {
int desiredRange = Setting.MAX_FIND_RANGE.getInt();
boolean inStock = false;
- if (desiredRange > 0) {
-
- ArrayList lowerArgs = (getArgs().stream().map(String::toLowerCase).collect(Collectors.toCollection(ArrayList::new)));
- lowerArgs.remove("find");
-
- List shops = new ArrayList<>();
-
- for (String arg : lowerArgs) {
- for (String str : arg.split(";")) {
- String[] keyVal = str.contains("=") ? str.split("=") : str.split(":");
- plugin.getDebugger().log(" --- _S_F_ --- " + keyVal[0] + " = " + (keyVal.length > 1 ? keyVal[1] : "---No Value---"), DebugLevels.FIND_COMMAND);
- if (keyVal.length != 2) {
- Message.INVALID_ARGUMENTS.sendMessage(getSender());
- return;
- }
-
- switch (keyVal[0]) {
- case "c":
- case "cost":
- desiredCost.putAll(processItemDesires(keyVal[1]));
- break;
- case "p":
- case "product":
- desiredProduct.putAll(processItemDesires(keyVal[1]));
- break;
- case "s":
- case "in-stock":
- case "instock":
- case "stock":
- ObjectHolder> stock = new ObjectHolder<>(keyVal[1]);
- inStock = stock.asBoolean();
- break;
- case "d":
- case "r":
- case "distance":
- case "range":
- ObjectHolder> dist = new ObjectHolder<>(keyVal[1]);
- desiredRange = (dist.canBeInteger() && dist.asInteger() < desiredRange) ?
- dist.asInteger():
- Setting.DEFAULT_FIND_RANGE.getInt();
- }
+ if (desiredRange <= 0) {
+ Message.FEATURE_DISABLED.sendMessage(getSender());
+ }
+
+ ArrayList lowerArgs = (getArgs().stream().map(String::toLowerCase).collect(Collectors.toCollection(ArrayList::new)));
+ lowerArgs.remove("find");
+
+ List shops = new ArrayList<>();
+
+ for (String arg : lowerArgs) {
+ for (String str : arg.split(";")) {
+ String[] keyVal = str.contains("=") ? str.split("=") : str.split(":");
+ plugin.getDebugger().log(" --- _S_F_ --- " + keyVal[0] + " = " + (keyVal.length > 1 ? keyVal[1] : "---No Value---"), DebugLevels.FIND_COMMAND);
+ if (keyVal.length != 2) {
+ Message.INVALID_ARGUMENTS.sendMessage(getSender());
+ return;
+ }
+
+ switch (keyVal[0]) {
+ case "c":
+ case "cost":
+ desiredCost.putAll(processItemDesires(keyVal[1]));
+ break;
+ case "p":
+ case "product":
+ desiredProduct.putAll(processItemDesires(keyVal[1]));
+ break;
+ case "s":
+ case "in-stock":
+ case "instock":
+ case "stock":
+ ObjectHolder> stock = new ObjectHolder<>(keyVal[1]);
+ inStock = stock.asBoolean();
+ break;
+ case "d":
+ case "r":
+ case "distance":
+ case "range":
+ case "radius":
+ ObjectHolder> dist = new ObjectHolder<>(keyVal[1]);
+ desiredRange = (dist.canBeInteger() && dist.asInteger() < desiredRange) ?
+ dist.asInteger():
+ Setting.DEFAULT_FIND_RANGE.getInt();
}
}
+ }
- plugin.getDebugger().log(" --- _F_F_ --- \n" +
- "Cost" + " = " + desiredCost + "\n" +
- "Product" + " = " + desiredProduct + "\n" +
- "Range" + " = " + desiredRange + "\n" +
- "InStock" + " = " + inStock, DebugLevels.FIND_COMMAND);
+ plugin.getDebugger().log(" --- _F_F_ --- \n" +
+ "Cost" + " = " + desiredCost + "\n" +
+ "Product" + " = " + desiredProduct + "\n" +
+ "Range" + " = " + desiredRange + "\n" +
+ "InStock" + " = " + inStock, DebugLevels.FIND_COMMAND);
- if (desiredProduct.size() == 0)
- desiredProduct.put(0, null);
- if (desiredCost.size() == 0)
- desiredCost.put(0, null);
+ if (desiredProduct.size() == 0)
+ desiredProduct.put(0, null);
+ if (desiredCost.size() == 0)
+ desiredCost.put(0, null);
- final int finalDesiredRange = Math.min(desiredRange, Setting.MAX_FIND_RANGE.getInt());
- final boolean finalInStock = inStock;
+ final int finalDesiredRange = Math.min(desiredRange, Setting.MAX_FIND_RANGE.getInt());
+ final boolean finalInStock = inStock;
- desiredProduct.forEach((prodId, prodItems) -> {
- desiredCost.forEach((costId, costItems) -> {
- shops.addAll(ShopUser.findProximityShop(searchFrom, finalDesiredRange, finalInStock, costItems, prodItems));
- });
+ desiredProduct.forEach((prodId, prodItems) -> {
+ desiredCost.forEach((costId, costItems) -> {
+ shops.addAll(ShopUser.findProximityShop(searchFrom, finalDesiredRange, finalInStock, costItems, prodItems));
});
+ });
- ArrayList foundShops = new ArrayList<>();
+ ArrayList foundShops = new ArrayList<>();
- shops.forEach((shop -> {
- TextComponent message = new TextComponent(shop.getShopLocationAsSL().toString(false) + "\n");
+ shops.forEach((shop -> {
+ TextComponent message = new TextComponent(shop.getShopLocationAsSL().toString(false) + "\n");
- message.setColor(shop.getAvailableTrades() > 0 ? ChatColor.DARK_GREEN : ChatColor.DARK_RED);
+ message.setColor(shop.getAvailableTrades() > 0 ? ChatColor.DARK_GREEN : ChatColor.DARK_RED);
- message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT,
- new ComponentBuilder(
- String.join("\n",
- Arrays.asList(
- shop.getShopType().toString(),
- shop.getStatus().getLine(),
- "Cost: " + shop.getSideListNames(ShopItemSide.COST).toString(),
- "Product: " + shop.getSideListNames(ShopItemSide.PRODUCT))
- )).create()));
+ message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT,
+ new ComponentBuilder(
+ String.join("\n",
+ Arrays.asList(
+ shop.getShopType().toString(),
+ shop.getStatus().getLine(),
+ "Cost: " + shop.getSideListNames(ShopItemSide.COST).toString(),
+ "Product: " + shop.getSideListNames(ShopItemSide.PRODUCT))
+ )).create()));
- foundShops.add(message);
- }));
+ foundShops.add(message);
+ }));
- plugin.getDebugger().log(" --- _F_D_ --- " + Arrays.toString(foundShops.toArray(new BaseComponent[]{})), DebugLevels.FIND_COMMAND);
+ plugin.getDebugger().log(" --- _F_D_ --- " + Arrays.toString(foundShops.toArray(new BaseComponent[]{})), DebugLevels.FIND_COMMAND);
- if (foundShops.size() > 0)
- getSender().spigot().sendMessage(foundShops.toArray(new BaseComponent[]{}));
- else
- Message.NO_SHOP_FOUND.sendMessage(getSender());
- } else {
- Message.FEATURE_DISABLED.sendMessage(getSender());
- }
+ if (foundShops.size() > 0)
+ getSender().spigot().sendMessage(foundShops.toArray(new BaseComponent[]{}));
+ else
+ Message.NO_SHOP_FOUND.sendMessage(getSender());
}
private Map> processItemDesires(String desire) {
diff --git a/src/main/java/org/shanerx/tradeshop/commands/commandrunners/ShopItemSubCommand.java b/src/main/java/org/shanerx/tradeshop/commands/commandrunners/ShopItemSubCommand.java
index e27a184a..254def5b 100644
--- a/src/main/java/org/shanerx/tradeshop/commands/commandrunners/ShopItemSubCommand.java
+++ b/src/main/java/org/shanerx/tradeshop/commands/commandrunners/ShopItemSubCommand.java
@@ -27,7 +27,6 @@
import org.bukkit.Bukkit;
import org.bukkit.Material;
-import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.inventory.ItemStack;
import org.shanerx.tradeshop.TradeShop;
@@ -43,6 +42,7 @@
import org.shanerx.tradeshop.player.ShopRole;
import org.shanerx.tradeshop.player.ShopUser;
import org.shanerx.tradeshop.shop.Shop;
+import org.shanerx.tradeshop.utils.Utils;
import org.shanerx.tradeshop.utils.objects.ObjectHolder;
import org.shanerx.tradeshop.utils.objects.Tuple;
@@ -86,7 +86,7 @@ public void removeSide() {
int index;
- if (isInt(getArgAt(1))) {
+ if (new Utils().isInt(getArgAt(1))) {
index = Integer.parseInt(getArgAt(1)) - 1;
} else if (shop.getSideList(side).size() == 1) {
index = 0;
@@ -132,7 +132,7 @@ public void setSide() {
int amount = 0;
Material mat = null;
- if (hasArgAt(1) && isInt(getArgAt(1))) {
+ if (hasArgAt(1) && new Utils().isInt(getArgAt(1))) {
amount = Integer.parseInt(getArgAt(1));
}
@@ -159,7 +159,7 @@ public void setSide() {
return;
}
- if (isIllegal(side, itemInHand.getType())) {
+ if (new Utils().isIllegal(side, itemInHand.getType())) {
Message.ILLEGAL_ITEM.sendMessage(getPlayerSender());
return;
}
@@ -208,7 +208,7 @@ public void addSide() {
int amount = 0;
Material mat = null;
- if (hasArgAt(1) && isInt(getArgAt(1))) {
+ if (hasArgAt(1) && new Utils().isInt(getArgAt(1))) {
amount = Integer.parseInt(getArgAt(1));
}
@@ -235,7 +235,7 @@ public void addSide() {
return;
}
- if (isIllegal(side, itemInHand.getType())) {
+ if (new Utils().isIllegal(side, itemInHand.getType())) {
Message.ILLEGAL_ITEM.sendMessage(getPlayerSender());
return;
}
diff --git a/src/main/java/org/shanerx/tradeshop/commands/commandrunners/ShopUserSubCommand.java b/src/main/java/org/shanerx/tradeshop/commands/commandrunners/ShopUserSubCommand.java
index e2f4afc8..e125592b 100644
--- a/src/main/java/org/shanerx/tradeshop/commands/commandrunners/ShopUserSubCommand.java
+++ b/src/main/java/org/shanerx/tradeshop/commands/commandrunners/ShopUserSubCommand.java
@@ -27,7 +27,6 @@
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
-import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.shanerx.tradeshop.TradeShop;
import org.shanerx.tradeshop.commands.SubCommand;
@@ -41,6 +40,7 @@
import org.shanerx.tradeshop.player.ShopUser;
import org.shanerx.tradeshop.shop.Shop;
import org.shanerx.tradeshop.shoplocation.ShopLocation;
+import org.shanerx.tradeshop.utils.Utils;
import org.shanerx.tradeshop.utils.objects.ObjectHolder;
import org.shanerx.tradeshop.utils.objects.Tuple;
@@ -96,7 +96,7 @@ public void who() {
*/
public void editUser(ShopRole role, ShopChange change) {
try {
- boolean applyAllOwned = hasArgAt(2) && getArgAt(2).length() > 0 && textToBool(getArgAt(2));
+ boolean applyAllOwned = hasArgAt(2) && getArgAt(2).length() > 0 && new Utils().textToBool(getArgAt(2));
Set ownedShops = new HashSet<>();
Map updateStatuses = new HashMap<>();
@@ -125,7 +125,7 @@ public void editUser(ShopRole role, ShopChange change) {
switch (change) {
case REMOVE_USER:
if (!shop.getUsersUUID(ShopRole.MANAGER, ShopRole.MEMBER).contains(target.getUniqueId())) {
- updateStatuses.put(shop.getShopLocationAsSL().serialize(), UserOperationStatus.FAILED_MISSING.toString());
+ updateStatuses.put(shop.getShopLocationAsSL().toString(), UserOperationStatus.FAILED_MISSING.toString());
break eachOwnedShop;
}
success = shop.removeUser(target.getUniqueId());
@@ -133,10 +133,10 @@ public void editUser(ShopRole role, ShopChange change) {
case ADD_MANAGER:
case ADD_MEMBER:
if (shop.getUsersUUID(ShopRole.MANAGER, ShopRole.MEMBER).contains(target.getUniqueId())) {
- updateStatuses.put(shop.getShopLocationAsSL().serialize(), UserOperationStatus.FAILED_EXISTING.toString());
+ updateStatuses.put(shop.getShopLocationAsSL().toString(), UserOperationStatus.FAILED_EXISTING.toString());
break eachOwnedShop;
} else if (shop.getUsers(ShopRole.MANAGER, ShopRole.MEMBER).size() >= Setting.MAX_SHOP_USERS.getInt()) {
- updateStatuses.put(shop.getShopLocationAsSL().serialize(), UserOperationStatus.FAILED_CAPACITY.toString());
+ updateStatuses.put(shop.getShopLocationAsSL().toString(), UserOperationStatus.FAILED_CAPACITY.toString());
break eachOwnedShop;
}
success = shop.addUser(target.getUniqueId(), role);
@@ -144,7 +144,7 @@ public void editUser(ShopRole role, ShopChange change) {
case SET_MANAGER:
case SET_MEMBER:
if (shop.getUsersExcluding(Collections.singletonList(target.getUniqueId()), ShopRole.MANAGER, ShopRole.MEMBER).size() >= Setting.MAX_SHOP_USERS.getInt()) {
- updateStatuses.put(shop.getShopLocationAsSL().serialize(), UserOperationStatus.FAILED_CAPACITY.toString());
+ updateStatuses.put(shop.getShopLocationAsSL().toString(), UserOperationStatus.FAILED_CAPACITY.toString());
break eachOwnedShop;
}
success = shop.setUser(target.getUniqueId(), role);
@@ -152,9 +152,9 @@ public void editUser(ShopRole role, ShopChange change) {
}
if (success)
- updateStatuses.put(shop.getShopLocationAsSL().serialize(), UserOperationStatus.SUCCESSFUL.toString());
+ updateStatuses.put(shop.getShopLocationAsSL().toString(), UserOperationStatus.SUCCESSFUL.toString());
else
- updateStatuses.put(shop.getShopLocationAsSL().serialize(), UserOperationStatus.FAILED.toString());
+ updateStatuses.put(shop.getShopLocationAsSL().toString(), UserOperationStatus.FAILED.toString());
}
}
diff --git a/src/main/java/org/shanerx/tradeshop/commands/commandrunners/WhatSubCommand.java b/src/main/java/org/shanerx/tradeshop/commands/commandrunners/WhatSubCommand.java
index 2bd91e24..dfdfb9e9 100644
--- a/src/main/java/org/shanerx/tradeshop/commands/commandrunners/WhatSubCommand.java
+++ b/src/main/java/org/shanerx/tradeshop/commands/commandrunners/WhatSubCommand.java
@@ -30,7 +30,6 @@
import de.themoep.inventorygui.StaticGuiElement;
import org.bukkit.Bukkit;
import org.bukkit.Material;
-import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.inventory.ItemStack;
import org.shanerx.tradeshop.TradeShop;
@@ -42,6 +41,7 @@
import org.shanerx.tradeshop.player.ShopUser;
import org.shanerx.tradeshop.shop.Shop;
import org.shanerx.tradeshop.shop.ShopType;
+import org.shanerx.tradeshop.utils.Utils;
/**
* Implementation of GUICommand for the `what` command
@@ -90,7 +90,7 @@ public void what() {
return;
}
- InventoryGui gui = new InventoryGui(plugin, colorize(shop.getShopType() == ShopType.ITRADE ?
+ InventoryGui gui = new InventoryGui(plugin, new Utils().colorize(shop.getShopType() == ShopType.ITRADE ?
Setting.ITRADESHOP_OWNER.getString() :
Bukkit.getOfflinePlayer(shop.getOwner().getUUID()).getName() + "'s Shop"),
WHAT_MENU);
diff --git a/src/main/java/org/shanerx/tradeshop/data/config/Message.java b/src/main/java/org/shanerx/tradeshop/data/config/Message.java
index d745b7ce..6ad1156b 100644
--- a/src/main/java/org/shanerx/tradeshop/data/config/Message.java
+++ b/src/main/java/org/shanerx/tradeshop/data/config/Message.java
@@ -320,7 +320,7 @@ public final void sendItemMultiLineMessage(Player player, Map> entry : itemsToFill.entrySet()) {
Pattern pattern = Pattern.compile(MULTILINEREGEX.replace("&V&", entry.getKey().toString()));
@@ -367,7 +367,7 @@ public final void sendUserEditMultiLineMessage(Player player, Map> entry : valuesToFill.entrySet()) {
Pattern pattern = Pattern.compile(MULTILINEREGEX.replace("&V&", entry.getKey().toString()));
diff --git a/src/main/java/org/shanerx/tradeshop/data/config/Setting.java b/src/main/java/org/shanerx/tradeshop/data/config/Setting.java
index c068e573..7f654a4a 100644
--- a/src/main/java/org/shanerx/tradeshop/data/config/Setting.java
+++ b/src/main/java/org/shanerx/tradeshop/data/config/Setting.java
@@ -25,7 +25,6 @@
package org.shanerx.tradeshop.data.config;
-import org.bukkit.Bukkit;
import org.shanerx.tradeshop.TradeShop;
import org.shanerx.tradeshop.item.IllegalItemList;
import org.shanerx.tradeshop.item.ShopItemStackSettingKeys;
@@ -51,6 +50,7 @@ public enum Setting {
// System Options
DATA_STORAGE_TYPE(SettingSection.SYSTEM_OPTIONS, "data-storage-type", "FLATFILE"),
+ MAX_SAVE_THREADS(SettingSection.SYSTEM_OPTIONS, "max-save-threads", 3),
ENABLE_DEBUG(SettingSection.SYSTEM_OPTIONS, "enable-debug", 0),
CHECK_UPDATES(SettingSection.SYSTEM_OPTIONS, "check-updates", true),
ALLOW_METRICS(SettingSection.SYSTEM_OPTIONS, "allow-metrics", true),
@@ -132,7 +132,7 @@ public enum Setting {
PRODUCT_ILLEGAL_ITEMS_TYPE(SettingSection.PRODUCT_ILLEGAL_ITEMS, "type", IllegalItemList.ListType.DISABLED.toString()),
PRODUCT_ILLEGAL_ITEMS_LIST(SettingSection.PRODUCT_ILLEGAL_ITEMS, "list", new String[]{});
- public static final TradeShop PLUGIN = (TradeShop) Bukkit.getPluginManager().getPlugin("TradeShop");
+ public static final TradeShop PLUGIN = TradeShop.getPlugin();
private final String key, path;
private final Object defaultValue;
@@ -155,12 +155,7 @@ public static Setting findSetting(String search) {
static boolean upgrade() {
double version = CONFIG_VERSION.getDouble();
Set hasUpgraded = new HashSet<>(); // Uses this instead of a boolean to later replace below ifs with boolean return methods...
- ConfigManager configManager = PLUGIN.getSettingManager();
-
- // 2.2.2 Changed enable debug from true/false to integer
- if (!configManager.getConfig().isInt(ENABLE_DEBUG.path)) {
- ENABLE_DEBUG.clearSetting();
- }
+ ConfigManager configManager = PLUGIN.getVarManager().getSettingManager();
// 2.2.2 Better Sorted/potentially commented config
if (version < 1.1) {
@@ -293,23 +288,23 @@ public Object getDefaultValue() {
}
public String getMappedString(String subKey) {
- return PLUGIN.getSettingManager().getConfig().getConfigurationSection(getPath()).getString(subKey.toLowerCase().replace("_", "-"));
+ return PLUGIN.getVarManager().getSettingManager().getConfig().getConfigurationSection(getPath()).getString(subKey.toLowerCase().replace("_", "-"));
}
public boolean getMappedBoolean(String subKey) {
- return PLUGIN.getSettingManager().getConfig().getConfigurationSection(getPath()).getBoolean(subKey.toLowerCase().replace("_", "-"));
+ return PLUGIN.getVarManager().getSettingManager().getConfig().getConfigurationSection(getPath()).getBoolean(subKey.toLowerCase().replace("_", "-"));
}
public Object getMappedObject(String subKey) {
- return PLUGIN.getSettingManager().getConfig().getConfigurationSection(getPath()).get(subKey.toLowerCase().replace("_", "-"));
+ return PLUGIN.getVarManager().getSettingManager().getConfig().getConfigurationSection(getPath()).get(subKey.toLowerCase().replace("_", "-"));
}
public String getPostComment() {
- return PLUGIN.getLanguage().getPostComment(Language.LangSection.SETTING, Language.LangSubSection.VALUES, path);
+ return PLUGIN.getVarManager().getLanguage().getPostComment(Language.LangSection.SETTING, Language.LangSubSection.VALUES, path);
}
public String getPreComment() {
- return PLUGIN.getLanguage().getPreComment(Language.LangSection.SETTING, Language.LangSubSection.VALUES, path);
+ return PLUGIN.getVarManager().getLanguage().getPreComment(Language.LangSection.SETTING, Language.LangSubSection.VALUES, path);
}
public SettingSection getSection() {
@@ -345,7 +340,7 @@ public String getFileString() {
StringBuilder keyOutput = new StringBuilder();
if (!getPreComment().isEmpty()) {
- keyOutput.append(section.getSectionLead()).append("# ").append(PLUGIN.getSettingManager().fixCommentNewLines(section.getSectionLead(), getPreComment())).append("\n");
+ keyOutput.append(section.getSectionLead()).append("# ").append(PLUGIN.getVarManager().getSettingManager().fixCommentNewLines(section.getSectionLead(), getPreComment())).append("\n");
}
if (defaultValue instanceof Map) {
@@ -359,50 +354,54 @@ public String getFileString() {
if (getPostComment().equals(" ") || getPostComment().equals("\n"))
keyOutput.append(getPostComment()).append("\n");
else
- keyOutput.append(section.getSectionLead()).append("# ").append(PLUGIN.getSettingManager().fixCommentNewLines(section.getSectionLead(), getPostComment())).append("\n");
+ keyOutput.append(section.getSectionLead()).append("# ").append(PLUGIN.getVarManager().getSettingManager().fixCommentNewLines(section.getSectionLead(), getPostComment())).append("\n");
}
return keyOutput.toString();
}
public Map getAsMap() {
- return PLUGIN.getSettingManager().getConfig().getConfigurationSection(getPath()).getValues(true);
+ return PLUGIN.getVarManager().getSettingManager().getConfig().getConfigurationSection(getPath()).getValues(true);
}
public void setValue(Object obj) {
- PLUGIN.getSettingManager().getConfig().set(getPath(), obj);
+ PLUGIN.getVarManager().getSettingManager().getConfig().set(getPath(), obj);
}
public void setMappedValue(String subKey, Object obj) {
String newNode = getPath() + "." + subKey;
- PLUGIN.getSettingManager().getConfig().set(newNode, obj);
+ PLUGIN.getVarManager().getSettingManager().getConfig().set(newNode, obj);
}
public void clearSetting() {
- PLUGIN.getSettingManager().getConfig().set(getPath(), null);
+ setValue(null);
+ }
+
+ public void resetSetting() {
+ setValue(getDefaultValue());
}
public Object getSetting() {
- return PLUGIN.getSettingManager().getConfig().get(getPath());
+ return PLUGIN.getVarManager().getSettingManager().getConfig().get(getPath());
}
public String getString() {
- return PLUGIN.getSettingManager().getConfig().getString(getPath());
+ return PLUGIN.getVarManager().getSettingManager().getConfig().getString(getPath());
}
public List getStringList() {
- return PLUGIN.getSettingManager().getConfig().getStringList(getPath());
+ return PLUGIN.getVarManager().getSettingManager().getConfig().getStringList(getPath());
}
public int getInt() {
- return PLUGIN.getSettingManager().getConfig().getInt(getPath());
+ return PLUGIN.getVarManager().getSettingManager().getConfig().getInt(getPath());
}
public double getDouble() {
- return PLUGIN.getSettingManager().getConfig().getDouble(getPath());
+ return PLUGIN.getVarManager().getSettingManager().getConfig().getDouble(getPath());
}
public boolean getBoolean() {
- return PLUGIN.getSettingManager().getConfig().getBoolean(getPath());
+ return PLUGIN.getVarManager().getSettingManager().getConfig().getBoolean(getPath());
}
}
\ No newline at end of file
diff --git a/src/main/java/org/shanerx/tradeshop/data/storage/DataStorage.java b/src/main/java/org/shanerx/tradeshop/data/storage/DataStorage.java
index cb96f13c..50441db1 100644
--- a/src/main/java/org/shanerx/tradeshop/data/storage/DataStorage.java
+++ b/src/main/java/org/shanerx/tradeshop/data/storage/DataStorage.java
@@ -36,16 +36,15 @@
import org.bukkit.World;
import org.bukkit.inventory.ItemStack;
import org.shanerx.tradeshop.TradeShop;
-import org.shanerx.tradeshop.data.storage.Json.JsonLinkageConfiguration;
-import org.shanerx.tradeshop.data.storage.Json.JsonPlayerConfiguration;
-import org.shanerx.tradeshop.data.storage.Json.JsonShopConfiguration;
+import org.shanerx.tradeshop.data.storage.Json.JsonLinkageData;
+import org.shanerx.tradeshop.data.storage.Json.JsonPlayerData;
+import org.shanerx.tradeshop.data.storage.Json.JsonShopData;
import org.shanerx.tradeshop.item.ShopItemSide;
import org.shanerx.tradeshop.player.PlayerSetting;
import org.shanerx.tradeshop.shop.Shop;
import org.shanerx.tradeshop.shop.ShopStatus;
import org.shanerx.tradeshop.shoplocation.ShopChunk;
import org.shanerx.tradeshop.shoplocation.ShopLocation;
-import org.shanerx.tradeshop.utils.Utils;
import org.shanerx.tradeshop.utils.debug.DebugLevels;
import java.io.File;
@@ -53,7 +52,6 @@
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -63,10 +61,9 @@
import java.util.logging.Level;
import java.util.stream.Collectors;
-public class DataStorage extends Utils {
+public class DataStorage {
private transient DataType dataType;
- public final Map saving;
private final String BROKEN_JSON_START = "}(.*[\"\\w:])";
private final Cache linkCache = CacheBuilder.newBuilder()
@@ -83,7 +80,6 @@ public class DataStorage extends Utils {
.build();
public DataStorage(DataType dataType) {
- saving = new HashMap<>();
reload(dataType);
}
@@ -102,9 +98,9 @@ public boolean validate() {
//Check for err files
Bukkit.getServer().getWorlds().forEach((w) -> {
- File[] list = JsonShopConfiguration.getFilesInFolder(w.getName());
- if (list != null && list.length > 0) {
- errFiles.addAll(Arrays.stream(list).filter((f) -> FilenameUtils.getExtension(f.getName()).toLowerCase().contains("err")).collect(Collectors.toList()));
+ List list = JsonShopData.getFilesInFolder(w.getName());
+ if (!list.isEmpty()) {
+ errFiles.addAll(list.stream().filter((f) -> FilenameUtils.getExtension(f.getName()).toLowerCase().contains("err")).collect(Collectors.toList()));
}
});
@@ -112,9 +108,9 @@ public boolean validate() {
//Check for and correct malformed files
Bukkit.getServer().getWorlds().forEach((w) -> {
- File[] list = JsonShopConfiguration.getFilesInFolder(w.getName());
- if (list != null && list.length > 0) {
- Arrays.stream(list).forEach((f) -> {
+ List list = JsonShopData.getFilesInFolder(w.getName());
+ if (!list.isEmpty()) {
+ list.forEach((f) -> {
try {
String fileStr = FileUtils.readFileToString(f, StandardCharsets.UTF_8),
correctedString = fileStr.split(BROKEN_JSON_START)[0];
@@ -130,8 +126,6 @@ public boolean validate() {
}
});
- TradeShop.getPlugin().getDebugger().log("FLATFILE Malformed Files Found: " + correctedFiles.size(), DebugLevels.DATA_ERROR);
-
//Write corrected malformed files
if (correctedFiles.size() > 0) {
correctedFiles.forEach((k, v) -> {
@@ -151,11 +145,11 @@ public boolean validate() {
TradeShop.getPlugin().getDebugger().log("Removing empty player files... ", DebugLevels.DATA_VERIFICATION);
- File[] playerFiles = JsonPlayerConfiguration.getAllPlayers();
+ List playerFiles = JsonPlayerData.getAllPlayers();
if (playerFiles != null) {
List deletedResults = new ArrayList<>();
Map failedResults = new HashMap<>();
- Arrays.stream(playerFiles).forEach((file) -> {
+ playerFiles.forEach((file) -> {
if (file.isFile() && file.length() == 0) {
try {
file.delete();
@@ -166,8 +160,13 @@ public boolean validate() {
}
});
- TradeShop.getPlugin().getDebugger().log("Empty files deleted: " + deletedResults.size(), DebugLevels.DATA_VERIFICATION);
- TradeShop.getPlugin().getDebugger().log("# of empty player files that couldn't be deleted: " + failedResults.size() + (failedResults.size() > 0 ? ("\nFailed Deletion results: \n" + failedResults.entrySet().stream().map((entry) -> entry.getKey() + ": " + entry.getValue().getMessage()).collect(Collectors.joining("\n"))) : "\n"), DebugLevels.DATA_ERROR);
+ if (deletedResults.size() != 0)
+ TradeShop.getPlugin().getDebugger().log("Empty files deleted: " + deletedResults.size(), DebugLevels.DATA_VERIFICATION);
+ if (failedResults.size() != 0)
+ TradeShop.getPlugin().getDebugger().log("# of empty player files that couldn't be deleted: "
+ + failedResults.size()
+ + (failedResults.size() > 0 ? ("\nFailed Deletion results: \n" + failedResults.entrySet().stream().map((entry) -> entry.getKey() + ": " + entry.getValue().getMessage()).collect(Collectors.joining("\n"))) : "\n")
+ , DebugLevels.DATA_ERROR);
}
return errFiles.size() < 1;
@@ -176,50 +175,47 @@ public boolean validate() {
}
public Shop loadShopFromSign(ShopLocation sign) {
- Shop cached = shopCache.getIfPresent(sign.serialize());
- return cached != null ? cached : getShopConfiguration(sign.getChunk()).load(sign);
+ if (sign == null) return null;
+ Shop cached = shopCache.getIfPresent(sign.toString());
+ return cached != null ? cached : getShopData(sign.getChunk()).load(sign);
}
public Shop loadShopFromStorage(ShopLocation chest) {
- return loadShopFromSign(getLinkageConfiguration(chest.getWorld()).getLinkedShop(chest));
+ return loadShopFromSign(getLinkageData(chest.getWorld()).getLinkedShop(chest));
}
public void saveShop(Shop shop) {
- shopCache.put(shop.getShopLocationAsSL().serialize(), shop);
- getShopConfiguration(shop.getShopLocation().getChunk()).save(shop);
+ shopCache.put(shop.getShopLocationAsSL().toString(), shop);
+ getShopData(shop.getShopLocation().getChunk()).save(shop);
}
public void removeShop(Shop shop) {
- shopCache.invalidate(shop.getShopLocationAsSL().serialize());
- getShopConfiguration(shop.getShopLocation().getChunk()).remove(shop.getShopLocationAsSL());
- getLinkageConfiguration(shop.getShopLocationAsSL().getWorld()).removeShop(shop.getShopLocationAsSL());
+ shopCache.invalidate(shop.getShopLocationAsSL().toString());
+ getShopData(shop.getShopLocation().getChunk()).remove(shop.getShopLocationAsSL());
+ getLinkageData(shop.getShopLocationAsSL().getWorld()).removeShop(shop.getShopLocationAsSL());
}
public int getShopCountInChunk(Chunk chunk) {
- return getShopConfiguration(chunk).size();
+ return getShopData(chunk).size();
}
public List getMatchingShopsInChunk(ChunkSnapshot chunk, boolean inStock, List desiredCosts, List desiredProducts) {
List matchingShops = new ArrayList<>();
- ShopChunk shopChunk = new ShopChunk(chunk);
- if (chunkExists(shopChunk)) {
- ShopConfiguration config = getShopConfiguration(shopChunk);
+ ShopConfiguration config = getShopData(new ShopChunk(chunk));
- config.list().forEach((shopLoc) -> {
- Shop shop = config.loadASync(shopLoc);
+ config.list().forEach((shopLoc) -> {
+ Shop shop = config.loadASync(shopLoc);
- if ((desiredCosts != null && shop.isMissingSideItems(ShopItemSide.COST, desiredCosts)) ||
- (desiredProducts != null && shop.isMissingSideItems(ShopItemSide.PRODUCT, desiredProducts)))
- return; //Ignore any shops that don't have a matching product/cost
+ if ((desiredCosts != null && shop.isMissingSideItems(ShopItemSide.COST, desiredCosts)) ||
+ (desiredProducts != null && shop.isMissingSideItems(ShopItemSide.PRODUCT, desiredProducts)))
+ return; //Ignore any shops that don't have a matching product/cost
- if (!inStock || shop.getStatus().equals(ShopStatus.OPEN)) {
- matchingShops.add(shop);
- }
- });
+ if (!inStock || shop.getStatus().equals(ShopStatus.OPEN)) {
+ matchingShops.add(shop);
+ }
+ });
- TradeShop.getPlugin().getDebugger().log(" --- _G_M_ --- " + Arrays.toString(matchingShops.stream().map(shop -> shop.getShopLocationAsSL().serialize()).toArray(String[]::new)), DebugLevels.DATA_ERROR);
- }
return matchingShops;
}
@@ -233,8 +229,8 @@ public int getShopCountInWorld(World world) {
File folder = new File(TradeShop.getPlugin().getDataFolder().getAbsolutePath() + File.separator + "Data" + File.separator + worldName);
if (folder.exists() && folder.listFiles() != null) {
for (File file : folder.listFiles()) {
- if (file.getName().contains(worldName))
- count.addAndGet(new JsonShopConfiguration(ShopChunk.deserialize(file.getName().replace(".json", ""))).size());
+ if (file.getName().contains(worldName) && file.getName().endsWith(".json"))
+ count.addAndGet(new JsonShopData(ShopChunk.deserialize(file.getName().replace(".json", ""))).size());
}
}
break;
@@ -247,7 +243,7 @@ public int getShopCountInWorld(World world) {
}
public PlayerSetting loadPlayer(UUID uuid) {
- PlayerSetting playerSetting = playerCache.getIfPresent(uuid) != null ? playerCache.getIfPresent(uuid) : getPlayerConfiguration(uuid).load();
+ PlayerSetting playerSetting = playerCache.getIfPresent(uuid) != null ? playerCache.getIfPresent(uuid) : getPlayerData(uuid).load();
//If playerSetting data not find create new and return
return playerSetting != null ? playerSetting : new PlayerSetting(uuid);
@@ -255,57 +251,61 @@ public PlayerSetting loadPlayer(UUID uuid) {
public void savePlayer(PlayerSetting playerSetting) {
playerCache.put(playerSetting.getUuid(), playerSetting);
- getPlayerConfiguration(playerSetting.getUuid()).save(playerSetting);
+ getPlayerData(playerSetting.getUuid()).save(playerSetting);
}
public void removePlayer(PlayerSetting playerSetting) {
playerCache.invalidate(playerSetting.getUuid());
- getPlayerConfiguration(playerSetting.getUuid()).remove();
+ getPlayerData(playerSetting.getUuid()).remove();
}
public ShopLocation getChestLinkage(ShopLocation chestLocation) {
- return getLinkageConfiguration(chestLocation.getWorld()).getLinkedShop(chestLocation);
+ return getLinkageData(chestLocation.getWorld()).getLinkedShop(chestLocation);
}
public void addChestLinkage(ShopLocation chestLocation, ShopLocation shopLocation) {
if (Bukkit.isPrimaryThread() && getChestLinkage(chestLocation) == null)
- getLinkageConfiguration(chestLocation.getWorld()).add(chestLocation, shopLocation);
+ getLinkageData(chestLocation.getWorld()).add(chestLocation, shopLocation);
}
public void removeChestLinkage(ShopLocation chestLocation) {
- getLinkageConfiguration(chestLocation.getWorld()).removeChest(chestLocation);
+ getLinkageData(chestLocation.getWorld()).removeChest(chestLocation);
}
- protected PlayerConfiguration getPlayerConfiguration(UUID uuid) {
+ protected PlayerConfiguration getPlayerData(UUID uuid) {
if (dataType == DataType.FLATFILE) {
- return new JsonPlayerConfiguration(uuid);
+ return new JsonPlayerData(uuid);
}
throw new NotImplementedException("Data storage type " + dataType + " has not been implemented yet.");
}
- protected ShopConfiguration getShopConfiguration(Chunk chunk) {
- return getShopConfiguration(new ShopChunk(chunk));
+ protected ShopConfiguration getShopData(Chunk chunk) {
+ return getShopData(new ShopChunk(chunk));
}
- protected ShopConfiguration getShopConfiguration(ShopChunk chunk) {
+ private final Map chunkDataCache = new HashMap<>();
+ protected ShopConfiguration getShopData(ShopChunk chunk) {
if (dataType == DataType.FLATFILE) {
- return new JsonShopConfiguration(chunk);
+ String serializedChunk = chunk.serialize();
+ if (chunkDataCache.containsKey(serializedChunk))
+ return chunkDataCache.get(serializedChunk);
+ JsonShopData data = new JsonShopData(chunk);
+ chunkDataCache.put(serializedChunk, data);
+ return new JsonShopData(chunk);
}
+
throw new NotImplementedException("Data storage type " + dataType + " has not been implemented yet.");
}
- protected boolean chunkExists(ShopChunk chunk) {
- if (dataType == DataType.FLATFILE) {
- return JsonShopConfiguration.doesConfigExist(chunk);
- }
- throw new NotImplementedException("Data storage type " + dataType + " has not been implemented yet.");
+ public void dropShopData(ShopChunk chunk) {
+ chunkDataCache.remove(chunk.serialize());
}
- protected LinkageConfiguration getLinkageConfiguration(World w) {
+ protected LinkageConfiguration getLinkageData(World w) {
if (linkCache.getIfPresent(w) == null) {
if (dataType == DataType.FLATFILE) {
- linkCache.put(w, new JsonLinkageConfiguration(w));
+ linkCache.put(w, new JsonLinkageData(w));
}
}
@@ -315,5 +315,13 @@ protected LinkageConfiguration getLinkageConfiguration(World w) {
throw new NotImplementedException("Data storage type " + dataType + " has not been implemented yet.");
}
+
+ public void ensureFinalSave() {
+ // for onDisable !!!
+ if (dataType == DataType.FLATFILE) {
+ JsonShopData.SaveThreadMaster.getInstance().saveEverythingNow();
+ }
+ // SQLITE will have an analogous branch
+ }
}
diff --git a/src/main/java/org/shanerx/tradeshop/data/storage/Json/JsonConfiguration.java b/src/main/java/org/shanerx/tradeshop/data/storage/Json/JsonConfiguration.java
index 66f52955..f37342e8 100644
--- a/src/main/java/org/shanerx/tradeshop/data/storage/Json/JsonConfiguration.java
+++ b/src/main/java/org/shanerx/tradeshop/data/storage/Json/JsonConfiguration.java
@@ -25,28 +25,18 @@
package org.shanerx.tradeshop.data.storage.Json;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
-import com.google.gson.JsonSyntaxException;
+import de.leonhard.storage.Json;
+import de.leonhard.storage.util.FileUtils;
import org.shanerx.tradeshop.TradeShop;
-import org.shanerx.tradeshop.utils.Utils;
-import org.shanerx.tradeshop.utils.debug.DebugLevels;
-import org.shanerx.tradeshop.utils.gsonprocessing.GsonProcessor;
import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.util.logging.Level;
+import java.util.List;
-class JsonConfiguration extends Utils {
- protected final GsonProcessor gson;
- protected File file, pathFile;
- protected JsonObject jsonObj;
+class JsonConfiguration extends Json {
+ //protected static final Map fileCache = new HashMap<>();
protected final TradeShop PLUGIN = TradeShop.getPlugin();
+ protected final String fileKey;
/**
* Creates a JsonConfiguration object assisting with managing JSON data
@@ -55,88 +45,41 @@ class JsonConfiguration extends Utils {
* @param fileName name of the file to load without extension
*/
protected JsonConfiguration(String folderFromData, String fileName) {
- this.gson = new GsonProcessor();
- this.pathFile = getPath(folderFromData);
- this.file = getFile(folderFromData, fileName);
+ super(new File(getPath(folderFromData), fileName + ".json"));
+ fileKey = folderFromData + ":" + fileName;
- buildFilePath();
loadFile();
}
- public static File getFile(String folderFromData, String fileName) {
- return new File(getPath(folderFromData).getPath() + File.separator + fileName + ".json");
- }
+ public static JsonConfiguration getJsonConfiguration(String folderFromData, String fileName) {
+ String key = folderFromData + ":" + fileName;
- public static File getPath(String folderFromData) {
- return new File(TradeShop.getPlugin().getDataFolder().getAbsolutePath() + File.separator + "Data" + File.separator + folderFromData);
- }
+ /*if (fileCache.containsKey(key)) {
+ return fileCache.get(key);
+ }*/
- private void buildFilePath() {
- try {
- pathFile.mkdirs();
- file.createNewFile();
- } catch (IOException e) {
- PLUGIN.getLogger().log(Level.SEVERE, "Could not create " + file.getName() + " file! Data may be lost!", e);
- }
+ return new JsonConfiguration(folderFromData, fileName);
}
- public static void jsonSyntaxError(File file, Exception e) {
- String errStr = "";
-
- try {
- errStr = new String(Files.readAllBytes(file.toPath()));
- } catch (IOException ex) {
- TradeShop.getPlugin().getLogger().log(Level.SEVERE, "Could not read " + file.getName() + " file! ERR", e);
- }
-
- File err = new File(file.getPath() + File.separator + file.getName().replace(".json", ".err"));
-
- try {
- FileWriter fileWriter = new FileWriter(err);
- fileWriter.write(e.toString());
- fileWriter.append("\n\n--------------------------------------------------------------------------------------\n\n");
- fileWriter.append(errStr);
- fileWriter.flush();
- fileWriter.close();
- } catch (IOException ex) {
- TradeShop.getPlugin().getLogger().log(Level.SEVERE, "Could not save " + file.getName() + " file! Writing err to console.", e);
- TradeShop.getPlugin().getLogger().log(Level.SEVERE, e + "\n\n--------------------------------------------------------------------------------------\n\n" + errStr, e);
- }
+ public static String getPath(String folderFromData) {
+ return TradeShop.getPlugin().getDataFolder().getAbsolutePath() + File.separator + "Data" + File.separator + folderFromData;
}
- public static File[] getFilesInFolder(String folderFromData) {
- File dir = getPath(folderFromData);
- TradeShop.getPlugin().getVarManager().getDebugger().log("reading file list from " + dir.getAbsolutePath(), DebugLevels.DATA_VERIFICATION);
- return dir.listFiles();
+ public static List getFilesInFolder(String folderFromData) {
+ return FileUtils.listFiles(new File(getPath(folderFromData)), "json");
}
protected void loadFile() {
- try {
- jsonObj = JsonParser.parseReader(new FileReader(file)).getAsJsonObject();
-
- } catch (FileNotFoundException e) {
- PLUGIN.getLogger().log(Level.SEVERE, "Could not load " + file.getName() + " file! Data may be lost!", e);
- } catch (IllegalStateException e) {
- jsonObj = new JsonObject();
- } catch (JsonSyntaxException e) {
- PLUGIN.getLogger().log(Level.SEVERE, "Could not load " + file.getName() + " file due to malformed Json! \n Please send the .err file with the same name to the TradeShop Devs. \n\nTradeShop will now disable, please remove/fix any err files before restarting the plugin.", e);
-
- jsonSyntaxError(file, e);
- }
+ forceReload();
+ //fileCache.put(fileKey, this);
}
protected void saveFile() {
- final String str = gson.toJson(jsonObj);
- if (!str.isEmpty()) {
- try {
- FileWriter fileWriter = new FileWriter(this.file);
- fileWriter.write(str);
- fileWriter.flush();
- fileWriter.close();
- } catch (IOException e) {
- PLUGIN.getLogger().log(Level.SEVERE, "Could not save " + this.file.getName() + " file! Data may be lost!", e);
- }
+ if (!file.exists()) create();
+ try {
+ write();
+ } catch (Exception e) {
+ e.printStackTrace();
}
-
}
}
diff --git a/src/main/java/org/shanerx/tradeshop/data/storage/Json/JsonLinkageConfiguration.java b/src/main/java/org/shanerx/tradeshop/data/storage/Json/JsonLinkageData.java
similarity index 71%
rename from src/main/java/org/shanerx/tradeshop/data/storage/Json/JsonLinkageConfiguration.java
rename to src/main/java/org/shanerx/tradeshop/data/storage/Json/JsonLinkageData.java
index c7678d73..da16a74e 100644
--- a/src/main/java/org/shanerx/tradeshop/data/storage/Json/JsonLinkageConfiguration.java
+++ b/src/main/java/org/shanerx/tradeshop/data/storage/Json/JsonLinkageData.java
@@ -25,40 +25,35 @@
package org.shanerx.tradeshop.data.storage.Json;
-import com.google.gson.reflect.TypeToken;
import org.bukkit.World;
import org.shanerx.tradeshop.data.storage.LinkageConfiguration;
-import java.util.HashMap;
import java.util.Map;
-public class JsonLinkageConfiguration extends JsonConfiguration implements LinkageConfiguration {
+public class JsonLinkageData extends JsonConfiguration implements LinkageConfiguration {
- Map linkageData;
+ Map linkageData;
- public JsonLinkageConfiguration(World world) {
+ public JsonLinkageData(World world) {
super(world.getName(), "chest_linkage");
load();
}
@Override
public void load() {
- linkageData = gson.fromJson(jsonObj.get("linkage_data"), new TypeToken