aboutsummaryrefslogtreecommitdiff
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
parent9d3bb3cfc7d0c494b33e5d914487a404f2f9d02e (diff)
downloadRoughlyEnoughItems-ade79d9a271916885c758632c01d4f7195803a2c.tar.gz
RoughlyEnoughItems-ade79d9a271916885c758632c01d4f7195803a2c.tar.bz2
RoughlyEnoughItems-ade79d9a271916885c758632c01d4f7195803a2c.zip
Update to 1.21.5
-rw-r--r--.github/workflows/curseforge.yml1
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/entry/filtering/FilteringRuleType.java4
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/registry/transfer/simple/SimpleTransferHandler.java4
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/util/MatrixUtils.java2
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/util/SpriteRenderer.java9
-rw-r--r--api/src/main/java/me/shedaniel/rei/impl/ClientInternals.java7
-rwxr-xr-xbuild.gradle2
-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
-rw-r--r--fabric/build.gradle2
-rw-r--r--fabric/src/main/resources/error_notifier.json4
-rw-r--r--fabric/src/main/resources/roughlyenoughitems.accessWidener5
-rw-r--r--gradle.properties16
-rwxr-xr-xgradle/wrapper/gradle-wrapper.properties2
-rw-r--r--neoforge/build.gradle4
-rw-r--r--neoforge/src/main/resources/META-INF/accesstransformer.cfg3
-rw-r--r--neoforge/src/main/resources/META-INF/neoforge.mods.toml6
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCoreClient.java5
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java12
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java13
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/REIRuntimeImpl.java4
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigManagerImpl.java12
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigObjectImpl.java1
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringScreen.java5
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/rules/SearchFilteringRuleType.java4
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/RecipeDisplayExporter.java6
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/config/components/ConfigOptionValueWidget.java21
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/config/options/AllREIConfigGroups.java4
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/error/ErrorsEntryListWidget.java13
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/collapsible/selection/CustomCollapsibleEntrySelectionScreen.java5
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/generic/OptionEntriesScreen.java1
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/CachedEntryListRender.java34
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/ConfigButtonWidget.java8
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DynamicErrorFreeEntryListWidget.java24
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryHighlighter.java5
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java8
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/HoleWidget.java5
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/basewidgets/ArrowWidget.java12
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/basewidgets/BurningFireWidget.java12
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayHistoryManager.java10
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/search/OverlaySearchField.java5
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/SlotAccessorRegistryImpl.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java9
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/DefaultClientRuntimePlugin.java8
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/common/runtime/DefaultRuntimePlugin.java4
57 files changed, 227 insertions, 238 deletions
diff --git a/.github/workflows/curseforge.yml b/.github/workflows/curseforge.yml
index b8b60ea80..c268d74ae 100644
--- a/.github/workflows/curseforge.yml
+++ b/.github/workflows/curseforge.yml
@@ -22,6 +22,7 @@ on:
- 16.x-1.21
- 17.x-1.21.2
- 18.x-1.21.4
+ - 19.x-1.21.5
jobs:
build:
diff --git a/api/src/main/java/me/shedaniel/rei/api/client/entry/filtering/FilteringRuleType.java b/api/src/main/java/me/shedaniel/rei/api/client/entry/filtering/FilteringRuleType.java
index 5c17346d2..620c3e07a 100644
--- a/api/src/main/java/me/shedaniel/rei/api/client/entry/filtering/FilteringRuleType.java
+++ b/api/src/main/java/me/shedaniel/rei/api/client/entry/filtering/FilteringRuleType.java
@@ -74,9 +74,9 @@ public interface FilteringRuleType<T extends FilteringRule<?>> {
*/
@Nullable
static FilteringRule<?> read(CompoundTag tag) {
- FilteringRuleType<?> type = FilteringRuleTypeRegistry.getInstance().get(ResourceLocation.tryParse(tag.getString("id")));
+ FilteringRuleType<?> type = FilteringRuleTypeRegistry.getInstance().get(ResourceLocation.tryParse(tag.getString("id").orElseThrow()));
if (type == null) return null;
- return type.readFrom(tag.getCompound("rule"));
+ return type.readFrom(tag.getCompoundOrEmpty("rule"));
}
/**
diff --git a/api/src/main/java/me/shedaniel/rei/api/client/registry/transfer/simple/SimpleTransferHandler.java b/api/src/main/java/me/shedaniel/rei/api/client/registry/transfer/simple/SimpleTransferHandler.java
index 17668f8ca..f5c8981f8 100644
--- a/api/src/main/java/me/shedaniel/rei/api/client/registry/transfer/simple/SimpleTransferHandler.java
+++ b/api/src/main/java/me/shedaniel/rei/api/client/registry/transfer/simple/SimpleTransferHandler.java
@@ -32,7 +32,6 @@ import me.shedaniel.rei.api.client.registry.transfer.TransferHandler;
import me.shedaniel.rei.api.client.registry.transfer.TransferHandlerMeta;
import me.shedaniel.rei.api.common.category.CategoryIdentifier;
import me.shedaniel.rei.api.common.display.Display;
-import me.shedaniel.rei.api.common.entry.EntryStack;
import me.shedaniel.rei.api.common.entry.InputIngredient;
import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes;
import me.shedaniel.rei.api.common.transfer.info.stack.SlotAccessor;
@@ -46,7 +45,6 @@ import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.item.ItemStack;
import org.jetbrains.annotations.ApiStatus;
-import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
@@ -80,7 +78,7 @@ public interface SimpleTransferHandler extends TransferHandler, TransferHandlerM
public Iterable<SlotAccessor> getInventorySlots(Context context) {
LocalPlayer player = context.getMinecraft().player;
Inventory inventory = player.getInventory();
- return IntStream.range(0, inventory.items.size())
+ return IntStream.range(0, inventory.getNonEquipmentItems().size())
.mapToObj(index -> SlotAccessor.fromPlayerInventory(player, index))
.collect(Collectors.toList());
}
diff --git a/api/src/main/java/me/shedaniel/rei/api/client/util/MatrixUtils.java b/api/src/main/java/me/shedaniel/rei/api/client/util/MatrixUtils.java
index 7d6192fd5..6ca6595ff 100644
--- a/api/src/main/java/me/shedaniel/rei/api/client/util/MatrixUtils.java
+++ b/api/src/main/java/me/shedaniel/rei/api/client/util/MatrixUtils.java
@@ -36,7 +36,7 @@ public class MatrixUtils {
Transformation transformation = new Transformation(matrix);
Transformation inverse = transformation.inverse();
if (inverse != null) inverse.getScale(); // This has a side effect
- return inverse == null ? Transformation.identity().getMatrix() : inverse.getMatrix();
+ return inverse == null ? Transformation.identity().getMatrixCopy() : inverse.getMatrixCopy();
}
public static Rectangle transform(Matrix4f matrix, Rectangle rectangle) {
diff --git a/api/src/main/java/me/shedaniel/rei/api/client/util/SpriteRenderer.java b/api/src/main/java/me/shedaniel/rei/api/client/util/SpriteRenderer.java
index 5c9e3c92f..f7005374f 100644
--- a/api/src/main/java/me/shedaniel/rei/api/client/util/SpriteRenderer.java
+++ b/api/src/main/java/me/shedaniel/rei/api/client/util/SpriteRenderer.java
@@ -28,11 +28,15 @@ import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
+import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
+import net.minecraft.client.renderer.texture.AbstractTexture;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
+import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.resources.ResourceLocation;
+import net.minecraft.util.TriState;
import org.joml.Matrix3f;
import org.joml.Matrix4f;
import org.joml.Vector3f;
@@ -223,7 +227,10 @@ public class SpriteRenderer {
float sX = sprite.contents().width();
float sY = sprite.contents().height();
- RenderSystem.setShaderTexture(0, texture);
+ TextureManager textureManager = Minecraft.getInstance().getTextureManager();
+ AbstractTexture abstractTexture = textureManager.getTexture(texture);
+ abstractTexture.setFilter(TriState.FALSE, false);
+ RenderSystem.setShaderTexture(0, abstractTexture.getTexture());
for (float y = y1; y < y2; y += Math.min(y2 - y, sY)) {
for (float x = x1; x < x2; x += Math.min(x2 - x, sX)) {
diff --git a/api/src/main/java/me/shedaniel/rei/impl/ClientInternals.java b/api/src/main/java/me/shedaniel/rei/impl/ClientInternals.java
index 6b00b4d7d..0eb1c9b49 100644
--- a/api/src/main/java/me/shedaniel/rei/impl/ClientInternals.java
+++ b/api/src/main/java/me/shedaniel/rei/impl/ClientInternals.java
@@ -45,7 +45,6 @@ import me.shedaniel.rei.api.common.plugins.PluginManager;
import me.shedaniel.rei.api.common.transfer.info.stack.SlotAccessor;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
-import net.minecraft.client.data.models.blockstates.PropertyDispatch;
import net.minecraft.client.gui.components.events.GuiEventListener;
import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent;
import net.minecraft.nbt.CompoundTag;
@@ -84,7 +83,7 @@ public final class ClientInternals {
private static Function<Boolean, ClickArea.Result> clickAreaHandlerResult = (result) -> throwNotSetup();
private static BiConsumer<List<ClientTooltipComponent>, TooltipComponent> clientTooltipComponentProvider = (tooltip, result) -> throwNotSetup();
private static BiFunction<@Nullable Point, Collection<Tooltip.Entry>, Tooltip> tooltipProvider = (point, texts) -> throwNotSetup();
- private static PropertyDispatch.QuadFunction<Point, @Nullable TooltipFlag, Boolean, Item.TooltipContext, TooltipContext> tooltipContextProvider = (point, texts, search, context) -> throwNotSetup();
+ private static QuadFunction<Point, @Nullable TooltipFlag, Boolean, Item.TooltipContext, TooltipContext> tooltipContextProvider = (point, texts, search, context) -> throwNotSetup();
private static Function<Object, Tooltip.Entry> tooltipEntryProvider = (component) -> throwNotSetup();
private static Supplier<List<String>> jeiCompatMods = ClientInternals::throwNotSetup;
private static Supplier<Object> builtinClientPlugin = ClientInternals::throwNotSetup;
@@ -243,4 +242,8 @@ public final class ClientInternals {
public interface SimpleTransferHandler {
TransferHandler.Result handle(TransferHandler.Context context, me.shedaniel.rei.api.client.registry.transfer.simple.SimpleTransferHandler.MissingInputRenderer missingInputRenderer, List<InputIngredient<ItemStack>> inputs, Iterable<SlotAccessor> inputSlots, Iterable<SlotAccessor> inventorySlots);
}
+
+ public interface QuadFunction<T, U, V, W, R> {
+ R apply(T t, U u, V v, W w);
+ }
}
diff --git a/build.gradle b/build.gradle
index b116e5321..da3e9d952 100755
--- a/build.gradle
+++ b/build.gradle
@@ -1,6 +1,6 @@
plugins {
id("architectury-plugin") version("3.4-SNAPSHOT")
- id("dev.architectury.loom") version("1.7-SNAPSHOT") apply false
+ id("dev.architectury.loom") version("1.10-SNAPSHOT") apply false
id("org.cadixdev.licenser") version("0.6.1")
id("me.shedaniel.unified-publishing") version("0.1.+")
id("maven-publish")
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/