mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-31 12:56:28 +00:00
修复npc踩压力板
This commit is contained in:
@@ -98,7 +98,7 @@ public abstract class AbstractRecipeSerializer<T, R extends Recipe<T>> implement
|
||||
if (resultItem.isEmpty()) {
|
||||
throw new LocalizedResourceConfigException("warning.config.recipe.invalid_result", id);
|
||||
}
|
||||
List<PostProcessor<T>> processors = ResourceConfigUtils.parseConfigAsList(resultMap.get("post-processors"), PostProcessors::fromMap);
|
||||
List<PostProcessor> processors = ResourceConfigUtils.parseConfigAsList(resultMap.get("post-processors"), PostProcessors::fromMap);
|
||||
return new CustomRecipeResult<>(
|
||||
resultItem,
|
||||
count,
|
||||
@@ -119,7 +119,7 @@ public abstract class AbstractRecipeSerializer<T, R extends Recipe<T>> implement
|
||||
if (resultItem.isEmpty()) {
|
||||
throw new LocalizedResourceConfigException("warning.config.recipe.invalid_result", id);
|
||||
}
|
||||
List<PostProcessor<T>> processors = ResourceConfigUtils.parseConfigAsList(resultMap.get("post-processors"), PostProcessors::fromMap);
|
||||
List<PostProcessor> processors = ResourceConfigUtils.parseConfigAsList(resultMap.get("post-processors"), PostProcessors::fromMap);
|
||||
return new CustomRecipeResult<>(
|
||||
resultItem,
|
||||
count,
|
||||
|
||||
@@ -10,31 +10,30 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class ApplyItemDataPostProcessor<T> implements PostProcessor<T> {
|
||||
public static final PostProcessorFactory<?> FACTORY = new Factory<>();
|
||||
private final ItemProcessor<T>[] modifiers;
|
||||
public class ApplyItemDataPostProcessor implements PostProcessor {
|
||||
public static final PostProcessorFactory<ApplyItemDataPostProcessor> FACTORY = new Factory();
|
||||
private final ItemProcessor[] modifiers;
|
||||
|
||||
public ApplyItemDataPostProcessor(ItemProcessor<T>[] modifiers) {
|
||||
public ApplyItemDataPostProcessor(ItemProcessor[] modifiers) {
|
||||
this.modifiers = modifiers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Item<T> process(Item<T> item, ItemBuildContext context) {
|
||||
for (ItemProcessor<T> modifier : this.modifiers) {
|
||||
public <I> Item<I> process(Item<I> item, ItemBuildContext context) {
|
||||
for (ItemProcessor modifier : this.modifiers) {
|
||||
item.apply(modifier, context);
|
||||
}
|
||||
return item;
|
||||
}
|
||||
|
||||
private static class Factory<A> implements PostProcessorFactory<A> {
|
||||
private static class Factory implements PostProcessorFactory<ApplyItemDataPostProcessor> {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public PostProcessor<A> create(Map<String, Object> args) {
|
||||
public ApplyItemDataPostProcessor create(Map<String, Object> args) {
|
||||
List<ItemProcessor<?>> modifiers = new ArrayList<>();
|
||||
Map<String, Object> data = ResourceConfigUtils.getAsMap(args.get("data"), "data");
|
||||
ItemProcessors.applyDataModifiers(data, modifiers::add);
|
||||
return new ApplyItemDataPostProcessor<>(modifiers.toArray(new ItemProcessor[0]));
|
||||
return new ApplyItemDataPostProcessor(modifiers.toArray(new ItemProcessor[0]));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@ import net.momirealms.craftengine.core.item.BuildableItem;
|
||||
import net.momirealms.craftengine.core.item.Item;
|
||||
import net.momirealms.craftengine.core.item.ItemBuildContext;
|
||||
|
||||
public record CustomRecipeResult<T>(BuildableItem<T> item, int count, PostProcessor<T>[] postProcessors) {
|
||||
public record CustomRecipeResult<T>(BuildableItem<T> item, int count, PostProcessor[] postProcessors) {
|
||||
|
||||
public T buildItemStack(ItemBuildContext context) {
|
||||
return buildItem(context).getItem();
|
||||
@@ -13,7 +13,7 @@ public record CustomRecipeResult<T>(BuildableItem<T> item, int count, PostProces
|
||||
public Item<T> buildItem(ItemBuildContext context) {
|
||||
Item<T> builtItem = this.item.buildItem(context, this.count);
|
||||
if (this.postProcessors != null) {
|
||||
for (PostProcessor<T> postProcessor : this.postProcessors) {
|
||||
for (PostProcessor postProcessor : this.postProcessors) {
|
||||
builtItem = postProcessor.process(builtItem, context);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package net.momirealms.craftengine.core.item.recipe.result;
|
||||
import net.momirealms.craftengine.core.item.Item;
|
||||
import net.momirealms.craftengine.core.item.ItemBuildContext;
|
||||
|
||||
public interface PostProcessor<T> {
|
||||
public interface PostProcessor {
|
||||
|
||||
Item<T> process(Item<T> item, ItemBuildContext context);
|
||||
<I> Item<I> process(Item<I> item, ItemBuildContext context);
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ package net.momirealms.craftengine.core.item.recipe.result;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public interface PostProcessorFactory<T> {
|
||||
public interface PostProcessorFactory<T extends PostProcessor> {
|
||||
|
||||
PostProcessor<T> create(Map<String, Object> args);
|
||||
T create(Map<String, Object> args);
|
||||
}
|
||||
|
||||
@@ -2,5 +2,5 @@ package net.momirealms.craftengine.core.item.recipe.result;
|
||||
|
||||
import net.momirealms.craftengine.core.util.Key;
|
||||
|
||||
public record PostProcessorType<T>(Key id, PostProcessorFactory<T> factory) {
|
||||
public record PostProcessorType<T extends PostProcessor>(Key id, PostProcessorFactory<T> factory) {
|
||||
}
|
||||
|
||||
@@ -11,22 +11,21 @@ import net.momirealms.craftengine.core.util.ResourceKey;
|
||||
import java.util.Map;
|
||||
|
||||
public final class PostProcessors {
|
||||
public static final PostProcessorType<?> APPLY_DATA = register(Key.ce("apply_data"), ApplyItemDataPostProcessor.FACTORY);
|
||||
public static final PostProcessorType<ApplyItemDataPostProcessor> APPLY_DATA = register(Key.ce("apply_data"), ApplyItemDataPostProcessor.FACTORY);
|
||||
|
||||
private PostProcessors() {}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <T> PostProcessor<T> fromMap(Map<String, Object> map) {
|
||||
public static PostProcessor fromMap(Map<String, Object> map) {
|
||||
String type = ResourceConfigUtils.requireNonEmptyStringOrThrow(map.get("type"), "warning.config.recipe.result.post_processor.missing_type");
|
||||
Key key = Key.withDefaultNamespace(type, Key.DEFAULT_NAMESPACE);
|
||||
PostProcessorType<T> processorType = (PostProcessorType<T>) BuiltInRegistries.RECIPE_POST_PROCESSOR_TYPE.getValue(key);
|
||||
PostProcessorType<? extends PostProcessor> processorType = BuiltInRegistries.RECIPE_POST_PROCESSOR_TYPE.getValue(key);
|
||||
if (processorType == null) {
|
||||
throw new LocalizedResourceConfigException("warning.config.recipe.result.post_processor.invalid_type", type);
|
||||
}
|
||||
return processorType.factory().create(map);
|
||||
}
|
||||
|
||||
public static <T> PostProcessorType<T> register(Key id, PostProcessorFactory<T> factory) {
|
||||
public static <T extends PostProcessor> PostProcessorType<T> register(Key id, PostProcessorFactory<T> factory) {
|
||||
PostProcessorType<T> type = new PostProcessorType<>(id, factory);
|
||||
((WritableRegistry<PostProcessorType<?>>) BuiltInRegistries.RECIPE_POST_PROCESSOR_TYPE)
|
||||
.register(ResourceKey.create(Registries.RECIPE_POST_PROCESSOR_TYPE.location(), id), type);
|
||||
|
||||
@@ -27,8 +27,11 @@ import net.momirealms.craftengine.core.item.recipe.network.modern.display.Recipe
|
||||
import net.momirealms.craftengine.core.item.recipe.network.modern.display.slot.SlotDisplay;
|
||||
import net.momirealms.craftengine.core.item.recipe.remainder.CraftRemainder;
|
||||
import net.momirealms.craftengine.core.item.recipe.remainder.CraftRemainderType;
|
||||
import net.momirealms.craftengine.core.item.recipe.result.PostProcessor;
|
||||
import net.momirealms.craftengine.core.item.recipe.result.PostProcessorType;
|
||||
import net.momirealms.craftengine.core.item.updater.ItemUpdater;
|
||||
import net.momirealms.craftengine.core.item.updater.ItemUpdaterType;
|
||||
import net.momirealms.craftengine.core.item.updater.ItemUpdaters;
|
||||
import net.momirealms.craftengine.core.loot.entry.LootEntryContainerType;
|
||||
import net.momirealms.craftengine.core.loot.function.LootFunctionType;
|
||||
import net.momirealms.craftengine.core.loot.function.formula.Formula;
|
||||
@@ -92,8 +95,8 @@ public final class BuiltInRegistries {
|
||||
public static final Registry<SlotDisplay.Type<?>> SLOT_DISPLAY_TYPE = createConstantBoundRegistry(Registries.SLOT_DISPLAY_TYPE, 16);
|
||||
public static final Registry<RecipeDisplay.Type<?>> RECIPE_DISPLAY_TYPE = createConstantBoundRegistry(Registries.RECIPE_DISPLAY_TYPE, 16);
|
||||
public static final Registry<LegacyRecipe.Type<?>> LEGACY_RECIPE_TYPE = createConstantBoundRegistry(Registries.LEGACY_RECIPE_TYPE, 16);
|
||||
public static final Registry<PostProcessorType<?>> RECIPE_POST_PROCESSOR_TYPE = createConstantBoundRegistry(Registries.RECIPE_POST_PROCESSOR_TYPE, 16);
|
||||
public static final Registry<ItemUpdaterType<?>> ITEM_UPDATER_TYPE = createConstantBoundRegistry(Registries.ITEM_UPDATER_TYPE, 16);
|
||||
public static final Registry<PostProcessorType<? extends PostProcessor>> RECIPE_POST_PROCESSOR_TYPE = createConstantBoundRegistry(Registries.RECIPE_POST_PROCESSOR_TYPE, 16);
|
||||
public static final Registry<ItemUpdaterType<? extends ItemUpdater>> ITEM_UPDATER_TYPE = createConstantBoundRegistry(Registries.ITEM_UPDATER_TYPE, 16);
|
||||
public static final Registry<NetworkCodec<FriendlyByteBuf, ? extends ModPacket>> MOD_PACKET = createConstantBoundRegistry(Registries.MOD_PACKET, 16);
|
||||
public static final Registry<BlockEntityType<? extends BlockEntity>> BLOCK_ENTITY_TYPE = createConstantBoundRegistry(Registries.BLOCK_ENTITY_TYPE, 64);
|
||||
public static final Registry<BlockEntityElementConfigType<? extends BlockEntityElement>> BLOCK_ENTITY_ELEMENT_TYPE = createConstantBoundRegistry(Registries.BLOCK_ENTITY_ELEMENT_TYPE, 16);
|
||||
|
||||
@@ -27,7 +27,9 @@ import net.momirealms.craftengine.core.item.recipe.network.modern.display.Recipe
|
||||
import net.momirealms.craftengine.core.item.recipe.network.modern.display.slot.SlotDisplay;
|
||||
import net.momirealms.craftengine.core.item.recipe.remainder.CraftRemainder;
|
||||
import net.momirealms.craftengine.core.item.recipe.remainder.CraftRemainderType;
|
||||
import net.momirealms.craftengine.core.item.recipe.result.PostProcessor;
|
||||
import net.momirealms.craftengine.core.item.recipe.result.PostProcessorType;
|
||||
import net.momirealms.craftengine.core.item.updater.ItemUpdater;
|
||||
import net.momirealms.craftengine.core.item.updater.ItemUpdaterType;
|
||||
import net.momirealms.craftengine.core.loot.entry.LootEntryContainerType;
|
||||
import net.momirealms.craftengine.core.loot.function.LootFunctionType;
|
||||
@@ -96,8 +98,8 @@ public final 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<PostProcessorType<?>>> RECIPE_POST_PROCESSOR_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("recipe_post_processor_type"));
|
||||
public static final ResourceKey<Registry<ItemUpdaterType<?>>> ITEM_UPDATER_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("item_updater_type"));
|
||||
public static final ResourceKey<Registry<PostProcessorType<? extends PostProcessor>>> RECIPE_POST_PROCESSOR_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("recipe_post_processor_type"));
|
||||
public static final ResourceKey<Registry<ItemUpdaterType<? extends ItemUpdater>>> ITEM_UPDATER_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("item_updater_type"));
|
||||
public static final ResourceKey<Registry<NetworkCodec<FriendlyByteBuf, ? extends ModPacket>>> MOD_PACKET = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("mod_packet_type"));
|
||||
public static final ResourceKey<Registry<BlockEntityType<? extends BlockEntity>>> BLOCK_ENTITY_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("block_entity_type"));
|
||||
public static final ResourceKey<Registry<BlockEntityElementConfigType<? extends BlockEntityElement>>> BLOCK_ENTITY_ELEMENT_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("block_entity_element_type"));
|
||||
|
||||
Reference in New Issue
Block a user