aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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/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) {
diff --git a/fabric/build.gradle b/fabric/build.gradle
index 33fc3bffe..015bf06a6 100644
--- a/fabric/build.gradle
+++ b/fabric/build.gradle
@@ -121,7 +121,7 @@ unifiedPublishing {
project {
displayName = "[Fabric $rootProject.supported_version] v$project.version"
releaseType = rootProject.unstable == "false" ? "release" : "alpha"
- gameVersions = ["1.21.4"]
+ gameVersions = ["1.21.5"]
gameLoaders = ["fabric"]
changelog = rootProject.releaseChangelog
diff --git a/fabric/src/main/resources/error_notifier.json b/fabric/src/main/resources/error_notifier.json
index 41847517f..a2e3d01ed 100644
--- a/fabric/src/main/resources/error_notifier.json
+++ b/fabric/src/main/resources/error_notifier.json
@@ -12,14 +12,14 @@
"type": "depends",
"modId": "architectury",
"modName": "Architectury API",
- "versions": ">=15.0.0 <16.0.0",
+ "versions": ">=16.1.0 <17.0.0",
"url": "https://www.curseforge.com/minecraft/mc-mods/architectury-api/"
},
{
"type": "depends",
"modId": "cloth-config2",
"modName": "Cloth Config",
- "versions": ">=17.0.0 <18.0.0",
+ "versions": ">=18.0.0 <19.0.0",
"url": "https://www.curseforge.com/minecraft/mc-mods/cloth-config/"
}
]
diff --git a/fabric/src/main/resources/roughlyenoughitems.accessWidener b/fabric/src/main/resources/roughlyenoughitems.accessWidener
index dfb2dfa25..84e1facb8 100644
--- a/fabric/src/main/resources/roughlyenoughitems.accessWidener
+++ b/fabric/src/main/resources/roughlyenoughitems.accessWidener
@@ -13,7 +13,6 @@ accessible field net/minecraft/client/gui/screens/recipebook/RecipeBookCompo
accessible field net/minecraft/client/gui/screens/recipebook/RecipeBookComponent tabButtons Ljava/util/List;
accessible field net/minecraft/client/StringSplitter widthProvider Lnet/minecraft/client/StringSplitter$WidthProvider;
accessible field net/minecraft/nbt/CompoundTag tags Ljava/util/Map;
-accessible field net/minecraft/world/entity/player/Inventory compartments Ljava/util/List;
accessible field net/minecraft/world/item/alchemy/PotionBrewing containers Ljava/util/List;
accessible field net/minecraft/world/item/alchemy/PotionBrewing containerMixes Ljava/util/List;
accessible field net/minecraft/world/item/alchemy/PotionBrewing potionMixes Ljava/util/List;
@@ -27,11 +26,11 @@ accessible method net/minecraft/client/gui/screens/Screen
accessible method net/minecraft/client/gui/screens/Screen addRenderableOnly (Lnet/minecraft/client/gui/components/Renderable;)Lnet/minecraft/client/gui/components/Renderable;
accessible method net/minecraft/client/gui/screens/Screen addWidget (Lnet/minecraft/client/gui/components/events/GuiEventListener;)Lnet/minecraft/client/gui/components/events/GuiEventListener;
accessible method net/minecraft/client/gui/GuiGraphics renderTooltipInternal (Lnet/minecraft/client/gui/Font;Ljava/util/List;IILnet/minecraft/client/gui/screens/inventory/tooltip/ClientTooltipPositioner;Lnet/minecraft/resources/ResourceLocation;)V
-accessible method net/minecraft/client/renderer/RenderType create (Ljava/lang/String;Lcom/mojang/blaze3d/vertex/VertexFormat;Lcom/mojang/blaze3d/vertex/VertexFormat$Mode;ILnet/minecraft/client/renderer/RenderType$CompositeState;)Lnet/minecraft/client/renderer/RenderType$CompositeRenderType;
accessible field net/minecraft/tags/TagEntry tag Z
accessible field net/minecraft/tags/TagEntry required Z
accessible field net/minecraft/tags/TagEntry id Lnet/minecraft/resources/ResourceLocation;
-accessible field net/minecraft/world/item/crafting/SmithingTransformRecipe result Lnet/minecraft/world/item/ItemStack;
+accessible field net/minecraft/world/item/crafting/SmithingTransformRecipe result Lnet/minecraft/world/item/crafting/TransmuteResult;
+accessible field net/minecraft/world/item/crafting/SmithingTrimRecipe pattern Lnet/minecraft/core/Holder;
accessible field net/minecraft/world/item/CreativeModeTab displayItemsGenerator Lnet/minecraft/world/item/CreativeModeTab$DisplayItemsGenerator;
accessible class net/minecraft/world/item/CreativeModeTab$ItemDisplayBuilder
accessible field net/minecraft/client/multiplayer/ClientLevel connection Lnet/minecraft/client/multiplayer/ClientPacketListener;
diff --git a/gradle.properties b/gradle.properties
index ef212bf62..b67d624e1 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,16 +1,16 @@
org.gradle.jvmargs=-Xmx6G
-base_version=18.0
+base_version=19.0
unstable=false
-supported_version=1.21.4
-minecraft_version=1.21.4
+supported_version=1.21.5
+minecraft_version=1.21.5
platforms=fabric,neoforge
forge_version=49.1.10
-neoforge_version=21.4.84-beta
+neoforge_version=21.5.23-beta
neoforge_pr=
-fabricloader_version=0.16.7
-cloth_config_version=17.0.144
+fabricloader_version=0.16.12
+cloth_config_version=18.0.145
modmenu_version=11.0.0-rc.2
-fabric_api=0.112.0+1.21.4
-architectury_version=15.0.2
+fabric_api=0.119.6+1.21.5
+architectury_version=16.1.4
api_exculde=
#api_include=me.shedaniel.cloth:cloth-events,me.shedaniel.cloth:config-2,me.sargunvohra.mcmods:autoconfig1u,org.jetbrains:annotations,net.fabricmc.fabric-api:fabric
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 0b2225055..88e30aee6 100755
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
diff --git a/neoforge/build.gradle b/neoforge/build.gradle
index e7cbcec72..abc2ae05d 100644
--- a/neoforge/build.gradle
+++ b/neoforge/build.gradle
@@ -168,7 +168,7 @@ unifiedPublishing {
project {
displayName = "[NeoForge $rootProject.supported_version] v$project.version"
releaseType = "beta"
- gameVersions = ["1.21.4"]
+ gameVersions = ["1.21.5"]
gameLoaders = ["neoforge"]
changelog = rootProject.releaseChangelog
@@ -208,7 +208,7 @@ unifiedPublishing {
project {
displayName = "[NeoForge $rootProject.supported_version] v$project.version"
releaseType = "release"
- gameVersions = ["1.21.4"]
+ gameVersions = ["1.21.5"]
gameLoaders = ["neoforge"]
changelog = rootProject.releaseChangelog
diff --git a/neoforge/src/main/resources/META-INF/accesstransformer.cfg b/neoforge/src/main/resources/META-INF/accesstransformer.cfg
index 8e2a5e547..387e2bce5 100644
--- a/neoforge/src/main/resources/META-INF/accesstransformer.cfg
+++ b/neoforge/src/main/resources/META-INF/accesstransformer.cfg
@@ -13,7 +13,6 @@ public net.minecraft.client.gui.screens.recipebook.RecipeBookComponent searchBox
public net.minecraft.client.gui.screens.recipebook.RecipeBookComponent tabButtons
public net.minecraft.client.StringSplitter widthProvider
public net.minecraft.nbt.CompoundTag tags
-public net.minecraft.world.entity.player.Inventory compartments
public net.minecraft.world.item.alchemy.PotionBrewing containers
public net.minecraft.world.item.alchemy.PotionBrewing containerMixes
public net.minecraft.world.item.alchemy.PotionBrewing potionMixes
@@ -32,13 +31,13 @@ public net.minecraft.client.gui.screens.Screen addRenderableOnly(Lnet/minecraft/
public net.minecraft.client.gui.GuiGraphics renderTooltipInternal(Lnet/minecraft/client/gui/Font;Ljava/util/List;IILnet/minecraft/client/gui/screens/inventory/tooltip/ClientTooltipPositioner;Lnet/minecraft/resources/ResourceLocation;)V # renderTooltipInternal
public net.minecraft.client.gui.GuiGraphics tooltipStack
public net.minecraft.client.gui.GuiGraphics innerBlit(Lnet/minecraft/resources/ResourceLocation;IIIIIFFFF)V # innerBlit
-public net.minecraft.client.renderer.RenderType create(Ljava/lang/String;Lcom/mojang/blaze3d/vertex/VertexFormat;Lcom/mojang/blaze3d/vertex/VertexFormat$Mode;ILnet/minecraft/client/renderer/RenderType$CompositeState;)Lnet/minecraft/client/renderer/RenderType$CompositeRenderType;
public net.minecraft.client.renderer.RenderType$OutlineProperty
public net.minecraft.client.renderer.RenderType$CompositeState
public net.minecraft.tags.TagEntry tag # tag
public net.minecraft.tags.TagEntry required # required
public net.minecraft.tags.TagEntry id # id
public net.minecraft.world.item.crafting.SmithingTransformRecipe result # result
+public net.minecraft.world.item.crafting.SmithingTrimRecipe pattern # pattern
public-f net.minecraft.client.gui.font.CodepointMap empty # empty
public-f net.minecraft.client.gui.font.CodepointMap blockMap # blockMap
public-f net.minecraft.client.gui.font.CodepointMap blockConstructor # blockConstructor
diff --git a/neoforge/src/main/resources/META-INF/neoforge.mods.toml b/neoforge/src/main/resources/META-INF/neoforge.mods.toml
index 7238a2790..707ff7dac 100644
--- a/neoforge/src/main/resources/META-INF/neoforge.mods.toml
+++ b/neoforge/src/main/resources/META-INF/neoforge.mods.toml
@@ -16,21 +16,21 @@ To allow players to view items and recipes.
[[dependencies.roughlyenoughitems]]
modId = "architectury"
type = "required"
-versionRange = "[15.0.2,)"
+versionRange = "[16.1.0,)"
ordering = "NONE"
side = "BOTH"
[[dependencies.roughlyenoughitems]]
modId = "cloth_config"
type = "required"
-versionRange = "[10.0,)"
+versionRange = "[18.0,)"
ordering = "NONE"
side = "BOTH"
[[dependencies.roughlyenoughitems]]
modId = "neoforge"
type = "required"
-versionRange = "[21.4.84-beta,)"
+versionRange = "[21.5-beta,)"
ordering = "NONE"
side = "BOTH"
diff --git a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCoreClient.java b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCoreClient.java
index 86ccdcb37..69275ebc9 100644
--- a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCoreClient.java
+++ b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCoreClient.java
@@ -99,7 +99,6 @@ import me.shedaniel.rei.plugin.test.REITestPlugin;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.Minecraft;
-import net.minecraft.client.data.models.blockstates.PropertyDispatch;
import net.minecraft.client.gui.components.EditBox;
import net.minecraft.client.gui.components.ImageButton;
import net.minecraft.client.gui.components.events.GuiEventListener;
@@ -140,14 +139,14 @@ public class RoughlyEnoughItemsCoreClient {
ClientInternals.attachInstance((Supplier<EntryRenderer<?>>) () -> emptyEntryRenderer, "emptyEntryRenderer");
ClientInternals.attachInstance((BiFunction<Supplier<DataResult<FavoriteEntry>>, Supplier<CompoundTag>, FavoriteEntry>) DelegatingFavoriteEntryProviderImpl::new, "delegateFavoriteEntry");
ClientInternals.attachInstance((Function<CompoundTag, DataResult<FavoriteEntry>>) (object) -> {
- String type = object.getString(FavoriteEntry.TYPE_KEY);
+ String type = object.getString(FavoriteEntry.TYPE_KEY).orElseThrow();
ResourceLocation id = ResourceLocation.parse(type);
FavoriteEntryType<FavoriteEntry> entryType = FavoriteEntryType.registry().get(id);
if (entryType == null) return DataResult.error(() -> "Unknown favorite type: " + id + ", json: " + object);
return entryType.read(object);
}, "favoriteEntryFromJson");
ClientInternals.attachInstance((BiFunction<@Nullable Point, Collection<Tooltip.Entry>, Tooltip>) QueuedTooltip::impl, "tooltipProvider");
- ClientInternals.attachInstance((PropertyDispatch.QuadFunction<Point, @Nullable TooltipFlag, Boolean, Item.TooltipContext, TooltipContext>) TooltipContextImpl::new, "tooltipContextProvider");
+ ClientInternals.attachInstance((ClientInternals.QuadFunction<Point, @Nullable TooltipFlag, Boolean, Item.TooltipContext, TooltipContext>) TooltipContextImpl::new, "tooltipContextProvider");
ClientInternals.attachInstance((Function<Object, Tooltip.Entry>) QueuedTooltip.TooltipEntryImpl::new, "tooltipEntryProvider");
ClientInternals.attachInstance((BiFunction<Component, List<FavoriteMenuEntry>, FavoriteMenuEntry>) SubMenuEntry::new, "subMenuEntry");
ClientInternals.attachInstance((BiFunction<Component, BooleanValue, FavoriteMenuEntry>) (text, value) -> ToggleMenuEntry.of(text, value::get, value), "toggleEntry");
diff --git a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java
index a1305b421..511decbd6 100644
--- a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java
+++ b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java
@@ -132,7 +132,7 @@ public class RoughlyEnoughItemsNetwork {
int hotbarSlotId = buf.readVarInt();
if (hotbarSlotId >= 0 && hotbarSlotId < 9) {
AbstractContainerMenu menu = player.containerMenu;
- player.getInventory().items.set(hotbarSlotId, stack.copy());
+ player.getInventory().setItem(hotbarSlotId, stack.copy());
menu.broadcastChanges();
RegistryFriendlyByteBuf newBuf = new RegistryFriendlyByteBuf(Unpooled.buffer(), player.registryAccess());
newBuf.writeJsonWithCodec(ItemStack.OPTIONAL_CODEC, stack.copy());
@@ -151,11 +151,11 @@ public class RoughlyEnoughItemsNetwork {
boolean shift = packetByteBuf.readBoolean();
try {
CompoundTag nbt = packetByteBuf.readNbt();
- int version = nbt.getInt("Version");
+ int version = nbt.getInt("Version").orElse(-1);
if (version != 1) throw new IllegalStateException("Server and client REI protocol version mismatch! Server: 1, Client: " + version);
- List<InputIngredient<ItemStack>> inputs = readInputs(context.registryAccess(), nbt.getList("Inputs", Tag.TAG_COMPOUND));
- List<SlotAccessor> input = readSlots(container, player, nbt.getList("InputSlots", Tag.TAG_COMPOUND));
- List<SlotAccessor> inventory = readSlots(container, player, nbt.getList("InventorySlots", Tag.TAG_COMPOUND));
+ List<InputIngredient<ItemStack>> inputs = readInputs(context.registryAccess(), nbt.getListOrEmpty("Inputs"));
+ List<SlotAccessor> input = readSlots(container, player, nbt.getListOrEmpty("InputSlots"));
+ List<SlotAccessor> inventory = readSlots(container, player, nbt.getListOrEmpty("InventorySlots"));
NewInputSlotCrafter<AbstractContainerMenu, Container> crafter = new NewInputSlotCrafter<>(container, input, inventory, inputs);
crafter.fillInputSlots(player, shift);
} catch (InputSlotCrafter.NotEnoughMaterialsException e) {
@@ -189,7 +189,7 @@ public class RoughlyEnoughItemsNetwork {
List<InputIngredient<ItemStack>> inputs = new ArrayList<>();
for (Tag t : tag) {
CompoundTag compoundTag = (CompoundTag) t;
- InputIngredient<EntryStack<?>> stacks = InputIngredient.of(compoundTag.getInt("Index"), EntryIngredient.codec().parse(registryAccess.createSerializationContext(NbtOps.INSTANCE), compoundTag.getList("Ingredient", Tag.TAG_COMPOUND)).getOrThrow());
+ InputIngredient<EntryStack<?>> stacks = InputIngredient.of(compoundTag.getInt("Index").orElseThrow(), EntryIngredient.codec().parse(registryAccess.createSerializationContext(NbtOps.INSTANCE), compoundTag.getListOrEmpty("Ingredient")).getOrThrow());
inputs.add(InputIngredient.withType(stacks, VanillaEntryTypes.ITEM));
}
return inputs;
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java
index 7591124f3..ba4c7cc1a 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java
@@ -57,7 +57,6 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
import net.minecraft.client.gui.screens.inventory.CreativeModeInventoryScreen;
-import net.minecraft.core.NonNullList;
import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
@@ -128,7 +127,7 @@ public class ClientHelperImpl implements ClientHelper {
}
public boolean canDeleteItems() {
- return hasPermissionToUsePackets() || Minecraft.getInstance().gameMode.hasInfiniteItems();
+ return hasPermissionToUsePackets() || Minecraft.getInstance().player.hasInfiniteMaterials();
}
@Override
@@ -286,12 +285,10 @@ public class ClientHelperImpl implements ClientHelper {
return Long2LongMaps.EMPTY_MAP;
}
Long2LongOpenHashMap map = new Long2LongOpenHashMap();
- for (NonNullList<ItemStack> compartment : Minecraft.getInstance().player.getInventory().compartments) {
- for (ItemStack stack : compartment) {
- long hash = definition.hash(null, stack, ComparisonContext.FUZZY);
- long newCount = map.getOrDefault(hash, 0) + Math.max(0, stack.getCount());
- map.put(hash, newCount);
- }
+ for (ItemStack stack : Minecraft.getInstance().player.getInventory().getNonEquipmentItems()) {
+ long hash = definition.hash(null, stack, ComparisonContext.FUZZY);
+ long newCount = map.getOrDefault(hash, 0) + Math.max(0, stack.getCount());
+ map.put(hash, newCount);
}
return map;
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/REIRuntimeImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/REIRuntimeImpl.java
index 33eccf0ab..2e0dc1ec8 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/REIRuntimeImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/REIRuntimeImpl.java
@@ -256,11 +256,11 @@ public class REIRuntimeImpl implements REIRuntime {
public void startReload() {
getOverlay().ifPresent(ScreenOverlay::queueReloadOverlay);
lastDisplayScreen.clear();
- if (!RenderSystem.isOnRenderThread()) {
+ /*if (!RenderSystem.isOnRenderThread()) {
RenderSystem.recordRenderCall(CachedEntryListRender::refresh);
} else {
CachedEntryListRender.refresh();
- }
+ }*/
}
@Override
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigManagerImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigManagerImpl.java
index d6cd1418d..05610502f 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigManagerImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigManagerImpl.java
@@ -58,6 +58,7 @@ import net.fabricmc.api.Environment;
import net.minecraft.ResourceLocationException;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.nbt.CompoundTag;
+import net.minecraft.nbt.NbtOps;
import net.minecraft.nbt.Tag;
import net.minecraft.nbt.TagParser;
import net.minecraft.network.chat.Component;
@@ -70,6 +71,7 @@ import java.util.Locale;
@ApiStatus.Internal
@Environment(EnvType.CLIENT)
public class ConfigManagerImpl implements ConfigManager {
+ private static final TagParser<Tag> NBT_OPS_PARSER = TagParser.create(NbtOps.INSTANCE);
private boolean craftableOnly = false;
private final Gson gson = new GsonBuilder().create();
private ConfigObjectImpl object;
@@ -138,7 +140,7 @@ public class ConfigManagerImpl implements ConfigManager {
});
builder.registerDeserializer(String.class, Tag.class, (value, marshaller) -> {
try {
- return TagParser.parseTag(value);
+ return NBT_OPS_PARSER.parseFully(value);
} catch (CommandSyntaxException e) {
throw new DeserializationException(e);
}
@@ -150,7 +152,7 @@ public class ConfigManagerImpl implements ConfigManager {
});
builder.registerDeserializer(String.class, CompoundTag.class, (value, marshaller) -> {
try {
- return TagParser.parseTag(value);
+ return TagParser.parseCompoundFully(value);
} catch (CommandSyntaxException e) {
throw new DeserializationException(e);
}
@@ -170,7 +172,7 @@ public class ConfigManagerImpl implements ConfigManager {
});
builder.registerDeserializer(String.class, EntryStackProvider.class, (value, marshaller) -> {
try {
- return EntryStackProvider.defer(new TagParser(new StringReader(value)).readValue());
+ return EntryStackProvider.defer(NBT_OPS_PARSER.parseFully(new StringReader(value)));
} catch (CommandSyntaxException e) {
e.printStackTrace();
return EntryStackProvider.ofStack(EntryStack.empty());
@@ -196,7 +198,7 @@ public class ConfigManagerImpl implements ConfigManager {
});
builder.registerDeserializer(String.class, FilteringRule.class, (value, marshaller) -> {
try {
- return FilteringRuleType.read(TagParser.parseTag(value));
+ return FilteringRuleType.read(TagParser.parseCompoundFully(value));
} catch (Exception e) {
e.printStackTrace();
return null;
@@ -217,7 +219,7 @@ public class ConfigManagerImpl implements ConfigManager {
});
builder.registerDeserializer(String.class, FavoriteEntry.class, (value, marshaller) -> {
try {
- CompoundTag tag = TagParser.parseTag(value);
+ CompoundTag tag = TagParser.parseCompoundFully(value);
return FavoriteEntry.readDelegated(tag);
} catch (Exception e) {
e.printStackTrace();
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigObjectImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigObjectImpl.java
index 41e91b7c9..4b500fa1f 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigObjectImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigObjectImpl.java
@@ -370,6 +370,7 @@ public class ConfigObjectImpl implements ConfigObject, ConfigData {
@Override
public ModifierKeyCode getExportImageKeybind() {
+ if (true) return ModifierKeyCode.unknown();
return basics.keyBindings.exportImageKeybind == null ? ModifierKeyCode.unknown() : basics.keyBindings.exportImageKeybind;
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringScreen.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringScreen.java
index 442326252..0e322a879 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringScreen.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringScreen.java
@@ -25,7 +25,6 @@ package me.shedaniel.rei.impl.client.config.entries;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
-import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.VertexConsumer;
import me.shedaniel.clothconfig2.ClothConfigInitializer;
import me.shedaniel.clothconfig2.api.scroll.ScrollingContainer;
@@ -460,9 +459,7 @@ public class FilteringScreen extends Screen {
if (isSelected()) {
boolean filtered = isFiltered();
Rectangle bounds = getBounds();
- RenderSystem.disableDepthTest();
graphics.fillGradient(bounds.x, bounds.y, bounds.getMaxX(), bounds.getMaxY(), filtered ? 0x90ffffff : 0x55ffffff, filtered ? 0x90ffffff : 0x55ffffff);
- RenderSystem.enableDepthTest();
}
}
@@ -482,9 +479,7 @@ public class FilteringScreen extends Screen {
protected void drawBackground(GuiGraphics graphics, int mouseX, int mouseY, float delta) {
if (isFiltered()) {
Rectangle bounds = getBounds();
- RenderSystem.disableDepthTest();
graphics.fillGradient(bounds.x, bounds.y, bounds.getMaxX(), bounds.getMaxY(), 0xffff0000, 0xffff0000);
- RenderSystem.enableDepthTest();
}
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/rules/SearchFilteringRuleType.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/rules/SearchFilteringRuleType.java
index 41c4b6875..cfe4999e0 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/rules/SearchFilteringRuleType.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/rules/SearchFilteringRuleType.java
@@ -65,8 +65,8 @@ public enum SearchFilteringRuleType implements FilteringRuleType<SearchFiltering
@Override
public SearchFilteringRule readFrom(CompoundTag tag) {
- String filter = tag.getString("filter");
- boolean show = tag.getBoolean("show");
+ String filter = tag.getString("filter").orElseThrow();
+ boolean show = tag.getBoolean("show").orElseThrow();
return new SearchFilteringRule(filter, show);
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/RecipeDisplayExporter.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/RecipeDisplayExporter.java
index 9183eed9a..d66ac1e2f 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/RecipeDisplayExporter.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/RecipeDisplayExporter.java
@@ -80,9 +80,9 @@ public final class RecipeDisplayExporter {
}
private static void exportRecipe(Rectangle rectangle, DisplaySpec display, List<Widget> widgets) {
- Minecraft client = Minecraft.getInstance();
+ /*Minecraft client = Minecraft.getInstance();
Window window = client.getWindow();
- RenderTarget renderTarget = new TextureTarget(window.getWidth(), window.getHeight(), true);
+ RenderTarget renderTarget = new TextureTarget(null, window.getWidth(), window.getHeight(), true);
renderTarget.setClearColor(0, 0, 0, 0);
renderTarget.bindWrite(true);
RenderSystem.clear(256);
@@ -126,6 +126,6 @@ public final class RecipeDisplayExporter {
renderTarget.destroyBuffers();
// Minecraft.getInstance().levelRenderer.graphicsChanged();
Minecraft.getInstance().getMainRenderTarget().bindWrite(true);
- poseStack.popMatrix();
+ poseStack.popMatrix();*/
}
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/config/components/ConfigOptionValueWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/config/components/ConfigOptionValueWidget.java
index 1e2a67292..4f9a83e96 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/config/components/ConfigOptionValueWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/config/components/ConfigOptionValueWidget.java
@@ -46,7 +46,6 @@ import net.minecraft.client.gui.screens.Screen;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.FormattedText;
import net.minecraft.resources.ResourceLocation;
-import org.joml.Matrix4f;
import java.util.Objects;
import java.util.function.BiConsumer;
@@ -86,12 +85,11 @@ public class ConfigOptionValueWidget {
setText.accept(option.getEntry().getOption(access.get(option)));
- Matrix4f[] matrix = {new Matrix4f()};
Label label = Widgets.createLabel(new Point(), text[0]).rightAligned()
.color(0xFFE0E0E0)
.hoveredColor(0xFFE0E0E0)
.onRender((poses, l) -> {
- if (MatrixUtils.transform(matrix[0], l.getBounds()).contains(PointHelper.ofMouse())) {
+ if (MatrixUtils.transform(poses.pose().last().pose(), l.getBounds()).contains(PointHelper.ofMouse())) {
l.setMessage(text[0].copy().withStyle(ChatFormatting.UNDERLINE));
} else {
l.setMessage(text[0]);
@@ -99,9 +97,9 @@ public class ConfigOptionValueWidget {
});
if (option.getEntry() instanceof OptionValueEntry.Selection<T> selection) {
- applySelection(access, option, selection, label, setText, matrix);
+ applySelection(access, option, selection, label, setText);
} else if (access.get(option) instanceof ModifierKeyCode) {
- applyKeycode(access, option, label, setText, matrix);
+ applyKeycode(access, option, label, setText);
} else if (option.getEntry() instanceof OptionValueEntry.Configure<T>) {
label.clickable().onClick($ -> {
((OptionValueEntry.Configure<T>) option.getEntry()).configure(access, option, () -> {
@@ -113,13 +111,18 @@ public class ConfigOptionValueWidget {
return Widgets.concatWithBounds(() -> new Rectangle(-label.getBounds().width, 0, label.getBounds().width + 8, 14),
label,
- Widgets.createDrawableWidget((graphics, mouseX, mouseY, delta) -> matrix[0] = graphics.pose().last().pose()),
Widgets.withTranslate(Widgets.createTexturedWidget(ResourceLocation.parse("roughlyenoughitems:textures/gui/config/selector.png"),
new Rectangle(1, 1, 4, 6), 0, 0, 1, 1, 1, 1), 0, 0.5, 0)
);
}
- private static <T> void applySelection(ConfigAccess access, CompositeOption<T> option, OptionValueEntry.Selection<T> selection, Label label, Consumer<Component> setText, Matrix4f[] matrix) {
+ private static <T> void applySelection(ConfigAccess access, CompositeOption<T> option, OptionValueEntry.Selection<T> selection, Label label, Consumer<Component> setText) {
+ Rectangle bounds = new Rectangle();
+ BiConsumer<GuiGraphics, Label> render = label.getOnRender();
+ label.onRender((poses, $) -> {
+ render.accept(poses, $);
+ bounds.setBounds(MatrixUtils.transform(poses.pose().last().pose(), label.getBounds()));
+ });
int noOfOptions = selection.getOptions().size();
if (noOfOptions == 2) {
label.clickable().onClick($ -> {
@@ -128,7 +131,7 @@ public class ConfigOptionValueWidget {
});
} else if (noOfOptions >= 2) {
label.clickable().onClick($ -> {
- Menu menu = new Menu(MatrixUtils.transform(matrix[0], label.getBounds()), CollectionUtils.map(selection.getOptions(), opt -> {
+ Menu menu = new Menu(bounds, CollectionUtils.map(selection.getOptions(), opt -> {
Component selectionOption = selection.getOption(opt);
if (opt.equals(access.getDefault(option))) {
selectionOption = translatable("config.rei.value.default", selectionOption);
@@ -146,7 +149,7 @@ public class ConfigOptionValueWidget {
}
}
- private static <T> void applyKeycode(ConfigAccess access, CompositeOption<T> option, Label label, Consumer<Component> setText, Matrix4f[] matrix) {
+ private static <T> void applyKeycode(ConfigAccess access, CompositeOption<T> option, Label label, Consumer<Component> setText) {
label.clickable().onClick($ -> {
access.closeMenu();
access.focusKeycode((CompositeOption<ModifierKeyCode>) option);
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/config/options/AllREIConfigGroups.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/config/options/AllREIConfigGroups.java
index 474132b8e..bdb5a8168 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/config/options/AllREIConfigGroups.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/config/options/AllREIConfigGroups.java
@@ -50,7 +50,7 @@ public interface AllREIConfigGroups {
.add(FOCUS_SEARCH_KEYBIND)
.add(COPY_RECIPE_ID_KEYBIND)
.add(FAVORITE_KEYBIND)
- .add(EXPORT_IMAGE_KEYBIND)
+ /*.add(EXPORT_IMAGE_KEYBIND)*/
.add(BACK_KEYBIND);
OptionGroup INPUT_ADVANCED = make("input.advanced")
.add(USE_NATIVE_KEYBINDS);
@@ -112,7 +112,7 @@ public interface AllREIConfigGroups {
.add(GIVE_COMMAND);
OptionGroup PERFORMANCE_RENDERING = make("performance.rendering")
.add(BATCHED_RENDERING)
- .add(CACHED_RENDERING);
+ /*.add(CACHED_RENDERING)*/;
OptionGroup PERFORMANCE_RELOAD = make("performance.reload")
.add(RELOAD_THREAD)
.add(CACHED_DISPLAY_LOOKUP);
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/error/ErrorsEntryListWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/error/ErrorsEntryListWidget.java
index 476ac4994..e7228efa6 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/error/ErrorsEntryListWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/error/ErrorsEntryListWidget.java
@@ -38,7 +38,6 @@ import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.texture.DynamicTexture;
import net.minecraft.client.resources.sounds.SimpleSoundInstance;
-import net.minecraft.network.chat.ClickEvent;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.HoverEvent;
import net.minecraft.network.chat.Style;
@@ -316,8 +315,7 @@ public class ErrorsEntryListWidget extends DynamicSmoothScrollingEntryListWidget
if (style != null && screen != null) {
if (style.getHoverEvent() != null) {
HoverEvent hoverEvent = style.getHoverEvent();
- Component component = hoverEvent.getValue(HoverEvent.Action.SHOW_TEXT);
- if (component != null) {
+ if (hoverEvent instanceof HoverEvent.ShowText(Component component)) {
graphics.renderTooltip(Minecraft.getInstance().font, Minecraft.getInstance().font.split(component, Math.max(this.width / 2, 200)), x, y);
}
}
@@ -334,14 +332,7 @@ public class ErrorsEntryListWidget extends DynamicSmoothScrollingEntryListWidget
if (button == 0) {
Style style = this.getTextAt(mouseX, mouseY);
if (style != null && style.getClickEvent() != null) {
- ClickEvent clickEvent = style.getClickEvent();
- Minecraft.getInstance().getSoundManager().play(SimpleSoundInstance.forUI(SoundEvents.UI_BUTTON_CLICK, 1.0F));
- try {
- Util.getPlatform().openUri(new URI(clickEvent.getValue()));
- return true;
- } catch (URISyntaxException e) {
- e.printStackTrace();
- }
+ Minecraft.getInstance().screen.handleComponentClicked(style);
return true;
}
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/collapsible/selection/CustomCollapsibleEntrySelectionScreen.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/collapsible/selection/CustomCollapsibleEntrySelectionScreen.java
index 3bccba8d2..127fe6bf5 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/collapsible/selection/CustomCollapsibleEntrySelectionScreen.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/collapsible/selection/CustomCollapsibleEntrySelectionScreen.java
@@ -25,7 +25,6 @@ package me.shedaniel.rei.impl.client.gui.screen.collapsible.selection;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
-import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.VertexConsumer;
import me.shedaniel.clothconfig2.ClothConfigInitializer;
import me.shedaniel.clothconfig2.api.scroll.ScrollingContainer;
@@ -467,9 +466,7 @@ public class CustomCollapsibleEntrySelectionScreen extends Screen {
if (isSelected()) {
boolean filtered = isFiltered();
Rectangle bounds = getBounds();
- RenderSystem.disableDepthTest();
graphics.fillGradient(bounds.x, bounds.y, bounds.getMaxX(), bounds.getMaxY(), filtered ? 0x70ffffff : 0x55ffffff, filtered ? 0x70ffffff : 0x55ffffff);
- RenderSystem.enableDepthTest();
}
}
@@ -489,9 +486,7 @@ public class CustomCollapsibleEntrySelectionScreen extends Screen {
protected void drawBackground(GuiGraphics graphics, int mouseX, int mouseY, float delta) {
if (isFiltered()) {
Rectangle bounds = getBounds();
- RenderSystem.disableDepthTest();
graphics.fillGradient(bounds.x, bounds.y, bounds.getMaxX(), bounds.getMaxY(), 0xff873e23, 0xff873e23);
- RenderSystem.enableDepthTest();
}
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/generic/OptionEntriesScreen.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/generic/OptionEntriesScreen.java
index b771b9e83..c849fe801 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/generic/OptionEntriesScreen.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/generic/OptionEntriesScreen.java
@@ -293,7 +293,6 @@ public abstract class OptionEntriesScreen extends Screen {
@Override
public void render(GuiGraphics graphics, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isHovered, float delta) {
- RenderSystem.setShaderTexture(0, CONFIG_TEX);
RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
this.widget.rectangle.x = x + 3;
this.widget.rectangle.y = y;
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/CachedEntryListRender.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/CachedEntryListRender.java
index 78d3c19ba..b61e9e7a8 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/CachedEntryListRender.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/CachedEntryListRender.java
@@ -23,10 +23,11 @@
package me.shedaniel.rei.impl.client.gui.widget;
-import com.mojang.blaze3d.ProjectionType;
+/*import com.mojang.blaze3d.ProjectionType;
import com.mojang.blaze3d.pipeline.TextureTarget;
import com.mojang.blaze3d.platform.Lighting;
import com.mojang.blaze3d.platform.NativeImage;
+import com.mojang.blaze3d.systems.RenderPass;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import com.mojang.blaze3d.vertex.VertexFormat;
@@ -45,6 +46,7 @@ import me.shedaniel.rei.impl.common.InternalLogger;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.renderer.CoreShaders;
+import net.minecraft.client.renderer.RenderPipelines;
import net.minecraft.client.renderer.RenderStateShard;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.texture.DynamicTexture;
@@ -57,16 +59,17 @@ import org.joml.Matrix4f;
import org.joml.Matrix4fStack;
import java.util.List;
+import java.util.OptionalDouble;
+import java.util.OptionalInt;
public class CachedEntryListRender {
public static final int RESOLUTION = 64;
public static DynamicTexture cachedTexture;
public static ResourceLocation cachedTextureLocation;
public static Long2LongMap hash = new Long2LongOpenHashMap();
- public static LazyResettable<RenderType> renderType = new LazyResettable<>(() -> RenderType.create("rei_cache", DefaultVertexFormat.POSITION_TEX, VertexFormat.Mode.QUADS, 256,
+ public static LazyResettable<RenderType> renderType = new LazyResettable<>(() -> RenderType.create("rei_cache", RenderType.TRANSIENT_BUFFER_SIZE, RenderPipelines.GUI_TEXTURED, VertexFormat.Mode.QUADS, 256,
RenderType.CompositeState.builder()
.setTextureState(new RenderStateShard.TextureStateShard(cachedTextureLocation, TriState.DEFAULT, false))
- .setShaderState(new RenderStateShard.ShaderStateShard(CoreShaders.POSITION_TEX))
.createCompositeState(false)));
public static class Sprite {
@@ -146,9 +149,7 @@ public class CachedEntryListRender {
hash = new Long2LongOpenHashMap(list.size() + 10);
Minecraft minecraft = Minecraft.getInstance();
- TextureTarget target = new TextureTarget(width, height, true);
- target.setClearColor(0, 0, 0, 0);
- target.bindWrite(true);
+ TextureTarget target = new TextureTarget(null, width, height, true);
Matrix4f projectionMatrix = new Matrix4f().setOrtho(0.0F, width, height, 0.0F, 1000.0F, 3000.0F);
RenderSystem.setProjectionMatrix(projectionMatrix, ProjectionType.ORTHOGRAPHIC);
Matrix4fStack modelViewStack = RenderSystem.getModelViewStack();
@@ -190,4 +191,25 @@ public class CachedEntryListRender {
private static long pack(int x, int y) {
return ((long) x << 32) | (y & 0xFFFFFFFFL);
}
+}*/
+
+import net.minecraft.client.renderer.RenderType;
+import net.minecraft.resources.ResourceLocation;
+
+import java.util.function.Supplier;
+
+public class CachedEntryListRender {
+ public static final ResourceLocation cachedTextureLocation = null;
+ public static final Supplier<RenderType> renderType = null;
+
+ public static Sprite get(Object o) {
+ return null;
+ }
+
+ public static class Sprite {
+ public float u0;
+ public float u1;
+ public float v0;
+ public float v1;
+ }
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/ConfigButtonWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/ConfigButtonWidget.java
index 01dd2649d..3e37d497d 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/ConfigButtonWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/ConfigButtonWidget.java
@@ -71,7 +71,7 @@ public class ConfigButtonWidget {
if (!ClientHelper.getInstance().isCheating() || Minecraft.getInstance().screen instanceof DisplayScreen) {
button.removeTint();
} else if (!ClientHelperImpl.getInstance().hasOperatorPermission()) {
- if (Minecraft.getInstance().gameMode.hasInfiniteItems()) {
+ if (Minecraft.getInstance().player.hasInfiniteMaterials()) {
button.setTint(0x2aff0000);
} else {
button.setTint(0x58fcf003);
@@ -107,7 +107,7 @@ public class ConfigButtonWidget {
if (!ClientHelper.getInstance().isCheating())
return Component.translatable("text.rei.cheating_disabled");
else if (!ClientHelperImpl.getInstance().hasOperatorPermission()) {
- if (Minecraft.getInstance().gameMode.hasInfiniteItems())
+ if (Minecraft.getInstance().player.hasInfiniteMaterials())
return Component.translatable("text.rei.cheating_limited_creative_enabled");
else return Component.translatable("text.rei.cheating_enabled_no_perms");
} else if (ClientHelperImpl.getInstance().hasPermissionToUsePackets())
@@ -162,11 +162,11 @@ public class ConfigButtonWidget {
config::isEntryListWidgetScrolled,
config::setEntryListWidgetScrolled
),
- new SeparatorMenuEntry(),
+ /*new SeparatorMenuEntry(),
ToggleMenuEntry.of(Component.translatable("text.rei.config.menu.display.caching_entry_rendering"),
config::doesCacheEntryRendering,
config::setDoesCacheEntryRendering
- ),
+ ),*/
new SeparatorMenuEntry(),
ToggleMenuEntry.of(Component.translatable("text.rei.config.menu.display.syntax_highlighting"),
() -> config.getSyntaxHighlightingMode() == SyntaxHighlightingMode.COLORFUL || config.getSyntaxHighlightingMode() == SyntaxHighlightingMode.COLORFUL_UNDERSCORED,
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DynamicErrorFreeEntryListWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DynamicErrorFreeEntryListWidget.java
index f77faa518..b5f076059 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DynamicErrorFreeEntryListWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DynamicErrorFreeEntryListWidget.java
@@ -25,7 +25,8 @@ package me.shedaniel.rei.impl.client.gui.widget;
import com.google.common.collect.Lists;
import com.mojang.blaze3d.systems.RenderSystem;
-import com.mojang.blaze3d.vertex.*;
+import com.mojang.blaze3d.vertex.Tesselator;
+import com.mojang.blaze3d.vertex.VertexConsumer;
import me.shedaniel.rei.api.client.gui.AbstractContainerEventHandler;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
@@ -257,27 +258,14 @@ public abstract class DynamicErrorFreeEntryListWidget<E extends DynamicErrorFree
if (this.renderSelection)
this.renderHeader(graphics, rowLeft, startY);
this.renderList(graphics, rowLeft, startY, mouseX, mouseY, delta);
- RenderSystem.disableDepthTest();
this.renderHoleBackground(graphics, 0, this.top, 255, 255);
this.renderHoleBackground(graphics, this.bottom, this.height, 255, 255);
- RenderSystem.enableBlend();
- RenderSystem.blendFuncSeparate(770, 771, 0, 1);
- Matrix4f matrix = graphics.pose().last().pose();
- BufferBuilder buffer = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR);
- buffer.addVertex(matrix, this.left, this.top + 4, 0.0F).setUv(0, 1).setColor(0, 0, 0, 0);
- buffer.addVertex(matrix, this.right, this.top + 4, 0.0F).setUv(1, 1).setColor(0, 0, 0, 0);
- buffer.addVertex(matrix, this.right, this.top, 0.0F).setUv(1, 0).setColor(0, 0, 0, 255);
- buffer.addVertex(matrix, this.left, this.top, 0.0F).setUv(0, 0).setColor(0, 0, 0, 255);
- buffer.addVertex(matrix, this.left, this.bottom, 0.0F).setUv(0, 1).setColor(0, 0, 0, 255);
- buffer.addVertex(matrix, this.right, this.bottom, 0.0F).setUv(1, 1).setColor(0, 0, 0, 255);
- buffer.addVertex(matrix, this.right, this.bottom - 4, 0.0F).setUv(1, 0).setColor(0, 0, 0, 0);
- buffer.addVertex(matrix, this.left, this.bottom - 4, 0.0F).setUv(0, 0).setColor(0, 0, 0, 0);
- BufferUploader.drawWithShader(buffer.buildOrThrow());
+ RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
+ graphics.blit(RenderType::guiTextured, Screen.HEADER_SEPARATOR, this.left, this.top - 2, 0.0F, 0.0F, this.width, 2, 32, 2);
+ graphics.blit(RenderType::guiTextured, Screen.FOOTER_SEPARATOR, this.left, this.bottom, 0.0F, 0.0F, this.width, 2, 32, 2);
int maxScroll = this.getMaxScroll();
- renderScrollBar(graphics, maxScroll, scrollbarPosition, int_4);
-
+ this.renderScrollBar(graphics, maxScroll, scrollbarPosition, int_4);
this.renderDecorations(graphics, mouseX, mouseY);
- RenderSystem.disableBlend();
}
protected void renderScrollBar(GuiGraphics graphics, int maxScroll, int scrollbarPositionMinX, int scrollbarPositionMaxX) {
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryHighlighter.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryHighlighter.java
index be711e98c..255630fef 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryHighlighter.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryHighlighter.java
@@ -23,7 +23,6 @@
package me.shedaniel.rei.impl.client.gui.widget;
-import com.mojang.blaze3d.systems.RenderSystem;
import me.shedaniel.math.Color;
import me.shedaniel.rei.api.common.util.EntryStacks;
import me.shedaniel.rei.impl.client.config.ConfigManagerImpl;
@@ -41,8 +40,6 @@ public class EntryHighlighter {
int dimColor = Color.ofRGBA(20 / 255F, 20 / 255F, 20 / 255F, dimOpacity).getColor();
int borderColor = Color.ofRGBA(0x5f / 255F, 0xff / 255F, 0x3b / 255F, opacity).getColor();
int color = Color.ofRGBA(0x5f / 255F, 0xff / 255F, 0x3b / 255F, opacity * 0x34 / 255F).getColor();
- RenderSystem.disableDepthTest();
- RenderSystem.colorMask(true, true, true, false);
if (Minecraft.getInstance().screen instanceof AbstractContainerScreen<?> containerScreen) {
int x = containerScreen.leftPos, y = containerScreen.topPos;
for (Slot slot : containerScreen.getMenu().slots) {
@@ -62,7 +59,5 @@ public class EntryHighlighter {
}
}
}
- RenderSystem.colorMask(true, true, true, true);
- RenderSystem.enableDepthTest();
}
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java
index 3bb78a272..7aae3ef19 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java
@@ -25,7 +25,6 @@ package me.shedaniel.rei.impl.client.gui.widget;
import com.google.common.base.Suppliers;
import com.mojang.blaze3d.platform.InputConstants;
-import com.mojang.blaze3d.systems.RenderSystem;
import me.shedaniel.clothconfig2.api.ModifierKeyCode;
import me.shedaniel.clothconfig2.api.animator.NumberAnimator;
import me.shedaniel.clothconfig2.api.animator.ValueAnimator;
@@ -422,9 +421,6 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget {
protected void drawBackground(GuiGraphics graphics, int mouseX, int mouseY, float delta) {
if (background) {
darkBackgroundAlpha.update(delta);
- RenderSystem.enableBlend();
- RenderSystem.blendFuncSeparate(770, 771, 1, 0);
- RenderSystem.blendFunc(770, 771);
graphics.blit(RenderType::guiTextured, InternalTextures.CHEST_GUI_TEXTURE, bounds.x, bounds.y, 0, 222, bounds.width, bounds.height, 256, 256);
if (darkBackgroundAlpha.value() > 0.0F) {
graphics.blit(RenderType::guiTextured, InternalTextures.CHEST_GUI_TEXTURE_DARK, bounds.x, bounds.y, 0, 222, bounds.width, bounds.height, 256, 256, ARGB.white(darkBackgroundAlpha.value()));
@@ -535,14 +531,10 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget {
protected void drawHighlighted(GuiGraphics graphics, int mouseX, int mouseY, float delta) {
darkHighlightedAlpha.update(delta);
- RenderSystem.disableDepthTest();
- RenderSystem.colorMask(true, true, true, false);
Rectangle bounds = getInnerBounds();
graphics.fillGradient(bounds.x, bounds.y, bounds.getMaxX(), bounds.getMaxY(), 0x80ffffff, 0x80ffffff);
int darkColor = 0x111111 | ((int) (90 * darkHighlightedAlpha.value()) << 24);
graphics.fillGradient(bounds.x, bounds.y, bounds.getMaxX(), bounds.getMaxY(), darkColor, darkColor);
- RenderSystem.colorMask(true, true, true, true);
- RenderSystem.enableDepthTest();
}
@Override
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/HoleWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/HoleWidget.java
index db4dda035..109646a1c 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/HoleWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/HoleWidget.java
@@ -23,7 +23,6 @@
package me.shedaniel.rei.impl.client.gui.widget;
-import com.mojang.blaze3d.systems.RenderSystem;
import me.shedaniel.math.Rectangle;
import me.shedaniel.rei.api.client.gui.widgets.Widget;
import me.shedaniel.rei.api.client.gui.widgets.Widgets;
@@ -44,18 +43,14 @@ public class HoleWidget {
public static Widget createMenuBackground(Rectangle bounds) {
return Widgets.withBounds(Widgets.createDrawableWidget((graphics, mouseX, mouseY, delta) -> {
- RenderSystem.enableBlend();
graphics.blit(RenderType::guiTextured, ResourceLocation.withDefaultNamespace("textures/gui/menu_list_background.png"), bounds.x, bounds.y, bounds.getMaxX(), bounds.getMaxY(), bounds.width, bounds.height, 32, 32);
- RenderSystem.disableBlend();
}), bounds);
}
public static Widget createListBorders(Rectangle bounds) {
return Widgets.withBounds(Widgets.createDrawableWidget((graphics, mouseX, mouseY, delta) -> {
- RenderSystem.enableBlend();
graphics.blit(RenderType::guiTextured, CreateWorldScreen.HEADER_SEPARATOR, bounds.x, bounds.y - 2, 0.0F, 0.0F, bounds.width, 2, 32, 2);
graphics.blit(RenderType::guiTextured, CreateWorldScreen.FOOTER_SEPARATOR, bounds.x, bounds.getMaxY(), 0.0F, 0.0F, bounds.width, 2, 32, 2);
- RenderSystem.disableBlend();
}), bounds);
}
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/basewidgets/ArrowWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/basewidgets/ArrowWidget.java
index 931692321..0b6678d3a 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/basewidgets/ArrowWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/basewidgets/ArrowWidget.java
@@ -23,7 +23,6 @@
package me.shedaniel.rei.impl.client.gui.widget.basewidgets;
-import com.mojang.blaze3d.systems.RenderSystem;
import me.shedaniel.clothconfig2.api.animator.NumberAnimator;
import me.shedaniel.clothconfig2.api.animator.ValueAnimator;
import me.shedaniel.math.Rectangle;
@@ -83,19 +82,14 @@ public final class ArrowWidget extends Arrow {
}
public void renderBackground(GuiGraphics graphics, boolean dark, float alpha) {
- RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, alpha);
- RenderSystem.enableBlend();
- RenderSystem.blendFuncSeparate(770, 771, 1, 0);
- RenderSystem.blendFunc(770, 771);
ResourceLocation texture = REIRuntime.getInstance().getDefaultDisplayTexture(dark);
if (getAnimationDuration() > 0) {
int width = Mth.ceil((System.currentTimeMillis() / (animationDuration / 24) % 24d));
- graphics.blit(RenderType::guiTextured, texture, getX() + width, getY(), 106 + width, 91, 24 - width, 17, 256, 256);
- graphics.blit(RenderType::guiTextured, texture, getX(), getY(), 82, 91, width, 17, 256, 256);
+ graphics.blit(RenderType::guiTextured, texture, getX() + width, getY(), 106 + width, 91, 24 - width, 17, 256, 256, 0xFFFFFF | (int) (alpha * 255) << 24);
+ graphics.blit(RenderType::guiTextured, texture, getX(), getY(), 82, 91, width, 17, 256, 256, 0xFFFFFF | (int) (alpha * 255) << 24);
} else {
- graphics.blit(RenderType::guiTextured, texture, getX(), getY(), 106, 91, 24, 17, 256, 256);
+ graphics.blit(RenderType::guiTextured, texture, getX(), getY(), 106, 91, 24, 17, 256, 256, 0xFFFFFF | (int) (alpha * 255) << 24);
}
- RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
}
@Override
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/basewidgets/BurningFireWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/basewidgets/BurningFireWidget.java
index 0b0f1cfe6..e43927d85 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/basewidgets/BurningFireWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/basewidgets/BurningFireWidget.java
@@ -23,7 +23,6 @@
package me.shedaniel.rei.impl.client.gui.widget.basewidgets;
-import com.mojang.blaze3d.systems.RenderSystem;
import me.shedaniel.clothconfig2.api.animator.NumberAnimator;
import me.shedaniel.clothconfig2.api.animator.ValueAnimator;
import me.shedaniel.math.Rectangle;
@@ -77,19 +76,14 @@ public final class BurningFireWidget extends BurningFire {
}
public void renderBackground(GuiGraphics graphics, boolean dark, float alpha) {
- RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, alpha);
- RenderSystem.enableBlend();
- RenderSystem.blendFuncSeparate(770, 771, 1, 0);
- RenderSystem.blendFunc(770, 771);
ResourceLocation texture = REIRuntime.getInstance().getDefaultDisplayTexture(dark);
if (getAnimationDuration() > 0) {
int height = 14 - Mth.ceil((System.currentTimeMillis() / (animationDuration / 14) % 14d));
- graphics.blit(RenderType::guiTextured, texture, getX(), getY(), 1, 74, 14, 14 - height, 256, 256);
- graphics.blit(RenderType::guiTextured, texture, getX(), getY() + 14 - height, 82, 77 + (14 - height), 14, height, 256, 256);
+ graphics.blit(RenderType::guiTextured, texture, getX(), getY(), 1, 74, 14, 14 - height, 256, 256, 0xFFFFFF | (int) (alpha * 255) << 24);
+ graphics.blit(RenderType::guiTextured, texture, getX(), getY() + 14 - height, 82, 77 + (14 - height), 14, height, 256, 256, 0xFFFFFF | (int) (alpha * 255) << 24);
} else {
- graphics.blit(RenderType::guiTextured, texture, getX(), getY(), 1, 74, 14, 14, 256, 256);
+ graphics.blit(RenderType::guiTextured, texture, getX(), getY(), 1, 74, 14, 14, 256, 256, 0xFFFFFF | (int) (alpha * 255) << 24);
}
- RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
}
@Override
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayHistoryManager.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayHistoryManager.java
index 5bf96d84a..6f77570f3 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayHistoryManager.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayHistoryManager.java
@@ -90,17 +90,17 @@ public class DisplayHistoryManager {
entries.clear();
displayToEntries.clear();
for (CompoundTag tag : displayHistory) {
- String uuid = tag.getString("DisplayHistoryUUID");
+ String uuid = tag.getString("DisplayHistoryUUID").orElseThrow();
DisplayEntry entry = copy.get(uuid);
if (entry != null) {
entries.put(entry.getUuid().toString(), entry);
displayToEntries.put(entry.getDisplay(), entry);
- } else if (tag.getBoolean("DisplayHistoryContains")) {
+ } else if (tag.getBooleanOr("DisplayHistoryContains", false)) {
try {
- CategoryIdentifier<?> categoryIdentifier = CategoryIdentifier.of(tag.getString("DisplayHistoryCategory"));
+ CategoryIdentifier<?> categoryIdentifier = CategoryIdentifier.of(tag.getString("DisplayHistoryCategory").orElseThrow());
if (CategoryRegistry.getInstance().tryGet(categoryIdentifier).isPresent()) {
- DataResult<Display> result = Display.codec().parse(BasicDisplay.registryAccess().createSerializationContext(NbtOps.INSTANCE), tag.getCompound("DisplayHistoryData"));
+ DataResult<Display> result = Display.codec().parse(BasicDisplay.registryAccess().createSerializationContext(NbtOps.INSTANCE), tag.getCompound("DisplayHistoryData").orElseThrow());
Display display = result.getOrThrow();
DisplayEntry newEntry = new DisplayEntry(parent, display, null);
newEntry.setUuid(UUID.fromString(uuid));
@@ -161,7 +161,7 @@ public class DisplayHistoryManager {
private void save() {
List<CompoundTag> displayHistory = ConfigManagerImpl.getInstance().getConfig().getDisplayHistory();
for (CompoundTag compoundTag : displayHistory) {
- String uuid = compoundTag.getString("DisplayHistoryUUID");
+ String uuid = compoundTag.getString("DisplayHistoryUUID").orElseThrow();
DisplayEntry entry = entries.get(uuid);
if (entry != null) {
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/search/OverlaySearchField.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/search/OverlaySearchField.java
index 214933201..5758109fe 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/search/OverlaySearchField.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/search/OverlaySearchField.java
@@ -25,7 +25,6 @@ package me.shedaniel.rei.impl.client.gui.widget.search;
import com.google.common.collect.Lists;
import com.mojang.blaze3d.platform.InputConstants;
-import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.datafixers.util.Pair;
import me.shedaniel.clothconfig2.api.animator.NumberAnimator;
import me.shedaniel.clothconfig2.api.animator.ValueAnimator;
@@ -146,9 +145,7 @@ public class OverlaySearchField extends TextFieldWidget implements TextFieldWidg
public void laterRender(GuiGraphics graphics, int mouseX, int mouseY, float delta) {
progress.update(delta);
- RenderSystem.disableDepthTest();
if (isMain) drawHint(graphics, mouseX, mouseY);
- RenderSystem.enableDepthTest();
}
private void drawHint(GuiGraphics graphics, int mouseX, int mouseY) {
@@ -357,9 +354,7 @@ public class OverlaySearchField extends TextFieldWidget implements TextFieldWidg
@Override
public void render(GuiGraphics graphics, int mouseX, int mouseY, float delta) {
- RenderSystem.disableDepthTest();
setSuggestion(!isFocused() && getText().isEmpty() ? I18n.get("text.rei.search.field.suggestion") : null);
super.render(graphics, mouseX, mouseY, delta);
- RenderSystem.enableDepthTest();
}
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/SlotAccessorRegistryImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/SlotAccessorRegistryImpl.java
index 49cfc196f..b9311595b 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/SlotAccessorRegistryImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/SlotAccessorRegistryImpl.java
@@ -95,7 +95,7 @@ public class SlotAccessorRegistryImpl implements SlotAccessorRegistry {
@Override
public SlotAccessor read(AbstractContainerMenu menu, Player player, CompoundTag tag) {
- String id = tag.getString("id");
+ String id = tag.getString("id").orElseThrow();
Serializer serializer = map.get(ResourceLocation.parse(id));
if (serializer == null) {
throw new NullPointerException("No serializer found for " + id);
diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java
index 963f6833b..74e2f7870 100644
--- a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java
+++ b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java
@@ -24,7 +24,6 @@
package me.shedaniel.rei.plugin.client.entry;
import com.google.common.collect.Lists;
-import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.platform.Lighting;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.serialization.Codec;
@@ -55,7 +54,6 @@ import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.item.ItemStackRenderState;
import net.minecraft.client.renderer.texture.OverlayTexture;
-import net.minecraft.client.renderer.texture.TextureAtlas;
import net.minecraft.client.resources.language.I18n;
import net.minecraft.core.component.DataComponentPatch;
import net.minecraft.core.component.DataComponents;
@@ -253,7 +251,7 @@ public class ItemEntryDefinition implements EntryDefinition<ItemStack>, EntrySer
public ItemStackRenderState getExtraData(EntryStack<ItemStack> entry) {
Minecraft minecraft = Minecraft.getInstance();
ItemStackRenderState renderState = new ItemStackRenderState();
- minecraft.getItemModelResolver().updateForTopItem(renderState, entry.getValue(), ItemDisplayContext.GUI, false, minecraft.level, minecraft.player, 0);
+ minecraft.getItemModelResolver().updateForTopItem(renderState, entry.getValue(), ItemDisplayContext.GUI, minecraft.level, minecraft.player, 0);
return renderState;
}
@@ -298,10 +296,6 @@ public class ItemEntryDefinition implements EntryDefinition<ItemStack>, EntrySer
}
public void setupGL(EntryStack<ItemStack> entry, ItemStackRenderState renderState) {
- Minecraft.getInstance().getTextureManager().getTexture(TextureAtlas.LOCATION_BLOCKS).setFilter(false, false);
- RenderSystem.setShaderTexture(0, TextureAtlas.LOCATION_BLOCKS);
- RenderSystem.enableBlend();
- RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA);
RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
boolean sideLit = renderState.usesBlockLight();
if (!sideLit) Lighting.setupForFlatItems();
@@ -350,7 +344,6 @@ public class ItemEntryDefinition implements EntryDefinition<ItemStack>, EntrySer
}
public void endGL(EntryStack<ItemStack> entry, ItemStackRenderState renderState) {
- RenderSystem.enableDepthTest();
boolean sideLit = renderState.usesBlockLight();
if (!sideLit) Lighting.setupFor3DItems();
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/DefaultClientRuntimePlugin.java b/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/DefaultClientRuntimePlugin.java
index fa300a5ba..a066e7afa 100644
--- a/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/DefaultClientRuntimePlugin.java
+++ b/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/DefaultClientRuntimePlugin.java
@@ -200,7 +200,7 @@ public class DefaultClientRuntimePlugin implements REIClientPlugin {
@Override
public DataResult<EntryStackFavoriteEntry> read(CompoundTag object) {
try {
- return EntryStack.codec().parse(BasicDisplay.registryAccess().createSerializationContext(NbtOps.INSTANCE), object.getCompound(key))
+ return EntryStack.codec().parse(BasicDisplay.registryAccess().createSerializationContext(NbtOps.INSTANCE), object.getCompound(key).orElseThrow())
.map(EntryStackFavoriteEntry::new)
.setLifecycle(Lifecycle.stable());
} catch (Throwable throwable) {
@@ -286,10 +286,10 @@ public class DefaultClientRuntimePlugin implements REIClientPlugin {
public DataResult<DisplayFavoriteEntry> read(CompoundTag object) {
try {
if (object.contains("Data")) {
- DataResult<Display> result = Display.codec().parse(BasicDisplay.registryAccess().createSerializationContext(NbtOps.INSTANCE), object.getCompound("Data"));
- return DataResult.success(new DisplayFavoriteEntry(result.getOrThrow(), UUID.fromString(object.getString("UUID"))), Lifecycle.stable());
+ DataResult<Display> result = Display.codec().parse(BasicDisplay.registryAccess().createSerializationContext(NbtOps.INSTANCE), object.getCompound("Data").orElseThrow());
+ return DataResult.success(new DisplayFavoriteEntry(result.getOrThrow(), UUID.fromString(object.getString("UUID").orElseThrow())), Lifecycle.stable());
} else {
- return DataResult.success(new DisplayFavoriteEntry(null, UUID.fromString(object.getString("UUID"))), Lifecycle.stable());
+ return DataResult.success(new DisplayFavoriteEntry(null, UUID.fromString(object.getString("UUID").orElseThrow())), Lifecycle.stable());
}
} catch (Throwable throwable) {
return DataResult.error(throwable::getMessage);
diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/common/runtime/DefaultRuntimePlugin.java b/runtime/src/main/java/me/shedaniel/rei/plugin/common/runtime/DefaultRuntimePlugin.java
index 4db2bf66b..562e24d6b 100644
--- a/runtime/src/main/java/me/shedaniel/rei/plugin/common/runtime/DefaultRuntimePlugin.java
+++ b/runtime/src/main/java/me/shedaniel/rei/plugin/common/runtime/DefaultRuntimePlugin.java
@@ -71,7 +71,7 @@ public class DefaultRuntimePlugin implements REICommonPlugin {
new SlotAccessorRegistry.Serializer() {
@Override
public SlotAccessor read(AbstractContainerMenu menu, Player player, CompoundTag tag) {
- int slot = tag.getInt("Slot");
+ int slot = tag.getInt("Slot").orElseThrow();
return new VanillaSlotAccessor(menu.slots.get(slot));
}
@@ -91,7 +91,7 @@ public class DefaultRuntimePlugin implements REICommonPlugin {
new SlotAccessorRegistry.Serializer() {
@Override
public SlotAccessor read(AbstractContainerMenu menu, Player player, CompoundTag tag) {
- int slot = tag.getInt("Slot");
+ int slot = tag.getInt("Slot").orElseThrow();
return new PlayerInventorySlotAccessor(player, slot);
}