aboutsummaryrefslogtreecommitdiff
path: root/default-plugin/src
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2025-04-10 15:35:26 +0800
committershedaniel <daniel@shedaniel.me>2025-04-10 19:14:00 +0800
commitade79d9a271916885c758632c01d4f7195803a2c (patch)
tree1a2662a2b529f682a4efa138c2ee12808e6b979f /default-plugin/src
parent9d3bb3cfc7d0c494b33e5d914487a404f2f9d02e (diff)
downloadRoughlyEnoughItems-ade79d9a271916885c758632c01d4f7195803a2c.tar.gz
RoughlyEnoughItems-ade79d9a271916885c758632c01d4f7195803a2c.tar.bz2
RoughlyEnoughItems-ade79d9a271916885c758632c01d4f7195803a2c.zip
Update to 1.21.5
Diffstat (limited to 'default-plugin/src')
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java2
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/DefaultInformationCategory.java2
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/DefaultSmithingCategory.java4
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/client/favorites/GameModeFavoriteEntry.java2
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/client/favorites/TimeFavoriteEntry.java2
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/client/favorites/WeatherFavoriteEntry.java2
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/DefaultPlugin.java1
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/SmithingDisplay.java6
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultCampfireDisplay.java2
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultCompostingDisplay.java2
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultFuelDisplay.java2
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultSmithingDisplay.java107
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/anvil/DefaultAnvilDisplay.java6
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/cooking/DefaultCookingDisplay.java2
14 files changed, 87 insertions, 55 deletions
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java
index 6c93af751..4ea379854 100644
--- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java
@@ -448,7 +448,7 @@ public class DefaultClientPlugin implements REIClientPlugin, BuiltinClientPlugin
ItemStack itemStack = stack.castValue();
if (!itemStack.isEnchantable()) return;
for (Pair<EnchantmentInstance, ItemStack> pair : enchantmentBooks) {
- if (!pair.getKey().enchantment.value().canEnchant(itemStack)) continue;
+ if (!pair.getKey().enchantment().value().canEnchant(itemStack)) continue;
Optional<Pair<ItemStack, Integer>> output = DefaultAnvilDisplay.calculateOutput(itemStack, pair.getValue());
if (output.isEmpty()) continue;
registry.add(new DefaultAnvilDisplay(List.of(EntryIngredients.of(itemStack), EntryIngredients.of(pair.getValue())),
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/DefaultInformationCategory.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/DefaultInformationCategory.java
index 7d1e9455c..9ef500b6f 100644
--- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/DefaultInformationCategory.java
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/DefaultInformationCategory.java
@@ -24,7 +24,6 @@
package me.shedaniel.rei.plugin.client.categories;
import com.google.common.collect.Lists;
-import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.VertexConsumer;
import me.shedaniel.clothconfig2.ClothConfigInitializer;
import me.shedaniel.clothconfig2.api.scroll.ScrollingContainer;
@@ -99,7 +98,6 @@ public class DefaultInformationCategory implements DisplayCategory<DefaultInform
return new Renderer() {
@Override
public void render(GuiGraphics graphics, Rectangle bounds, int mouseX, int mouseY, float delta) {
- RenderSystem.setShaderTexture(0, REIRuntime.getInstance().getDefaultDisplayTexture());
graphics.pose().pushPose();
graphics.pose().translate(-1.2f, -1, 0);
Matrix4f matrix = graphics.pose().last().pose();
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/DefaultSmithingCategory.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/DefaultSmithingCategory.java
index 003e9410b..2dc96a7b8 100644
--- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/DefaultSmithingCategory.java
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/DefaultSmithingCategory.java
@@ -100,8 +100,8 @@ public class DefaultSmithingCategory implements DisplayCategory<SmithingDisplay>
@ApiStatus.Experimental
private static EntryIngredient getOutput(SmithingDisplay display, RegistryAccess registryAccess, EntryStack<?> template, EntryStack<?> base, EntryStack<?> addition) {
- if (display.type() == SmithingDisplay.SmithingRecipeType.TRIM) {
- EntryIngredient output = DefaultSmithingDisplay.getTrimmingOutput(registryAccess, template, base, addition);
+ if (display.type() == SmithingDisplay.SmithingRecipeType.TRIM && display instanceof SmithingDisplay.Trimming trimming) {
+ EntryIngredient output = DefaultSmithingDisplay.getTrimmingOutput(registryAccess, trimming.pattern(), base, addition);
if (!output.isEmpty()) return output;
}
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/favorites/GameModeFavoriteEntry.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/favorites/GameModeFavoriteEntry.java
index d58d4f501..bdf7456df 100644
--- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/favorites/GameModeFavoriteEntry.java
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/favorites/GameModeFavoriteEntry.java
@@ -193,7 +193,7 @@ public class GameModeFavoriteEntry extends FavoriteEntry {
@Override
public DataResult<GameModeFavoriteEntry> read(CompoundTag object) {
- String stringValue = object.getString(KEY);
+ String stringValue = object.getStringOr(KEY, "NOT_SET");
GameType type = stringValue.equals("NOT_SET") ? null : GameType.valueOf(stringValue);
return DataResult.success(new GameModeFavoriteEntry(type), Lifecycle.stable());
}
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/favorites/TimeFavoriteEntry.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/favorites/TimeFavoriteEntry.java
index e78cb4016..c6c0d6bdc 100644
--- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/favorites/TimeFavoriteEntry.java
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/favorites/TimeFavoriteEntry.java
@@ -223,7 +223,7 @@ public class TimeFavoriteEntry extends FavoriteEntry {
@Override
public DataResult<TimeFavoriteEntry> read(CompoundTag object) {
- String stringValue = object.getString(KEY);
+ String stringValue = object.getStringOr(KEY, "NOT_SET");
Time type = stringValue.equals("NOT_SET") ? null : Time.valueOf(stringValue);
return DataResult.success(new TimeFavoriteEntry(type), Lifecycle.stable());
}
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/favorites/WeatherFavoriteEntry.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/favorites/WeatherFavoriteEntry.java
index 902b96a5c..bfb0334cc 100644
--- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/favorites/WeatherFavoriteEntry.java
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/favorites/WeatherFavoriteEntry.java
@@ -197,7 +197,7 @@ public class WeatherFavoriteEntry extends FavoriteEntry {
@Override
public DataResult<WeatherFavoriteEntry> read(CompoundTag object) {
- String stringValue = object.getString(KEY);
+ String stringValue = object.getStringOr(KEY, "NOT_SET");
Weather weather = stringValue.equals("NOT_SET") ? null : Weather.valueOf(stringValue);
return DataResult.success(new WeatherFavoriteEntry(weather), Lifecycle.stable());
}
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/DefaultPlugin.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/DefaultPlugin.java
index ceed9d1b4..472b30cbe 100644
--- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/DefaultPlugin.java
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/DefaultPlugin.java
@@ -163,6 +163,7 @@ public class DefaultPlugin implements BuiltinPlugin, REICommonPlugin {
registry.register(id("default/composting"), DefaultCompostingDisplay.SERIALIZER);
registry.register(id("default/fuel"), DefaultFuelDisplay.SERIALIZER);
registry.register(id("default/smithing"), DefaultSmithingDisplay.SERIALIZER);
+ registry.register(id("default/smithing/trimming"), DefaultSmithingDisplay.Trimming.SERIALIZER);
registry.register(id("default/anvil"), DefaultAnvilDisplay.SERIALIZER);
registry.register(id("default/beacon_base"), DefaultBeaconBaseDisplay.SERIALIZER);
registry.register(id("default/beacon_payment"), DefaultBeaconPaymentDisplay.SERIALIZER);
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/SmithingDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/SmithingDisplay.java
index 919eb561b..ed00d4f60 100644
--- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/SmithingDisplay.java
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/SmithingDisplay.java
@@ -26,9 +26,11 @@ package me.shedaniel.rei.plugin.common;
import com.mojang.serialization.Codec;
import io.netty.buffer.ByteBuf;
import me.shedaniel.rei.api.common.display.Display;
+import net.minecraft.core.Holder;
import net.minecraft.network.codec.ByteBufCodecs;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.util.ByIdMap;
+import net.minecraft.world.item.equipment.trim.TrimPattern;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Nullable;
@@ -38,6 +40,10 @@ public interface SmithingDisplay extends Display {
@Nullable
SmithingRecipeType type();
+ interface Trimming {
+ Holder<TrimPattern> pattern();
+ }
+
@ApiStatus.Experimental
enum SmithingRecipeType {
TRIM,
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultCampfireDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultCampfireDisplay.java
index 67f0e69bb..057c8acfe 100644
--- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultCampfireDisplay.java
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultCampfireDisplay.java
@@ -72,7 +72,7 @@ public class DefaultCampfireDisplay extends BasicDisplay implements CampfireDisp
}
public DefaultCampfireDisplay(List<EntryIngredient> inputs, List<EntryIngredient> outputs, Optional<ResourceLocation> location, CompoundTag tag) {
- this(inputs, outputs, location, tag.getDouble("cookTime"));
+ this(inputs, outputs, location, tag.getDouble("cookTime").orElseThrow());
}
public DefaultCampfireDisplay(List<EntryIngredient> inputs, List<EntryIngredient> outputs, Optional<ResourceLocation> location, double cookTime) {
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultCompostingDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultCompostingDisplay.java
index 25b08fbe0..ffd2e0270 100644
--- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultCompostingDisplay.java
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultCompostingDisplay.java
@@ -76,7 +76,7 @@ public class DefaultCompostingDisplay extends BasicDisplay {
@ApiStatus.Internal
public DefaultCompostingDisplay(List<EntryIngredient> inputs, List<EntryIngredient> outputs, CompoundTag tag) {
- this(inputs, outputs, tag.getInt("page"));
+ this(inputs, outputs, tag.getInt("page").orElseThrow());
}
public DefaultCompostingDisplay(List<EntryIngredient> inputs, List<EntryIngredient> outputs) {
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultFuelDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultFuelDisplay.java
index 873afd126..865d58493 100644
--- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultFuelDisplay.java
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultFuelDisplay.java
@@ -57,7 +57,7 @@ public class DefaultFuelDisplay extends BasicDisplay {
private final int fuelTime;
public DefaultFuelDisplay(List<EntryIngredient> inputs, List<EntryIngredient> outputs, CompoundTag tag) {
- this(inputs, outputs, tag.getInt("fuelTime"));
+ this(inputs, outputs, tag.getInt("fuelTime").orElseThrow());
}
public DefaultFuelDisplay(List<EntryIngredient> inputs, List<EntryIngredient> outputs, int fuelTime) {
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultSmithingDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultSmithingDisplay.java
index a682850ab..02b580687 100644
--- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultSmithingDisplay.java
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultSmithingDisplay.java
@@ -32,29 +32,32 @@ import me.shedaniel.rei.api.common.entry.EntryIngredient;
import me.shedaniel.rei.api.common.entry.EntryStack;
import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes;
import me.shedaniel.rei.api.common.util.EntryIngredients;
-import me.shedaniel.rei.api.common.util.EntryStacks;
import me.shedaniel.rei.plugin.common.BuiltinPlugin;
import me.shedaniel.rei.plugin.common.SmithingDisplay;
import net.minecraft.core.Holder;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.RegistryAccess;
import net.minecraft.core.component.DataComponents;
-import net.minecraft.core.registries.Registries;
import net.minecraft.network.codec.ByteBufCodecs;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.item.component.ProvidesTrimMaterial;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.item.crafting.RecipeHolder;
import net.minecraft.world.item.crafting.SmithingTransformRecipe;
import net.minecraft.world.item.crafting.SmithingTrimRecipe;
-import net.minecraft.world.item.equipment.trim.*;
+import net.minecraft.world.item.equipment.trim.ArmorTrim;
+import net.minecraft.world.item.equipment.trim.TrimMaterial;
+import net.minecraft.world.item.equipment.trim.TrimMaterials;
+import net.minecraft.world.item.equipment.trim.TrimPattern;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
+import java.util.Objects;
import java.util.Optional;
import java.util.stream.Stream;
@@ -78,17 +81,17 @@ public class DefaultSmithingDisplay extends BasicDisplay implements SmithingDisp
DefaultSmithingDisplay::new
));
- private final Optional<SmithingRecipeType> type;
+ protected final Optional<SmithingRecipeType> type;
@ApiStatus.Experimental
public static DefaultSmithingDisplay ofTransforming(RecipeHolder<SmithingTransformRecipe> recipe) {
return new DefaultSmithingDisplay(
List.of(
recipe.value().templateIngredient().map(EntryIngredients::ofIngredient).orElse(EntryIngredient.empty()),
- recipe.value().baseIngredient().map(EntryIngredients::ofIngredient).orElse(EntryIngredient.empty()),
+ EntryIngredients.ofIngredient(recipe.value().baseIngredient()),
recipe.value().additionIngredient().map(EntryIngredients::ofIngredient).orElse(EntryIngredient.empty())
),
- List.of(EntryIngredients.of(recipe.value().result)),
+ List.of(EntryIngredients.ofSlotDisplay(recipe.value().result.display())),
Optional.of(SmithingRecipeType.TRANSFORM),
Optional.of(recipe.id().location())
);
@@ -97,26 +100,19 @@ public class DefaultSmithingDisplay extends BasicDisplay implements SmithingDisp
public static List<DefaultSmithingDisplay> fromTrimming(RecipeHolder<SmithingTrimRecipe> recipe) {
RegistryAccess registryAccess = BasicDisplay.registryAccess();
List<DefaultSmithingDisplay> displays = new ArrayList<>();
- for (Holder<Item> templateItem : (Iterable<Holder<Item>>) recipe.value().templateIngredient().map(Ingredient::items).orElse(Stream.of())::iterator) {
- Holder.Reference<TrimPattern> trimPattern = getPatternFromTemplate(registryAccess, templateItem)
+ Holder<TrimPattern> trimPattern = recipe.value().pattern;
+ for (Holder<Item> additionStack : (Iterable<Holder<Item>>) recipe.value().additionIngredient().map(Ingredient::items).orElse(Stream.of())::iterator) {
+ Holder<TrimMaterial> trimMaterial = getMaterialFromIngredient(registryAccess, additionStack)
.orElse(null);
- if (trimPattern == null) continue;
+ if (trimMaterial == null) continue;
- for (Holder<Item> additionStack : (Iterable<Holder<Item>>) recipe.value().additionIngredient().map(Ingredient::items).orElse(Stream.of())::iterator) {
- Holder.Reference<TrimMaterial> trimMaterial = getMaterialFromIngredient(registryAccess, additionStack)
- .orElse(null);
- if (trimMaterial == null) continue;
-
- EntryIngredient baseIngredient = recipe.value().baseIngredient().map(EntryIngredients::ofIngredient).orElse(EntryIngredient.empty());
- EntryIngredient templateOutput = baseIngredient.isEmpty() ? EntryIngredient.empty()
- : getTrimmingOutput(registryAccess, EntryStacks.ofItemHolder(templateItem), baseIngredient.get(0), EntryStacks.ofItemHolder(additionStack));
-
- displays.add(new DefaultSmithingDisplay(List.of(
- EntryIngredients.ofItemHolder(templateItem),
- baseIngredient,
- EntryIngredients.ofItemHolder(additionStack)
- ), List.of(templateOutput), Optional.of(SmithingRecipeType.TRIM), Optional.of(recipe.id().location())));
- }
+ EntryIngredient baseIngredient = EntryIngredients.ofIngredient(recipe.value().baseIngredient());
+
+ displays.add(new DefaultSmithingDisplay.Trimming(List.of(
+ recipe.value().templateIngredient().map(EntryIngredients::ofIngredient).orElse(EntryIngredient.empty()),
+ baseIngredient,
+ EntryIngredients.ofItemHolder(additionStack)
+ ), List.of(baseIngredient), Optional.of(SmithingRecipeType.TRIM), Optional.of(recipe.id().location()), recipe.value().pattern));
}
return displays;
}
@@ -149,36 +145,65 @@ public class DefaultSmithingDisplay extends BasicDisplay implements SmithingDisp
@ApiStatus.Experimental
@ApiStatus.Internal
- public static EntryIngredient getTrimmingOutput(RegistryAccess registryAccess, EntryStack<?> template, EntryStack<?> base, EntryStack<?> addition) {
- if (template.getType() != VanillaEntryTypes.ITEM || base.getType() != VanillaEntryTypes.ITEM || addition.getType() != VanillaEntryTypes.ITEM) return EntryIngredient.empty();
- ItemStack templateItem = template.castValue();
+ public static EntryIngredient getTrimmingOutput(RegistryAccess registryAccess, Holder<TrimPattern> trimPattern, EntryStack<?> base, EntryStack<?> addition) {
+ if (base.getType() != VanillaEntryTypes.ITEM || addition.getType() != VanillaEntryTypes.ITEM) return EntryIngredient.empty();
ItemStack baseItem = base.castValue();
ItemStack additionItem = addition.castValue();
- Holder.Reference<TrimPattern> trimPattern = TrimPatterns.getFromTemplate(registryAccess, templateItem)
- .orElse(null);
if (trimPattern == null) return EntryIngredient.empty();
- Holder.Reference<TrimMaterial> trimMaterial = TrimMaterials.getFromIngredient(registryAccess, additionItem)
+ Holder<TrimMaterial> trimMaterial = TrimMaterials.getFromIngredient(registryAccess, additionItem)
.orElse(null);
if (trimMaterial == null) return EntryIngredient.empty();
ArmorTrim armorTrim = new ArmorTrim(trimMaterial, trimPattern);
ArmorTrim trim = baseItem.get(DataComponents.TRIM);
- if (trim != null && trim.hasPatternAndMaterial(trimPattern, trimMaterial)) return EntryIngredient.empty();
+ if (Objects.equals(trim, armorTrim)) return EntryIngredient.empty();
ItemStack newItem = baseItem.copyWithCount(1);
newItem.set(DataComponents.TRIM, armorTrim);
return EntryIngredients.of(newItem);
}
- private static Optional<Holder.Reference<TrimPattern>> getPatternFromTemplate(HolderLookup.Provider provider, Holder<Item> item) {
- return provider.lookupOrThrow(Registries.TRIM_PATTERN)
- .listElements()
- .filter(reference -> item == reference.value().templateItem())
- .findFirst();
+ private static Optional<Holder<TrimMaterial>> getMaterialFromIngredient(HolderLookup.Provider provider, Holder<Item> item) {
+ ProvidesTrimMaterial providesTrimMaterial = new ItemStack(item).get(DataComponents.PROVIDES_TRIM_MATERIAL);
+ return providesTrimMaterial != null ? providesTrimMaterial.unwrap(provider) : Optional.empty();
}
- private static Optional<Holder.Reference<TrimMaterial>> getMaterialFromIngredient(HolderLookup.Provider provider, Holder<Item> item) {
- return provider.lookupOrThrow(Registries.TRIM_MATERIAL)
- .listElements()
- .filter(reference -> item == reference.value().ingredient())
- .findFirst();
+ public static class Trimming extends DefaultSmithingDisplay implements SmithingDisplay.Trimming {
+ public static final DisplaySerializer<DefaultSmithingDisplay.Trimming> SERIALIZER = DisplaySerializer.of(
+ RecordCodecBuilder.mapCodec(instance -> instance.group(
+ EntryIngredient.codec().listOf().fieldOf("inputs").forGetter(DefaultSmithingDisplay.Trimming::getInputEntries),
+ EntryIngredient.codec().listOf().fieldOf("outputs").forGetter(DefaultSmithingDisplay.Trimming::getOutputEntries),
+ SmithingRecipeType.CODEC.optionalFieldOf("type").forGetter(d -> d.type),
+ ResourceLocation.CODEC.optionalFieldOf("location").forGetter(DefaultSmithingDisplay.Trimming::getDisplayLocation),
+ TrimPattern.CODEC.fieldOf("pattern").forGetter(DefaultSmithingDisplay.Trimming::pattern)
+ ).apply(instance, DefaultSmithingDisplay.Trimming::new)),
+ StreamCodec.composite(
+ EntryIngredient.streamCodec().apply(ByteBufCodecs.list()),
+ DefaultSmithingDisplay.Trimming::getInputEntries,
+ EntryIngredient.streamCodec().apply(ByteBufCodecs.list()),
+ DefaultSmithingDisplay.Trimming::getOutputEntries,
+ ByteBufCodecs.optional(SmithingRecipeType.STREAM_CODEC),
+ d -> d.type,
+ ByteBufCodecs.optional(ResourceLocation.STREAM_CODEC),
+ DefaultSmithingDisplay.Trimming::getDisplayLocation,
+ TrimPattern.STREAM_CODEC,
+ DefaultSmithingDisplay.Trimming::pattern,
+ DefaultSmithingDisplay.Trimming::new
+ ));
+
+ private final Holder<TrimPattern> pattern;
+
+ public Trimming(List<EntryIngredient> inputs, List<EntryIngredient> outputs, Optional<SmithingRecipeType> type, Optional<ResourceLocation> location, Holder<TrimPattern> pattern) {
+ super(inputs, outputs, type, location);
+ this.pattern = pattern;
+ }
+
+ @Override
+ public Holder<TrimPattern> pattern() {
+ return pattern;
+ }
+
+ @Override
+ public DisplaySerializer<? extends Display> getSerializer() {
+ return DefaultSmithingDisplay.Trimming.SERIALIZER;
+ }
}
}
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/anvil/DefaultAnvilDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/anvil/DefaultAnvilDisplay.java
index d6c7e7459..7f1d20ec5 100644
--- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/anvil/DefaultAnvilDisplay.java
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/anvil/DefaultAnvilDisplay.java
@@ -34,11 +34,13 @@ import me.shedaniel.rei.api.common.util.EntryIngredients;
import me.shedaniel.rei.plugin.common.BuiltinPlugin;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
+import net.minecraft.Util;
import net.minecraft.client.Minecraft;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.codec.ByteBufCodecs;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.resources.ResourceLocation;
+import net.minecraft.world.entity.EntityEquipment;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.inventory.AnvilMenu;
import net.minecraft.world.item.ItemStack;
@@ -86,7 +88,7 @@ public class DefaultAnvilDisplay extends BasicDisplay {
}
public DefaultAnvilDisplay(List<EntryIngredient> inputs, List<EntryIngredient> outputs, Optional<ResourceLocation> location, CompoundTag tag) {
- this(inputs, outputs, location, tag.contains("Cost") ? OptionalInt.of(tag.getInt("Cost")) : OptionalInt.empty());
+ this(inputs, outputs, location, tag.contains("Cost") ? Util.make(() -> tag.getInt("Cost").isPresent() ? OptionalInt.of(tag.getInt("Cost").get()) : OptionalInt.empty()) : OptionalInt.empty());
}
public DefaultAnvilDisplay(List<EntryIngredient> inputs, List<EntryIngredient> outputs, Optional<ResourceLocation> location, OptionalInt cost) {
@@ -114,7 +116,7 @@ public class DefaultAnvilDisplay extends BasicDisplay {
public static Optional<Pair<ItemStack, Integer>> calculateOutput(ItemStack left, ItemStack right) {
try {
if (Minecraft.getInstance().player == null) return Optional.empty();
- AnvilMenu menu = new AnvilMenu(0, new Inventory(Minecraft.getInstance().player));
+ AnvilMenu menu = new AnvilMenu(0, new Inventory(Minecraft.getInstance().player, new EntityEquipment()));
menu.setItem(0, menu.incrementStateId(), left);
menu.setItem(1, menu.incrementStateId(), right);
ItemStack output = menu.getSlot(2).getItem().copy();
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/cooking/DefaultCookingDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/cooking/DefaultCookingDisplay.java
index 4fd648765..0e9097138 100644
--- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/cooking/DefaultCookingDisplay.java
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/cooking/DefaultCookingDisplay.java
@@ -51,7 +51,7 @@ public abstract class DefaultCookingDisplay extends BasicDisplay implements Cook
}
public DefaultCookingDisplay(List<EntryIngredient> input, List<EntryIngredient> output, Optional<ResourceLocation> id, CompoundTag tag) {
- this(input, output, id, tag.getFloat("xp"), tag.getDouble("cookTime"));
+ this(input, output, id, tag.getFloat("xp").orElseThrow(), tag.getDouble("cookTime").orElseThrow());
}
public DefaultCookingDisplay(List<EntryIngredient> input, List<EntryIngredient> output, Optional<ResourceLocation> id, float xp, double cookTime) {