From 5b0fac358a848c616f92b58cef154dc6edd0c934 Mon Sep 17 00:00:00 2001 From: Alex 'mcmonkey' Goodwin Date: Tue, 14 Sep 2021 18:47:13 -0700 Subject: [PATCH] fix TradeTag#duplicate and usages of it --- .../paper/events/PlayerTradesWithMerchantScriptEvent.java | 2 +- .../events/entity/VillagerAcquiresTradeScriptEvent.java | 2 +- .../events/entity/VillagerReplenishesTradeScriptEvent.java | 2 +- .../java/com/denizenscript/denizen/objects/PlayerTag.java | 2 +- .../main/java/com/denizenscript/denizen/objects/TradeTag.java | 4 +++- .../denizen/objects/properties/entity/EntityTrades.java | 2 +- .../denizen/objects/properties/inventory/InventoryTrades.java | 2 +- 7 files changed, 9 insertions(+), 7 deletions(-) diff --git a/paper/src/main/java/com/denizenscript/denizen/paper/events/PlayerTradesWithMerchantScriptEvent.java b/paper/src/main/java/com/denizenscript/denizen/paper/events/PlayerTradesWithMerchantScriptEvent.java index f1d48f1c77..17ca19beb5 100644 --- a/paper/src/main/java/com/denizenscript/denizen/paper/events/PlayerTradesWithMerchantScriptEvent.java +++ b/paper/src/main/java/com/denizenscript/denizen/paper/events/PlayerTradesWithMerchantScriptEvent.java @@ -81,7 +81,7 @@ public ObjectTag getContext(String name) { return new EntityTag(event.getVillager()); } else if (name.equals("trade")) { - return new TradeTag(event.getTrade()); + return new TradeTag(event.getTrade()).duplicate(); } return super.getContext(name); } diff --git a/plugin/src/main/java/com/denizenscript/denizen/events/entity/VillagerAcquiresTradeScriptEvent.java b/plugin/src/main/java/com/denizenscript/denizen/events/entity/VillagerAcquiresTradeScriptEvent.java index 58ca5507f0..2466b4cf67 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/events/entity/VillagerAcquiresTradeScriptEvent.java +++ b/plugin/src/main/java/com/denizenscript/denizen/events/entity/VillagerAcquiresTradeScriptEvent.java @@ -74,7 +74,7 @@ public ObjectTag getContext(String name) { return entity; } else if (name.equals("trade")) { - return new TradeTag(event.getRecipe()); + return new TradeTag(event.getRecipe()).duplicate(); } return super.getContext(name); } diff --git a/plugin/src/main/java/com/denizenscript/denizen/events/entity/VillagerReplenishesTradeScriptEvent.java b/plugin/src/main/java/com/denizenscript/denizen/events/entity/VillagerReplenishesTradeScriptEvent.java index 362c0c2a26..54283ce743 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/events/entity/VillagerReplenishesTradeScriptEvent.java +++ b/plugin/src/main/java/com/denizenscript/denizen/events/entity/VillagerReplenishesTradeScriptEvent.java @@ -81,7 +81,7 @@ public ObjectTag getContext(String name) { case "entity": return entity; case "trade": - return new TradeTag(event.getRecipe()); + return new TradeTag(event.getRecipe()).duplicate(); case "bonus": return new ElementTag(event.getBonus()); } diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/PlayerTag.java b/plugin/src/main/java/com/denizenscript/denizen/objects/PlayerTag.java index 6465de687d..8e27fcf7e4 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/PlayerTag.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/PlayerTag.java @@ -1500,7 +1500,7 @@ else if (obj instanceof EntityTag) { registerOnlineOnlyTag("selected_trade", (attribute, object) -> { Inventory playerInventory = object.getPlayerEntity().getOpenInventory().getTopInventory(); if (playerInventory instanceof MerchantInventory && ((MerchantInventory) playerInventory).getSelectedRecipe() != null) { - return new TradeTag(((MerchantInventory) playerInventory).getSelectedRecipe()); + return new TradeTag(((MerchantInventory) playerInventory).getSelectedRecipe()).duplicate(); } return null; }); diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/TradeTag.java b/plugin/src/main/java/com/denizenscript/denizen/objects/TradeTag.java index 4aa1d45430..ed0fae514e 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/TradeTag.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/TradeTag.java @@ -73,7 +73,9 @@ public TradeTag(MerchantRecipe recipe) { @Override public TradeTag duplicate() { - return new TradeTag(new MerchantRecipe(recipe.getResult(), recipe.getUses(), recipe.getMaxUses(), recipe.hasExperienceReward(), recipe.getVillagerExperience(), recipe.getPriceMultiplier())); + MerchantRecipe result = new MerchantRecipe(recipe.getResult(), recipe.getUses(), recipe.getMaxUses(), recipe.hasExperienceReward(), recipe.getVillagerExperience(), recipe.getPriceMultiplier()); + result.setIngredients(recipe.getIngredients()); + return new TradeTag(result); } @Override diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityTrades.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityTrades.java index 492eee8704..27ef9e91df 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityTrades.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityTrades.java @@ -37,7 +37,7 @@ public static EntityTrades getFrom(ObjectTag entity) { public ListTag getTradeRecipes() { ArrayList recipes = new ArrayList<>(); for (MerchantRecipe recipe : ((Merchant) entity.getBukkitEntity()).getRecipes()) { - recipes.add(new TradeTag(recipe)); + recipes.add(new TradeTag(recipe).duplicate()); } return new ListTag(recipes); } diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/inventory/InventoryTrades.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/inventory/InventoryTrades.java index e94bdfd740..e08e871533 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/inventory/InventoryTrades.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/inventory/InventoryTrades.java @@ -37,7 +37,7 @@ public InventoryTrades(InventoryTag inventory) { public ListTag getTradeRecipes() { ArrayList recipes = new ArrayList<>(); for (MerchantRecipe recipe : ((MerchantInventory) inventory.getInventory()).getMerchant().getRecipes()) { - recipes.add(new TradeTag(recipe)); + recipes.add(new TradeTag(recipe).duplicate()); } return new ListTag(recipes); }