aboutsummaryrefslogtreecommitdiff
path: root/api
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-06-14 20:45:12 +0800
committershedaniel <daniel@shedaniel.me>2021-06-14 20:45:12 +0800
commit3d90cdd1204b6b6a2c57b121cdf82de2448bb951 (patch)
treeef52f2aa6869538c7044c3ebf42a0376b0f32846 /api
parent2932350cc1315534c4ee9a8c9fe17a9b0815f2e9 (diff)
downloadRoughlyEnoughItems-3d90cdd1204b6b6a2c57b121cdf82de2448bb951.tar.gz
RoughlyEnoughItems-3d90cdd1204b6b6a2c57b121cdf82de2448bb951.tar.bz2
RoughlyEnoughItems-3d90cdd1204b6b6a2c57b121cdf82de2448bb951.zip
Fix auto crafting patterns & refactor internals providers
Diffstat (limited to 'api')
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/common/display/SimpleDisplaySerializer.java15
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/common/display/basic/BasicDisplay.java37
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/common/entry/EntryStack.java1
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuInfo.java2
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();
}
/**