aboutsummaryrefslogtreecommitdiff
path: root/runtime/src/main/java/me/shedaniel/rei/impl
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-03-28 01:44:38 +0800
committershedaniel <daniel@shedaniel.me>2021-03-28 01:44:38 +0800
commitc80c345c4fa3def0536bcecbc2223f202af79415 (patch)
tree26208cfd201227070b546f5f12d260c9c6db9775 /runtime/src/main/java/me/shedaniel/rei/impl
parentb11c3866aada638f0ad758ced4068c71e620ce23 (diff)
downloadRoughlyEnoughItems-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')
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java8
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigManagerImpl.java182
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/FilteringRule.java8
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/rules/ManualFilteringRule.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/rules/SearchFilteringRule.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/entry/type/types/RenderingEntryDefinition.java3
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/favorites/FavoriteEntryTypeRegistryImpl.java3
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ContainerScreenOverlay.java123
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/TransformingScreen.java3
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java3
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/FavoritesListWidget.java82
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/types/BuiltinEntryDefinition.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/types/EmptyEntryDefinition.java3
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