diff options
Diffstat (limited to 'runtime/src/main/java/me')
35 files changed, 254 insertions, 224 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java index 82389bafe..21042c30e 100644 --- a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java +++ b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java @@ -25,6 +25,7 @@ package me.shedaniel.rei; import io.netty.buffer.Unpooled; import me.shedaniel.architectury.networking.NetworkManager; +import me.shedaniel.rei.api.client.REIHelper; import me.shedaniel.rei.api.common.category.CategoryIdentifier; import me.shedaniel.rei.api.common.display.Display; import me.shedaniel.rei.impl.common.transfer.InputSlotCrafter; @@ -57,9 +58,10 @@ public class RoughlyEnoughItemsNetwork { player.displayClientMessage(new TranslatableComponent("text.rei.no_permission_cheat").withStyle(ChatFormatting.RED), false); return; } - if (!player.inventory.getCarried().isEmpty()) { - player.inventory.setCarried(ItemStack.EMPTY); - player.broadcastCarriedItem(); + AbstractContainerMenu menu = player.containerMenu; + if (!menu.getCarried().isEmpty()) { + menu.setCarried(ItemStack.EMPTY); + menu.broadcastChanges(); } }); NetworkManager.registerReceiver(NetworkManager.c2s(), CREATE_ITEMS_PACKET, (buf, context) -> { @@ -69,7 +71,7 @@ public class RoughlyEnoughItemsNetwork { return; } ItemStack stack = buf.readItem(); - if (player.inventory.add(stack.copy())) { + if (player.getInventory().add(stack.copy())) { NetworkManager.sendToPlayer(player, RoughlyEnoughItemsNetwork.CREATE_ITEMS_MESSAGE_PACKET, new FriendlyByteBuf(Unpooled.buffer()).writeItem(stack.copy()).writeUtf(player.getScoreboardName(), 32767)); } else { player.displayClientMessage(new TranslatableComponent("text.rei.failed_cheat_items"), false); @@ -82,16 +84,16 @@ public class RoughlyEnoughItemsNetwork { return; } - Inventory inventory = player.inventory; + AbstractContainerMenu menu = player.containerMenu; ItemStack itemStack = buf.readItem(); ItemStack stack = itemStack.copy(); - if (!inventory.getCarried().isEmpty() && ItemStack.isSameIgnoreDurability(inventory.getCarried(), stack) && ItemStack.tagMatches(inventory.getCarried(), stack)) { - stack.setCount(Mth.clamp(stack.getCount() + inventory.getCarried().getCount(), 1, stack.getMaxStackSize())); - } else if (!inventory.getCarried().isEmpty()) { + if (!menu.getCarried().isEmpty() && ItemStack.isSameIgnoreDurability(menu.getCarried(), stack) && ItemStack.tagMatches(menu.getCarried(), stack)) { + stack.setCount(Mth.clamp(stack.getCount() + menu.getCarried().getCount(), 1, stack.getMaxStackSize())); + } else if (!menu.getCarried().isEmpty()) { return; } - inventory.setCarried(stack.copy()); - player.broadcastCarriedItem(); + menu.setCarried(stack.copy()); + menu.broadcastChanges(); NetworkManager.sendToPlayer(player, RoughlyEnoughItemsNetwork.CREATE_ITEMS_MESSAGE_PACKET, new FriendlyByteBuf(Unpooled.buffer()).writeItem(itemStack.copy()).writeUtf(player.getScoreboardName(), 32767)); }); NetworkManager.registerReceiver(NetworkManager.c2s(), MOVE_ITEMS_PACKET, (packetByteBuf, context) -> { 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 849856165..44b12c821 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,7 @@ import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.LazyLoadedValue; import net.minecraft.util.Mth; -import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.item.ItemStack; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; @@ -157,7 +157,7 @@ public class ClientHelperImpl implements ClientHelper { @Override public void sendDeletePacket() { if (Minecraft.getInstance().screen instanceof CreativeModeInventoryScreen) { - Minecraft.getInstance().player.inventory.setCarried(ItemStack.EMPTY); + Minecraft.getInstance().player.containerMenu.setCarried(ItemStack.EMPTY); ((CreativeModeInventoryScreen) Minecraft.getInstance().screen).isQuickCrafting = false; return; } @@ -173,22 +173,22 @@ public class ClientHelperImpl implements ClientHelper { return false; EntryStack<ItemStack> entry = (EntryStack<ItemStack>) e; if (Minecraft.getInstance().player == null) return false; - if (Minecraft.getInstance().player.inventory == null) return false; + if (Minecraft.getInstance().player.getInventory() == null) return false; ItemStack cheatedStack = entry.getValue().copy(); if (ConfigObject.getInstance().isGrabbingItems() && Minecraft.getInstance().screen instanceof CreativeModeInventoryScreen) { - Inventory inventory = Minecraft.getInstance().player.inventory; + AbstractContainerMenu menu = Minecraft.getInstance().player.containerMenu; EntryStack<ItemStack> stack = entry.copy(); - if (!inventory.getCarried().isEmpty() && EntryStacks.equalsExact(EntryStacks.of(inventory.getCarried()), stack)) { - stack.getValue().setCount(Mth.clamp(stack.getValue().getCount() + inventory.getCarried().getCount(), 1, stack.getValue().getMaxStackSize())); - } else if (!inventory.getCarried().isEmpty()) { + if (!menu.getCarried().isEmpty() && EntryStacks.equalsExact(EntryStacks.of(menu.getCarried()), stack)) { + stack.getValue().setCount(Mth.clamp(stack.getValue().getCount() + menu.getCarried().getCount(), 1, stack.getValue().getMaxStackSize())); + } else if (!menu.getCarried().isEmpty()) { return false; } - inventory.setCarried(stack.getValue().copy()); + menu.setCarried(stack.getValue().copy()); return true; } else if (ClientHelperImpl.getInstance().canUsePackets()) { - Inventory inventory = Minecraft.getInstance().player.inventory; + AbstractContainerMenu menu = Minecraft.getInstance().player.containerMenu; EntryStack<ItemStack> stack = entry.copy(); - if (!inventory.getCarried().isEmpty() && !EntryStacks.equalsExact(EntryStacks.of(inventory.getCarried()), stack)) { + if (!menu.getCarried().isEmpty() && !EntryStacks.equalsExact(EntryStacks.of(menu.getCarried()), stack)) { return false; } try { @@ -216,7 +216,7 @@ public class ClientHelperImpl implements ClientHelper { @ApiStatus.Internal public Set<EntryStack<?>> _getInventoryItemsTypes() { - return Minecraft.getInstance().player.inventory.compartments.stream() + return Minecraft.getInstance().player.getInventory().compartments.stream() .flatMap(Collection::stream) .map(EntryStacks::of) .collect(Collectors.toSet()); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/REIHelperImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/REIHelperImpl.java index 4f44c5fe4..5bdb3c710 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/REIHelperImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/REIHelperImpl.java @@ -47,6 +47,7 @@ import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.InteractionResult; +import net.minecraft.world.item.ItemStack; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; 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 a99affab6..b3ebdeaad 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 @@ -317,15 +317,17 @@ public class ConfigManagerImpl implements ConfigManager { screen.setParent(parent); return screen; } - TransformingScreen parentTranslated; - { + Screen parentTranslated; + if (!getConfig().isConfigScreenAnimated()) { + parentTranslated = parent; + } else { MutableLong current = new MutableLong(0); parentTranslated = new TransformingScreen(true, parent, null, () -> current.setValue(current.getValue() == 0 ? Util.getMillis() + (!getConfig().isConfigScreenAnimated() ? -3000 : 0) : current.getValue()), () -> 0, () -> (EasingMethod.EasingMethodImpl.EXPO.apply(Mth.clamp((Util.getMillis() - current.getValue()) / 750.0, 0, 1))) * Minecraft.getInstance().getWindow().getGuiScaledHeight(), () -> Util.getMillis() - current.getValue() > 800); - parentTranslated.setInitAfter(true); + ((TransformingScreen) parentTranslated).setInitAfter(true); } ConfigScreenProvider<ConfigObjectImpl> provider = (ConfigScreenProvider<ConfigObjectImpl>) AutoConfig.getConfigScreen(ConfigObjectImpl.class, parentTranslated); provider.setI13nFunction(manager -> "config.roughlyenoughitems"); @@ -341,13 +343,17 @@ public class ConfigManagerImpl implements ConfigManager { ScreenHooks.addButton(screen, new Button(screen.width - 104, 4, 100, 20, new TranslatableComponent("text.rei.credits"), button -> { MutableLong current = new MutableLong(0); CreditsScreen creditsScreen = new CreditsScreen(screen); - Minecraft.getInstance().setScreen(new TransformingScreen(false, creditsScreen, - screen, - () -> current.setValue(current.getValue() == 0 ? Util.getMillis() + (!getConfig().isCreditsScreenAnimated() ? -3000 : 0) : current.getValue()), - () -> (1 - EasingMethod.EasingMethodImpl.EXPO.apply(Mth.clamp((Util.getMillis() - current.getValue()) / 750.0, 0, 1))) - * Minecraft.getInstance().getWindow().getGuiScaledWidth() * 1.3, - () -> 0, - () -> Util.getMillis() - current.getValue() > 800)); + if (getConfig().isCreditsScreenAnimated()) { + Minecraft.getInstance().setScreen(new TransformingScreen(false, creditsScreen, + screen, + () -> current.setValue(current.getValue() == 0 ? Util.getMillis() + (!getConfig().isCreditsScreenAnimated() ? -3000 : 0) : current.getValue()), + () -> (1 - EasingMethod.EasingMethodImpl.EXPO.apply(Mth.clamp((Util.getMillis() - current.getValue()) / 750.0, 0, 1))) + * Minecraft.getInstance().getWindow().getGuiScaledWidth() * 1.3, + () -> 0, + () -> Util.getMillis() - current.getValue() > 800)); + } else { + Minecraft.getInstance().setScreen(creditsScreen); + } })); }).setSavingRunnable(() -> { saveConfig(); @@ -358,7 +364,8 @@ public class ConfigManagerImpl implements ConfigManager { }).build(); }); Screen configScreen = provider.get(); - parentTranslated.setLastScreen(configScreen); + if (!getConfig().isConfigScreenAnimated()) return configScreen; + ((TransformingScreen) parentTranslated).setLastScreen(configScreen); MutableLong current = new MutableLong(0); return new TransformingScreen(false, configScreen, parent, 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 ac2156026..8d2f2b05b 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 @@ -431,7 +431,7 @@ public class ConfigObjectImpl implements ConfigObject, ConfigData { public static class Motion { private boolean configScreenAnimation = false; - private boolean creditsScreenAnimation = true; + private boolean creditsScreenAnimation = false; private boolean favoritesAnimation = true; } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringRulesScreen.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringRulesScreen.java index 48d17ee69..a7722dd1a 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringRulesScreen.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringRulesScreen.java @@ -23,6 +23,7 @@ package me.shedaniel.rei.impl.client.config.entries; +import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import me.shedaniel.clothconfig2.gui.widget.DynamicElementListWidget; import me.shedaniel.rei.impl.client.entry.filtering.FilteringRule; @@ -191,7 +192,7 @@ public class FilteringRulesScreen extends Screen { @Override protected void renderBg(PoseStack matrices, Minecraft client, int mouseX, int mouseY) { super.renderBg(matrices, client, mouseX, mouseY); - Minecraft.getInstance().getTextureManager().bind(CHEST_GUI_TEXTURE); + RenderSystem.setShaderTexture(0, CHEST_GUI_TEXTURE); blit(matrices, x + 3, y + 3, 0, 0, 14, 14); } }; 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 cd18448e9..8b7eed143 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 @@ -26,10 +26,7 @@ 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.BufferBuilder; -import com.mojang.blaze3d.vertex.DefaultVertexFormat; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.Tesselator; +import com.mojang.blaze3d.vertex.*; import com.mojang.math.Matrix4f; import me.shedaniel.clothconfig2.ClothConfigInitializer; import me.shedaniel.clothconfig2.api.ScissorsHandler; @@ -53,6 +50,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.renderer.GameRenderer; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TextComponent; import net.minecraft.network.chat.TranslatableComponent; @@ -196,11 +194,12 @@ public class FilteringScreen extends Screen { protected void renderHoleBackground(PoseStack matrices, int y1, int y2, int tint, int alpha1, int alpha2) { Tesselator tesselator = Tesselator.getInstance(); BufferBuilder buffer = tesselator.getBuilder(); - this.minecraft.getTextureManager().bind(BACKGROUND_LOCATION); + RenderSystem.setShaderTexture(0, BACKGROUND_LOCATION); Matrix4f matrix = matrices.last().pose(); - RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); float float_1 = 32.0F; - buffer.begin(7, DefaultVertexFormat.POSITION_TEX_COLOR); + RenderSystem.setShader(GameRenderer::getPositionTexColorShader); + buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR); buffer.vertex(matrix, 0, y2, 0.0F).uv(0.0F, y2 / 32.0F).color(tint, tint, tint, alpha2).endVertex(); buffer.vertex(matrix, this.width, y2, 0.0F).uv(this.width / 32.0F, y2 / 32.0F).color(tint, tint, tint, alpha2).endVertex(); buffer.vertex(matrix, this.width, y1, 0.0F).uv(this.width / 32.0F, y1 / 32.0F).color(tint, tint, tint, alpha1).endVertex(); @@ -235,7 +234,7 @@ public class FilteringScreen extends Screen { } manager.render(matrices, mouseX, mouseY, delta); updatePosition(delta); - scrolling.renderScrollBar(0xff000000, 1, REIHelper.getInstance().isDarkThemeEnabled() ? 0.8f : 1f); + scrolling.renderScrollBar(0, 1.0F, REIHelper.getInstance().isDarkThemeEnabled() ? 0.8F : 1F); matrices.pushPose(); matrices.translate(0, 0, 300); this.searchField.laterRender(matrices, mouseX, mouseY, delta); @@ -250,19 +249,16 @@ public class FilteringScreen extends Screen { BufferBuilder buffer = tesselator.getBuilder(); RenderSystem.enableBlend(); RenderSystem.blendFuncSeparate(770, 771, 0, 1); - RenderSystem.disableAlphaTest(); - RenderSystem.shadeModel(7425); RenderSystem.disableTexture(); + RenderSystem.setShader(GameRenderer::getPositionTexColorShader); Matrix4f matrix = matrices.last().pose(); - buffer.begin(7, DefaultVertexFormat.POSITION_TEX_COLOR); + buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR); buffer.vertex(matrix, 0, bounds.y + 4, 0.0F).uv(0.0F, 1.0F).color(0, 0, 0, 0).endVertex(); buffer.vertex(matrix, width, bounds.y + 4, 0.0F).uv(1.0F, 1.0F).color(0, 0, 0, 0).endVertex(); buffer.vertex(matrix, width, bounds.y, 0.0F).uv(1.0F, 0.0F).color(0, 0, 0, 255).endVertex(); buffer.vertex(matrix, 0, bounds.y, 0.0F).uv(0.0F, 0.0F).color(0, 0, 0, 255).endVertex(); tesselator.end(); RenderSystem.enableTexture(); - RenderSystem.shadeModel(7424); - RenderSystem.enableAlphaTest(); RenderSystem.disableBlend(); renderHoleBackground(matrices, 0, bounds.y, 64, 255, 255); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ContainerScreenOverlay.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ContainerScreenOverlay.java index f25bb13da..144a97adc 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ContainerScreenOverlay.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ContainerScreenOverlay.java @@ -295,7 +295,7 @@ public class ContainerScreenOverlay extends ScreenOverlay { }), Widgets.createDrawableWidget((helper, matrices, mouseX, mouseY, delta) -> { helper.setBlitOffset(helper.getBlitOffset() + 1); - Minecraft.getInstance().getTextureManager().bind(CHEST_GUI_TEXTURE); + RenderSystem.setShaderTexture(0, CHEST_GUI_TEXTURE); helper.blit(matrices, configButtonArea.x + 3, configButtonArea.y + 3, 0, 0, 14, 14); }) ), @@ -348,8 +348,8 @@ public class ContainerScreenOverlay extends ScreenOverlay { .focusable(false) .containsMousePredicate((button, point) -> button.getBounds().contains(point) && isNotInExclusionZones(point.x, point.y))); widgets.add(Widgets.createDrawableWidget((helper, matrices, mouseX, mouseY, delta) -> { - Minecraft.getInstance().getTextureManager().bind(CHEST_GUI_TEXTURE); - RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.setShaderTexture(0, CHEST_GUI_TEXTURE); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); helper.blit(matrices, weatherButton.getBounds().x + 3, weatherButton.getBounds().y + 3, getCurrentWeather().getId() * 14, 14, 14, 14); })); } @@ -536,7 +536,7 @@ public class ContainerScreenOverlay extends ScreenOverlay { } matrices.popPose(); } - RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); this.renderWidgets(matrices, mouseX, mouseY, delta); if (ConfigObject.getInstance().areClickableRecipeArrowsEnabled()) { Screen screen = Minecraft.getInstance().screen; 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 f3ab4928f..532555360 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 @@ -24,11 +24,13 @@ package me.shedaniel.rei.impl.client.gui; import com.mojang.blaze3d.pipeline.RenderTarget; +import com.mojang.blaze3d.pipeline.TextureTarget; import com.mojang.blaze3d.platform.Lighting; import com.mojang.blaze3d.platform.NativeImage; import com.mojang.blaze3d.platform.Window; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Matrix4f; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.client.gui.widgets.Widget; import me.shedaniel.rei.impl.client.gui.toast.ExportRecipeIdentifierToast; @@ -70,30 +72,27 @@ public final class RecipeDisplayExporter extends Widget { } } - @SuppressWarnings("deprecation") private void exportRecipe(Rectangle rectangle, List<Widget> widgets) { - RenderSystem.pushMatrix(); Minecraft client = Minecraft.getInstance(); Window window = client.getWindow(); - RenderTarget framebuffer = new RenderTarget(window.getWidth(), window.getHeight(), true, false); - framebuffer.bindWrite(true); - RenderSystem.viewport(0, 0, window.getWidth(), window.getHeight()); + RenderTarget renderTarget = new TextureTarget(window.getWidth(), window.getHeight(), true, false); + renderTarget.bindWrite(true); RenderSystem.clear(256, Minecraft.ON_OSX); - RenderSystem.matrixMode(5889); - RenderSystem.loadIdentity(); - RenderSystem.ortho(0.0D, (double) window.getWidth() / window.getGuiScale(), (double) window.getHeight() / window.getGuiScale(), 0.0D, 1000.0D, 3000.0D); - RenderSystem.matrixMode(5888); - RenderSystem.loadIdentity(); - RenderSystem.translatef(0.0F, 0.0F, -2000.0F); + Matrix4f matrix4f = Matrix4f.orthographic(0.0F, (float) ((double) window.getWidth() / window.getGuiScale()), 0.0F, (float) ((double) window.getHeight() / window.getGuiScale()), 1000.0F, 3000.0F); + RenderSystem.setProjectionMatrix(matrix4f); + PoseStack poseStack = RenderSystem.getModelViewStack(); + poseStack.pushPose(); + poseStack.setIdentity(); + poseStack.translate(0.0D, 0.0D, -2000.0D); + RenderSystem.applyModelViewMatrix(); Lighting.setupFor3DItems(); PoseStack matrices = new PoseStack(); for (Widget widget : widgets) { widget.render(matrices, -1, -1, 0); } - RenderSystem.popMatrix(); - NativeImage nativeImage = new NativeImage(framebuffer.width, framebuffer.height, false); - RenderSystem.bindTexture(framebuffer.getColorTextureId()); + NativeImage nativeImage = new NativeImage(renderTarget.width, renderTarget.height, false); + RenderSystem.bindTexture(renderTarget.getColorTextureId()); nativeImage.downloadTexture(0, false); nativeImage.flipY(); int outWidth = (int) (rectangle.width * window.getGuiScale()); @@ -114,9 +113,14 @@ public final class RecipeDisplayExporter extends Widget { } fi |
