From d840e669d72d7eb4b9dedfdc5d93abf874e93453 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Thu, 18 Dec 2025 20:32:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9D=91=E6=B0=91=E4=BA=A4=E6=98=93=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E8=A7=A3=E6=9E=90=E7=8E=A9=E5=AE=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../function/MerchantTradeFunction.java | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/MerchantTradeFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/MerchantTradeFunction.java index 43ac9d0a6..48de8a308 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/MerchantTradeFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/MerchantTradeFunction.java @@ -25,9 +25,9 @@ import java.util.Optional; public class MerchantTradeFunction extends AbstractConditionalFunction { private final String title; private final PlayerSelector selector; - private final LazyReference>> offers; + private final java.util.function.Function>> offers; - public MerchantTradeFunction(List> predicates, @Nullable PlayerSelector selector, String title, LazyReference>> offers) { + public MerchantTradeFunction(List> predicates, @Nullable PlayerSelector selector, String title, java.util.function.Function>> offers) { super(predicates); this.title = title; this.selector = selector; @@ -38,12 +38,12 @@ public class MerchantTradeFunction extends AbstractConditio public void runInternal(CTX ctx) { if (this.selector == null) { ctx.getOptionalParameter(DirectContextParameters.PLAYER).ifPresent(it -> { - CraftEngine.instance().guiManager().openMerchant(it, this.title == null ? null : AdventureHelper.miniMessage().deserialize(this.title, ctx.tagResolvers()), this.offers.get()); + CraftEngine.instance().guiManager().openMerchant(it, this.title == null ? null : AdventureHelper.miniMessage().deserialize(this.title, ctx.tagResolvers()), this.offers.apply(it)); }); } else { for (Player viewer : this.selector.get(ctx)) { RelationalContext relationalContext = ViewerContext.of(ctx, PlayerOptionalContext.of(viewer)); - CraftEngine.instance().guiManager().openMerchant(viewer, this.title == null ? null : AdventureHelper.miniMessage().deserialize(this.title, relationalContext.tagResolvers()), this.offers.get()); + CraftEngine.instance().guiManager().openMerchant(viewer, this.title == null ? null : AdventureHelper.miniMessage().deserialize(this.title, relationalContext.tagResolvers()), this.offers.apply(viewer)); } } } @@ -71,27 +71,27 @@ public class MerchantTradeFunction extends AbstractConditio return new TempOffer(cost1, cost2, result, exp); }); return new MerchantTradeFunction<>(getPredicates(arguments), PlayerSelectors.fromObject(arguments.get("target"), conditionFactory()), title, - LazyReference.lazyReference(() -> { + (player) -> { List> offers = new ArrayList<>(merchantOffers.size()); for (TempOffer offer : merchantOffers) { - Item cost1 = parseIngredient(offer.cost1); - Optional cost2 = Optional.ofNullable(parseIngredient(offer.cost2)); - Item result = parseIngredient(offer.result); + Item cost1 = parseIngredient(offer.cost1, player); + Optional cost2 = Optional.ofNullable(parseIngredient(offer.cost2, player)); + Item result = parseIngredient(offer.result, player); offers.add(new MerchantOffer<>(cost1, cost2, result, false, 0, Integer.MAX_VALUE, offer.exp, 0, 0, 0)); } return offers; - })); + }); } public record TempOffer(Object cost1, Object cost2, Object result, int exp) { } - private Item parseIngredient(Object arguments) { + private Item parseIngredient(Object arguments, Player player) { if (arguments == null) return null; if (arguments instanceof Map map) { Map args = MiscUtils.castToMap(map, false); String itemName = args.getOrDefault("item", "minecraft:stone").toString(); - Item item = createSafeItem(itemName); + Item item = createSafeItem(itemName, player); if (args.containsKey("count")) { item.count(ResourceConfigUtils.getAsInt(args.get("count"), "count")); } @@ -104,15 +104,15 @@ public class MerchantTradeFunction extends AbstractConditio return item; } else { String itemName = arguments.toString(); - return createSafeItem(itemName); + return createSafeItem(itemName, player); } } - private Item createSafeItem(String itemName) { + private Item createSafeItem(String itemName, Player player) { Key itemId = Key.of(itemName); - Item item = CraftEngine.instance().itemManager().createWrappedItem(itemId, null); + Item item = CraftEngine.instance().itemManager().createWrappedItem(itemId, player); if (item == null) { - item = CraftEngine.instance().itemManager().createWrappedItem(ItemKeys.STONE, null); + item = CraftEngine.instance().itemManager().createWrappedItem(ItemKeys.STONE, player); assert item != null; item.itemNameComponent(Component.text(itemName).color(NamedTextColor.RED)); }