From 0d7431e4981226aba9d8011d76eabfb03d134499 Mon Sep 17 00:00:00 2001 From: Unknown Date: Thu, 21 Mar 2019 21:15:10 +0800 Subject: Large v2.5 Update --- .../me/shedaniel/rei/RoughlyEnoughItemsCore.java | 12 + .../java/me/shedaniel/rei/api/ConfigManager.java | 3 + .../java/me/shedaniel/rei/api/DisplaySettings.java | 8 + .../java/me/shedaniel/rei/api/RecipeCategory.java | 11 +- .../java/me/shedaniel/rei/client/ClientHelper.java | 10 - .../me/shedaniel/rei/client/ConfigManager.java | 38 +++ .../java/me/shedaniel/rei/client/ConfigObject.java | 4 +- .../me/shedaniel/rei/client/RecipeHelperImpl.java | 6 +- .../java/me/shedaniel/rei/client/ScreenHelper.java | 28 +- .../me/shedaniel/rei/client/SearchArgument.java | 9 +- .../shedaniel/rei/gui/ContainerScreenOverlay.java | 44 +-- .../me/shedaniel/rei/gui/RecipeViewingScreen.java | 30 +- .../me/shedaniel/rei/gui/config/ConfigEntry.java | 145 --------- .../rei/gui/config/ConfigEntryListWidget.java | 35 --- .../me/shedaniel/rei/gui/config/ConfigScreen.java | 340 --------------------- .../rei/gui/config/ItemListOrderingEntry.java | 94 ++++++ .../rei/gui/credits/CreditsEntryListWidget.java | 2 +- .../shedaniel/rei/gui/credits/CreditsScreen.java | 6 +- .../me/shedaniel/rei/gui/widget/ButtonWidget.java | 10 +- .../rei/gui/widget/ClickableLabelWidget.java | 10 +- .../gui/widget/CraftableToggleButtonWidget.java | 6 +- .../shedaniel/rei/gui/widget/DraggableWidget.java | 6 +- .../shedaniel/rei/gui/widget/ItemListOverlay.java | 12 +- .../shedaniel/rei/gui/widget/ItemSlotWidget.java | 13 +- .../me/shedaniel/rei/gui/widget/LabelWidget.java | 2 +- .../me/shedaniel/rei/gui/widget/QueuedTooltip.java | 6 +- .../shedaniel/rei/gui/widget/RecipeBaseWidget.java | 6 +- .../rei/gui/widget/RecipeChoosePageWidget.java | 10 +- .../rei/gui/widget/SpeedCraftingButtonWidget.java | 4 +- .../me/shedaniel/rei/gui/widget/TabWidget.java | 16 +- .../shedaniel/rei/gui/widget/TextFieldWidget.java | 8 +- .../shedaniel/rei/mixin/MixinContainerScreen.java | 11 + .../mixin/MixinCreativePlayerInventoryScreen.java | 4 +- .../rei/plugin/DefaultBlastingCategory.java | 4 +- .../rei/plugin/DefaultBrewingCategory.java | 4 +- .../rei/plugin/DefaultCampfireCategory.java | 4 +- .../rei/plugin/DefaultCraftingCategory.java | 4 +- .../rei/plugin/DefaultSmeltingCategory.java | 4 +- .../rei/plugin/DefaultSmokingCategory.java | 4 +- .../rei/plugin/DefaultStoneCuttingCategory.java | 4 +- .../java/me/shedaniel/rei/utils/ClothRegistry.java | 58 ++-- .../assets/roughlyenoughitems/lang/en_us.json | 2 + 42 files changed, 339 insertions(+), 698 deletions(-) delete mode 100644 src/main/java/me/shedaniel/rei/gui/config/ConfigEntry.java delete mode 100644 src/main/java/me/shedaniel/rei/gui/config/ConfigEntryListWidget.java delete mode 100644 src/main/java/me/shedaniel/rei/gui/config/ConfigScreen.java create mode 100644 src/main/java/me/shedaniel/rei/gui/config/ItemListOrderingEntry.java (limited to 'src') diff --git a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java index 886a5aa98..d293da2e0 100644 --- a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java +++ b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java @@ -15,6 +15,7 @@ import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.network.ServerSidePacketRegistry; import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.client.MinecraftClient; import net.minecraft.client.resource.language.I18n; import net.minecraft.item.ItemStack; import net.minecraft.server.network.ServerPlayerEntity; @@ -25,6 +26,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -99,6 +101,16 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer, ModInitiali RoughlyEnoughItemsCore.LOGGER.fatal("[REI] Cloth NOT found! It is a dependency of REI: https://minecraft.curseforge.com/projects/cloth"); System.exit(0); } + + if (!FabricLoader.getInstance().isModLoaded("modmenu")) { + try { + Class modMenuApi_ = Class.forName("io.github.prospector.modmenu.api.ModMenuApi"); + Method addConfigOverride_ = modMenuApi_.getMethod("addConfigOverride", String.class, Runnable.class); + addConfigOverride_.invoke(null, "roughlyenoughitems", (Runnable) () -> getConfigManager().openConfigScreen(MinecraftClient.getInstance().currentScreen)); + } catch (Exception e) { + RoughlyEnoughItemsCore.LOGGER.error("Error enabling the Mod Menu config button for Hwyla", e); + } + } } @Override diff --git a/src/main/java/me/shedaniel/rei/api/ConfigManager.java b/src/main/java/me/shedaniel/rei/api/ConfigManager.java index 2e951f103..781c34143 100644 --- a/src/main/java/me/shedaniel/rei/api/ConfigManager.java +++ b/src/main/java/me/shedaniel/rei/api/ConfigManager.java @@ -1,6 +1,7 @@ package me.shedaniel.rei.api; import me.shedaniel.rei.client.ConfigObject; +import net.minecraft.client.gui.Screen; import java.io.IOException; @@ -16,4 +17,6 @@ public interface ConfigManager { void toggleCraftableOnly(); + void openConfigScreen(Screen parent); + } diff --git a/src/main/java/me/shedaniel/rei/api/DisplaySettings.java b/src/main/java/me/shedaniel/rei/api/DisplaySettings.java index 334d6cc6f..6eb5ef5a6 100644 --- a/src/main/java/me/shedaniel/rei/api/DisplaySettings.java +++ b/src/main/java/me/shedaniel/rei/api/DisplaySettings.java @@ -12,4 +12,12 @@ public interface DisplaySettings { return -1; } + default VisableType canDisplay(T display) { + return VisableType.ALWAYS; + } + + public static enum VisableType { + ALWAYS, PASS, NEVER; + } + } diff --git a/src/main/java/me/shedaniel/rei/api/RecipeCategory.java b/src/main/java/me/shedaniel/rei/api/RecipeCategory.java index 9fdd35801..a20c505e2 100644 --- a/src/main/java/me/shedaniel/rei/api/RecipeCategory.java +++ b/src/main/java/me/shedaniel/rei/api/RecipeCategory.java @@ -1,5 +1,6 @@ package me.shedaniel.rei.api; +import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.gui.RecipeViewingScreen; import me.shedaniel.rei.gui.widget.RecipeBaseWidget; import me.shedaniel.rei.gui.widget.Widget; @@ -26,7 +27,7 @@ public interface RecipeCategory { } default void drawCategoryBackground(Rectangle bounds, int mouseX, int mouseY, float delta) { - new RecipeBaseWidget(bounds).draw(mouseX, mouseY, delta); + new RecipeBaseWidget(bounds).render(); DrawableHelper.drawRect(bounds.x + 17, bounds.y + 5, bounds.x + bounds.width - 17, bounds.y + 17, RecipeViewingScreen.SUB_COLOR.getRGB()); DrawableHelper.drawRect(bounds.x + 17, bounds.y + 21, bounds.x + bounds.width - 17, bounds.y + 33, RecipeViewingScreen.SUB_COLOR.getRGB()); } @@ -50,6 +51,14 @@ public interface RecipeCategory { }; } + default boolean canDisplay(RecipeDisplay display) { + if (getDisplaySettings().canDisplay(display) == DisplaySettings.VisableType.ALWAYS) + return true; + if (getDisplaySettings().canDisplay(display) == DisplaySettings.VisableType.NEVER) + return false; + return RoughlyEnoughItemsCore.getConfigManager().getConfig().preferVisibleRecipes; + } + default int getDisplayHeight() { return getDisplaySettings().getDisplayHeight(this); } diff --git a/src/main/java/me/shedaniel/rei/client/ClientHelper.java b/src/main/java/me/shedaniel/rei/client/ClientHelper.java index 89678caeb..dc5ae16d1 100644 --- a/src/main/java/me/shedaniel/rei/client/ClientHelper.java +++ b/src/main/java/me/shedaniel/rei/client/ClientHelper.java @@ -7,7 +7,6 @@ import me.shedaniel.rei.api.RecipeCategory; import me.shedaniel.rei.api.RecipeDisplay; import me.shedaniel.rei.api.RecipeHelper; import me.shedaniel.rei.gui.RecipeViewingScreen; -import me.shedaniel.rei.gui.config.ConfigScreen; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.keybinding.FabricKeyBinding; import net.fabricmc.fabric.api.network.ClientSidePacketRegistry; @@ -16,7 +15,6 @@ import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.ModContainer; import net.fabricmc.loader.api.metadata.ModMetadata; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.Screen; import net.minecraft.client.gui.ingame.CreativePlayerInventoryScreen; import net.minecraft.client.util.InputUtil; import net.minecraft.item.ItemStack; @@ -110,14 +108,6 @@ public class ClientHelper implements ClientModInitializer { return map.keySet().size() > 0; } - public static void openConfigWindow(Screen parent, boolean initOverlay) { - MinecraftClient.getInstance().openScreen(new ConfigScreen(parent, initOverlay)); - } - - public static void openConfigWindow(Screen parent) { - openConfigWindow(parent, true); - } - public static List getInventoryItemsTypes() { List> field_7543 = ImmutableList.of(MinecraftClient.getInstance().player.inventory.main, MinecraftClient.getInstance().player.inventory.armor, MinecraftClient.getInstance().player.inventory.offHand); List inventoryStacks = new ArrayList<>(); diff --git a/src/main/java/me/shedaniel/rei/client/ConfigManager.java b/src/main/java/me/shedaniel/rei/client/ConfigManager.java index 8973e5865..60020526f 100644 --- a/src/main/java/me/shedaniel/rei/client/ConfigManager.java +++ b/src/main/java/me/shedaniel/rei/client/ConfigManager.java @@ -4,8 +4,18 @@ import blue.endless.jankson.Jankson; import blue.endless.jankson.JsonObject; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import javafx.util.Pair; +import me.shedaniel.cloth.api.ConfigScreenBuilder; +import me.shedaniel.cloth.gui.ClothConfigScreen; +import me.shedaniel.cloth.gui.entries.BooleanListEntry; +import me.shedaniel.cloth.gui.entries.IntegerListEntry; +import me.shedaniel.cloth.gui.entries.StringListEntry; import me.shedaniel.rei.RoughlyEnoughItemsCore; +import me.shedaniel.rei.gui.config.ItemListOrderingEntry; import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.Screen; +import net.minecraft.client.resource.language.I18n; import java.io.File; import java.io.FileOutputStream; @@ -118,4 +128,32 @@ public class ConfigManager implements me.shedaniel.rei.api.ConfigManager { craftableOnly = !craftableOnly; } + @Override + public void openConfigScreen(Screen parent) { + ClothConfigScreen.Builder builder = new ClothConfigScreen.Builder(parent, I18n.translate("text.rei.config.title"), null); + builder.addCategory(I18n.translate("text.rei.config.general")).addOption(new BooleanListEntry("text.rei.config.cheating", config.cheating, bool -> config.cheating = bool)); + ConfigScreenBuilder.CategoryBuilder appearance = builder.addCategory(I18n.translate("text.rei.config.appearance")); + appearance.addOption(new BooleanListEntry("text.rei.config.side_search_box", config.sideSearchField, bool -> config.sideSearchField = bool)); + appearance.addOption(new ItemListOrderingEntry("text.rei.config.list_ordering", new Pair<>(config.itemListOrdering, config.isAscending))); + appearance.addOption(new BooleanListEntry("text.rei.config.mirror_rei", config.mirrorItemPanel, bool -> config.mirrorItemPanel = bool)); + appearance.addOption(new IntegerListEntry("text.rei.config.max_recipes_per_page", config.maxRecipePerPage, i -> config.maxRecipePerPage = i).setMinimum(2).setMaximum(99)); + ConfigScreenBuilder.CategoryBuilder modules = builder.addCategory(I18n.translate("text.rei.config.modules")); + modules.addOption(new BooleanListEntry("text.rei.config.enable_craftable_only", config.enableCraftableOnlyButton, bool -> config.enableCraftableOnlyButton = bool)); + modules.addOption(new BooleanListEntry("text.rei.config.enable_util_buttons", config.showUtilsButtons, bool -> config.showUtilsButtons = bool)); + modules.addOption(new BooleanListEntry("text.rei.config.disable_recipe_book", config.disableRecipeBook, bool -> config.disableRecipeBook = bool)); + ConfigScreenBuilder.CategoryBuilder advanced = builder.addCategory(I18n.translate("text.rei.config.advanced")); + advanced.addOption(new StringListEntry("text.rei.give_command", config.giveCommand, s -> config.giveCommand = s)); + advanced.addOption(new StringListEntry("text.rei.gamemode_command", config.gamemodeCommand, s -> config.gamemodeCommand = s)); + advanced.addOption(new StringListEntry("text.rei.weather_command", config.weatherCommand, s -> config.weatherCommand = s)); + advanced.addOption(new BooleanListEntry("text.rei.config.prefer_visible_recipes", config.preferVisibleRecipes, bool -> config.preferVisibleRecipes = bool)); + builder.setOnSave(savedConfig -> { + try { + ConfigManager.this.saveConfig(); + } catch (IOException e) { + e.printStackTrace(); + } + }); + MinecraftClient.getInstance().openScreen(builder.build()); + } + } diff --git a/src/main/java/me/shedaniel/rei/client/ConfigObject.java b/src/main/java/me/shedaniel/rei/client/ConfigObject.java index b1303a697..67d81b5d4 100644 --- a/src/main/java/me/shedaniel/rei/client/ConfigObject.java +++ b/src/main/java/me/shedaniel/rei/client/ConfigObject.java @@ -31,7 +31,7 @@ public class ConfigObject { @Comment("True: item panel on the left, false: on the right") public boolean mirrorItemPanel = false; - @Comment("To disable REI's defualt plugin, don't change this unless you understand what you are doing") + @Comment("To disable REI's default plugin, don't change this unless you understand what you are doing") public boolean loadDefaultPlugin = true; @Comment("Maximum recipes viewed at one time.") @@ -43,6 +43,8 @@ public class ConfigObject { @Comment("Disable Recipe Book") public boolean disableRecipeBook = false; + public boolean preferVisibleRecipes = false; + @Comment("The location of choose page dialog") public RelativePoint choosePageDialogPoint = new RelativePoint(.5, .5); diff --git a/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java b/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java index 161f32fc9..539897376 100644 --- a/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java +++ b/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java @@ -81,7 +81,7 @@ public class RecipeHelperImpl implements RecipeHelper { Map> recipeCategoryListMap = Maps.newLinkedHashMap(); categories.forEach(category -> { if (categoriesMap.containsKey(category.getIdentifier()) && !categoriesMap.get(category.getIdentifier()).isEmpty()) - recipeCategoryListMap.put(category, categoriesMap.get(category.getIdentifier())); + recipeCategoryListMap.put(category, categoriesMap.get(category.getIdentifier()).stream().filter(display -> category.canDisplay(display)).collect(Collectors.toList())); }); return recipeCategoryListMap; } @@ -119,7 +119,7 @@ public class RecipeHelperImpl implements RecipeHelper { Map> recipeCategoryListMap = Maps.newLinkedHashMap(); categories.forEach(category -> { if (categoriesMap.containsKey(category.getIdentifier()) && !categoriesMap.get(category.getIdentifier()).isEmpty()) - recipeCategoryListMap.put(category, categoriesMap.get(category.getIdentifier())); + recipeCategoryListMap.put(category, categoriesMap.get(category.getIdentifier()).stream().filter(display -> category.canDisplay(display)).collect(Collectors.toList())); }); return recipeCategoryListMap; } @@ -200,7 +200,7 @@ public class RecipeHelperImpl implements RecipeHelper { recipeCategoryListMap.forEach((identifier, recipeDisplays) -> tempMap.put(identifier, new LinkedList<>(recipeDisplays))); categories.forEach(category -> { if (tempMap.containsKey(category.getIdentifier())) - map.put(category, tempMap.get(category.getIdentifier())); + map.put(category, tempMap.get(category.getIdentifier()).stream().filter(display -> category.canDisplay(display)).collect(Collectors.toList())); }); return map; } diff --git a/src/main/java/me/shedaniel/rei/client/ScreenHelper.java b/src/main/java/me/shedaniel/rei/client/ScreenHelper.java index 5c7112d41..fa109b98d 100644 --- a/src/main/java/me/shedaniel/rei/client/ScreenHelper.java +++ b/src/main/java/me/shedaniel/rei/client/ScreenHelper.java @@ -1,7 +1,6 @@ package me.shedaniel.rei.client; import com.google.common.collect.Lists; -import com.mojang.blaze3d.platform.GlStateManager; import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.gui.ContainerScreenOverlay; import me.shedaniel.rei.gui.widget.TextFieldWidget; @@ -10,13 +9,12 @@ import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.event.client.ClientTickCallback; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.ContainerScreen; -import net.minecraft.client.gui.Drawable; import net.minecraft.client.gui.InputListener; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.RecipeBookButtonWidget; -import net.minecraft.client.render.GuiLighting; import net.minecraft.client.util.Window; import net.minecraft.item.ItemStack; +import org.apache.logging.log4j.util.TriConsumer; import java.awt.*; import java.util.List; @@ -71,35 +69,19 @@ public class ScreenHelper implements ClientModInitializer { return (ContainerScreenHooks) lastContainerScreen; } - public static void drawHoveringWidget(int x, int y, Drawable drawable, int width, int height, float delta) { + public static void drawHoveringWidget(int x, int y, TriConsumer consumer, int width, int height, float delta) { Window window = MinecraftClient.getInstance().window; - drawHoveringWidget(new Dimension(window.getScaledWidth(), window.getScaledHeight()), x, y, drawable, width, height, delta); + drawHoveringWidget(new Dimension(window.getScaledWidth(), window.getScaledHeight()), x, y, consumer, width, height, delta); } - public static void drawHoveringWidget(Dimension dimension, int x, int y, Drawable drawable, int width, int height, float delta) { + public static void drawHoveringWidget(Dimension dimension, int x, int y, TriConsumer consumer, int width, int height, float delta) { int int_5 = x + 12; int int_6 = y - 12; - if (int_5 + width > dimension.width) int_5 -= 28 + width; if (int_6 + height + 6 > dimension.height) int_6 = dimension.height - height - 6; - - drawable.draw(int_5, int_6, delta); - // zOffset = 300.0F; - // itemRenderer.zOffset = 300.0F; - // int int_9 = -267386864; - // drawGradientRect(int_5 - 3, int_6 - 4, int_5 + width + 3, int_6 - 3, -267386864, -267386864); - // drawGradientRect(int_5 - 3, int_6 + height + 3, int_5 + width + 3, int_6 + height + 4, -267386864, -267386864); - // drawGradientRect(int_5 - 3, int_6 - 3, int_5 + width + 3, int_6 + height + 3, -267386864, -267386864); - // drawGradientRect(int_5 - 4, int_6 - 3, int_5 - 3, int_6 + height + 3, -267386864, -267386864); - // drawGradientRect(int_5 + width + 3, int_6 - 3, int_5 + width + 4, int_6 + height + 3, -267386864, -267386864); - // int int_10 = 1347420415; - // int int_11 = 1344798847; - // drawGradientRect(int_5 - 3, int_6 - 3 + 1, int_5 - 3 + 1, int_6 + height + 3 - 1, 1347420415, 1344798847); - // drawGradientRect(int_5 + width + 2, int_6 - 3 + 1, int_5 + width + 3, int_6 + height + 3 - 1, 1347420415, 1344798847); - // drawGradientRect(int_5 - 3, int_6 - 3, int_5 + width + 3, int_6 - 3 + 1, 1347420415, 1347420415); - // drawGradientRect(int_5 - 3, int_6 + height + 2, int_5 + width + 3, int_6 + height + 3, 1344798847, 1344798847); + consumer.accept(int_5, int_6, delta); } @Override diff --git a/src/main/java/me/shedaniel/rei/client/SearchArgument.java b/src/main/java/me/shedaniel/rei/client/SearchArgument.java index 445214871..f3a5a5032 100644 --- a/src/main/java/me/shedaniel/rei/client/SearchArgument.java +++ b/src/main/java/me/shedaniel/rei/client/SearchArgument.java @@ -2,14 +2,9 @@ package me.shedaniel.rei.client; public class SearchArgument { - public enum ArgumentType { - TEXT, MOD, TOOLTIP - } - private ArgumentType argumentType; private String text; private boolean include; - public SearchArgument(ArgumentType argumentType, String text, boolean include) { this.argumentType = argumentType; this.text = text; @@ -33,4 +28,8 @@ public class SearchArgument { return String.format("Argument[%s]: name = %s, include = %b", argumentType.name(), text, include); } + public enum ArgumentType { + TEXT, MOD, TOOLTIP + } + } diff --git a/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java b/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java index 8692e68a9..e2039b811 100644 --- a/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java +++ b/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java @@ -2,7 +2,7 @@ package me.shedaniel.rei.gui; import com.google.common.collect.Lists; import com.mojang.blaze3d.platform.GlStateManager; -import me.shedaniel.cloth.ClothInitializer; +import me.shedaniel.cloth.api.ClientUtils; import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.client.ClientHelper; import me.shedaniel.rei.client.ScreenHelper; @@ -77,7 +77,7 @@ public class ContainerScreenOverlay extends ScreenComponent { } @Override - public void setHasFocus(boolean boolean_1) { + public void onFocusChanged(boolean boolean_1) { } }); widgets.add(buttonRight = new ButtonWidget(rectangle.x + rectangle.width - 18, rectangle.y + 5, 16, 16, new TranslatableTextComponent("text.rei.right_arrow")) { @@ -95,7 +95,7 @@ public class ContainerScreenOverlay extends ScreenComponent { } @Override - public void setHasFocus(boolean boolean_1) { + public void onFocusChanged(boolean boolean_1) { } }); if (setPage) @@ -107,12 +107,12 @@ public class ContainerScreenOverlay extends ScreenComponent { ClientHelper.setCheating(!ClientHelper.isCheating()); return; } - ClientHelper.openConfigWindow(ScreenHelper.getLastContainerScreen()); + RoughlyEnoughItemsCore.getConfigManager().openConfigScreen(ScreenHelper.getLastContainerScreen()); } @Override - public void draw(int mouseX, int mouseY, float partialTicks) { - super.draw(mouseX, mouseY, partialTicks); + public void render(int mouseX, int mouseY, float partialTicks) { + super.render(mouseX, mouseY, partialTicks); GuiLighting.disable(); if (ClientHelper.isCheating()) drawRect(getBounds().x, getBounds().y, getBounds().x + 20, getBounds().y + 20, new Color(255, 0, 0, 42).getRGB()); @@ -133,7 +133,7 @@ public class ContainerScreenOverlay extends ScreenComponent { } @Override - public void setHasFocus(boolean boolean_1) { + public void onFocusChanged(boolean boolean_1) { } }); if (RoughlyEnoughItemsCore.getConfigManager().getConfig().showUtilsButtons) { @@ -144,9 +144,9 @@ public class ContainerScreenOverlay extends ScreenComponent { } @Override - public void draw(int mouseX, int mouseY, float partialTicks) { + public void render(int mouseX, int mouseY, float partialTicks) { text = getGameModeShortText(getCurrentGameMode()); - super.draw(mouseX, mouseY, partialTicks); + super.render(mouseX, mouseY, partialTicks); } @Override @@ -155,7 +155,7 @@ public class ContainerScreenOverlay extends ScreenComponent { } @Override - public void setHasFocus(boolean boolean_1) { + public void onFocusChanged(boolean boolean_1) { } }); widgets.add(new ButtonWidget(RoughlyEnoughItemsCore.getConfigManager().getConfig().mirrorItemPanel ? window.getScaledWidth() - 80 : 60, 10, 20, 20, "") { @@ -165,8 +165,8 @@ public class ContainerScreenOverlay extends ScreenComponent { } @Override - public void draw(int mouseX, int mouseY, float partialTicks) { - super.draw(mouseX, mouseY, partialTicks); + public void render(int mouseX, int mouseY, float partialTicks) { + super.render(mouseX, mouseY, partialTicks); GuiLighting.disable(); MinecraftClient.getInstance().getTextureManager().bindTexture(CHEST_GUI_TEXTURE); GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F); @@ -179,16 +179,16 @@ public class ContainerScreenOverlay extends ScreenComponent { } @Override - public void setHasFocus(boolean boolean_1) { + public void onFocusChanged(boolean boolean_1) { } }); } widgets.add(new ClickableLabelWidget(rectangle.x + (rectangle.width / 2), rectangle.y + 10, "") { @Override - public void draw(int mouseX, int mouseY, float partialTicks) { + public void render(int mouseX, int mouseY, float partialTicks) { page = MathHelper.clamp(page, 0, getTotalPage()); this.text = String.format("%s/%s", page + 1, getTotalPage() + 1); - super.draw(mouseX, mouseY, partialTicks); + super.render(mouseX, mouseY, partialTicks); if (isHighlighted(mouseX, mouseY)) addTooltip(QueuedTooltip.create(I18n.translate("text.rei.go_back_first_page").split("\n"))); else if (focused) @@ -203,7 +203,7 @@ public class ContainerScreenOverlay extends ScreenComponent { } @Override - public void setHasFocus(boolean boolean_1) { + public void onFocusChanged(boolean boolean_1) { } }); if (ScreenHelper.searchField == null) @@ -325,7 +325,11 @@ public class ContainerScreenOverlay extends ScreenComponent { GuiLighting.disable(); Screen currentScreen = MinecraftClient.getInstance().currentScreen; if (!(currentScreen instanceof RecipeViewingScreen) || !((RecipeViewingScreen) currentScreen).choosePageActivated) - QUEUED_TOOLTIPS.stream().filter(queuedTooltip -> queuedTooltip != null).forEach(queuedTooltip -> MinecraftClient.getInstance().currentScreen.drawTooltip(queuedTooltip.getText(), queuedTooltip.getLocation().x, queuedTooltip.getLocation().y)); + QUEUED_TOOLTIPS.stream().filter(queuedTooltip -> queuedTooltip != null).forEach(queuedTooltip -> { + GlStateManager.translatef(0, 0, 600); + MinecraftClient.getInstance().currentScreen.drawTooltip(queuedTooltip.getText(), queuedTooltip.getLocation().x, queuedTooltip.getLocation().y); + GlStateManager.translatef(0, 0, -600); + }); QUEUED_TOOLTIPS.clear(); GuiLighting.disable(); } @@ -356,7 +360,7 @@ public class ContainerScreenOverlay extends ScreenComponent { buttonRight.enabled = itemListOverlay.getWidgets().size() > 0; widgets.forEach(widget -> { GuiLighting.disable(); - widget.draw(int_1, int_2, float_1); + widget.render(int_1, int_2, float_1); }); GuiLighting.disable(); } @@ -393,7 +397,7 @@ public class ContainerScreenOverlay extends ScreenComponent { public boolean mouseScrolled(double i, double j, double amount) { if (!ScreenHelper.isOverlayVisible()) return false; - if (rectangle.contains(ClothInitializer.clientUtils.getMouseLocation())) { + if (rectangle.contains(ClientUtils.getMouseLocation())) { if (amount > 0 && buttonLeft.enabled) buttonLeft.onPressed(); else if (amount < 0 && buttonRight.enabled) @@ -420,7 +424,7 @@ public class ContainerScreenOverlay extends ScreenComponent { } if (!ScreenHelper.isOverlayVisible()) return false; - Point point = ClothInitializer.clientUtils.getMouseLocation(); + Point point = ClientUtils.getMouseLocation(); ItemStack itemStack = null; if (MinecraftClient.getInstance().currentScreen instanceof ContainerScreen) if (ScreenHelper.getLastContainerScreenHooks().rei_getHoveredSlot() != null && !ScreenHelper.getLastContainerScreenHooks().rei_getHoveredSlot().getStack().isEmpty()) diff --git a/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java b/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java index 968d6079c..33638e17c 100644 --- a/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java +++ b/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java @@ -2,7 +2,7 @@ package me.shedaniel.rei.gui; import com.google.common.collect.Lists; import com.mojang.blaze3d.platform.GlStateManager; -import me.shedaniel.cloth.ClothInitializer; +import me.shedaniel.cloth.api.ClientUtils; import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.api.*; import me.shedaniel.rei.client.ClientHelper; @@ -86,7 +86,7 @@ public class RecipeViewingScreen extends Screen { } if (int_1 == 258) { if (isShiftPressed()) - this.method_19354(); + this.focusPrevious(); else this.focusNext(); return true; @@ -137,9 +137,9 @@ public class RecipeViewingScreen extends Screen { }); widgets.add(new ClickableLabelWidget((int) bounds.getCenterX(), (int) bounds.getY() + 7, "") { @Override - public void draw(int mouseX, int mouseY, float partialTicks) { + public void render(int mouseX, int mouseY, float partialTicks) { this.text = selectedCategory.getCategoryName(); - super.draw(mouseX, mouseY, partialTicks); + super.render(mouseX, mouseY, partialTicks); if (isHighlighted(mouseX, mouseY)) ScreenHelper.getLastOverlay().addTooltip(QueuedTooltip.create(I18n.translate("text.rei.view_all_categories").split("\n"))); else if (focused) @@ -189,9 +189,9 @@ public class RecipeViewingScreen extends Screen { }); widgets.add(new ClickableLabelWidget((int) bounds.getCenterX(), (int) bounds.getY() + 23, "") { @Override - public void draw(int mouseX, int mouseY, float partialTicks) { + public void render(int mouseX, int mouseY, float partialTicks) { this.text = String.format("%d/%d", page + 1, getTotalPages(selectedCategory)); - super.draw(mouseX, mouseY, partialTicks); + super.render(mouseX, mouseY, partialTicks); if (isHighlighted(mouseX, mouseY)) ScreenHelper.getLastOverlay().addTooltip(QueuedTooltip.create(I18n.translate("text.rei.choose_page").split("\n"))); else if (focused) @@ -306,33 +306,33 @@ public class RecipeViewingScreen extends Screen { } @Override - public void draw(int mouseX, int mouseY, float delta) { + public void render(int mouseX, int mouseY, float delta) { this.drawGradientRect(0, 0, this.screenWidth, this.screenHeight, -1072689136, -804253680); if (selectedCategory != null) selectedCategory.drawCategoryBackground(bounds, mouseX, mouseY, delta); else { - new RecipeBaseWidget(bounds).draw(mouseX, mouseY, delta); + new RecipeBaseWidget(bounds).render(); drawRect(bounds.x + 17, bounds.y + 5, bounds.x + bounds.width - 17, bounds.y + 17, SUB_COLOR.getRGB()); drawRect(bounds.x + 17, bounds.y + 21, bounds.x + bounds.width - 17, bounds.y + 33, SUB_COLOR.getRGB()); } tabs.stream().filter(tabWidget -> { return !tabWidget.isSelected(); - }).forEach(tabWidget -> tabWidget.draw(mouseX, mouseY, delta)); + }).forEach(tabWidget -> tabWidget.render(mouseX, mouseY, delta)); GuiLighting.disable(); - super.draw(mouseX, mouseY, delta); + super.render(mouseX, mouseY, delta); widgets.forEach(widget -> { GuiLighting.disable(); - widget.draw(mouseX, mouseY, delta); + widget.render(mouseX, mouseY, delta); }); GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F); GuiLighting.disable(); - tabs.stream().filter(TabWidget::isSelected).forEach(tabWidget -> tabWidget.draw(mouseX, mouseY, delta)); + tabs.stream().filter(TabWidget::isSelected).forEach(tabWidget -> tabWidget.render(mouseX, mouseY, delta)); ScreenHelper.getLastOverlay().drawOverlay(mouseX, mouseY, delta); if (choosePageActivated) { zOffset = 500.0f; this.drawGradientRect(0, 0, this.screenWidth, this.screenHeight, -1072689136, -804253680); zOffset = 0.0f; - recipeChoosePageWidget.draw(mouseX, mouseY, delta); + recipeChoosePageWidget.render(mouseX, mouseY, delta); } } @@ -382,13 +382,13 @@ public class RecipeViewingScreen extends Screen { for(InputListener listener : listeners) if (listener.mouseScrolled(i, j, amount)) return true; - if (getBounds().contains(ClothInitializer.clientUtils.getMouseLocation())) { + if (getBounds().contains(ClientUtils.getMouseLocation())) { if (amount > 0 && recipeBack.enabled) recipeBack.onPressed(); else if (amount < 0 && recipeNext.enabled) recipeNext.onPressed(); } - if ((new Rectangle(bounds.x, bounds.y - 28, bounds.width, 28)).contains(ClothInitializer.clientUtils.getMouseLocation())) { + if ((new Rectangle(bounds.x, bounds.y - 28, bounds.width, 28)).contains(ClientUtils.getMouseLocation())) { if (amount > 0 && categoryBack.enabled) categoryBack.onPressed(); else if (amount < 0 && categoryNext.enabled) diff --git a/src/main/java/me/shedaniel/rei/gui/config/ConfigEntry.java b/src/main/java/me/shedaniel/rei/gui/config/ConfigEntry.java deleted file mode 100644 index c5a520448..000000000 --- a/src/main/java/me/shedaniel/rei/gui/config/ConfigEntry.java +++ /dev/null @@ -1,145 +0,0 @@ -package me.shedaniel.rei.gui.config; - -import me.shedaniel.cloth.ClothInitializer; -import me.shedaniel.rei.gui.widget.ButtonWidget; -import me.shedaniel.rei.gui.widget.TextFieldWidget; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.widget.EntryListWidget; -import net.minecraft.client.util.Window; -import net.minecraft.text.Style; -import net.minecraft.text.TextComponent; - -import java.awt.*; - -public abstract class ConfigEntry extends EntryListWidget.Entry { - - public static class ButtonConfigEntry extends ConfigEntry { - private TextComponent nameComponent; - private ConfigEntryButtonProvider buttonProvider; - private ButtonWidget buttonWidget; - - public ButtonConfigEntry(TextComponent nameComponent, ConfigEntryButtonProvider buttonProvider) { - this.nameComponent = nameComponent; - this.buttonProvider = buttonProvider; - this.buttonWidget = new ButtonWidget(0, 0, 150, 20, "") { - @Override - public void onPressed() { - buttonProvider.onPressed(); - } - }; - } - - @Override - public void draw(int entryWidth, int height, int i3, int i4, boolean isSelected, float delta) { - Window window = MinecraftClient.getInstance().window; - Point mouse = ClothInitializer.clientUtils.getMouseLocation(); - if (MinecraftClient.getInstance().textRenderer.isRightToLeft()) { - MinecraftClient.getInstance().textRenderer.drawWithShadow(nameComponent.getFormattedText(), window.getScaledWidth() - MinecraftClient.getInstance().textRenderer.getStringWidth(nameComponent.getFormattedText()) - 40, getY() + 5, 16777215); - this.buttonWidget.text = buttonProvider.getText(); - this.buttonWidget.getBounds().setLocation(getX(), getY() + 2); - } else { - MinecraftClient.getInstance().textRenderer.drawWithShadow(nameComponent.getFormattedText(), getX(), getY() + 5, 16777215); - this.buttonWidget.text = buttonProvider.getText(); - this.buttonWidget.getBounds().setLocation(window.getScaledWidth() - 190, getY() + 2); - } - buttonProvider.draw(buttonWidget, mouse, delta); - } - - @Override - public boolean mouseClicked(double double_1, double double_2, int int_1) { - if (buttonWidget.mouseClicked(double_1, double_2, int_1)) - return true; - return false; - } - - interface ConfigEntryButtonProvider { - - public void onPressed(); - - public String getText(); - - default public void draw(ButtonWidget button, Point mouse, float delta) { - button.draw(mouse.x, mouse.y, delta); - } - - } - } - - public static class CategoryTitleConfigEntry extends ConfigEntry { - private TextComponent textComponent; - - public CategoryTitleConfigEntry(TextComponent nameComponent) { - this.textComponent = nameComponent.setStyle(new Style().setBold(true)); - } - - @Override - public void draw(int i, int i1, int i2, int i3, boolean b, float v) { - Window window = MinecraftClient.getInstance().window; - TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; - textRenderer.draw(textComponent.getFormattedText(), (window.getScaledWidth() - textRenderer.getStringWidth(textComponent.getFormattedText())) / 2, getY() + 10, -1); - } - } - - public static class TextFieldConfigEntry extends ConfigEntry { - private TextComponent nameComponent; - private ConfigEntryTextFieldProvider textFieldProvider; - private TextFieldWidget textFieldWidget; - - public TextFieldConfigEntry(TextComponent nameComponent, ConfigEntryTextFieldProvider textFieldProvider) { - this.nameComponent = nameComponent; - this.textFieldProvider = textFieldProvider; - this.textFieldWidget = new TextFieldWidget(0, 0, 148, 18); - this.textFieldWidget.setChangedListener(s -> textFieldProvider.onUpdateText(textFieldWidget, s)); - this.textFieldProvider.onInitWidget(textFieldWidget); - } - - @Override - public void draw(int entryWidth, int height, int i3, int i4, boolean isSelected, float delta) { - Window window = MinecraftClient.getInstance().window; - Point mouse = ClothInitializer.clientUtils.getMouseLocation(); - if (MinecraftClient.getInstance().textRenderer.isRightToLeft()) { - MinecraftClient.getInstance().textRenderer.drawWithShadow(nameComponent.getFormattedText(), window.getScaledWidth() - MinecraftClient.getInstance().textRenderer.getStringWidth(nameComponent.getFormattedText()) - 40, getY() + 5, 16777215); - this.textFieldWidget.getBounds().setLocation(getX() + 1, getY() + 2); - } else { - MinecraftClient.getInstance().textRenderer.drawWithShadow(nameComponent.getFormattedText(), getX(), getY() + 5, 16777215); - this.textFieldWidget.getBounds().setLocation(window.getScaledWidth() - 190 + 1, getY() + 2); - } - textFieldProvider.draw(textFieldWidget, mouse, delta); - } - - @Override - public boolean mouseClicked(double double_1, double double_2, int int_1) { - if (textFieldWidget.mouseClicked(double_1, double_2, int_1)) - return true; - return false; - } - - @Override - public boolean charTyped(char char_1, int int_1) { - if (textFieldWidget.charTyped(char_1, int_1)) - return true; - return false; - } - - @Override - public boolean keyPressed(int int_1, int int_2, int int_3) { - if (textFieldWidget.keyPressed(int_1, int_2, int_3)) - return true; - return false; - } - - interface ConfigEntryTextFieldProvider { - - public void onInitWidget(TextFieldWidget widget); - - public void onUpdateText(TextFieldWidget widget, String text); - - default public void draw(TextFieldWidget widget, Point mouse, float delta) { - widget.draw(mouse.x, mouse.y, delta); - } - - } - } - -} diff --git a/src/main/java/me/shedaniel/rei/gui/config/ConfigEntryListWidget.java b/src/main/java/me/shedaniel/rei/gui/config/ConfigEntryListWidget.java deleted file mode 100644 index 46fe73118..000000000 --- a/src/main/java/me/shedaniel/rei/gui/config/ConfigEntryListWidget.java +++ /dev/null @@ -1,35 +0,0 @@ -package me.shedaniel.rei.gui.config; - -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.widget.EntryListWidget; - -public class ConfigEntryListWidget extends EntryListWidget { - - public ConfigEntryListWidget(MinecraftClient client, int width, int height, int startY, int endY, int entryHeight) { - super(client, width, height, startY, endY, entryHeight); - method_1943(false); //toggleShowSelection - } - - public void configClearEntries() { - clearEntries(); - } - - private ConfigEntry getEntry(int int_1) { - return this.getInputListeners().get(int_1); - } - - public void configAddEntry(ConfigEntry entry) { - addEntry(entry); - } - - @Override - public int getEntryWidth() { - return width - 80; - } - - @Override - protected int getScrollbarPosition() { - return width - 40; - } - -} diff --git a/src/main/java/me/shedaniel/rei/gui/config/ConfigScreen.java b/src/main/java/me/shedaniel/rei/gui/config/ConfigScreen.java deleted file mode 100644 index 4d2452d17..000000000 --- a/src/main/java/me/shedaniel/rei/gui/config/ConfigScreen.java +++ /dev/null @@ -1,340 +0,0 @@ -package me.shedaniel.rei.gui.config; - -import com.google.common.collect.Lists; -import me.shedaniel.rei.RoughlyEnoughItemsCore; -import me.shedaniel.rei.client.ClientHelper; -import me.shedaniel.rei.client.ItemListOrdering; -import me.shedaniel.rei.client.ScreenHelper; -import me.shedaniel.rei.gui.credits.CreditsScreen; -import me.shedaniel.rei.gui.widget.QueuedTooltip; -import me.shedaniel.rei.gui.widget.TextFieldWidget; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.Screen; -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.render.GuiLighting; -import net.minecraft.client.resource.language.I18n; -import net.minecraft.text.TranslatableTextComponent; - -import java.awt.*; -import java.io.IOException; -import java.util.Arrays; -import java.util.List; - -public class ConfigScreen extends Screen { - - private final List tooltipList; - private Screen parent; - private boolean initOverlay; - private ConfigEntryListWidget entryListWidget; - - public ConfigScreen(Screen parent, boolean initOverlay) { - this.parent = parent; - this.initOverlay = initOverlay; - this.tooltipList = Lists.newArrayList(); - } - - @Override - public boolean keyPressed(int int_1, int int_2, int int_3) { - if (int_1 == 256) { - MinecraftClient.getInstance().openScreen(parent); - if (initOverlay) - ScreenHelper.getLastOverlay().onInitialized(); - return true; - } - return super.keyPressed(int_1, int_2, int_3); - } - - @Override - protected void onInitialized() { - listeners.add(entryListWidget = new ConfigEntryListWidget(client, screenWidth, screenHeight, 32, screenHeight - 32, 24)); - entryListWidget.configClearEntries(); - entryListWidget.configAddEntry(new ConfigEntry.CategoryTitleConfigEntry(new TranslatableTextComponent("text.rei.config.general"))); - entryListWidget.configAddEntry(new ConfigEntry.ButtonConfigEntry(new TranslatableTextComponent("text.rei.config.cheating"), new ConfigEntry.ButtonConfigEntry.ConfigEntryButtonProvider() { - @Override - public void onPressed() { - ClientHelper.setCheating(!ClientHelper.isCheating()); - } - - @Override - public String getText() { - return getTrueFalseText(ClientHelper.isCheating()); - } - })); - entryListWidget.configAddEntry(new ConfigEntry.CategoryTitleConfigEntry(new TranslatableTextComponent("text.rei.config.appearance"))); - entryListWidget.configAddEntry(new ConfigEntry.ButtonConfigEntry(new TranslatableTextComponent("text.rei.config.side_search_box"), new ConfigEntry.ButtonConfigEntry.ConfigEntryButtonProvider() { - @Override - public void onPressed() { - RoughlyEnoughItemsCore.getConfigManager().getConfig().sideSearchField = !RoughlyEnoughItemsCore.getConfigManager().getConfig().sideSearchField; - try { - RoughlyEnoughItemsCore.getConfigManager().saveConfig(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Override - public String getText() { - return getTrueFalseText(RoughlyEnoughItemsCore.getConfigManager().getConfig().sideSearchField); - } - })); - entryListWidget.configAddEntry(new ConfigEntry.ButtonConfigEntry(new TranslatableTextComponent("text.rei.config.list_ordering"), new ConfigEntry.ButtonConfigEntry.ConfigEntryButtonProvider() { - @Override - public void onPressed() { - int index = Arrays.asList(ItemListOrdering.values()).indexOf(RoughlyEnoughItemsCore.getConfigManager().getConfig().itemListOrdering) + 1; - if (index >= ItemListOrdering.values().length) { - index = 0; - RoughlyEnoughItemsCore.getConfigManager().getConfig().isAscending = !RoughlyEnoughItemsCore.getConfigManager().getConfig().isAscending; - } - RoughlyEnoughItemsCore.getConfigManager().getConfig().itemListOrdering = ItemListOrdering.values()[index]; - try { - RoughlyEnoughItemsCore.getConfigManager().saveConfig(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Override - public String getText() { - return I18n.translate("text.rei.config.list_ordering_button", I18n.translate(RoughlyEnoughItemsCore.getConfigManager().getConfig().itemListOrdering.getNameTranslationKey()), I18n.translate(RoughlyEnoughItemsCore.getConfigManager().getConfig().isAscending ? "ordering.rei.ascending" : "ordering.rei.descending")); - } - })); - entryListWidget.configAddEntry(new ConfigEntry.ButtonConfigEntry(new TranslatableTextComponent("text.rei.config.mirror_rei"), new ConfigEntry.ButtonConfigEntry.ConfigEntryButtonProvider() { - @Override - public void onPressed() { - RoughlyEnoughItemsCore.getConfigManager().getConfig().mirrorItemPanel = !RoughlyEnoughItemsCore.getConfigManager().getConfig().mirrorItemPanel; - try { - RoughlyEnoughItemsCore.getConfigManager().saveConfig(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Override - public String getText() { - return getTrueFalseText(RoughlyEnoughItemsCore.getConfigManager().getConfig().mirrorItemPanel); - } - })); - entryListWidget.configAddEntry(new ConfigEntry.CategoryTitleConfigEntry(new TranslatableTextComponent("text.rei.config.modules"))); - entryListWidget.configAddEntry(new ConfigEntry.ButtonConfigEntry(new TranslatableTextComponent("text.rei.config.enable_craftable_only"), new ConfigEntry.ButtonConfigEntry.ConfigEntryButtonProvider() { - @Override - public void onPressed() { - RoughlyEnoughItemsCore.getConfigManager().getConfig().enableCraftableOnlyButton = !RoughlyEnoughItemsCore.getConfigManager().getConfig().enableCraftableOnlyButton; - try { - RoughlyEnoughItemsCore.getConfigManager().saveConfig(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Override - public String getText() { - return getTrueFalseText(RoughlyEnoughItemsCore.getConfigManager().getConfig().enableCraftableOnlyButton); - } - })); - entryListWidget.configAddEntry(new ConfigEntry.ButtonConfigEntry(new TranslatableTextComponent("text.rei.config.load_default_plugin"), new ConfigEntry.ButtonConfigEntry.ConfigEntryButtonProvider() { - @Override - public void onPressed() { - RoughlyEnoughItemsCore.getConfigManager().getConfig().loadDefaultPlugin = !RoughlyEnoughItemsCore.getConfigManager().getConfig().loadDefaultPlugin; - try { - RoughlyEnoughItemsCore.getConfigManager().saveConfig(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Override - public String getText() { - return getTrueFalseText(RoughlyEnoughItemsCore.getConfigManager().getConfig().loadDefaultPlugin); - } - - @Override - public void draw(me.shedaniel.rei.gui.widget.ButtonWidget button, Point mouse, float delta) { - button.draw(mouse.x, mouse.y, delta); - if (button.isHighlighted(mouse)) - tooltipList.add(QueuedTooltip.create(I18n.translate("text.rei.config.load_default_plugin.restart_tooltip").split("\n"))); - - } - })); - entryListWidget.configAddEntry(new ConfigEntry.ButtonConfigEntry(new TranslatableTextComponent("text.rei.config.enable_util_buttons"), new ConfigEntry.ButtonConfigEntry.ConfigEntryButtonProvider() { - @Override - public void onPressed() { - RoughlyEnoughItemsCore.getConfigManager().getConfig().showUtilsButtons = !RoughlyEnoughItemsCore.getConfigManager().getConfig().showUtilsButtons; - try { - RoughlyEnoughItemsCore.getConfigManager().saveConfig(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Override - public String getText() { - return getTrueFalseText(RoughlyEnoughItemsCore.getConfigManager().getConfig().showUtilsButtons); - } - })); - entryListWidget.configAddEntry(new ConfigEntry.ButtonConfigEntry(new TranslatableTextComponent("text.rei.config.disable_recipe_book"), new ConfigEntry.ButtonConfigEntry.ConfigEntryButtonProvider() { - @Override - public void onPressed() { - RoughlyEnoughItemsCore.getConfigManager().getConfig().disableRecipeBook = !RoughlyEnoughItemsCore.getConfigManager().getConfig().disableRecipeBook; - try { - RoughlyEnoughItemsCore.getConfigManager().saveConfig(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Override - public String getText() { - return getTrueFalseText(RoughlyEnoughItemsCore.getConfigManager().getConfig().disableRecipeBook); - } - })); - entryListWidget.configAddEntry(new ConfigEntry.CategoryTitleConfigEntry(new TranslatableTextComponent("text.rei.config.advanced"))); - entryListWidget.configAddEntry(new ConfigEntry.TextFieldConfigEntry(new TranslatableTextComponent("text.rei.give_command"), new ConfigEntry.TextFieldConfigEntry.ConfigEntryTextFieldProvider() { - @Override - public void onInitWidget(TextFieldWidget widget) { - widget.setMaxLength(99999); - widget.setText(RoughlyEnoughItemsCore.getConfigManager().getConfig().giveCommand); - widget.setSuggestion(I18n.translate("text.rei.give_command.suggestion")); - } - - @Override - public void onUpdateText(TextFieldWidget button, String text) { - RoughlyEnoughItemsCore.getConfigManager().getConfig().giveCommand = text; - try { - RoughlyEnoughItemsCore.getConfigManager().saveConfig(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Override - public void draw(TextFieldWidget widget, Point mouse, float delta) { - widget.draw(mouse.x, mouse.y, delta); - if (widget.isHighlighted(mouse)) - tooltipList.add(QueuedTooltip.create(I18n.translate("text.rei.give_command.tooltip").split("\n"))); - } - })); - entryListWidget.configAddEntry(new ConfigEntry.TextFieldConfigEntry(new TranslatableTextComponent("text.rei.gamemode_command"), new ConfigEntry.TextFieldConfigEntry.ConfigEntryTextFieldProvider() { - @Override - public void onInitWidget(TextFieldWidget widget) { - widget.setMaxLength(99999); - widget.setText(RoughlyEnoughItemsCore.getConfigManager().getConfig().gamemodeCommand); - } - - @Override - public void onUpdateText(TextFieldWidget button, String text) { - RoughlyEnoughItemsCore.getConfigManager().getConfig().gamemodeCommand = text; - try { - RoughlyEnoughItemsCore.getConfigManager().saveConfig(); - } catch (IOException e) { - e.printStackTrace(); - } - } - })); - entryListWidget.configAddEntry(new ConfigEntry.TextFieldConfigEntry(new TranslatableTextComponent("text.rei.weather_command"), new ConfigEntry.TextFieldConfigEntry.ConfigEntryTextFieldProvider() { - @Override - public void onInitWidget(TextFieldWidget widget) { - widget.setMaxLength(99999); - widget.setText(RoughlyEnoughItemsCore.getConfigManager().getConfig().weatherCommand); - } - - @Override - public void onUpdateText(TextFieldWidget button, String text) { - RoughlyEnoughItemsCore.getConfigManager().getConfig().weatherCommand = text; - try { - RoughlyEnoughItemsCore.getConfigManager().saveConfig(); - } catch (IOException e) { - e.printStackTrace(); - } - } - })); - entryListWidget.configAddEntry(new ConfigEntry.TextFieldConfigEntry(new TranslatableTextComponent("text.rei.config.max_recipes_per_page"), new ConfigEntry.TextFieldConfigEntry.ConfigEntryTextFieldProvider() { - @Override - public void onInitWidget(TextFieldWidget widget) { - widget.setMaxLength(2); - widget.setText(RoughlyEnoughItemsCore.getConfigManager().getConfig().maxRecipePerPage + ""); - widget.stripInvaild = s -> { - StringBuilder stringBuilder_1 = new StringBuilder(); - char[] var2 = s.toCharArray(); - int var3 = var2.length; - - for(int var4 = 0; var4 < var3; ++var4) { - char char_1 = var2[var4]; - if (Character.isDigit(char_1)) - stringBuilder_1.append(char_1); - } - - return stringBuilder_1.toString(); - }; - } - - @Override - public void onUpdateText(TextFieldWidget button, String text) { - if (isInvaildNumber(text)) - try { - RoughlyEnoughItemsCore.getConfigManager().getConfig().maxRecipePerPage = Integer.valueOf(text); - RoughlyEnoughItemsCore.getConfigManager().saveConfig(); - } catch (Exception e) { - } - } - - @Override - public void draw(TextFieldWidget widget, Point mouse, float delta) { - widget.setEditableColor(isInvaildNumber(widget.getText()) ? -1 : Color.RED.getRGB()); - widget.draw(mouse.x, mouse.y, delta); - } - - private boolean isInvaildNumber(String text) { - try { - int page = Integer.valueOf(text); - return page >= 2 && page <= 99; - } catch (Exception e) { - } - return false; - } - })); - addButton(new ButtonWidget(screenWidth / 2 - 100, screenHeight - 26, I18n.translate("gui.done")) { - @Override - public void onPressed() { - try { - RoughlyEnoughItemsCore.getConfigManager().saveConfig(); - } catch (IOException e) { - e.printStackTrace(); - } - ConfigScreen.this.client.openScreen(parent); - if (initOverlay) - ScreenHelper.getLastOverlay().onInitialized(); - } - }); - addButton(new ButtonWidget(RoughlyEnoughItemsCore.getConfigManager().getConfig().mirrorItemPanel ? screenWidth - 55 : 10, screenHeight - 26, 45, 20, I18n.translate("text.rei.credits")) { - @Override - public void onPressed() { - MinecraftClient.getInstance().openScreen(new CreditsScreen(ConfigScreen.this)); - } - }); - super.onInitialized(); - } - - private String getTrueFalseText(boolean showCraftableOnlyButton) { - return String.format("%s%s", showCraftableOnlyButton ? "§a" : "§c", showCraftableOnlyButton ? I18n.translate("text.rei.enabled") : I18n.translate("text.rei.disabled")); - } - - @Override - public boolean mouseScrolled(double double_1, double double_2, double double_3) { - if (entryListWidget.mouseScrolled(double_1, double_2, double_3)) - return true; - return super.mouseScrolled(double_1, double_2, double_3); - } - - @Override - public void draw(int int_1, int int_2, float float_1) { - this.drawTextureBackground(0); - this.entryListWidget.draw(int_1, int_2, float_1); - this.drawStringCentered(this.fontRenderer, I18n.translate("text.rei.config"), this.screenWidth / 2, 16, 16777215); - super.draw(int_1, int_2, float_1); - GuiLighting.disable(); - tooltipList.forEach(queuedTooltip -> drawTooltip(queuedTooltip.getText(), queuedTooltip.getLocation().x, queuedTooltip.getLocation().y)); - tooltipList.clear(); - GuiLighting.disable(); - } - -} diff --git a/src/main/java/me/shedaniel/rei/gui/config/ItemListOrderingEntry.java b/src/main/java/me/shedaniel/rei/gui/config/ItemListOrderingEntry.java new file mode 100644 index 000000000..bb69ad06b --- /dev/null +++ b/src/main/java/me/shedaniel/rei/gui/config/ItemListOrderingEntry.java @@ -0,0 +1,94 @@ +package me.shedaniel.rei.gui.config; + +import javafx.util.Pair; +import me.shedaniel.cloth.api.ClientUtils; +import me.shedaniel.cloth.gui.ClothConfigScreen.ListEntry; +import me.shedaniel.cloth.gui.ClothConfigScreen.ListWidget; +import me.shedaniel.rei.RoughlyEnoughItemsCore; +import me.shedaniel.rei.client.ItemListOrdering; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.InputListener; +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.resource.language.I18n; +import net.minecraft.client.util.Window; + +import java.awt.*; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.atomic.AtomicReference; + +public class ItemListOrderingEntry extends ListEntry { + private AtomicReference> value; + private ButtonWidget buttonWidget; + + public ItemListOrderingEntry(String fieldName, Pair val) { + super(fieldName); + this.value = new AtomicReference(val); + this.buttonWidget = new ButtonWidget(0, 0, 150, 20, "") { + public void onPressed() { + int index = Arrays.asList(ItemListOrdering.values()).indexOf(value.get().getKey()) + 1; + boolean currentAscending = value.get().getValue(); + if (index >= ItemListOrdering.values().length) { + index = 0; + currentAscending = !currentAscending; + } + ItemListOrderingEntry.this.value.set(new Pair<>(ItemListOrdering.values()[index], currentAscending)); + ((ListWidget) ItemListOrderingEntry.this.getParent()).getScreen().setEdited(true); + } + }; + } + + public Object getObject() { + return this.value.get(); + } + + public void draw(int entryWidth, int height, int i3, int i4, boolean isSelected, float delta) { + Window window = MinecraftClient.getInstance().window; + Point mouse = ClientUtils.getMouseLocation(); + this.buttonWidget.y = this.getY(); + this.buttonWidget.setMessage(I18n.translate("text.rei.config.list_ordering_button", I18n.translate(value.get().getKey().getNameTranslationKey()), I18n.translate(value.get().getValue() ? "ordering.rei.ascending" : "ordering.rei.descending"))); + if (MinecraftClient.getInstance().textRenderer.isRightToLeft()) { + MinecraftClient.getInstance().textRenderer