mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-19 15:09:15 +00:00
解决跨平台的问题
This commit is contained in:
@@ -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<ItemStack> {
|
||||
private final Item<ItemStack> emptyItem;
|
||||
private final UniqueIdItem<ItemStack> emptyUniqueItem;
|
||||
private final Function<Object, Integer> decoratedHashOpsGenerator;
|
||||
private ItemBridge itemBridge;
|
||||
private BukkitItemBridge itemBridge;
|
||||
private Set<Key> lastRegisteredPatterns = Set.of();
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@@ -445,18 +444,19 @@ public class BukkitItemManager extends AbstractItemManager<ItemStack> {
|
||||
}
|
||||
|
||||
@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 <I> Provider<I> getItemProvider(String plugin) {
|
||||
return (Provider<I>) itemBridgeProvider().provider(plugin).orElse(null);
|
||||
public Optional<ItemStack> buildPlatformItem(Provider<ItemStack> 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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<T> extends Manageable, ModelGenerator {
|
||||
|
||||
ItemUpdateResult updateItem(Item<T> item, Supplier<ItemBuildContext> contextSupplier);
|
||||
|
||||
ItemBridge itemBridgeProvider();
|
||||
ItemBridge<T> itemBridgeProvider();
|
||||
|
||||
<I> Provider<I> getItemProvider(String plugin);
|
||||
Optional<T> buildPlatformItem(Provider<T> provider, String id, ItemBuildContext context);
|
||||
}
|
||||
@@ -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<I> implements ItemDataModifier<I> {
|
||||
public static final Factory<?> FACTORY = new Factory<>();
|
||||
private static final ThreadLocal<Set<Dependency>> BUILD_STACK = ThreadLocal.withInitial(LinkedHashSet::new);
|
||||
private static ContextKey<Object> platformPlayerKey;
|
||||
private final String id;
|
||||
private final Provider<I> provider;
|
||||
|
||||
@@ -40,7 +37,6 @@ public class ExternalModifier<I> implements ItemDataModifier<I> {
|
||||
return ItemDataModifiers.EXTERNAL;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public Item<I> apply(Item<I> item, ItemBuildContext context) {
|
||||
Dependency dependency = new Dependency(provider.plugin(), id);
|
||||
@@ -58,12 +54,13 @@ public class ExternalModifier<I> implements ItemDataModifier<I> {
|
||||
|
||||
buildStack.add(dependency);
|
||||
try {
|
||||
Optional<I> another = this.provider.build(this.id, adapt(context));
|
||||
ItemManager<I> itemManager = CraftEngine.instance().itemManager();
|
||||
Optional<I> 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<I> anotherWrapped = (Item<I>) CraftEngine.instance().itemManager().wrap(another.get());
|
||||
Item<I> anotherWrapped = itemManager.wrap(another.get());
|
||||
item.merge(anotherWrapped);
|
||||
return item;
|
||||
} catch (Throwable e) {
|
||||
@@ -75,19 +72,6 @@ public class ExternalModifier<I> implements ItemDataModifier<I> {
|
||||
}
|
||||
}
|
||||
|
||||
@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<Object>) Objects.requireNonNull(ContextKey.of(player.platformPlayerClass(), "player"));
|
||||
}
|
||||
builder.with(platformPlayerKey, player.platformPlayer());
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
public static class Factory<I> implements ItemDataModifierFactory<I> {
|
||||
|
||||
@Override
|
||||
@@ -95,8 +79,11 @@ public class ExternalModifier<I> implements ItemDataModifier<I> {
|
||||
Map<String, Object> 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<I> 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<I> itemManager = CraftEngine.instance().itemManager();
|
||||
Provider<I> provider = itemManager.itemBridgeProvider().provider(plugin.toLowerCase(Locale.ENGLISH)).orElseThrow(
|
||||
() -> new LocalizedResourceConfigException("warning.config.item.data.external.invalid_source", plugin)
|
||||
);
|
||||
return new ExternalModifier<>(id, provider);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user