diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml
index b71c0f1..9ce660f 100644
--- a/.gitea/workflows/build.yml
+++ b/.gitea/workflows/build.yml
@@ -10,7 +10,7 @@ jobs:
apt update; apt-get install software-properties-common -y
wget -O- https://apt.corretto.aws/corretto.key | apt-key add -
add-apt-repository 'deb https://apt.corretto.aws stable main'
- apt-get update; apt-get install -y maven java-21-amazon-corretto-jdk
+ apt-get update; apt-get install -y maven java-21-amazon-corretto-jdk
- name: Setup git
run: |
git config --global user.name "Radim LipovĨan"
@@ -18,7 +18,7 @@ jobs:
- name: Check out repository code
uses: actions/checkout@v4
- name: Build | mvn build
- run: mvn clean package install && ls -lah && ls */ -lah
+ run: mvn clean install && ls -lah && ls */ -lah
- name: Build | publish jar
run: |
curl --insecure --user username:mypass -T target/*.jar ftp://192.168.10.133:/
\ No newline at end of file
diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml
index 10a2ab8..e34bb97 100644
--- a/dependency-reduced-pom.xml
+++ b/dependency-reduced-pom.xml
@@ -52,7 +52,7 @@
org.spigotmc
spigot-api
- 1.20-R0.1-SNAPSHOT
+ 1.20.6-R0.1-SNAPSHOT
provided
@@ -89,6 +89,18 @@
3.40.1.0
provided
+
+ org.apache.logging.log4j
+ log4j-core
+ 2.17.2
+ provided
+
+
+ log4j-api
+ org.apache.logging.log4j
+
+
+
1.8
diff --git a/pom.xml b/pom.xml
index c974dba..d757dbe 100644
--- a/pom.xml
+++ b/pom.xml
@@ -62,13 +62,13 @@
org.spigotmc
spigot-api
- 1.20-R0.1-SNAPSHOT
+ 1.20.6-R0.1-SNAPSHOT
provided
de.tr7zw
item-nbt-api
- 2.11.3
+ 2.13.2
de.tr7zw
@@ -88,5 +88,11 @@
3.40.1.0
provided
+
+ org.apache.logging.log4j
+ log4j-core
+ 2.17.2
+ provided
+
\ No newline at end of file
diff --git a/src/com/pretzel/dev/villagertradelimiter/VillagerTradeLimiter.java b/src/com/pretzel/dev/villagertradelimiter/VillagerTradeLimiter.java
index bbf98c2..a8ffe0a 100644
--- a/src/com/pretzel/dev/villagertradelimiter/VillagerTradeLimiter.java
+++ b/src/com/pretzel/dev/villagertradelimiter/VillagerTradeLimiter.java
@@ -11,8 +11,8 @@ import com.pretzel.dev.villagertradelimiter.lib.Metrics;
import com.pretzel.dev.villagertradelimiter.lib.Util;
import com.pretzel.dev.villagertradelimiter.listeners.PlayerListener;
import com.pretzel.dev.villagertradelimiter.settings.Lang;
+import com.pretzel.dev.villagertradelimiter.settings.LoggerFilter;
import com.pretzel.dev.villagertradelimiter.settings.Settings;
-import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
@@ -22,6 +22,8 @@ import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.io.IOException;
import java.util.*;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.Logger;
public class VillagerTradeLimiter extends JavaPlugin {
public static final String PLUGIN_NAME = "VillagerTradeLimiter";
@@ -55,6 +57,10 @@ public class VillagerTradeLimiter extends JavaPlugin {
//Send enabled message
Util.consoleMsg(PREFIX+PLUGIN_NAME+" is running!");
+
+ org.apache.logging.log4j.Logger rootLogger = LogManager.getRootLogger();
+ Logger logger = (Logger) rootLogger;
+ logger.addFilter(new LoggerFilter());
}
/** Save database on plugin stop, server stop */
diff --git a/src/com/pretzel/dev/villagertradelimiter/settings/LoggerFilter.java b/src/com/pretzel/dev/villagertradelimiter/settings/LoggerFilter.java
new file mode 100644
index 0000000..8bc892a
--- /dev/null
+++ b/src/com/pretzel/dev/villagertradelimiter/settings/LoggerFilter.java
@@ -0,0 +1,57 @@
+package com.pretzel.dev.villagertradelimiter.settings;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.Marker;
+import org.apache.logging.log4j.core.Filter;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.Logger;
+import org.apache.logging.log4j.core.filter.AbstractFilter;
+import org.apache.logging.log4j.message.Message;
+
+public class LoggerFilter extends AbstractFilter {
+
+ private static final boolean USE_RAW_STRING = false;
+
+ public LoggerFilter() {
+ super(Filter.Result.DENY, Filter.Result.NEUTRAL);
+ }
+
+ /**
+ * Here is where we decide if we want to filter out the message or not. Returning {@link Filter.Result#DENY}
+ * (our {@link AbstractFilter#onMatch onMatch}) will filter out the message, and {@link Filter.Result#NEUTRAL}
+ * (our {@link AbstractFilter#onMismatch onMismatch}) will leave it alone.
+ */
+ private Result doFilter(String message) {
+ if (message == null || !message.contains("Failed to load offers")) {
+ return onMismatch;
+ }
+ return onMatch;
+ }
+
+ @Override
+ public Result filter(LogEvent event) {
+ Message msg = event == null ? null : event.getMessage();
+ String message = msg == null ? null : (USE_RAW_STRING
+ ? msg.getFormat()
+ : msg.getFormattedMessage());
+ return doFilter(message);
+ }
+
+ @Override
+ public Result filter(Logger logger, Level level, Marker marker, Object msg, Throwable t) {
+ return doFilter(msg == null ? null : msg.toString());
+ }
+
+ @Override
+ public Result filter(Logger logger, Level level, Marker marker, String msg, Object... params) {
+ return doFilter(msg);
+ }
+
+ @Override
+ public Result filter(Logger logger, Level level, Marker marker, Message msg, Throwable t) {
+ String message = msg == null ? null : (USE_RAW_STRING
+ ? msg.getFormat()
+ : msg.getFormattedMessage());
+ return doFilter(message);
+ }
+}
diff --git a/src/com/pretzel/dev/villagertradelimiter/settings/Settings.java b/src/com/pretzel/dev/villagertradelimiter/settings/Settings.java
index 1dd5601..58bfd1c 100644
--- a/src/com/pretzel/dev/villagertradelimiter/settings/Settings.java
+++ b/src/com/pretzel/dev/villagertradelimiter/settings/Settings.java
@@ -75,7 +75,11 @@ public class Settings {
* @param ingredient2 The itemstack for the recipe's second ingredient
* @return The matched type of the item, if any
*/
- public String getType(final ItemStack result, final ItemStack ingredient1, final ItemStack ingredient2) {
+ public String getType(final ItemStack result, final ItemStack ingredient1, ItemStack ingredient2) {
+
+ if (ingredient2 == null) {
+ ingredient2 = new ItemStack(Material.AIR, 1);
+ }
final String resultType = result.getType().name().toLowerCase();
final String ingredient1Type = ingredient1.getType().name().toLowerCase();
final String ingredient2Type = ingredient2.getType().name().toLowerCase();
diff --git a/src/com/pretzel/dev/villagertradelimiter/wrappers/IngredientWrapper.java b/src/com/pretzel/dev/villagertradelimiter/wrappers/IngredientWrapper.java
index 5b72778..e7de12b 100644
--- a/src/com/pretzel/dev/villagertradelimiter/wrappers/IngredientWrapper.java
+++ b/src/com/pretzel/dev/villagertradelimiter/wrappers/IngredientWrapper.java
@@ -30,6 +30,8 @@ public class IngredientWrapper {
/** Resets the material ID and the amount of this ingredient to default values */
public void reset() {
- setItemStack(itemStack);
+ try {
+ setItemStack(itemStack);
+ } catch (Exception ignored) {}
}
}
diff --git a/src/com/pretzel/dev/villagertradelimiter/wrappers/RecipeWrapper.java b/src/com/pretzel/dev/villagertradelimiter/wrappers/RecipeWrapper.java
index b89d569..4825fb9 100644
--- a/src/com/pretzel/dev/villagertradelimiter/wrappers/RecipeWrapper.java
+++ b/src/com/pretzel/dev/villagertradelimiter/wrappers/RecipeWrapper.java
@@ -1,6 +1,7 @@
package com.pretzel.dev.villagertradelimiter.wrappers;
import de.tr7zw.changeme.nbtapi.NBTCompound;
+import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
@@ -8,7 +9,7 @@ import java.util.Arrays;
public class RecipeWrapper {
//A list of all the items with a default MaxUses of 12 and 3, respectively
- private static final Material[] MAX_USES_12 = new Material[]{Material.IRON_HELMET, Material.IRON_CHESTPLATE, Material.IRON_LEGGINGS, Material.IRON_BOOTS, Material.IRON_INGOT, Material.BELL, Material.CHAINMAIL_HELMET, Material.CHAINMAIL_CHESTPLATE, Material.CHAINMAIL_LEGGINGS, Material.CHAINMAIL_BOOTS, Material.LAVA_BUCKET, Material.DIAMOND, Material.SHIELD, Material.RABBIT_STEW, Material.DRIED_KELP_BLOCK, Material.SWEET_BERRIES, Material.MAP, Material.FILLED_MAP, Material.COMPASS, Material.ITEM_FRAME, Material.GLOBE_BANNER_PATTERN, Material.WHITE_BANNER, Material.LIGHT_GRAY_BANNER, Material.GRAY_BANNER, Material.BLACK_BANNER, Material.BROWN_BANNER, Material.ORANGE_BANNER, Material.YELLOW_BANNER, Material.LIME_BANNER, Material.GREEN_BANNER, Material.CYAN_BANNER, Material.BLUE_BANNER, Material.LIGHT_BLUE_BANNER, Material.PURPLE_BANNER, Material.MAGENTA_BANNER, Material.PINK_BANNER, Material.RED_BANNER, Material.WHITE_BED, Material.LIGHT_GRAY_BED, Material.GRAY_BED, Material.BLACK_BED, Material.BROWN_BED, Material.ORANGE_BED, Material.YELLOW_BED, Material.LIME_BED, Material.GREEN_BED, Material.CYAN_BED, Material.BLUE_BED, Material.LIGHT_BLUE_BED, Material.PURPLE_BED, Material.MAGENTA_BED, Material.PINK_BED, Material.RED_BED, Material.REDSTONE, Material.GOLD_INGOT, Material.LAPIS_LAZULI, Material.RABBIT_FOOT, Material.GLOWSTONE, Material.SCUTE, Material.GLASS_BOTTLE, Material.ENDER_PEARL, Material.NETHER_WART, Material.EXPERIENCE_BOTTLE, Material.PUMPKIN, Material.PUMPKIN_PIE, Material.MELON, Material.COOKIE, Material.CAKE, Material.SUSPICIOUS_STEW, Material.GOLDEN_CARROT, Material.GLISTERING_MELON_SLICE, Material.CAMPFIRE, Material.TROPICAL_FISH, Material.PUFFERFISH, Material.BIRCH_BOAT, Material.ACACIA_BOAT, Material.OAK_BOAT, Material.DARK_OAK_BOAT, Material.SPRUCE_BOAT, Material.JUNGLE_BOAT, Material.ARROW, Material.FLINT, Material.STRING, Material.TRIPWIRE_HOOK, Material.TIPPED_ARROW, Material.LEATHER_HELMET, Material.LEATHER_CHESTPLATE, Material.LEATHER_LEGGINGS, Material.LEATHER_BOOTS, Material.LEATHER, Material.RABBIT_HIDE, Material.LEATHER_HORSE_ARMOR, Material.SADDLE, Material.BOOK, Material.ENCHANTED_BOOK, Material.BOOKSHELF, Material.INK_SAC, Material.GLASS, Material.WRITABLE_BOOK, Material.CLOCK, Material.NAME_TAG, Material.QUARTZ, Material.QUARTZ_PILLAR, Material.QUARTZ_BLOCK, Material.TERRACOTTA, Material.WHITE_TERRACOTTA, Material.LIGHT_GRAY_TERRACOTTA, Material.GRAY_TERRACOTTA, Material.BLACK_TERRACOTTA, Material.BROWN_TERRACOTTA, Material.ORANGE_TERRACOTTA, Material.YELLOW_TERRACOTTA, Material.LIME_TERRACOTTA, Material.GREEN_TERRACOTTA, Material.CYAN_TERRACOTTA, Material.BLUE_TERRACOTTA, Material.LIGHT_BLUE_TERRACOTTA, Material.PURPLE_TERRACOTTA, Material.MAGENTA_TERRACOTTA, Material.PINK_TERRACOTTA, Material.RED_TERRACOTTA, Material.WHITE_GLAZED_TERRACOTTA, Material.LIGHT_GRAY_GLAZED_TERRACOTTA, Material.GRAY_GLAZED_TERRACOTTA, Material.BLACK_GLAZED_TERRACOTTA, Material.BROWN_GLAZED_TERRACOTTA, Material.ORANGE_GLAZED_TERRACOTTA, Material.YELLOW_GLAZED_TERRACOTTA, Material.LIME_GLAZED_TERRACOTTA, Material.GREEN_GLAZED_TERRACOTTA, Material.CYAN_GLAZED_TERRACOTTA, Material.BLUE_GLAZED_TERRACOTTA, Material.LIGHT_BLUE_GLAZED_TERRACOTTA, Material.PURPLE_GLAZED_TERRACOTTA, Material.MAGENTA_GLAZED_TERRACOTTA, Material.PINK_GLAZED_TERRACOTTA, Material.RED_GLAZED_TERRACOTTA, Material.SHEARS, Material.PAINTING, Material.STONE_AXE, Material.STONE_SHOVEL, Material.STONE_PICKAXE, Material.STONE_HOE};
+ private static final Material[] MAX_USES_12 = new Material[]{Material.IRON_HELMET, Material.IRON_CHESTPLATE, Material.IRON_LEGGINGS, Material.IRON_BOOTS, Material.IRON_INGOT, Material.BELL, Material.CHAINMAIL_HELMET, Material.CHAINMAIL_CHESTPLATE, Material.CHAINMAIL_LEGGINGS, Material.CHAINMAIL_BOOTS, Material.LAVA_BUCKET, Material.DIAMOND, Material.SHIELD, Material.RABBIT_STEW, Material.DRIED_KELP_BLOCK, Material.SWEET_BERRIES, Material.MAP, Material.FILLED_MAP, Material.COMPASS, Material.ITEM_FRAME, Material.GLOBE_BANNER_PATTERN, Material.WHITE_BANNER, Material.LIGHT_GRAY_BANNER, Material.GRAY_BANNER, Material.BLACK_BANNER, Material.BROWN_BANNER, Material.ORANGE_BANNER, Material.YELLOW_BANNER, Material.LIME_BANNER, Material.GREEN_BANNER, Material.CYAN_BANNER, Material.BLUE_BANNER, Material.LIGHT_BLUE_BANNER, Material.PURPLE_BANNER, Material.MAGENTA_BANNER, Material.PINK_BANNER, Material.RED_BANNER, Material.WHITE_BED, Material.LIGHT_GRAY_BED, Material.GRAY_BED, Material.BLACK_BED, Material.BROWN_BED, Material.ORANGE_BED, Material.YELLOW_BED, Material.LIME_BED, Material.GREEN_BED, Material.CYAN_BED, Material.BLUE_BED, Material.LIGHT_BLUE_BED, Material.PURPLE_BED, Material.MAGENTA_BED, Material.PINK_BED, Material.RED_BED, Material.REDSTONE, Material.GOLD_INGOT, Material.LAPIS_LAZULI, Material.RABBIT_FOOT, Material.GLOWSTONE, Material.TURTLE_SCUTE, Material.GLASS_BOTTLE, Material.ENDER_PEARL, Material.NETHER_WART, Material.EXPERIENCE_BOTTLE, Material.PUMPKIN, Material.PUMPKIN_PIE, Material.MELON, Material.COOKIE, Material.CAKE, Material.SUSPICIOUS_STEW, Material.GOLDEN_CARROT, Material.GLISTERING_MELON_SLICE, Material.CAMPFIRE, Material.TROPICAL_FISH, Material.PUFFERFISH, Material.BIRCH_BOAT, Material.ACACIA_BOAT, Material.OAK_BOAT, Material.DARK_OAK_BOAT, Material.SPRUCE_BOAT, Material.JUNGLE_BOAT, Material.ARROW, Material.FLINT, Material.STRING, Material.TRIPWIRE_HOOK, Material.TIPPED_ARROW, Material.LEATHER_HELMET, Material.LEATHER_CHESTPLATE, Material.LEATHER_LEGGINGS, Material.LEATHER_BOOTS, Material.LEATHER, Material.RABBIT_HIDE, Material.LEATHER_HORSE_ARMOR, Material.SADDLE, Material.BOOK, Material.ENCHANTED_BOOK, Material.BOOKSHELF, Material.INK_SAC, Material.GLASS, Material.WRITABLE_BOOK, Material.CLOCK, Material.NAME_TAG, Material.QUARTZ, Material.QUARTZ_PILLAR, Material.QUARTZ_BLOCK, Material.TERRACOTTA, Material.WHITE_TERRACOTTA, Material.LIGHT_GRAY_TERRACOTTA, Material.GRAY_TERRACOTTA, Material.BLACK_TERRACOTTA, Material.BROWN_TERRACOTTA, Material.ORANGE_TERRACOTTA, Material.YELLOW_TERRACOTTA, Material.LIME_TERRACOTTA, Material.GREEN_TERRACOTTA, Material.CYAN_TERRACOTTA, Material.BLUE_TERRACOTTA, Material.LIGHT_BLUE_TERRACOTTA, Material.PURPLE_TERRACOTTA, Material.MAGENTA_TERRACOTTA, Material.PINK_TERRACOTTA, Material.RED_TERRACOTTA, Material.WHITE_GLAZED_TERRACOTTA, Material.LIGHT_GRAY_GLAZED_TERRACOTTA, Material.GRAY_GLAZED_TERRACOTTA, Material.BLACK_GLAZED_TERRACOTTA, Material.BROWN_GLAZED_TERRACOTTA, Material.ORANGE_GLAZED_TERRACOTTA, Material.YELLOW_GLAZED_TERRACOTTA, Material.LIME_GLAZED_TERRACOTTA, Material.GREEN_GLAZED_TERRACOTTA, Material.CYAN_GLAZED_TERRACOTTA, Material.BLUE_GLAZED_TERRACOTTA, Material.LIGHT_BLUE_GLAZED_TERRACOTTA, Material.PURPLE_GLAZED_TERRACOTTA, Material.MAGENTA_GLAZED_TERRACOTTA, Material.PINK_GLAZED_TERRACOTTA, Material.RED_GLAZED_TERRACOTTA, Material.SHEARS, Material.PAINTING, Material.STONE_AXE, Material.STONE_SHOVEL, Material.STONE_PICKAXE, Material.STONE_HOE};
private static final Material[] MAX_USES_3 = new Material[]{Material.DIAMOND_HELMET, Material.DIAMOND_CHESTPLATE, Material.DIAMOND_LEGGINGS, Material.DIAMOND_BOOTS, Material.DIAMOND_SWORD, Material.DIAMOND_AXE, Material.DIAMOND_SHOVEL, Material.DIAMOND_PICKAXE, Material.DIAMOND_HOE, Material.IRON_SWORD, Material.IRON_AXE, Material.IRON_SHOVEL, Material.IRON_PICKAXE, Material.FISHING_ROD, Material.BOW, Material.CROSSBOW};
private final NBTCompound recipe;
@@ -38,19 +39,22 @@ public class RecipeWrapper {
/** Resets the recipe back to its default state */
public void reset() {
this.setSpecialPrice(this.specialPrice);
- this.ingredient1.reset();
- this.ingredient2.reset();
+ if (ingredient1.getItemStack() != null) this.ingredient1.reset();
+ if (ingredient2.getItemStack() != null) this.ingredient2.reset();
+
this.result.reset();
int maxUses = 16;
- Material buyMaterial = recipe.getItemStack("buy").getType();
- Material sellMaterial = recipe.getItemStack("sell").getType();
- if(Arrays.asList(MAX_USES_12).contains(buyMaterial) || Arrays.asList(MAX_USES_12).contains(sellMaterial)) {
- maxUses = 12;
- } else if(Arrays.asList(MAX_USES_3).contains(buyMaterial) || Arrays.asList(MAX_USES_3).contains(sellMaterial)) {
- maxUses = 3;
- }
- setMaxUses(maxUses);
+ try {
+ Material buyMaterial = recipe.getItemStack("buy").getType();
+ Material sellMaterial = recipe.getItemStack("sell").getType();
+ if(Arrays.asList(MAX_USES_12).contains(buyMaterial) || Arrays.asList(MAX_USES_12).contains(sellMaterial)) {
+ maxUses = 12;
+ } else if(Arrays.asList(MAX_USES_3).contains(buyMaterial) || Arrays.asList(MAX_USES_3).contains(sellMaterial)) {
+ maxUses = 3;
+ }
+ setMaxUses(maxUses);
+ } catch (Exception ignored) {}
}
/** @return The wrapper for the first ingredient */
diff --git a/src/com/pretzel/dev/villagertradelimiter/wrappers/VillagerWrapper.java b/src/com/pretzel/dev/villagertradelimiter/wrappers/VillagerWrapper.java
index aac5d73..59b9806 100644
--- a/src/com/pretzel/dev/villagertradelimiter/wrappers/VillagerWrapper.java
+++ b/src/com/pretzel/dev/villagertradelimiter/wrappers/VillagerWrapper.java
@@ -4,6 +4,7 @@ import de.tr7zw.changeme.nbtapi.NBTCompound;
import de.tr7zw.changeme.nbtapi.NBTCompoundList;
import de.tr7zw.changeme.nbtapi.NBTEntity;
import de.tr7zw.changeme.nbtapi.iface.ReadWriteNBT;
+import org.bukkit.Bukkit;
import org.bukkit.entity.Villager;
import org.bukkit.inventory.ItemStack;
import org.checkerframework.checker.nullness.qual.NonNull;