diff options
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); } |