mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-25 09:59:20 +00:00
Revert "fix(bukkit): 修复 1.20 ~ 1.20.4 无法启动的问题"
This reverts commit 429c33b1ee.
This commit is contained in:
@@ -19,7 +19,6 @@ import net.momirealms.craftengine.core.item.Item;
|
||||
import net.momirealms.craftengine.core.item.ItemBuildContext;
|
||||
import net.momirealms.craftengine.core.item.ItemKeys;
|
||||
import net.momirealms.craftengine.core.item.recipe.*;
|
||||
import net.momirealms.craftengine.core.item.recipe.postprocessor.PostProcessors;
|
||||
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
||||
import net.momirealms.craftengine.core.plugin.config.Config;
|
||||
import net.momirealms.craftengine.core.registry.BuiltInRegistries;
|
||||
@@ -29,8 +28,10 @@ import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
import java.lang.reflect.Array;
|
||||
import java.sql.Ref;
|
||||
import java.util.*;
|
||||
import java.util.function.BiFunction;
|
||||
import java.util.function.Consumer;
|
||||
@@ -287,7 +288,6 @@ public class BukkitRecipeManager extends AbstractRecipeManager<ItemStack> {
|
||||
|
||||
public BukkitRecipeManager(BukkitCraftEngine plugin) {
|
||||
instance = this;
|
||||
PostProcessors.init();
|
||||
this.plugin = plugin;
|
||||
this.recipeEventListener = new RecipeEventListener(plugin, this, plugin.itemManager());
|
||||
}
|
||||
|
||||
@@ -3755,14 +3755,11 @@ public final class CoreReflections {
|
||||
methodHandle$ServerConfigurationPacketListenerImpl$finishCurrentTask =
|
||||
ReflectionUtils.unreflectMethod(method$ServerConfigurationPacketListenerImpl$finishCurrentTask)
|
||||
.asType(MethodType.methodType(void.class, Object.class, Object.class));
|
||||
} else {
|
||||
methodHandle$ServerConfigurationPacketListenerImpl$finishCurrentTask = null;
|
||||
}
|
||||
if (VersionHelper.isOrAbove1_20_5()) {
|
||||
methodHandle$ServerCommonPacketListenerImpl$closedSetter =
|
||||
ReflectionUtils.unreflectSetter(field$ServerCommonPacketListenerImpl$closed)
|
||||
.asType(MethodType.methodType(void.class, Object.class, boolean.class));
|
||||
} else {
|
||||
methodHandle$ServerConfigurationPacketListenerImpl$finishCurrentTask = null;
|
||||
methodHandle$ServerCommonPacketListenerImpl$closedSetter = null;
|
||||
}
|
||||
} catch (ReflectiveOperationException e) {
|
||||
|
||||
@@ -3,13 +3,21 @@ package net.momirealms.craftengine.core.item.recipe;
|
||||
import net.momirealms.craftengine.core.item.BuildableItem;
|
||||
import net.momirealms.craftengine.core.item.Item;
|
||||
import net.momirealms.craftengine.core.item.ItemBuildContext;
|
||||
import net.momirealms.craftengine.core.item.modifier.ItemDataModifier;
|
||||
import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException;
|
||||
import net.momirealms.craftengine.core.registry.BuiltInRegistries;
|
||||
import net.momirealms.craftengine.core.registry.Registries;
|
||||
import net.momirealms.craftengine.core.registry.WritableRegistry;
|
||||
import net.momirealms.craftengine.core.util.Key;
|
||||
import net.momirealms.craftengine.core.util.ResourceConfigUtils;
|
||||
import net.momirealms.craftengine.core.util.ResourceKey;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public record CustomRecipeResult<T>(BuildableItem<T> item, int count, PostProcessor<T>[] postProcessors) {
|
||||
|
||||
public T buildItemStack(ItemBuildContext context) {
|
||||
@@ -26,8 +34,24 @@ public record CustomRecipeResult<T>(BuildableItem<T> item, int count, PostProces
|
||||
return builtItem;
|
||||
}
|
||||
|
||||
static {
|
||||
registerPostProcessorType(Key.of("apply_data"), args -> {
|
||||
List<ItemDataModifier<?>> modifiers = new ArrayList<>();
|
||||
Map<String, Object> data = ResourceConfigUtils.getAsMap(args.get("data"), "data");
|
||||
for (Map.Entry<String, Object> entry : data.entrySet()) {
|
||||
Optional.ofNullable(BuiltInRegistries.ITEM_DATA_MODIFIER_FACTORY.getValue(Key.withDefaultNamespace(entry.getKey(), "craftengine")))
|
||||
.ifPresent(factory -> modifiers.add(factory.create(entry.getValue())));
|
||||
}
|
||||
return new ApplyItemDataProcessor<>(modifiers.toArray(new ItemDataModifier[0]));
|
||||
});
|
||||
}
|
||||
|
||||
public static void registerPostProcessorType(Key id, PostProcessor.Type<?> type) {
|
||||
((WritableRegistry<PostProcessor.Type<?>>) BuiltInRegistries.RECIPE_POST_PROCESSOR_TYPE)
|
||||
.register(ResourceKey.create(Registries.RECIPE_POST_PROCESSOR_TYPE.location(), id), type);
|
||||
}
|
||||
|
||||
@FunctionalInterface
|
||||
@SuppressWarnings("unchecked")
|
||||
public interface PostProcessor<T> {
|
||||
|
||||
static <T> PostProcessor<T> fromMap(Map<String, Object> map) {
|
||||
@@ -47,4 +71,20 @@ public record CustomRecipeResult<T>(BuildableItem<T> item, int count, PostProces
|
||||
PostProcessor<T> create(Map<String, Object> args);
|
||||
}
|
||||
}
|
||||
|
||||
public static class ApplyItemDataProcessor<T> implements PostProcessor<T> {
|
||||
private final ItemDataModifier<T>[] modifiers;
|
||||
|
||||
public ApplyItemDataProcessor(ItemDataModifier<T>[] modifiers) {
|
||||
this.modifiers = modifiers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Item<T> process(Item<T> item, ItemBuildContext context) {
|
||||
for (ItemDataModifier<T> modifier : this.modifiers) {
|
||||
item.apply(modifier, context);
|
||||
}
|
||||
return item;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
package net.momirealms.craftengine.core.item.recipe.postprocessor;
|
||||
|
||||
import net.momirealms.craftengine.core.item.Item;
|
||||
import net.momirealms.craftengine.core.item.ItemBuildContext;
|
||||
import net.momirealms.craftengine.core.item.modifier.ItemDataModifier;
|
||||
import net.momirealms.craftengine.core.item.recipe.CustomRecipeResult;
|
||||
import net.momirealms.craftengine.core.registry.BuiltInRegistries;
|
||||
import net.momirealms.craftengine.core.util.Key;
|
||||
import net.momirealms.craftengine.core.util.ResourceConfigUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
public class ApplyItemDataProcessor<T> implements CustomRecipeResult.PostProcessor<T> {
|
||||
public static final Type<?> TYPE = new Type<>();
|
||||
private final ItemDataModifier<T>[] modifiers;
|
||||
|
||||
public ApplyItemDataProcessor(ItemDataModifier<T>[] modifiers) {
|
||||
this.modifiers = modifiers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Item<T> process(Item<T> item, ItemBuildContext context) {
|
||||
for (ItemDataModifier<T> modifier : this.modifiers) {
|
||||
item.apply(modifier, context);
|
||||
}
|
||||
return item;
|
||||
}
|
||||
|
||||
public static class Type<T> implements CustomRecipeResult.PostProcessor.Type<T> {
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public CustomRecipeResult.PostProcessor<T> create(Map<String, Object> args) {
|
||||
List<ItemDataModifier<?>> modifiers = new ArrayList<>();
|
||||
Map<String, Object> data = ResourceConfigUtils.getAsMap(args.get("data"), "data");
|
||||
for (Map.Entry<String, Object> entry : data.entrySet()) {
|
||||
Optional.ofNullable(BuiltInRegistries.ITEM_DATA_MODIFIER_FACTORY.getValue(Key.withDefaultNamespace(entry.getKey(), "craftengine")))
|
||||
.ifPresent(factory -> modifiers.add(factory.create(entry.getValue())));
|
||||
}
|
||||
return new ApplyItemDataProcessor<>(modifiers.toArray(new ItemDataModifier[0]));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
package net.momirealms.craftengine.core.item.recipe.postprocessor;
|
||||
|
||||
import net.momirealms.craftengine.core.item.recipe.CustomRecipeResult;
|
||||
import net.momirealms.craftengine.core.registry.BuiltInRegistries;
|
||||
import net.momirealms.craftengine.core.registry.Registries;
|
||||
import net.momirealms.craftengine.core.registry.WritableRegistry;
|
||||
import net.momirealms.craftengine.core.util.Key;
|
||||
import net.momirealms.craftengine.core.util.ResourceKey;
|
||||
|
||||
public class PostProcessors {
|
||||
public static final Key APPLY_DATA = Key.of("craftengine", "apply_data");
|
||||
|
||||
public static void init() {
|
||||
register(APPLY_DATA, ApplyItemDataProcessor.TYPE);
|
||||
}
|
||||
|
||||
public static void register(Key id, CustomRecipeResult.PostProcessor.Type<?> type) {
|
||||
((WritableRegistry<CustomRecipeResult.PostProcessor.Type<?>>) BuiltInRegistries.RECIPE_POST_PROCESSOR_TYPE)
|
||||
.register(ResourceKey.create(Registries.RECIPE_POST_PROCESSOR_TYPE.location(), id), type);
|
||||
}
|
||||
}
|
||||
@@ -78,7 +78,7 @@ public class BuiltInRegistries {
|
||||
public static final Registry<SlotDisplay.Type> SLOT_DISPLAY_TYPE = createConstantBoundRegistry(Registries.SLOT_DISPLAY_TYPE);
|
||||
public static final Registry<RecipeDisplay.Type> RECIPE_DISPLAY_TYPE = createConstantBoundRegistry(Registries.RECIPE_DISPLAY_TYPE);
|
||||
public static final Registry<LegacyRecipe.Type> LEGACY_RECIPE_TYPE = createConstantBoundRegistry(Registries.LEGACY_RECIPE_TYPE);
|
||||
public static final Registry<CustomRecipeResult.PostProcessor.Type<?>> RECIPE_POST_PROCESSOR_TYPE = createConstantBoundRegistry(Registries.RECIPE_POST_PROCESSOR_TYPE);
|
||||
public static final Registry<CustomRecipeResult.ApplyItemDataProcessor.Type<?>> RECIPE_POST_PROCESSOR_TYPE = createConstantBoundRegistry(Registries.RECIPE_POST_PROCESSOR_TYPE);
|
||||
|
||||
private static <T> Registry<T> createConstantBoundRegistry(ResourceKey<? extends Registry<T>> key) {
|
||||
return new ConstantBoundRegistry<>(key);
|
||||
|
||||
@@ -80,5 +80,5 @@ public class Registries {
|
||||
public static final ResourceKey<Registry<SlotDisplay.Type>> SLOT_DISPLAY_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("slot_display_type"));
|
||||
public static final ResourceKey<Registry<RecipeDisplay.Type>> RECIPE_DISPLAY_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("recipe_display_type"));
|
||||
public static final ResourceKey<Registry<LegacyRecipe.Type>> LEGACY_RECIPE_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("legacy_recipe_type"));
|
||||
public static final ResourceKey<Registry<CustomRecipeResult.PostProcessor.Type<?>>> RECIPE_POST_PROCESSOR_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("recipe_post_processor_type"));
|
||||
public static final ResourceKey<Registry<CustomRecipeResult.ApplyItemDataProcessor.Type<?>>> RECIPE_POST_PROCESSOR_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("recipe_post_processor_type"));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user