diff options
| author | shedaniel <daniel@shedaniel.me> | 2021-06-14 20:45:12 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2021-06-14 20:45:12 +0800 |
| commit | 3d90cdd1204b6b6a2c57b121cdf82de2448bb951 (patch) | |
| tree | ef52f2aa6869538c7044c3ebf42a0376b0f32846 /api | |
| parent | 2932350cc1315534c4ee9a8c9fe17a9b0815f2e9 (diff) | |
| download | RoughlyEnoughItems-3d90cdd1204b6b6a2c57b121cdf82de2448bb951.tar.gz RoughlyEnoughItems-3d90cdd1204b6b6a2c57b121cdf82de2448bb951.tar.bz2 RoughlyEnoughItems-3d90cdd1204b6b6a2c57b121cdf82de2448bb951.zip | |
Fix auto crafting patterns & refactor internals providers
Diffstat (limited to 'api')
4 files changed, 52 insertions, 3 deletions
diff --git a/api/src/main/java/me/shedaniel/rei/api/common/display/SimpleDisplaySerializer.java b/api/src/main/java/me/shedaniel/rei/api/common/display/SimpleDisplaySerializer.java index ad2ca952d..4863f90fd 100644 --- a/api/src/main/java/me/shedaniel/rei/api/common/display/SimpleDisplaySerializer.java +++ b/api/src/main/java/me/shedaniel/rei/api/common/display/SimpleDisplaySerializer.java @@ -23,17 +23,28 @@ package me.shedaniel.rei.api.common.display; +import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.api.common.util.EntryIngredients; import net.minecraft.nbt.CompoundTag; +import java.util.List; + public interface SimpleDisplaySerializer<D extends Display> extends DisplaySerializer<D> { @Override default CompoundTag save(CompoundTag tag, D display) { - tag.put("input", EntryIngredients.save(display.getInputEntries())); - tag.put("output", EntryIngredients.save(display.getOutputEntries())); + tag.put("input", EntryIngredients.save(getInputIngredients(display))); + tag.put("output", EntryIngredients.save(getOutputIngredients(display))); tag = saveExtra(tag, display); return tag; } + default List<EntryIngredient> getInputIngredients(D display) { + return display.getInputEntries(); + } + + default List<EntryIngredient> getOutputIngredients(D display) { + return display.getOutputEntries(); + } + CompoundTag saveExtra(CompoundTag tag, D display); } diff --git a/api/src/main/java/me/shedaniel/rei/api/common/display/basic/BasicDisplay.java b/api/src/main/java/me/shedaniel/rei/api/common/display/basic/BasicDisplay.java index 1d0ac2dfe..da78fc0b1 100644 --- a/api/src/main/java/me/shedaniel/rei/api/common/display/basic/BasicDisplay.java +++ b/api/src/main/java/me/shedaniel/rei/api/common/display/basic/BasicDisplay.java @@ -30,6 +30,7 @@ import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.api.common.util.EntryIngredients; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.Optional; @@ -67,6 +68,8 @@ public abstract class BasicDisplay implements Display { public static class Serializer<P extends BasicDisplay> implements SimpleDisplaySerializer<P> { protected final Constructor<P> constructor; protected final ExtraSerializer<P> extraSerializer; + protected EntryIngredientsProvider<P> inputEntries = EntryIngredientsProvider.pass(); + protected EntryIngredientsProvider<P> outputEntries = EntryIngredientsProvider.pass(); public static <P extends BasicDisplay> Serializer<P> ofSimple(SimpleConstructor<P> constructor) { return new Serializer<>(constructor, (p, tag) -> {}); @@ -109,6 +112,16 @@ public abstract class BasicDisplay implements Display { this.extraSerializer = extraSerializer; } + public Serializer<P> inputProvider(EntryIngredientsProvider<P> provider) { + this.inputEntries = provider; + return this; + } + + public Serializer<P> outputProvider(EntryIngredientsProvider<P> provider) { + this.outputEntries = provider; + return this; + } + @Override public CompoundTag saveExtra(CompoundTag tag, P display) { display.getDisplayLocation().ifPresent(location -> tag.putString("location", location.toString())); @@ -129,6 +142,20 @@ public abstract class BasicDisplay implements Display { return constructor.construct(input, output, Optional.ofNullable(location), tag); } + @Override + public List<EntryIngredient> getInputIngredients(P display) { + List<EntryIngredient> entries = this.inputEntries.getEntries(display); + if (entries != null) return entries; + return SimpleDisplaySerializer.super.getInputIngredients(display); + } + + @Override + public List<EntryIngredient> getOutputIngredients(P display) { + List<EntryIngredient> entries = this.outputEntries.getEntries(display); + if (entries != null) return entries; + return SimpleDisplaySerializer.super.getOutputIngredients(display); + } + @FunctionalInterface public interface Constructor<R> { R construct(List<EntryIngredient> input, List<EntryIngredient> output, Optional<ResourceLocation> location, CompoundTag tag); @@ -168,5 +195,15 @@ public abstract class BasicDisplay implements Display { public interface ExtraSerializer<R extends Display> { void serialize(R display, CompoundTag tag); } + + @FunctionalInterface + public interface EntryIngredientsProvider<R extends Display> { + @Nullable + List<EntryIngredient> getEntries(R display); + + static <R extends Display> EntryIngredientsProvider<R> pass() { + return display -> null; + } + } } } diff --git a/api/src/main/java/me/shedaniel/rei/api/common/entry/EntryStack.java b/api/src/main/java/me/shedaniel/rei/api/common/entry/EntryStack.java index c9810211d..1789ccbae 100644 --- a/api/src/main/java/me/shedaniel/rei/api/common/entry/EntryStack.java +++ b/api/src/main/java/me/shedaniel/rei/api/common/entry/EntryStack.java @@ -66,6 +66,7 @@ public interface EntryStack<T> extends TextRepresentable, Renderer { static EntryStack<?> read(CompoundTag tag) { EntryDefinition<?> definition = EntryTypeRegistry.getInstance().get(new ResourceLocation(tag.getString("type"))); + if (definition == null) throw new NullPointerException("Read missing entry type: " + definition); EntrySerializer<?> serializer = definition.getSerializer(); if (serializer != null && serializer.supportReading()) { return EntryStack.of((EntryDefinition<Object>) definition, serializer.read(tag)); diff --git a/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuInfo.java b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuInfo.java index e9f87d51f..313ab23de 100644 --- a/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuInfo.java +++ b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuInfo.java @@ -99,7 +99,7 @@ public interface MenuInfo<T extends AbstractContainerMenu, D extends Display> ex */ default void markDirty(MenuInfoContext<T, ? extends ServerPlayer, D> context) { context.getPlayerEntity().getInventory().setChanged(); - context.getMenu().broadcastChanges(); + context.getMenu().sendAllDataToRemote(); } /** |
