diff options
| author | shedaniel <daniel@shedaniel.me> | 2021-03-28 01:44:38 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2021-03-28 01:44:38 +0800 |
| commit | c80c345c4fa3def0536bcecbc2223f202af79415 (patch) | |
| tree | 26208cfd201227070b546f5f12d260c9c6db9775 /runtime/src/main/java/me/shedaniel/rei/impl | |
| parent | b11c3866aada638f0ad758ced4068c71e620ce23 (diff) | |
| download | RoughlyEnoughItems-c80c345c4fa3def0536bcecbc2223f202af79415.tar.gz RoughlyEnoughItems-c80c345c4fa3def0536bcecbc2223f202af79415.tar.bz2 RoughlyEnoughItems-c80c345c4fa3def0536bcecbc2223f202af79415.zip | |
Complete custom favorites
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'runtime/src/main/java/me/shedaniel/rei/impl')
13 files changed, 272 insertions, 152 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java index 64700c4cd..0c18217cb 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java @@ -330,7 +330,8 @@ public class ClientHelperImpl implements ClientHelper { } @Override - public @Nullable CategoryIdentifier<?> getPreferredOpenedCategory() { + @Nullable + public CategoryIdentifier<?> getPreferredOpenedCategory() { return this.preferredOpenedCategory; } @@ -414,9 +415,10 @@ public class ClientHelperImpl implements ClientHelper { this.preferredOpenedCategory = category; return this; } - + @Override - public @Nullable CategoryIdentifier<?> getPreferredOpenedCategory() { + @Nullable + public CategoryIdentifier<?> getPreferredOpenedCategory() { return this.preferredOpenedCategory; } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigManagerImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigManagerImpl.java index 4ce4c30f6..6a9feabe9 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigManagerImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigManagerImpl.java @@ -26,9 +26,9 @@ package me.shedaniel.rei.impl.client.config; import com.google.common.collect.Lists; import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import com.google.gson.JsonElement; import com.mojang.blaze3d.platform.InputConstants; import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.math.Matrix4f; import me.shedaniel.architectury.hooks.ScreenHooks; import me.shedaniel.architectury.platform.Platform; @@ -42,7 +42,7 @@ import me.shedaniel.cloth.clothconfig.shadowed.blue.endless.jankson.Jankson; import me.shedaniel.cloth.clothconfig.shadowed.blue.endless.jankson.JsonNull; import me.shedaniel.cloth.clothconfig.shadowed.blue.endless.jankson.JsonObject; import me.shedaniel.cloth.clothconfig.shadowed.blue.endless.jankson.JsonPrimitive; -import me.shedaniel.cloth.clothconfig.shadowed.blue.endless.jankson.api.SyntaxError; +import me.shedaniel.cloth.clothconfig.shadowed.blue.endless.jankson.api.DeserializationException; import me.shedaniel.clothconfig2.api.ConfigEntryBuilder; import me.shedaniel.clothconfig2.api.Modifier; import me.shedaniel.clothconfig2.api.ModifierKeyCode; @@ -76,6 +76,7 @@ import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.resources.language.I18n; import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.Tag; import net.minecraft.nbt.TagParser; import net.minecraft.network.chat.CommonComponents; import net.minecraft.network.chat.Component; @@ -99,60 +100,13 @@ import static me.shedaniel.autoconfig.util.Utils.setUnsafely; @ApiStatus.Internal @Environment(EnvType.CLIENT) public class ConfigManagerImpl implements ConfigManager { - private boolean craftableOnly; + private boolean craftableOnly = false; private final Gson gson = new GsonBuilder().create(); private ConfigObjectImpl object; public ConfigManagerImpl() { - this.craftableOnly = false; Jankson jankson = Jankson.builder().build(); - AutoConfig.register(ConfigObjectImpl.class, (definition, configClass) -> new JanksonConfigSerializer<>(definition, configClass, Jankson.builder().registerPrimitiveTypeAdapter(InputConstants.Key.class, it -> { - return it instanceof String ? InputConstants.getKey((String) it) : null; - }).registerSerializer(InputConstants.Key.class, (it, marshaller) -> new JsonPrimitive(it.getName())).registerTypeAdapter(ModifierKeyCode.class, o -> { - String code = ((JsonPrimitive) o.get("keyCode")).asString(); - if (code.endsWith(".unknown")) return ModifierKeyCode.unknown(); - InputConstants.Key keyCode = InputConstants.getKey(code); - Modifier modifier = Modifier.of(((Number) ((JsonPrimitive) o.get("modifier")).getValue()).shortValue()); - return ModifierKeyCode.of(keyCode, modifier); - }).registerSerializer(ModifierKeyCode.class, (keyCode, marshaller) -> { - JsonObject object = new JsonObject(); - object.put("keyCode", new JsonPrimitive(keyCode.getKeyCode().getName())); - object.put("modifier", new JsonPrimitive(keyCode.getModifier().getValue())); - return object; - }).registerSerializer(EntryStack.class, (stack, marshaller) -> { - try { - return jankson.load(gson.toJson(stack.toJson())); - } catch (SyntaxError syntaxError) { - syntaxError.printStackTrace(); - return JsonNull.INSTANCE; - } - }).registerPrimitiveTypeAdapter(EntryStack.class, it -> { - return it instanceof String ? EntryStack.readFromJson(gson.fromJson((String) it, JsonElement.class)) : null; - }).registerTypeAdapter(EntryStack.class, it -> { - return EntryStack.readFromJson(gson.fromJson(it.toString(), JsonElement.class)); - }).registerSerializer(FavoriteEntry.class, (favoriteEntry, marshaller) -> { - try { - return jankson.load(favoriteEntry.toJson(new com.google.gson.JsonObject()).toString()); - } catch (SyntaxError syntaxError) { - syntaxError.printStackTrace(); - return JsonNull.INSTANCE; - } - }).registerTypeAdapter(FavoriteEntry.class, it -> { - com.google.gson.JsonObject object = gson.fromJson(it.toString(), com.google.gson.JsonObject.class); - return FavoriteEntry.delegate(() -> FavoriteEntry.fromJson(object), () -> object); - }).registerPrimitiveTypeAdapter(FavoriteEntry.class, it -> { - com.google.gson.JsonObject object = gson.fromJson(it.toString(), com.google.gson.JsonObject.class); - return FavoriteEntry.delegate(() -> FavoriteEntry.fromJson(object), () -> object); - }).registerSerializer(FilteringRule.class, (rule, marshaller) -> { - return new JsonPrimitive(FilteringRule.toTag(rule, new CompoundTag()).toString()); - }).registerPrimitiveTypeAdapter(FilteringRule.class, it -> { - try { - return it instanceof String ? FilteringRule.fromTag(TagParser.parseTag((String) it)) : null; - } catch (Exception e) { - e.printStackTrace(); - return null; - } - }).build())); + AutoConfig.register(ConfigObjectImpl.class, (definition, configClass) -> new JanksonConfigSerializer<>(definition, configClass, buildJankson(Jankson.builder()))); GuiRegistry guiRegistry = AutoConfig.getGuiRegistry(ConfigObjectImpl.class); guiRegistry.registerPredicateProvider((i13n, field, config, defaults, guiProvider) -> { if (field.isAnnotationPresent(ConfigEntry.Gui.Excluded.class)) @@ -183,6 +137,127 @@ public class ConfigManagerImpl implements ConfigManager { RoughlyEnoughItemsCore.LOGGER.info("Config loaded."); } + private static Jankson buildJankson(Jankson.Builder builder) { + // InputConstants.Key + builder.registerSerializer(InputConstants.Key.class, (value, marshaller) -> { + return new JsonPrimitive(value.getName()); + }); + builder.registerDeserializer(String.class, InputConstants.Key.class, (value, marshaller) -> { + return InputConstants.getKey(value); + }); + + // ModifierKeyCode + builder.registerSerializer(ModifierKeyCode.class, (value, marshaller) -> { + JsonObject object = new JsonObject(); + object.put("keyCode", new JsonPrimitive(value.getKeyCode().getName())); + object.put("modifier", new JsonPrimitive(value.getModifier().getValue())); + return object; + }); + builder.registerDeserializer(JsonObject.class, ModifierKeyCode.class, (value, marshaller) -> { + String code = value.get(String.class, "keyCode"); + if (code.endsWith(".unknown")) { + return ModifierKeyCode.unknown(); + } else { + InputConstants.Key keyCode = InputConstants.getKey(code); + Modifier modifier = Modifier.of(value.getShort("modifier", (short) 0)); + return ModifierKeyCode.of(keyCode, modifier); + } + }); + + // Tag + builder.registerSerializer(Tag.class, (value, marshaller) -> { + return marshaller.serialize(value.toString()); + }); + builder.registerDeserializer(String.class, Tag.class, (value, marshaller) -> { + try { + return TagParser.parseTag(value); + } catch (CommandSyntaxException e) { + throw new DeserializationException(e); + } + }); + + // EntryStack + builder.registerSerializer(EntryStack.class, (stack, marshaller) -> { + try { + return marshaller.serialize(stack.save()); + } catch (Exception e) { + e.printStackTrace(); + return JsonNull.INSTANCE; + } + }); + builder.registerDeserializer(Tag.class, EntryStack.class, (value, marshaller) -> { + try { + return EntryStack.read((CompoundTag) value); + } catch (Exception e) { + e.printStackTrace(); + return EntryStack.empty(); + } + }); + builder.registerDeserializer(String.class, EntryStack.class, (value, marshaller) -> { + try { + return EntryStack.read(TagParser.parseTag(value)); + } catch (Exception e) { + e.printStackTrace(); + return EntryStack.empty(); + } + }); + + // FilteringRule + builder.registerSerializer(FilteringRule.class, (value, marshaller) -> { + try { + return marshaller.serialize(FilteringRule.save(value, new CompoundTag())); + } catch (Exception e) { + e.printStackTrace(); + return JsonNull.INSTANCE; + } + }); + builder.registerDeserializer(Tag.class, FilteringRule.class, (value, marshaller) -> { + try { + return FilteringRule.read((CompoundTag) value); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + }); + builder.registerDeserializer(String.class, FilteringRule.class, (value, marshaller) -> { + try { + return FilteringRule.read(TagParser.parseTag(value)); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + }); + + // FavoriteEntry + builder.registerSerializer(FavoriteEntry.class, (value, marshaller) -> { + try { + return marshaller.serialize(value.save(new CompoundTag())); + } catch (Exception e) { + e.printStackTrace(); + return JsonNull.INSTANCE; + } + }); + builder.registerDeserializer(Tag.class, FavoriteEntry.class, (value, marshaller) -> { + try { + return FavoriteEntry.delegate(() -> FavoriteEntry.read((CompoundTag) value), () -> (CompoundTag) value); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + }); + builder.registerDeserializer(String.class, FavoriteEntry.class, (value, marshaller) -> { + try { + CompoundTag tag = TagParser.parseTag(value); + return FavoriteEntry.delegate(() -> FavoriteEntry.read(tag), () -> tag); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + }); + + return builder.build(); + } + @Override public void startReload() { } @@ -193,8 +268,9 @@ public class ConfigManagerImpl implements ConfigManager { @Override public void saveConfig() { - if (getConfig().getFavoriteEntries() != null) + if (getConfig().getFavoriteEntries() != null) { getConfig().getFavoriteEntries().removeIf(Objects::isNull); + } if (getConfig().getFilteredStacks() != null) { getConfig().getFilteredStacks().removeIf(EntryStack::isEmpty); List<EntryStack<?>> normalizedFilteredStacks = CollectionUtils.map(getConfig().getFilteredStacks(), EntryStack::normalize); @@ -204,11 +280,11 @@ public class ConfigManagerImpl implements ConfigManager { if (getConfig().getFilteringRules().stream().noneMatch(filteringRule -> filteringRule instanceof ManualFilteringRule)) { getConfig().getFilteringRules().add(new ManualFilteringRule()); } - AutoConfig.getConfigHolder(ConfigObjectImpl.class).save(); AutoConfig.getConfigHolder(ConfigObjectImpl.class).registerLoadListener((configHolder, configObject) -> { object = configObject; return InteractionResult.PASS; }); + AutoConfig.getConfigHolder(ConfigObjectImpl.class).save(); } @Override diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/FilteringRule.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/FilteringRule.java index a5098779a..dd8cd6340 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/FilteringRule.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/FilteringRule.java @@ -56,17 +56,17 @@ public interface FilteringRule<T extends FilteringRule<?>> { return registry; } - static CompoundTag toTag(FilteringRule<?> rule, CompoundTag tag) { + static CompoundTag save(FilteringRule<?> rule, CompoundTag tag) { tag.putString("id", REGISTRY.getKey(rule).toString()); - tag.put("rule", rule.toTag(new CompoundTag())); + tag.put("rule", rule.save(new CompoundTag())); return tag; } - static FilteringRule<?> fromTag(CompoundTag tag) { + static FilteringRule<?> read(CompoundTag tag) { return REGISTRY.get(ResourceLocation.tryParse(tag.getString("id"))).createFromTag(tag.getCompound("rule")); } - CompoundTag toTag(CompoundTag tag); + CompoundTag save(CompoundTag tag); T createFromTag(CompoundTag tag); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/rules/ManualFilteringRule.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/rules/ManualFilteringRule.java index 5bcd19e2c..d5a2cfde3 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/rules/ManualFilteringRule.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/rules/ManualFilteringRule.java @@ -41,7 +41,7 @@ import java.util.stream.Collectors; public class ManualFilteringRule extends AbstractFilteringRule<ManualFilteringRule> { @Override - public CompoundTag toTag(CompoundTag tag) { + public CompoundTag save(CompoundTag tag) { return tag; } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/rules/SearchFilteringRule.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/rules/SearchFilteringRule.java index 3113cc79c..eeb494cea 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/rules/SearchFilteringRule.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/rules/SearchFilteringRule.java @@ -65,7 +65,7 @@ public class SearchFilteringRule extends AbstractFilteringRule<SearchFilteringRu } @Override - public CompoundTag toTag(CompoundTag tag) { + public CompoundTag save(CompoundTag tag) { tag.putString("filter", filter.getFilter()); tag.putBoolean("show", show); return tag; diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/type/types/RenderingEntryDefinition.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/type/types/RenderingEntryDefinition.java index d04a86e14..e8dfa574f 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/type/types/RenderingEntryDefinition.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/type/types/RenderingEntryDefinition.java @@ -67,7 +67,8 @@ public class RenderingEntryDefinition { } @Override - public @Nullable Tooltip getTooltip(EntryStack<Renderer> entry, Point mouse) { + @Nullable + public Tooltip getTooltip(EntryStack<Renderer> entry, Point mouse) { return entry.getValue().getTooltip(mouse); } } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/favorites/FavoriteEntryTypeRegistryImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/favorites/FavoriteEntryTypeRegistryImpl.java index 759ff2ab9..41c308588 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/favorites/FavoriteEntryTypeRegistryImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/favorites/FavoriteEntryTypeRegistryImpl.java @@ -60,7 +60,8 @@ public class FavoriteEntryTypeRegistryImpl implements FavoriteEntryType.Registry } @Override - public @Nullable ResourceLocation getId(FavoriteEntryType<?> type) { + @Nullable + public ResourceLocation getId(FavoriteEntryType<?> type) { return this.registry.inverse().get(type); } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ContainerScreenOverlay.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ContainerScreenOverlay.java index 68d9a7782..ef88474a0 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ContainerScreenOverlay.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ContainerScreenOverlay.java @@ -23,7 +23,6 @@ package me.shedaniel.rei.impl.client.gui; -import com.google.common.collect.AbstractIterator; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Sets; @@ -44,7 +43,10 @@ import me.shedaniel.rei.api.client.gui.config.SearchFieldLocation; import me.shedaniel.rei.api.client.gui.drag.DraggableStackProvider; import me.shedaniel.rei.api.client.gui.drag.DraggableStackVisitor; import me.shedaniel.rei.api.client.gui.drag.DraggingContext; -import me.shedaniel.rei.api.client.gui.widgets.*; +import me.shedaniel.rei.api.client.gui.widgets.Button; +import me.shedaniel.rei.api.client.gui.widgets.Tooltip; +import me.shedaniel.rei.api.client.gui.widgets.Widget; +import me.shedaniel.rei.api.client.gui.widgets.Widgets; import me.shedaniel.rei.api.client.registry.category.CategoryRegistry; import me.shedaniel.rei.api.client.registry.screen.ClickArea; import me.shedaniel.rei.api.client.registry.screen.OverlayDecider; @@ -70,7 +72,6 @@ import me.shedaniel.rei.impl.client.gui.widget.search.OverlaySearchField; import me.shedaniel.rei.impl.common.util.Weather; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.chat.NarratorChatListener; -import net.minecraft.client.gui.components.events.ContainerEventHandler; import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; @@ -109,6 +110,7 @@ public class ContainerScreenOverlay extends REIOverlay { private Rectangle bounds; private Window window; private Button leftButton, rightButton; + private Widget configButton; private CurrentDraggingStack draggingStack = new CurrentDraggingStack(); @Nullable @@ -171,6 +173,7 @@ public class ContainerScreenOverlay extends REIOverlay { public void openMenu(UUID uuid, Menu menu) { openMenu(uuid, menu, point -> false, point -> true); } + public void openMenu(UUID uuid, Menu menu, Predicate<Point> or, Predicate<Point> and) { this.overlayMenu = new OverlayMenu(uuid, menu, Widgets.withTranslate(menu, 0, 0, 400), or, and); } @@ -255,51 +258,53 @@ public class ContainerScreenOverlay extends REIOverlay { .tooltipLine(new TranslatableComponent("text.rei.next_page")) .focusable(false)); } - + final Rectangle configButtonArea = getConfigButtonArea(); - Widget tmp; - widgets.add(tmp = InternalWidgets.wrapLateRenderable(InternalWidgets.concatWidgets( - Widgets.createButton(configButtonArea, NarratorChatListener.NO_TITLE) - .onClick(button -> { - if (Screen.hasShiftDown() || Screen.hasControlDown()) { - ClientHelper.getInstance().setCheating(!ClientHelper.getInstance().isCheating()); - return; - } - ConfigManager.getInstance().openConfigScreen(REIHelper.getInstance().getPreviousScreen()); - }) - .onRender((matrices, button) -> { - if (ClientHelper.getInstance().isCheating() && ClientHelperImpl.getInstance().hasOperatorPermission()) { - button.setTint(ClientHelperImpl.getInstance().hasPermissionToUsePackets() ? 721354752 : 1476440063); - } else { - button.removeTint(); - } - }) - .focusable(false) - .containsMousePredicate((button, point) -> button.getBounds().contains(point) && isNotInExclusionZones(point.x, point.y)) - .tooltipSupplier(button -> { - List<Component> tooltips = new ArrayList<>(); - tooltips.add(new TranslatableComponent("text.rei.config_tooltip")); - tooltips.add(new ImmutableTextComponent(" ")); - if (!ClientHelper.getInstance().isCheating()) - tooltips.add(new TranslatableComponent("text.rei.cheating_disabled")); - else if (!ClientHelperImpl.getInstance().hasOperatorPermission()) { - if (minecraft.gameMode.hasInfiniteItems()) - tooltips.add(new TranslatableComponent("text.rei.cheating_limited_creative_enabled")); - else tooltips.add(new TranslatableComponent("text.rei.cheating_enabled_no_perms")); - } else if (ClientHelperImpl.getInstance().hasPermissionToUsePackets()) - tooltips.add(new TranslatableComponent("text.rei.cheating_enabled")); - else - tooltips.add(new TranslatableComponent("text.rei.cheating_limited_enabled")); - return tooltips.toArray(new Component[0]); - }), - Widgets.createDrawableWidget((helper, matrices, mouseX, mouseY, delta) -> { - helper.setBlitOffset(helper.getBlitOffset() + 1); - Minecraft.getInstance().getTextureManager().bind(CHEST_GUI_TEXTURE); - helper.blit(matrices, configButtonArea.x + 3, configButtonArea.y + 3, 0, 0, 14, 14); - }) + widgets.add(configButton = InternalWidgets.wrapLateRenderable( + Widgets.withTranslate( + InternalWidgets.concatWidgets( + Widgets.createButton(configButtonArea, NarratorChatListener.NO_TITLE) + .onClick(button -> { + if (Screen.hasShiftDown() || Screen.hasControlDown()) { + ClientHelper.getInstance().setCheating(!ClientHelper.getInstance().isCheating()); + return; + } + ConfigManager.getInstance().openConfigScreen(REIHelper.getInstance().getPreviousScreen()); + }) + .onRender((matrices, button) -> { + if (ClientHelper.getInstance().isCheating() && ClientHelperImpl.getInstance().hasOperatorPermission()) { + button.setTint(ClientHelperImpl.getInstance().hasPermissionToUsePackets() ? 721354752 : 1476440063); + } else { + button.removeTint(); + } + }) + .focusable(false) + .containsMousePredicate((button, point) -> button.getBounds().contains(point) && isNotInExclusionZones(point.x, point.y)) + .tooltipSupplier(button -> { + List<Component> tooltips = new ArrayList<>(); + tooltips.add(new TranslatableComponent("text.rei.config_tooltip")); + tooltips.add(new ImmutableTextComponent(" ")); + if (!ClientHelper.getInstance().isCheating()) + tooltips.add(new TranslatableComponent("text.rei.cheating_disabled")); + else if (!ClientHelperImpl.getInstance().hasOperatorPermission()) { + if (minecraft.gameMode.hasInfiniteItems()) + tooltips.add(new TranslatableComponent("text.rei.cheating_limited_creative_enabled")); + else tooltips.add(new TranslatableComponent("text.rei.cheating_enabled_no_perms")); + } else if (ClientHelperImpl.getInstance().hasPermissionToUsePackets()) + tooltips.add(new TranslatableComponent("text.rei.cheating_enabled")); + else + tooltips.add(new TranslatableComponent("text.rei.cheating_limited_enabled")); + return tooltips.toArray(new Component[0]); + }), + Widgets.createDrawableWidget((helper, matrices, mouseX, mouseY, delta) -> { + helper.setBlitOffset(helper.getBlitOffset() + 1); + Minecraft.getInstance().getTextureManager().bind(CHEST_GUI_TEXTURE); + helper.blit(matrices, configButtonArea.x + 3, configButtonArea.y + 3, 0, 0, 14, 14); + }) + ), + 0, 0, 600 ) )); - tmp.setZ(600); if (ConfigObject.getInstance().doesShowUtilsButtons()) { widgets.add(Widgets.createButton(ConfigObject.getInstance().isLowerConfigButton() ? new Rectangle(ConfigObject.getInstance().isLeftHandSidePanel() ? window.getGuiScaledWidth() - 30 : 10, 10, 20, 20) : new Rectangle(ConfigObject.getInstance().isLeftHandSidePanel() ? window.getGuiScaledWidth() - 55 : 35, 10, 20, 20), NarratorChatListener.NO_TITLE) .onRender((matrices, button) -> { @@ -375,7 +380,7 @@ public class ContainerScreenOverlay extends REIOverlay { Rectangle area = getCraftableToggleArea(); ItemRenderer itemRenderer = Minecraft.getInstance().getItemRenderer(); ItemStack icon = new ItemStack(Blocks.CRAFTING_TABLE); - this.widgets.add(tmp = InternalWidgets.wrapLateRenderable(InternalWidgets.concatWidgets( + this.widgets.add(Widgets.withTranslate(InternalWidgets.wrapLateRenderable(InternalWidgets.concatWidgets( Widgets.createButton(area, NarratorChatListener.NO_TITLE) .focusable(false) .onClick(button -> { @@ -392,8 +397,7 @@ public class ContainerScreenOverlay extends REIOverlay { itemRenderer.renderGuiItem(icon, (int) vector.x(), (int) vector.y()); itemRenderer.blitOffset = 0.0F; })) - )); - tmp.setZ(600); + ), 0, 0, 600)); } widgets.add(draggingStack); @@ -727,9 +731,16 @@ public class ContainerScreenOverlay extends REIOverlay { @Override public boolean mouseClicked(double mouseX, double mouseY, int button) { + boolean visible = REIHelper.getInstance().isOverlayVisible(); + if (visible && configButton.mouseClicked(mouseX, mouseY, button)) { + this.setFocused(configButton); + if (button == 0) + this.setDragging(true); + return true; + } if (ConfigObject.getInstance().getHideKeybind().matchesMouse(button)) { REIHelper.getInstance().toggleOverlayVisible(); - return true; + return REIHelper.getInstance().isOverlayVisible(); } EntryStack<?> stack = ScreenRegistry.getInstance().getFocusedStack(Minecraft.getInstance().screen, PointHelper.ofMouse()); if (stack != null && !stack.isEmpty()) { @@ -738,7 +749,7 @@ public class ContainerScreenOverlay extends REIOverlay { return ClientHelper.getInstance().openView(ViewSearchBuilder.builder().addRecipesFor(stack).setOutputNotice(stack).fillPreferredOpenedCategory()); } else if (ConfigObject.getInstance().getUsageKeybind().matchesMouse(button)) { return ClientHelper.getInstance().openView(ViewSearchBuilder.builder().addUsagesFor(stack).setInputNotice(stack).fillPreferredOpenedCategory()); - } else if (ConfigObject.getInstance().getFavoriteKeyCode().matchesMouse(button)) { + } else if (visible && ConfigObject.getInstance().getFavoriteKeyCode().matchesMouse(button)) { FavoriteEntry favoriteEntry = FavoriteEntry.fromEntryStack(stack); if (!ConfigObject.getInstance().getFavoriteEntries().contains(favoriteEntry)) { ConfigObject.getInstance().getFavoriteEntries().add(favoriteEntry); @@ -750,9 +761,7 @@ public class ContainerScreenOverlay extends REIOverlay { return true; } } - if (!REIHelper.getInstance().isOverlayVisible()) - return false; - if (overlayMenu != null) { + if (visible && overlayMenu != null) { if (overlayMenu.wrappedMenu.mouseClicked(mouseX, mouseY, button)) { if (overlayMenu != null) this.setFocused(overlayMenu.wrappedMenu); else this.setFocused(null); @@ -782,8 +791,11 @@ public class ContainerScreenOverlay extends REIOverlay { return true; } } - for (GuiEventListener element : widgets) - if ((overlayMenu == null || element != overlayMenu.wrappedMenu) && element.mouseClicked(mouseX, mouseY, button)) { + if (!visible) { + return false; + } + for (GuiEventListener element : widgets) { + if (element != configButton && (overlayMenu == null || element != overlayMenu.wrappedMenu) && element.mouseClicked(mouseX, mouseY, button)) { this.setFocused(element); if (button == 0) this.setDragging(true); @@ -791,6 +803,7 @@ public class ContainerScreenOverlay extends REIOverlay { REIHelperImpl.getSearchField().setFocused(false); return true; } + } if (ConfigObject.getInstance().getFocusSearchFieldKeybi |
