From 144f0c0576c1a0ac1204ec5970a133ebc44eaa02 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sat, 21 Dec 2019 15:54:06 +0800 Subject: 3.2.28 --- .../me/shedaniel/rei/RoughlyEnoughItemsCore.java | 16 +- .../java/me/shedaniel/rei/api/ConfigObject.java | 4 + .../me/shedaniel/rei/api/ItemRendererHooks.java | 13 ++ .../java/me/shedaniel/rei/api/ItemStackHook.java | 14 ++ .../rei/api/ItemStackRenderOverlayHook.java | 10 - .../shedaniel/rei/gui/ContainerScreenOverlay.java | 36 ++-- .../me/shedaniel/rei/gui/OverlaySearchField.java | 2 - .../shedaniel/rei/gui/PreRecipeViewingScreen.java | 8 +- .../me/shedaniel/rei/gui/RecipeViewingScreen.java | 14 +- .../rei/gui/VillagerRecipeViewingScreen.java | 10 +- .../rei/gui/entries/SimpleRecipeEntry.java | 4 +- .../gui/widget/CraftableToggleButtonWidget.java | 3 - .../shedaniel/rei/gui/widget/EntryListWidget.java | 201 +++++++++++++++------ .../me/shedaniel/rei/gui/widget/EntryWidget.java | 2 - .../rei/gui/widget/FavoritesListWidget.java | 2 - .../me/shedaniel/rei/gui/widget/PanelWidget.java | 2 - .../rei/gui/widget/RecipeArrowWidget.java | 4 - .../rei/gui/widget/RecipeChoosePageWidget.java | 10 +- .../me/shedaniel/rei/gui/widget/TabWidget.java | 4 - .../me/shedaniel/rei/impl/ConfigObjectImpl.java | 12 ++ .../me/shedaniel/rei/impl/FluidEntryStack.java | 2 - .../java/me/shedaniel/rei/impl/ItemEntryStack.java | 73 ++++++-- .../me/shedaniel/rei/mixin/MixinItemRenderer.java | 21 +++ .../me/shedaniel/rei/mixin/MixinItemStack.java | 4 +- .../rei/plugin/brewing/DefaultBrewingCategory.java | 8 +- .../plugin/campfire/DefaultCampfireCategory.java | 8 +- .../composting/DefaultCompostingCategory.java | 4 - .../rei/plugin/cooking/DefaultCookingCategory.java | 6 +- .../plugin/crafting/DefaultCraftingCategory.java | 8 +- .../stonecutting/DefaultStoneCuttingCategory.java | 8 +- .../plugin/stripping/DefaultStrippingCategory.java | 8 +- 31 files changed, 319 insertions(+), 202 deletions(-) create mode 100644 src/main/java/me/shedaniel/rei/api/ItemRendererHooks.java create mode 100644 src/main/java/me/shedaniel/rei/api/ItemStackHook.java delete mode 100644 src/main/java/me/shedaniel/rei/api/ItemStackRenderOverlayHook.java create mode 100644 src/main/java/me/shedaniel/rei/mixin/MixinItemRenderer.java (limited to 'src/main/java/me') diff --git a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java index 416c6818d..dce098f67 100644 --- a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java +++ b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java @@ -109,7 +109,7 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer { } public static Optional getPluginIdentifier(REIPluginEntry plugin) { - for (Identifier identifier : plugins.keySet()) + for(Identifier identifier : plugins.keySet()) if (identifier != null && plugins.get(identifier).equals(plugin)) return Optional.of(identifier); return Optional.empty(); @@ -161,7 +161,7 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer { registerClothEvents(); discoverPluginEntries(); - for (ModContainer modContainer : FabricLoader.getInstance().getAllMods()) { + for(ModContainer modContainer : FabricLoader.getInstance().getAllMods()) { if (modContainer.getMetadata().containsCustomValue("roughlyenoughitems:plugins")) RoughlyEnoughItemsCore.LOGGER.error("[REI] REI plugin from " + modContainer.getMetadata().getId() + " is not loaded because it is too old!"); } @@ -180,10 +180,10 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer { List> input = Lists.newArrayList(); int mapSize = packetByteBuf.readInt(); - for (int i = 0; i < mapSize; i++) { + for(int i = 0; i < mapSize; i++) { List list = Lists.newArrayList(); int count = packetByteBuf.readInt(); - for (int j = 0; j < count; j++) { + for(int j = 0; j < count; j++) { list.add(packetByteBuf.readItemStack()); } input.add(list); @@ -191,7 +191,7 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer { ghostSlots.addSlot(Ingredient.ofItems(Items.STONE), 381203812, 12738291); CraftingTableContainer container = ((CraftingTableScreen) currentScreen).getContainer(); - for (int i = 0; i < input.size(); i++) { + for(int i = 0; i < input.size(); i++) { List stacks = input.get(i); if (!stacks.isEmpty()) { Slot slot = container.getSlot(i + container.getCraftingResultSlotIndex() + 1); @@ -204,7 +204,7 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer { @SuppressWarnings("deprecation") private void discoverPluginEntries() { - for (REIPluginEntry reiPlugin : FabricLoader.getInstance().getEntrypoints("rei_plugins", REIPluginEntry.class)) { + for(REIPluginEntry reiPlugin : FabricLoader.getInstance().getEntrypoints("rei_plugins", REIPluginEntry.class)) { try { if (!REIPluginV0.class.isAssignableFrom(reiPlugin.getClass())) throw new IllegalArgumentException("REI plugin is too old!"); @@ -214,7 +214,7 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer { RoughlyEnoughItemsCore.LOGGER.error("[REI] Can't load REI plugins from %s: %s", reiPlugin.getClass(), e.getLocalizedMessage()); } } - for (REIPluginV0 reiPlugin : FabricLoader.getInstance().getEntrypoints("rei_plugins_v0", REIPluginV0.class)) { + for(REIPluginV0 reiPlugin : FabricLoader.getInstance().getEntrypoints("rei_plugins_v0", REIPluginV0.class)) { try { registerPlugin(reiPlugin); } catch (Exception e) { @@ -251,7 +251,7 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer { return; ScreenHelper.setLastContainerScreen((AbstractContainerScreen) screen); boolean alreadyAdded = false; - for (Element element : Lists.newArrayList(screenHooks.cloth_getInputListeners())) + for(Element element : Lists.newArrayList(screenHooks.cloth_getInputListeners())) if (ContainerScreenOverlay.class.isAssignableFrom(element.getClass())) if (alreadyAdded) screenHooks.cloth_getInputListeners().remove(element); diff --git a/src/main/java/me/shedaniel/rei/api/ConfigObject.java b/src/main/java/me/shedaniel/rei/api/ConfigObject.java index 2c9b9bed2..03e962ba6 100644 --- a/src/main/java/me/shedaniel/rei/api/ConfigObject.java +++ b/src/main/java/me/shedaniel/rei/api/ConfigObject.java @@ -98,6 +98,10 @@ public interface ConfigObject { boolean doDisplayFavoritesOnTheLeft(); + boolean doesFastEntryRendering(); + + boolean doDebugRenderTimeRequired(); + InputUtil.KeyCode getFavoriteKeybind(); @Retention(RetentionPolicy.RUNTIME) diff --git a/src/main/java/me/shedaniel/rei/api/ItemRendererHooks.java b/src/main/java/me/shedaniel/rei/api/ItemRendererHooks.java new file mode 100644 index 000000000..9cb7714dd --- /dev/null +++ b/src/main/java/me/shedaniel/rei/api/ItemRendererHooks.java @@ -0,0 +1,13 @@ +package me.shedaniel.rei.api; + +import me.shedaniel.rei.api.annotations.Internal; +import net.minecraft.client.render.VertexConsumer; +import net.minecraft.client.render.model.BakedModel; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.item.ItemStack; + +@Internal +@Deprecated +public interface ItemRendererHooks { + void rei_renderBakedItemModel(BakedModel model, ItemStack stack, int light, int overlay, MatrixStack matrices, VertexConsumer vertices); +} diff --git a/src/main/java/me/shedaniel/rei/api/ItemStackHook.java b/src/main/java/me/shedaniel/rei/api/ItemStackHook.java new file mode 100644 index 000000000..545bd8f46 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/api/ItemStackHook.java @@ -0,0 +1,14 @@ +/* + * Roughly Enough Items by Danielshe. + * Licensed under the MIT License. + */ + +package me.shedaniel.rei.api; + +import me.shedaniel.rei.api.annotations.Internal; + +@Internal +@Deprecated +public interface ItemStackHook { + void rei_setRenderEnchantmentGlint(boolean b); +} diff --git a/src/main/java/me/shedaniel/rei/api/ItemStackRenderOverlayHook.java b/src/main/java/me/shedaniel/rei/api/ItemStackRenderOverlayHook.java deleted file mode 100644 index 2bdf92a4e..000000000 --- a/src/main/java/me/shedaniel/rei/api/ItemStackRenderOverlayHook.java +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Roughly Enough Items by Danielshe. - * Licensed under the MIT License. - */ - -package me.shedaniel.rei.api; - -public interface ItemStackRenderOverlayHook { - void rei_setRenderEnchantmentGlint(boolean b); -} diff --git a/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java b/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java index 70e284cdf..d9a33d0f3 100644 --- a/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java +++ b/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java @@ -22,7 +22,6 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.Element; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.AbstractContainerScreen; -import net.minecraft.client.render.DiffuseLighting; import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.resource.language.I18n; @@ -71,7 +70,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { VertexConsumerProvider.Immediate immediate = VertexConsumerProvider.immediate(Tessellator.getInstance().getBuffer()); matrixStack_1.translate(0.0D, 0.0D, getBlitOffset()); Matrix4f matrix4f_1 = matrixStack_1.peek().getModel(); - for (int lineIndex = 0; lineIndex < tooltipLines.size(); lineIndex++) { + for(int lineIndex = 0; lineIndex < tooltipLines.size(); lineIndex++) { font.draw(tooltipLines.get(lineIndex), x, currentY, -1, true, matrix4f_1, immediate, false, 0, 15728880); currentY += lineIndex == 0 ? 12 : 10; } @@ -186,7 +185,6 @@ public class ContainerScreenOverlay extends WidgetWithBounds { @Override public void render(int mouseX, int mouseY, float delta) { super.render(mouseX, mouseY, delta); - DiffuseLighting.disable(); Rectangle bounds = getBounds(); if (ClientHelper.getInstance().isCheating() && RoughlyEnoughItemsCore.hasOperatorPermission()) { if (RoughlyEnoughItemsCore.hasPermissionToUsePackets()) @@ -253,7 +251,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { } }); int xxx = ConfigObject.getInstance().isLeftHandSidePanel() ? window.getScaledWidth() - 30 : 10; - for (Weather weather : Weather.values()) { + for(Weather weather : Weather.values()) { widgets.add(new ButtonWidget(new Rectangle(xxx, 35, 20, 20), "") { @Override public void onPressed() { @@ -263,7 +261,6 @@ public class ContainerScreenOverlay extends WidgetWithBounds { @Override public void render(int mouseX, int mouseY, float delta) { super.render(mouseX, mouseY, delta); - DiffuseLighting.disable(); MinecraftClient.getInstance().getTextureManager().bindTexture(CHEST_GUI_TEXTURE); RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); blit(getBounds().x + 3, getBounds().y + 3, weather.getId() * 14, 14, 14, 14); @@ -427,7 +424,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { if (shouldReInit) init(); else { - for (DisplayHelper.DisplayBoundsHandler handler : DisplayHelper.getInstance().getSortedBoundsHandlers(minecraft.currentScreen.getClass())) { + for(DisplayHelper.DisplayBoundsHandler handler : DisplayHelper.getInstance().getSortedBoundsHandlers(minecraft.currentScreen.getClass())) { if (handler != null && handler.shouldRecalculateArea(!ConfigObject.getInstance().isLeftHandSidePanel(), rectangle)) { init(); break; @@ -439,23 +436,21 @@ public class ContainerScreenOverlay extends WidgetWithBounds { ENTRY_LIST_WIDGET.updateSearch(ScreenHelper.getSearchField().getText()); } if (OverlaySearchField.isSearching) { - DiffuseLighting.disable(); setBlitOffset(200); if (MinecraftClient.getInstance().currentScreen instanceof AbstractContainerScreen) { ContainerScreenHooks hooks = (ContainerScreenHooks) MinecraftClient.getInstance().currentScreen; int left = hooks.rei_getContainerLeft(), top = hooks.rei_getContainerTop(); - for (Slot slot : ((AbstractContainerScreen) MinecraftClient.getInstance().currentScreen).getContainer().slotList) + for(Slot slot : ((AbstractContainerScreen) MinecraftClient.getInstance().currentScreen).getContainer().slotList) if (!slot.hasStack() || !ENTRY_LIST_WIDGET.canLastSearchTermsBeAppliedTo(EntryStack.create(slot.getStack()))) fillGradient(left + slot.xPosition, top + slot.yPosition, left + slot.xPosition + 16, top + slot.yPosition + 16, -601874400, -601874400); } setBlitOffset(0); } RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); - DiffuseLighting.disable(); this.renderWidgets(mouseX, mouseY, delta); if (MinecraftClient.getInstance().currentScreen instanceof AbstractContainerScreen && ConfigObject.getInstance().areClickableRecipeArrowsEnabled()) { ContainerScreenHooks hooks = (ContainerScreenHooks) MinecraftClient.getInstance().currentScreen; - for (RecipeHelper.ScreenClickArea area : RecipeHelper.getInstance().getScreenClickAreas()) + for(RecipeHelper.ScreenClickArea area : RecipeHelper.getInstance().getScreenClickAreas()) if (area.getScreenClass().equals(MinecraftClient.getInstance().currentScreen.getClass())) if (area.getRectangle().contains(mouseX - hooks.rei_getContainerLeft(), mouseY - hooks.rei_getContainerTop())) { String collect = CollectionUtils.mapAndJoinToString(area.getCategories(), identifier -> RecipeHelper.getInstance().getCategory(identifier).getCategoryName(), ", "); @@ -473,7 +468,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { } Screen currentScreen = MinecraftClient.getInstance().currentScreen; if (!(currentScreen instanceof RecipeViewingScreen) || !((RecipeViewingScreen) currentScreen).choosePageActivated) - for (QueuedTooltip queuedTooltip : QUEUED_TOOLTIPS) { + for(QueuedTooltip queuedTooltip : QUEUED_TOOLTIPS) { if (queuedTooltip != null) renderTooltip(queuedTooltip); } @@ -508,16 +503,15 @@ public class ContainerScreenOverlay extends WidgetWithBounds { QUEUED_TOOLTIPS.add(queuedTooltip); } + @SuppressWarnings("deprecation") public void renderWidgets(int int_1, int int_2, float float_1) { if (!ScreenHelper.isOverlayVisible()) return; if (!ConfigObject.getInstance().isEntryListWidgetScrolled()) buttonLeft.enabled = buttonRight.enabled = ENTRY_LIST_WIDGET.getTotalPages() != 1; - widgets.forEach(widget -> { - DiffuseLighting.disable(); + for(Widget widget : widgets) { widget.render(int_1, int_2, float_1); - }); - DiffuseLighting.disable(); + } } @Override @@ -540,7 +534,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { if (favoritesListWidget != null && favoritesListWidget.mouseScrolled(i, j, amount)) return true; } - for (Widget widget : widgets) + for(Widget widget : widgets) if (widget != ENTRY_LIST_WIDGET && (favoritesListWidget == null || widget != favoritesListWidget) && widget.mouseScrolled(i, j, amount)) return true; return false; @@ -551,7 +545,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { if (ScreenHelper.isOverlayVisible()) { if (ScreenHelper.getSearchField().keyPressed(int_1, int_2, int_3)) return true; - for (Element listener : widgets) + for(Element listener : widgets) if (listener != ScreenHelper.getSearchField() && listener.keyPressed(int_1, int_2, int_3)) return true; } @@ -587,7 +581,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { return false; if (ScreenHelper.getSearchField().charTyped(char_1, int_1)) return true; - for (Element listener : widgets) + for(Element listener : widgets) if (listener != ScreenHelper.getSearchField() && listener.charTyped(char_1, int_1)) return true; return false; @@ -604,7 +598,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { return false; if (MinecraftClient.getInstance().currentScreen instanceof AbstractContainerScreen && ConfigObject.getInstance().areClickableRecipeArrowsEnabled()) { ContainerScreenHooks hooks = (ContainerScreenHooks) MinecraftClient.getInstance().currentScreen; - for (RecipeHelper.ScreenClickArea area : RecipeHelper.getInstance().getScreenClickAreas()) + for(RecipeHelper.ScreenClickArea area : RecipeHelper.getInstance().getScreenClickAreas()) if (area.getScreenClass().equals(MinecraftClient.getInstance().currentScreen.getClass())) if (area.getRectangle().contains(double_1 - hooks.rei_getContainerLeft(), double_2 - hooks.rei_getContainerTop())) { ClientHelper.getInstance().executeViewAllRecipesFromCategories(Arrays.asList(area.getCategories())); @@ -612,7 +606,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { return true; } } - for (Element element : widgets) + for(Element element : widgets) if (element.mouseClicked(double_1, double_2, int_1)) { this.setFocused(element); if (int_1 == 0) @@ -634,7 +628,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { } public boolean isNotInExclusionZones(double mouseX, double mouseY) { - for (DisplayHelper.DisplayBoundsHandler handler : DisplayHelper.getInstance().getSortedBoundsHandlers(MinecraftClient.getInstance().currentScreen.getClass())) { + for(DisplayHelper.DisplayBoundsHandler handler : DisplayHelper.getInstance().getSortedBoundsHandlers(MinecraftClient.getInstance().currentScreen.getClass())) { ActionResult in = handler.isInZone(mouseX, mouseY); if (in != ActionResult.PASS) return in == ActionResult.SUCCESS; diff --git a/src/main/java/me/shedaniel/rei/gui/OverlaySearchField.java b/src/main/java/me/shedaniel/rei/gui/OverlaySearchField.java index cecb6d9d4..db2154080 100644 --- a/src/main/java/me/shedaniel/rei/gui/OverlaySearchField.java +++ b/src/main/java/me/shedaniel/rei/gui/OverlaySearchField.java @@ -12,7 +12,6 @@ import me.shedaniel.rei.api.annotations.Internal; import me.shedaniel.rei.gui.widget.TextFieldWidget; import me.shedaniel.rei.impl.ScreenHelper; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.render.DiffuseLighting; import net.minecraft.client.resource.language.I18n; import net.minecraft.client.sound.PositionedSoundInstance; import net.minecraft.client.util.InputUtil; @@ -53,7 +52,6 @@ public class OverlaySearchField extends TextFieldWidget { @SuppressWarnings("deprecation") public void laterRender(int int_1, int int_2, float float_1) { - DiffuseLighting.disable(); RenderSystem.disableDepthTest(); setEditableColor(ContainerScreenOverlay.getEntryListWidget().getAllStacks().isEmpty() && !getText().isEmpty() ? 16733525 : isSearching ? -852212 : (containsMouse(PointHelper.fromMouse()) || isFocused()) ? (ScreenHelper.isDarkModeEnabled() ? -17587 : -1) : -6250336); setSuggestion(!isFocused() && getText().isEmpty() ? I18n.translate("text.rei.search.field.suggestion") : null); diff --git a/src/main/java/me/shedaniel/rei/gui/PreRecipeViewingScreen.java b/src/main/java/me/shedaniel/rei/gui/PreRecipeViewingScreen.java index 01efcca98..781c6b678 100644 --- a/src/main/java/me/shedaniel/rei/gui/PreRecipeViewingScreen.java +++ b/src/main/java/me/shedaniel/rei/gui/PreRecipeViewingScreen.java @@ -16,7 +16,6 @@ import me.shedaniel.rei.impl.ScreenHelper; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.Element; import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.render.DiffuseLighting; import net.minecraft.client.resource.language.I18n; import net.minecraft.client.sound.PositionedSoundInstance; import net.minecraft.sound.SoundEvents; @@ -64,15 +63,14 @@ public class PreRecipeViewingScreen extends Screen { this.renderBackground(); this.drawCenteredString(this.font, this.title.asFormattedString(), this.width / 2, 20, 16777215); int i = 30; - for (String s : this.font.wrapStringToWidthAsList(I18n.translate("text.rei.recipe_screen_type.selection.sub"), width - 30)) { + for(String s : this.font.wrapStringToWidthAsList(I18n.translate("text.rei.recipe_screen_type.selection.sub"), width - 30)) { this.drawCenteredString(this.font, Formatting.GRAY.toString() + s, width / 2, i, -1); i += 10; } super.render(int_1, int_2, float_1); - this.widgets.forEach(widget -> { - DiffuseLighting.disable(); + for(Widget widget : widgets) { widget.render(int_1, int_2, float_1); - }); + } } @Override diff --git a/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java b/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java index fee376855..88e427d87 100644 --- a/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java +++ b/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java @@ -17,7 +17,6 @@ import me.shedaniel.rei.utils.CollectionUtils; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.Element; import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.render.DiffuseLighting; import net.minecraft.client.resource.language.I18n; import net.minecraft.client.sound.PositionedSoundInstance; import net.minecraft.client.util.Window; @@ -372,10 +371,9 @@ public class RecipeViewingScreen extends Screen { @Override public void render(int mouseX, int mouseY, float delta) { this.fillGradient(0, 0, this.width, this.height, -1072689136, -804253680); - preWidgets.forEach(widget -> { - DiffuseLighting.disable(); + for(Widget widget : preWidgets) { widget.render(mouseX, mouseY, delta); - }); + } if (selectedCategory != null) selectedCategory.drawCategoryBackground(bounds, mouseX, mouseY, delta); else { @@ -392,19 +390,15 @@ public class RecipeViewingScreen extends Screen { if (!tab.isSelected()) tab.render(mouseX, mouseY, delta); } - DiffuseLighting.disable(); super.render(mouseX, mouseY, delta); - widgets.forEach(widget -> { - DiffuseLighting.disable(); + for(Widget widget : widgets) { widget.render(mouseX, mouseY, delta); - }); + } RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); - DiffuseLighting.disable(); for (TabWidget tab : tabs) { if (tab.isSelected()) tab.render(mouseX, mouseY, delta); } - DiffuseLighting.disable(); ScreenHelper.getLastOverlay().render(mouseX, mouseY, delta); ScreenHelper.getLastOverlay().lateRender(mouseX, mouseY, delta); if (choosePageActivated) { diff --git a/src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java b/src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java index cc5d26802..f47195521 100644 --- a/src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java +++ b/src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java @@ -24,7 +24,6 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.Element; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.render.BufferBuilder; -import net.minecraft.client.render.DiffuseLighting; import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormats; import net.minecraft.client.resource.language.I18n; @@ -349,11 +348,9 @@ public class VillagerRecipeViewingScreen extends Screen { updatePosition(delta); this.fillGradient(0, 0, this.width, this.height, -1072689136, -804253680); int yOffset = 0; - this.widgets.forEach(widget -> { - DiffuseLighting.disable(); + for(Widget widget : widgets) { widget.render(mouseX, mouseY, delta); - }); - DiffuseLighting.disable(); + } ScreenHelper.getLastOverlay().render(mouseX, mouseY, delta); RenderSystem.pushMatrix(); ScissorsHandler.INSTANCE.scissor(new Rectangle(0, scrollListBounds.y + 1, width, scrollListBounds.height - 2)); @@ -361,14 +358,12 @@ public class VillagerRecipeViewingScreen extends Screen { ButtonWidget buttonWidget = buttonWidgets.get(i); buttonWidget.getBounds().y = scrollListBounds.y + 1 + yOffset - (int) scroll; if (buttonWidget.getBounds().getMaxY() > scrollListBounds.getMinY() && buttonWidget.getBounds().getMinY() < scrollListBounds.getMaxY()) { - DiffuseLighting.disable(); buttonWidget.render(mouseX, mouseY, delta); } yOffset += buttonWidget.getBounds().height; } for (int i = 0; i < buttonWidgets.size(); i++) { if (buttonWidgets.get(i).getBounds().getMaxY() > scrollListBounds.getMinY() && buttonWidgets.get(i).getBounds().getMinY() < scrollListBounds.getMaxY()) { - DiffuseLighting.disable(); recipeRenderers.get(i).setZ(1); recipeRenderers.get(i).render(buttonWidgets.get(i).getBounds(), mouseX, mouseY, delta); ScreenHelper.getLastOverlay().addTooltip(recipeRenderers.get(i).getTooltip(mouseX, mouseY)); @@ -387,7 +382,6 @@ public class VillagerRecipeViewingScreen extends Screen { boolean hovered = (new Rectangle(scrollbarPositionMinX, minY, scrollbarPositionMaxX - scrollbarPositionMinX, height)).contains(PointHelper.fromMouse()); float bottomC = (hovered ? .67f : .5f) * (ScreenHelper.isDarkModeEnabled() ? 0.8f : 1f); float topC = (hovered ? .87f : .67f) * (ScreenHelper.isDarkModeEnabled() ? 0.8f : 1f); - DiffuseLighting.disable(); RenderSystem.disableTexture(); RenderSystem.enableBlend(); RenderSystem.disableAlphaTest(); diff --git a/src/main/java/me/shedaniel/rei/gui/entries/SimpleRecipeEntry.java b/src/main/java/me/shedaniel/rei/gui/entries/SimpleRecipeEntry.java index 8404d0244..0906e5a2d 100644 --- a/src/main/java/me/shedaniel/rei/gui/entries/SimpleRecipeEntry.java +++ b/src/main/java/me/shedaniel/rei/gui/entries/SimpleRecipeEntry.java @@ -12,7 +12,6 @@ import me.shedaniel.rei.gui.widget.EntryWidget; import me.shedaniel.rei.gui.widget.QueuedTooltip; import me.shedaniel.rei.utils.CollectionUtils; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.render.DiffuseLighting; import net.minecraft.util.Identifier; import net.minecraft.util.Pair; import net.minecraft.util.math.MathHelper; @@ -34,7 +33,7 @@ public class SimpleRecipeEntry extends RecipeEntry { protected SimpleRecipeEntry(List> input, List output) { List, AtomicInteger>> newList = Lists.newArrayList(); - List, Integer>> a = input.stream().map(stacks -> new Pair<>(stacks, stacks.stream().map(EntryStack::getAmount).max(Integer::compareTo).orElse(1))).collect(Collectors.toList()); + List, Integer>> a = CollectionUtils.map(input, stacks -> new Pair<>(stacks, stacks.stream().map(EntryStack::getAmount).max(Integer::compareTo).orElse(1))); for (Pair, Integer> pair : a) { Optional, AtomicInteger>> any = newList.stream().filter(pairr -> equalsList(pair.getLeft(), pairr.getLeft())).findAny(); if (any.isPresent()) { @@ -95,7 +94,6 @@ public class SimpleRecipeEntry extends RecipeEntry { } xx = bounds.x + 4 + 18 * (getItemsPerLine() - 2); yy = bounds.y + getHeight() / 2 - 8; - DiffuseLighting.disable(); MinecraftClient.getInstance().getTextureManager().bindTexture(CHEST_GUI_TEXTURE); blit(xx, yy, 0, 28, 18, 18); xx += 18; diff --git a/src/main/java/me/shedaniel/rei/gui/widget/CraftableToggleButtonWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/CraftableToggleButtonWidget.java index 6fb1dd874..bffd7cfae 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/CraftableToggleButtonWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/CraftableToggleButtonWidget.java @@ -10,7 +10,6 @@ import me.shedaniel.math.api.Rectangle; import me.shedaniel.rei.api.ConfigManager; import net.minecraft.block.Blocks; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.render.DiffuseLighting; import net.minecraft.client.render.item.ItemRenderer; import net.minecraft.client.resource.language.I18n; import net.minecraft.item.ItemStack; @@ -33,14 +32,12 @@ public abstract class CraftableToggleButtonWidget extends ButtonWidget { } public void lateRender(int mouseX, int mouseY, float delta) { - DiffuseLighting.disable(); super.render(mouseX, mouseY, delta); this.itemRenderer.zOffset = getBlitOffset(); Rectangle bounds = getBounds(); this.itemRenderer.renderGuiItem(new ItemStack(Blocks.CRAFTING_TABLE), bounds.x + 2, bounds.y + 2); this.itemRenderer.zOffset = 0.0F; - DiffuseLighting.disable(); MinecraftClient.getInstance().getTextureManager().bindTexture(CHEST_GUI_TEXTURE); RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); int color = ConfigManager.getInstance().isCraftableOnlyEnabled() ? 939579655 : 956235776; diff --git a/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java index 37276747a..f9f054140 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java @@ -24,12 +24,14 @@ import me.shedaniel.rei.utils.CollectionUtils; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.render.BufferBuilder; -import net.minecraft.client.render.DiffuseLighting; import net.minecraft.client.render.Tessellator; +import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.VertexFormats; import net.minecraft.client.resource.language.I18n; import net.minecraft.client.sound.PositionedSoundInstance; import net.minecraft.client.util.InputUtil; +import net.minecraft.client.util.math.Matrix4f; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemGroup; import net.minecraft.sound.SoundEvents; import net.minecraft.util.ActionResult; @@ -63,6 +65,7 @@ public class EntryListWidget extends WidgetWithBounds { protected long start; protected long duration; protected int blockedCount; + private boolean debugTime; private Rectangle bounds, innerBounds; private List allStacks = null; private List favorites = null; @@ -75,7 +78,7 @@ public class EntryListWidget extends WidgetWithBounds { @SuppressWarnings("rawtypes") static boolean notSteppingOnExclusionZones(int left, int top, Rectangle listArea) { MinecraftClient instance = MinecraftClient.getInstance(); - for (DisplayHelper.DisplayBoundsHandler sortedBoundsHandler : DisplayHelper.getInstance().getSortedBoundsHandlers(instance.currentScreen.getClass())) { + for(DisplayHelper.DisplayBoundsHandler sortedBoundsHandler : DisplayHelper.getInstance().getSortedBoundsHandlers(instance.currentScreen.getClass())) { ActionResult fit = sortedBoundsHandler.canItemSlotWidgetFit(left, top, instance.currentScreen, listArea); if (fit != ActionResult.PASS) return fit == ActionResult.SUCCESS; @@ -188,7 +191,7 @@ public class EntryListWidget extends WidgetWithBounds { @Override public void render(int mouseX, int mouseY, float delta) { if (ConfigObject.getInstance().isEntryListWidgetScrolled()) { - for (EntryListEntry entry : entries) + for(EntryListEntry entry : entries) entry.clearStacks(); ScissorsHandler.INSTANCE.scissor(bounds); int sizeForFavorites = getSlotsHeightNumberForFavorites(); @@ -196,21 +199,53 @@ public class EntryListWidget extends WidgetWithBounds { int nextIndex = skip * innerBounds.width / 18; int i = nextIndex; blockedCount = 0; - if (sizeForFavorites > 0) { - drawString(font, I18n.translate("text.rei.favorites"), innerBounds.x + 2, (int) (innerBounds.y + 8 - scroll), -1); - nextIndex += innerBounds.width / 18; - for (int i1 = 0; i1 < favorites.size(); i1++) { - EntryStack stack = favorites.get(i1); - back1: + if (debugTime) { + int size = 0; + long time = 0; + if (sizeForFavorites > 0) { + drawString(font, I18n.translate("text.rei.favorites"), innerBounds.x + 2, (int) (innerBounds.y + 8 - scroll), -1); + nextIndex += innerBounds.width / 18; + for(int i1 = 0; i1 < favorites.size(); i1++) { + EntryStack stack = favorites.get(i1); + back1: + while (true) { + EntryListEntry entry = entries.get(nextIndex); + entry.getBounds().y = (int) (entry.backupY - scroll); + if (entry.getBounds().y > bounds.getMaxY()) + break back1; + if (notSteppingOnExclusionZones(entry.getBounds().x, entry.getBounds().y, innerBounds)) { + entry.entry(stack); + entry.isFavorites = true; + size++; + long l = System.currentTimeMillis(); + entry.render(mouseX, mouseY, delta); + time += (System.currentTimeMillis() - l); + nextIndex++; + break; + } else { + blockedCount++; + nextIndex++; + } + } + } + nextIndex += innerBounds.width / -18 + getScrollNumberForFavorites() - favorites.size(); + } + int offset = sizeForFavorites > 0 ? -12 : 0; + back: + for(; i < allStacks.size(); i++) { + EntryStack stack = allStacks.get(i); while (true) { EntryListEntry entry = entries.get(nextIndex); - entry.getBounds().y = (int) (entry.backupY - scroll); + entry.getBounds().y = (int) (entry.backupY - scroll + offset); if (entry.getBounds().y > bounds.getMaxY()) - break back1; + break back; if (notSteppingOnExclusionZones(entry.getBounds().x, entry.getBounds().y, innerBounds)) { entry.entry(stack); - entry.isFavorites = true; + entry.isFavorites = false; + size++; + long l = System.currentTimeMillis(); entry.render(mouseX, mouseY, delta); + time += (System.currentTimeMillis() - l); nextIndex++; break; } else { @@ -219,26 +254,62 @@ public class EntryListWidget extends WidgetWithBounds { } } } - nextIndex += innerBounds.width / -18 + getScrollNumberForFavorites() - favorites.size(); - } - int offset = sizeForFavorites > 0 ? -12 : 0; - back: - for (; i < allStacks.size(); i++) { - EntryStack stack = allStacks.get(i); - while (true) { - EntryListEntry entry = entries.get(nextIndex); - entry.getBounds().y = (int) (entry.backupY - scroll + offset); - if (entry.getBounds().y > bounds.getMaxY()) - break back; - if (notSteppingOnExclusionZones(entry.getBounds().x, entry.getBounds().y, innerBounds)) { - entry.entry(stack); - entry.isFavorites = false; - entry.render(mouseX, mouseY, delta); - nextIndex++; - break; - } else { - blockedCount++; - nextIndex++; + int z = getZ(); + setZ(500); + String str = String.format("%d entries, avg. %.2fms, %s fps", size, time / (double) size, minecraft.fpsDebugString.split(" ")[0]); + fillGradient(bounds.x, bounds.y, bounds.x + font.getStringWidth(str) + 2, bounds.y + font.fontHeight + 2, -16777216, -16777216); + MatrixStack matrixStack_1 = new MatrixStack(); + VertexConsumerProvider.Immediate immediate = VertexConsumerProvider.immediate(Tessellator.getInstance().getBuffer()); + matrixStack_1.translate(0.0D, 0.0D, getZ()); + Matrix4f matrix4f_1 = matrixStack_1.peek().getModel(); + font.draw(str, bounds.x + 2, bounds.y + 2, -1, false, matrix4f_1, immediate, false, 0, 15728880); + immediate.draw(); + setZ(z); + } else { + if (sizeForFavorites > 0) { + drawString(font, I18n.translate("text.rei.favorites"), innerBounds.x + 2, (int) (innerBounds.y + 8 - scroll), -1); + nextIndex += innerBounds.width / 18; + for(int i1 = 0; i1 < favorites.size(); i1++) { + EntryStack stack = favorites.get(i1); + back1: + while (true) { + EntryListEntry entry = entries.get(nextIndex); + entry.getBounds().y = (int) (entry.backupY - scroll); + if (entry.getBounds().y > bounds.getMaxY()) + break back1; + if (notSteppingOnExclusionZones(entry.getBounds().x, entry.getBounds().y, innerBounds)) { + entry.entry(stack); + entry.isFavorites = true; + entry.render(mouseX, mouseY, delta); + nextIndex++; + break; + } else { + blockedCount++; + nextIndex++; + } + } + } + nextIndex += innerBounds.width / -18 + getScrollNumberForFavorites() - favorites.size(); + } + int offset = sizeForFavorites > 0 ? -12 : 0; + back: + for(; i < allStacks.size(); i++) { + EntryStack stack = allStacks.get(i); + while (true) { + EntryListEntry entry = entries.get(nextIndex); + entry.getBounds().y = (int) (entry.backupY - scroll + offset); + if (entry.getBounds().y > bounds.getMaxY()) + break back; + if (notSteppingOnExclusionZones(entry.getBounds().x, entry.getBounds().y, innerBounds)) { + entry.entry(stack); + entry.isFavorites = false; + entry.render(mouseX, mouseY, delta); + nextIndex++; + break; + } else { + blockedCount++; + nextIndex++; + } } } } @@ -246,11 +317,33 @@ public class EntryListWidget extends WidgetWithBounds { ScissorsHandler.INSTANCE.removeLastScissor(); renderScrollbar(); } else { - for (EntryListEntry widget : entries) { - widget.render(mouseX, mouseY, delta); - } - for (Widget widget : widgets) { - widget.render(mouseX, mouseY, delta); + if (debugTime) { + int size = 0; + long time = 0; + for(Widget widget : widgets) { + if (widget instanceof EntryListEntry) { + size++; + long l = System.currentTimeMillis(); + widget.render(mouseX, mouseY, delta); + time += (System.currentTimeMillis() - l); + } else + widget.render(mouseX, mouseY, delta); + } + int z = getZ(); + setZ(500); + String str = String.format("%d entries, avg. %.2fms, %s fps", size, time / (double) size, minecraft.fpsDebugString.split(" ")[0]); + fillGradient(bounds.x, bounds.y, bounds.x + font.getStringWidth(str) + 2, bounds.y + font.fontHeight + 2, -16777216, -16777216); + MatrixStack matrixStack_1 = new MatrixStack(); + VertexConsumerProvider.Immediate immediate = VertexConsumerProvider.immediate(Tessellator.getInstance().getBuffer()); + matrixStack_1.translate(0.0D, 0.0D, getZ()); + Matrix4f matrix4f_1 = matrixStack_1.peek().getModel(); + font.draw(str, bounds.x + 2, bounds.y + 2, -1, false, matrix4f_1, immediate, false, 0, 15728880); + immediate.draw(); + setZ(z); + } else { + for(Widget widget : widgets) { + widget.render(mouseX, mouseY, delta); + } } } } @@ -297,7 +390,6 @@ public class EntryListWidget extends WidgetWithBounds { float bottomC = (hovered ? .67f : .5f) * (ScreenHelper.isDarkModeEnabled() ? 0.8f : 1f); float topC = (hovered ? .87f : .67f) * (ScreenHelper.isDarkModeEnabled() ? 0.8f : 1f); - DiffuseLighting.disable(); RenderSystem.disableTexture(); RenderSystem.enableBlend(); RenderSystem.disableAlphaTest(); @@ -346,7 +438,7 @@ public class EntryListWidget extends WidgetWithBounds { @Override public boolean keyPressed(int int_1, int int_2, int int_3) { if (containsMouse(PointHelper.fromMouse())) - for (Widget widget : widgets) + for(Widget widget : widgets) if (widget.keyPressed(int_1, int_2, int_3)) return true; return false; @@ -372,8 +464,8 @@ public class EntryListWidget extends WidgetWithBounds { List entries = Lists.newLinkedList(); int width = innerBounds.width / 18; int height = innerBounds.height / 18; - for (int currentY = 0; currentY < height; currentY++) { - for (int currentX = 0; currentX < width; currentX++) { + for(int currentY = 0; currentY < height; currentY++) { + for(int currentX = 0; currentX < width; currentX++) { if (notSteppingOnExclusionZones(currentX * 18 + innerBounds.x, currentY * 18 + innerBounds.y, innerBounds)) { entries.add((EntryListEntry) new EntryListEntry(currentX * 18 + innerBounds.x, currentY * 18 + innerBounds.y).noBackground()); } @@ -382,7 +474,7 @@ public class EntryListWidget extends WidgetWithBounds { page = Math.max(Math.min(page, getTotalPages() - 1), 0); int numberForFavorites = getScrollNumberForFavorites(); List subList = allStacks.stream().skip(Math.max(0, page * entries.size() - numberForFavorites)).limit(Math.max(0, entries.size() - Math.max(0, numberForFavorites - page * entries.size()))).collect(Collectors.toList()); - for (int i = 0; i < subList.size(); i++) { + for(int i = 0; i < subList.size(); i++) { EntryStack stack = subList.get(i); entries.get(i + Math.max(0, numberForFavorites - page * entries.size())).clearStacks().entry(stack); entries.get(i + Math.max(0, numberForFavorites - page * entries.size())).isFavorites = false; @@ -397,7 +489,7 @@ public class EntryListWidget extends WidgetWithBounds { j += width; } List subFavoritesList = favorites.stream().skip(skippedFavorites).limit(Math.max(0, entries.size() - width)).collect(Collectors.toList()); - for (int i = 0; i < subFavoritesList.size(); i++) { + for(int i = 0; i < subFavoritesList.size(); i++) { EntryStack stack = subFavoritesList.get(i); entries.get(j).clearStacks().entry(stack); entries.get(j).isFavorites = true; @@ -413,7 +505,7 @@ public class EntryListWidget extends WidgetWithBounds { int currentX = 0; int currentY = 0; List entries = Lists.newLinkedList(); - for (int i = 0; i < slotsToPrepare; i++) { + for(int i = 0; i < slotsToPrepare; i++) { int xPos = currentX * 18 + innerBounds.x; int yPos = currentY * 18 + innerBounds.y; entries.add((EntryListEntry) new EntryListEntry(xPos, yPos).noBackground()); @@ -443,7 +535,7 @@ public class EntryListWidget extends WidgetWithBounds { List list = Lists.newLinkedList(); boolean checkCraftable = ConfigManager.getInstance().isCraftableOnlyEnabled() && !ScreenHelper.inventoryStacks.isEmpty(); List workingItems = checkCraftable ? RecipeHelper.getInstance().findCraftableEntriesByItems(CollectionUtils.map(ScreenHelper.inventoryStacks, EntryStack::create)) : null; - for (EntryStack stack : EntryRegistry.getInstance().getStacksList()) { + for(EntryStack stack : EntryRegistry.getInstance().getStacksList()) { if (canLastSearchTermsBeAppliedTo(stack)) { if (workingItems != null && CollectionUtils.findFirstOrNullEquals(workingItems, stack) == null) continue; @@ -463,7 +555,7 @@ public class EntryListWidget extends WidgetWithBounds { List list = Lists.newLinkedList(); boolean checkCraftable = ConfigManager.getInstance().isCraftableOnlyEnabled() && !ScreenHelper.inventoryStacks.isEmpty(); List workingItems = checkCraftable ? RecipeHelper.getInstance().findCraftableEntriesByItems(CollectionUtils.map(ScreenHelper.inventoryStacks, EntryStack::create)) : null; - for (EntryStack stack : ConfigManager.getInstance().getFavorites()) { + for(EntryStack stack : ConfigManager.getInstance().getFavorites()) { if (canLastSearchTermsBeAppliedTo(stack)) { if (workingItems != null && CollectionUtils.findFirstOrNullEquals(workingItems, stack) == null) continue; @@ -480,6 +572,7 @@ public class EntryListWidget extends WidgetWithBounds { favorites = list; } else favorites = Collections.emptyList(); + debugTime = ConfigObject.getInstance().doDebugRenderTimeRequired(); FavoritesListWidget favoritesListWidget = ContainerScreenOverlay.getFavoritesListWidget(); if (favoritesListWidget != null) favoritesListWidget.updateSearch(this, searchTerm); @@ -496,9 +589,9 @@ public class EntryListWidget extends WidgetWithBounds { if (searchArguments.isEmpty()) return true; String mod = null, name = null, tooltip = null, tags[] = null; - for (SearchArgument.SearchArguments arguments : searchArguments) { + for(SearchArgument.SearchArguments arguments : searchArguments) { boolean applicable = true; - for (SearchArgument argument : arguments.getArguments()) { + for(SearchArgument argument : arguments.getArguments()) { if (argument.getArgumentType() == SearchArgument.ArgumentType.ALWAYS) return true; else if (argument.getArgumentType() == SearchArgument.ArgumentType.MOD) { @@ -527,19 +620,19 @@ public class EntryListWidget extends WidgetWithBounds { if (stack.getType() == EntryStack.Type.ITEM) { Identifier[] tagsFor = minecraft.getNetworkHandler().getTagManager().items().getTagsFor(stack.getItem()).toArray(new Identifier[0]); tags = new String[tagsFor.length]; - for (int i = 0; i < tagsFor.length; i++) + for(int i = 0; i < tagsFor.length; i++) tags[i] = tagsFor[i].toString(); } else if (stack.getType() == EntryStack.Type.FLUID) { Identifier[] tagsFor = minecraft.getNetworkHandler().getTagManager().fluids().getTagsFor(stack.getFluid()).toArray(new Identifier[0]); tags = new String[tagsFor.length]; - for (int i = 0; i < tagsFor.length; i++) + for(int i = 0; i < tagsFor.length; i++) tags[i] = tagsFor[i].toString(); } else tags = new String[0]; } if (tags != null && tags.length > 0) { boolean a = false; - for (String tag : tags) + for(String tag : tags) if (argument.getFunction(argument.isInclude()).apply(tag)) a = true; if (!a) { @@ -561,13 +654,13 @@ public class EntryListWidget extends WidgetWithBounds { @SuppressWarnings("deprecation") private List processSearchTerm(String searchTerm) { List searchArguments = Lists.newArrayList(); - for (String split : StringUtils.splitByWholeSeparatorPreserveAllTokens(searchTerm.toLowerCase(Locale.ROOT), "|")) { + for(String split : StringUtils.splitByWholeSeparatorPreserveAllTokens(searchTerm.toLowerCase(Locale.ROOT), "|")) { String[] terms = StringUtils.split(split); if (terms.length == 0) searchArguments.add(SearchArgument.SearchArguments.ALWAYS); else { SearchArgument[] arguments = new SearchArgument[terms.length]; - for (int i = 0; i < terms.length; i++) { + for(int i = 0; i < terms.length; i++) { String term = terms[i]; if (term.startsWith("-@") || term.startsWith("@-")) { arguments[i] = new SearchArgument(SearchArgument.ArgumentType.MOD, term.substring(2), false); @@ -619,7 +712,7 @@ public class EntryListWidget extends WidgetWithBounds { } if (!player.inventory.getCursorStack().isEmpty() && RoughlyEnoughItemsCore.hasPermissionToUsePackets()) return false; - for (Widget widget : children()) + for(Widget widget : children()) if (widget.mouseClicked(double_1, double_2, int_1)) return true; } diff --git a/src/main/java/me/shedaniel/rei/gui/widget/EntryWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/EntryWidget.java index f66f666cb..6adecb987 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/EntryWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/EntryWidget.java @@ -152,7 +152,6 @@ public class EntryWidget extends WidgetWithBounds { } protected void drawHighlighted(int mouseX, int mouseY, float delta) { - RenderSystem.disableLighting(); RenderSystem.disableDepthTest(); RenderSystem.colorMask(true, true, true, false); int color = ScreenHelper.isDarkModeEnabled() ? -1877929711 : -2130706433; @@ -161,7 +160,6 @@ public class EntryWidget extends WidgetWithBounds { fillGradient(bounds.x, bounds.y, bounds.getMaxX(), bounds.getMaxY(), color, color); setZ(0); RenderSystem.colorMask(true, true, true, true); - RenderSystem.enableLighting(); RenderSystem.enableDepthTest(); } diff --git a/src/main/java/me/shedaniel/rei/gui/widget/FavoritesListWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/FavoritesListWidget.java index 672d007c3..d4fa3d838 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/FavoritesListWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/FavoritesListWidget.java @@ -22,7 +22,6 @@ import me.shedaniel.rei.utils.CollectionUtils; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.render.BufferBuilder; -import net.minecraft.client.render.DiffuseLighting; import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormats; import net.minecraft.client.resource.language.I18n; @@ -180,7 +179,6 @@ public class FavoritesListWidget extends WidgetWithBounds { float bottomC = (hovered ? .67f : .5f) * (ScreenHelper.isDarkModeEnabled() ? 0.8f : 1f); float topC = (hovered ? .87f : .67f) * (ScreenHelper.isDarkModeEnabled() ? 0.8f : 1f); - DiffuseLighting.disable(); RenderSystem.disableTexture(); RenderSystem.enableBlend(); RenderSystem.disableAlphaTest(); diff --git a/src/main/java/me/shedaniel/rei/gui/widget/PanelWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/PanelWidget.java index 9384ad8ad..54fdb5314 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/PanelWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/PanelWidget.java @@ -10,7 +10,6 @@ import me.shedaniel.math.api.Rectangle; import me.shedaniel.rei.api.ConfigObject; import me.shedaniel.rei.gui.config.RecipeScreenType; import me.shedaniel.rei.impl.ScreenHelper; -import net.minecraft.client.render.DiffuseLighting; import net.minecraft.util.Identifier; import java.util.Collections; @@ -59,7 +58,6 @@ public class PanelWidget extends WidgetWithBounds { float blue = ((color >> 0) & 0xFF) / 255f; float alpha = ((color >> 32) & 0xFF) / 255f; RenderSystem.color4f(red, green, blue, alpha); - DiffuseLighting.disable(); minecraft.getTextureManager().bindTexture(ScreenHelper.isDarkModeEnabled() ? CHEST_GUI_TEXTURE_DARK : CHEST_GUI_TEXTURE); int x = bounds.x, y = bounds.y, width = bounds.width, height = bounds.height; int xTextureOffset = getXTextureOffset(); diff --git a/src/main/java/me/shedaniel/rei/gui/widget/RecipeArrowWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/RecipeArrowWidget.java index 92c39cb91..f48d3020e 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/RecipeArrowWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/RecipeArrowWidget.java @@ -5,12 +5,10 @@ package me.shedaniel.rei.gui.widget; -import com.mojang.blaze3d.systems.RenderSystem; import me.shedaniel.math.api.Rectangle; import me.shedaniel.rei.plugin.DefaultPlugin; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.Element; -import net.minecraft.client.render.DiffuseLighting; import net.minecraft.util.math.MathHelper; import java.util.Collections; @@ -34,8 +32,6 @@ public class RecipeArrowWidget extends WidgetWithBounds { @Override public void render(int mouseX, int mouseY, float delta) { - RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); - DiffuseLighting.disable(); MinecraftClient.getInstance().getTextureManager().bindTexture(DefaultPlugin.getDisplayTexture()); blit(x, y, 106, 91, 24, 17); if (animated) { diff --git a/src/main/java/me/shedaniel/rei/gui/widget/RecipeChoosePageWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/RecipeChoosePageWidget.java index 2146a33c3..6ad479b00 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/RecipeChoosePageWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/RecipeChoosePageWidget.java @@ -12,7 +12,6 @@ import me.shedaniel.math.api.Rectangle; import me.shedaniel.rei.gui.RecipeViewingScreen; import me.shedaniel.rei.impl.ScreenHelper; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.render.DiffuseLighting; import net.minecraft.client.resource.language.I18n; import net.minecraft.client.util.Window; import net.minecraft.util.math.MathHelper; @@ -139,12 +138,11 @@ public class RecipeChoosePageWidget extends DraggableWidget { @Override public void render(int i, int i1, float v) { - widgets.forEach(widget -> { - DiffuseLighting.disable(); - RenderSystem.translatef(0, 0, 800); + RenderSystem.translatef(0, 0, 800); + for(Widget widget : widgets) { widget.render(i, i1, v); - RenderSystem.translatef(0, 0, -800); - }); + } + RenderSystem.translatef(0, 0, -800); } @Override diff --git a/src/main/java/me/shedaniel/rei/gui/widget/TabWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/TabWidget.java index a883f60d7..7623a20a6 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/TabWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/TabWidget.java @@ -5,13 +5,11 @@ package me.shedaniel.rei.gui.widget; -import com.mojang.blaze3d.systems.RenderSystem; import me.shedaniel.math.api.Rectangle; import me.shedaniel.rei.api.ClientHelper; import me.shedaniel.rei.api.EntryStack; import me.shedaniel.rei.api.RecipeCategory; import me.shedaniel.rei.impl.ScreenHelper; -import net.minecraft.client.render.DiffuseLighting; import net.minecraft.util.Formatting; import net.minecraft.util.Identifier; @@ -68,8 +66,6 @@ public class TabWidget extends WidgetWithBounds { @Override public void render(int mouseX, int mouseY, float delta) { if (shown) { - RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); - DiffuseLighting.disable(); minecraft.getTextureManager().bindTexture(ScreenHelper.isDarkModeEnabled() ? CHEST_GUI_TEXTURE_DARK : CHEST_GUI_TEXTURE); this.blit(bounds.x, bounds.y + 2, selected ? 28 : 0, 192, 28, (selected ? 30 : 27)); logo.setZ(100); diff --git a/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java b/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java index ec0293d58..607422f63 100644 --- a/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java +++ b/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java @@ -208,6 +208,16 @@ public class ConfigObjectImpl implements ConfigObject, ConfigData { return appearance.displayFavoritesOnTheLeft; } + @Override + public boolean doesFastEntryRendering() { + return performance.fastEntryRendering; + } + + @Override + public boolean doDebugRenderTimeRequired() { + return technical.debugRenderTimeRequired; + } + @Override public InputUtil.KeyCode getFavoriteKeybind() { return general.favoriteKeybind == null ? InputUtil.UNKNOWN_KEYCODE : general.favoriteKeybind; @@ -255,6 +265,7 @@ public class ConfigObjectImpl implements ConfigObject, ConfigData { private String giveCommand = "/give {player_name} {item_identifier}{nbt} {count}"; @Comment("Declares the command used to change weather.") private String weatherCommand = "/weather {weather}"; private boolean registerRecipesInAnotherThread = true; + private boolean debugRenderTimeRequired = false; } public static class Modules { @@ -270,5 +281,6 @@ public class ConfigObjectImpl implements ConfigObject, ConfigData { public static class Performance { @Comment("Whether REI should render entry's enchantment glint") private boolean renderEntryEnchantmentGlint = true; + @ConfigEntry.Gui.Excluded private boolean fastEntryRendering = false; } } diff --git a/src/main/java/me/shedaniel/rei/impl/FluidEntryStack.java b/src/main/java/me/shedaniel/rei/impl/FluidEntryStack.java index d977127ff..ce6c8f827 100644 --- a/src/main/java/me/shedaniel/rei/impl/FluidEntryStack.java +++ b/src/main/java/me/shedaniel/rei/impl/FluidEntryStack.java @@ -15,7 +15,6 @@ import net.fabricmc.fabric.api.client.render.fluid.v1.FluidRenderHandler; import net.fabricmc.fabric.api.client.render.fluid.v1.FluidRenderHandlerRegistry; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.BufferBuilder; -import net.minecraft.client.render.DiffuseLighting; import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormats; import net.minecraft.client.texture.Sprite; @@ -185,7 +184,6 @@ public class FluidEntryStack extends AbstractEntryStack { int g = (color >> 8 & 255); int b = (color & 255); MinecraftClient.getInstance().getTextureManager().bindTexture(SpriteAtlasTexture.BLOCK_ATLAS_TEX); - DiffuseLighting.disable(); Tessellator tess = Tessellator.getInstance(); BufferBuilder bb = tess.getBuffer(); bb.begin(7, VertexFormats.POSITION_TEXTURE_COLOR); diff --git a/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java b/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java index 87fd2daab..ab8d0a498 100644 --- a/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java +++ b/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java @@ -6,21 +6,28 @@ package me.shedaniel.rei.impl; import com.google.common.collect.Lists; +import com.mojang.blaze3d.platform.GlStateManager; import me.shedaniel.math.api.Rectangle; -import m