From 72afd9de0064339ece5a240b21dafbce5606edaa Mon Sep 17 00:00:00 2001 From: XAP3Y Date: Thu, 5 Sep 2024 17:14:28 +0200 Subject: [PATCH] 1.21.1 --- .gitea/workflows/build.yml | 4 +- dependency-reduced-pom.xml | 14 ++++- pom.xml | 10 +++- .../VillagerTradeLimiter.java | 8 ++- .../settings/LoggerFilter.java | 57 +++++++++++++++++++ .../settings/Settings.java | 6 +- .../wrappers/IngredientWrapper.java | 4 +- .../wrappers/RecipeWrapper.java | 26 +++++---- .../wrappers/VillagerWrapper.java | 1 + 9 files changed, 111 insertions(+), 19 deletions(-) create mode 100644 src/com/pretzel/dev/villagertradelimiter/settings/LoggerFilter.java 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;