diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java index 582a23a21..e770e1254 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java @@ -1,7 +1,9 @@ package net.momirealms.craftengine.bukkit.item; import cn.gtemc.itembridge.api.Provider; -import cn.gtemc.itembridge.core.ItemBridge; +import cn.gtemc.itembridge.api.context.BuildContext; +import cn.gtemc.itembridge.core.BukkitItemBridge; +import cn.gtemc.itembridge.hook.context.ItemContextKeys; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; @@ -24,10 +26,7 @@ import net.momirealms.craftengine.core.item.recipe.UniqueIdItem; import net.momirealms.craftengine.core.pack.AbstractPackManager; import net.momirealms.craftengine.core.plugin.config.Config; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; -import net.momirealms.craftengine.core.util.GsonHelper; -import net.momirealms.craftengine.core.util.Key; -import net.momirealms.craftengine.core.util.UniqueKey; -import net.momirealms.craftengine.core.util.VersionHelper; +import net.momirealms.craftengine.core.util.*; import org.bukkit.Bukkit; import org.bukkit.event.HandlerList; import org.bukkit.inventory.ItemStack; @@ -58,7 +57,7 @@ public class BukkitItemManager extends AbstractItemManager { private final Item emptyItem; private final UniqueIdItem emptyUniqueItem; private final Function decoratedHashOpsGenerator; - private ItemBridge itemBridge; + private BukkitItemBridge itemBridge; private Set lastRegisteredPatterns = Set.of(); @SuppressWarnings("unchecked") @@ -445,18 +444,19 @@ public class BukkitItemManager extends AbstractItemManager { } @Override - public ItemBridge itemBridgeProvider() { + public BukkitItemBridge itemBridgeProvider() { if (this.itemBridge == null) { - ItemBridge.Builder builder = ItemBridge.builder(); + BukkitItemBridge.BukkitBuilder builder = BukkitItemBridge.builder(); builder.removeById("craftengine"); this.itemBridge = builder.build(); } return this.itemBridge; } - @SuppressWarnings("unchecked") @Override - public Provider getItemProvider(String plugin) { - return (Provider) itemBridgeProvider().provider(plugin).orElse(null); + public Optional buildPlatformItem(Provider provider, String id, ItemBuildContext context) { + Player player = context.player(); + org.bukkit.entity.Player bukkitPlayer = player == null ? null : (org.bukkit.entity.Player) player.platformPlayer(); + return provider.build(id, BuildContext.builder().withOptional(ItemContextKeys.PLAYER, bukkitPlayer).build()); } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/ItemManager.java b/core/src/main/java/net/momirealms/craftengine/core/item/ItemManager.java index a46804213..96b96fceb 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/ItemManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/ItemManager.java @@ -1,7 +1,7 @@ package net.momirealms.craftengine.core.item; +import cn.gtemc.itembridge.api.ItemBridge; import cn.gtemc.itembridge.api.Provider; -import cn.gtemc.itembridge.core.ItemBridge; import net.momirealms.craftengine.core.entity.player.Player; import net.momirealms.craftengine.core.item.behavior.ItemBehavior; import net.momirealms.craftengine.core.item.equipment.Equipment; @@ -123,7 +123,7 @@ public interface ItemManager extends Manageable, ModelGenerator { ItemUpdateResult updateItem(Item item, Supplier contextSupplier); - ItemBridge itemBridgeProvider(); + ItemBridge itemBridgeProvider(); - Provider getItemProvider(String plugin); + Optional buildPlatformItem(Provider provider, String id, ItemBuildContext context); } \ No newline at end of file diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/modifier/ExternalModifier.java b/core/src/main/java/net/momirealms/craftengine/core/item/modifier/ExternalModifier.java index 5f16bd81c..4f38cd508 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/modifier/ExternalModifier.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/modifier/ExternalModifier.java @@ -1,12 +1,10 @@ package net.momirealms.craftengine.core.item.modifier; import cn.gtemc.itembridge.api.Provider; -import cn.gtemc.itembridge.api.context.BuildContext; -import cn.gtemc.itembridge.api.context.ContextKey; -import net.momirealms.craftengine.core.entity.player.Player; import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.item.ItemBuildContext; import net.momirealms.craftengine.core.item.ItemDataModifierFactory; +import net.momirealms.craftengine.core.item.ItemManager; import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; import net.momirealms.craftengine.core.util.Key; @@ -18,7 +16,6 @@ import java.util.*; public class ExternalModifier implements ItemDataModifier { public static final Factory FACTORY = new Factory<>(); private static final ThreadLocal> BUILD_STACK = ThreadLocal.withInitial(LinkedHashSet::new); - private static ContextKey platformPlayerKey; private final String id; private final Provider provider; @@ -40,7 +37,6 @@ public class ExternalModifier implements ItemDataModifier { return ItemDataModifiers.EXTERNAL; } - @SuppressWarnings("unchecked") @Override public Item apply(Item item, ItemBuildContext context) { Dependency dependency = new Dependency(provider.plugin(), id); @@ -58,12 +54,13 @@ public class ExternalModifier implements ItemDataModifier { buildStack.add(dependency); try { - Optional another = this.provider.build(this.id, adapt(context)); + ItemManager itemManager = CraftEngine.instance().itemManager(); + Optional another = itemManager.buildPlatformItem(this.provider, this.id, context); if (another.isEmpty()) { CraftEngine.instance().logger().warn("'" + this.id + "' could not be found in " + provider.plugin()); return item; } - Item anotherWrapped = (Item) CraftEngine.instance().itemManager().wrap(another.get()); + Item anotherWrapped = itemManager.wrap(another.get()); item.merge(anotherWrapped); return item; } catch (Throwable e) { @@ -75,19 +72,6 @@ public class ExternalModifier implements ItemDataModifier { } } - @SuppressWarnings("unchecked") - private static BuildContext adapt(ItemBuildContext context) { - BuildContext.Builder builder = BuildContext.builder(); - Player player = context.player(); - if (player != null) { - if (platformPlayerKey == null) { - platformPlayerKey = (ContextKey) Objects.requireNonNull(ContextKey.of(player.platformPlayerClass(), "player")); - } - builder.with(platformPlayerKey, player.platformPlayer()); - } - return builder.build(); - } - public static class Factory implements ItemDataModifierFactory { @Override @@ -95,8 +79,11 @@ public class ExternalModifier implements ItemDataModifier { Map data = ResourceConfigUtils.getAsMap(arg, "external"); String plugin = ResourceConfigUtils.requireNonEmptyStringOrThrow(ResourceConfigUtils.get(data, "plugin", "source"), "warning.config.item.data.external.missing_source"); String id = ResourceConfigUtils.requireNonEmptyStringOrThrow(data.get("id"), "warning.config.item.data.external.missing_id"); - Provider provider = CraftEngine.instance().itemManager().getItemProvider(plugin.toLowerCase(Locale.ENGLISH)); - return new ExternalModifier<>(id, ResourceConfigUtils.requireNonNullOrThrow(provider, () -> new LocalizedResourceConfigException("warning.config.item.data.external.invalid_source", plugin))); + ItemManager itemManager = CraftEngine.instance().itemManager(); + Provider provider = itemManager.itemBridgeProvider().provider(plugin.toLowerCase(Locale.ENGLISH)).orElseThrow( + () -> new LocalizedResourceConfigException("warning.config.item.data.external.invalid_source", plugin) + ); + return new ExternalModifier<>(id, provider); } } diff --git a/gradle.properties b/gradle.properties index 7301efa3b..81d70d2bb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -57,7 +57,7 @@ jimfs_version=1.3.1 authlib_version=7.0.60 concurrent_util_version=0.0.8-SNAPSHOT bucket4j_version=8.15.0 -itembridge_version=1.0.6 +itembridge_version=1.0.9 # Proxy settings systemProp.socks.proxyHost=127.0.0.1