aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java171
-rw-r--r--src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java35
-rw-r--r--src/main/java/me/shedaniel/rei/RoughlyEnoughItemsPlugins.java27
-rw-r--r--src/main/java/me/shedaniel/rei/client/ClientHelper.java7
-rw-r--r--src/main/java/me/shedaniel/rei/client/ConfigManager.java46
-rw-r--r--src/main/java/me/shedaniel/rei/gui/config/ItemListOrderingEntry.java14
-rw-r--r--src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java3
-rw-r--r--src/main/java/me/shedaniel/rei/listeners/CreativePlayerInventoryScreenHooks.java9
-rw-r--r--src/main/java/me/shedaniel/rei/mixin/MixinCreativePlayerInventoryScreen.java36
-rw-r--r--src/main/java/me/shedaniel/rei/utils/ClothRegistry.java152
-rw-r--r--src/main/java/me/shedaniel/rei/utils/ClothScreenRegistry.java46
11 files changed, 258 insertions, 288 deletions
diff --git a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
index e562f9c4b..bfb69c70b 100644
--- a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
+++ b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
@@ -1,42 +1,43 @@
package me.shedaniel.rei;
+import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import me.shedaniel.cloth.api.ClientUtils;
+import me.shedaniel.cloth.hooks.ClothClientHooks;
import me.shedaniel.rei.api.ItemRegistry;
import me.shedaniel.rei.api.PluginDisabler;
import me.shedaniel.rei.api.REIPlugin;
import me.shedaniel.rei.api.RecipeHelper;
-import me.shedaniel.rei.client.ConfigManager;
-import me.shedaniel.rei.client.ItemRegistryImpl;
-import me.shedaniel.rei.client.PluginDisablerImpl;
-import me.shedaniel.rei.client.RecipeHelperImpl;
-import me.shedaniel.rei.gui.widget.ItemListOverlay;
-import me.shedaniel.rei.plugin.DefaultPlugin;
+import me.shedaniel.rei.client.*;
+import me.shedaniel.rei.gui.ContainerScreenOverlay;
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.fabricmc.loader.api.ModContainer;
+import net.fabricmc.loader.api.metadata.ModMetadata;
import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.resource.language.I18n;
-import net.minecraft.item.ItemStack;
-import net.minecraft.server.network.ServerPlayerEntity;
-import net.minecraft.text.StringTextComponent;
-import net.minecraft.text.TranslatableTextComponent;
+import net.minecraft.client.gui.ContainerScreen;
+import net.minecraft.client.gui.Element;
+import net.minecraft.client.gui.ingame.CreativePlayerInventoryScreen;
+import net.minecraft.client.gui.ingame.PlayerInventoryScreen;
+import net.minecraft.client.gui.widget.RecipeBookButtonWidget;
+import net.minecraft.util.ActionResult;
import net.minecraft.util.Identifier;
+import net.minecraft.util.Pair;
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;
import java.util.Optional;
+import java.util.stream.Collectors;
-public class RoughlyEnoughItemsCore implements ClientModInitializer, ModInitializer {
+public class RoughlyEnoughItemsCore implements ClientModInitializer {
public static final Logger LOGGER;
- public static final Identifier DELETE_ITEMS_PACKET = new Identifier("roughlyenoughitems", "delete_item");
- public static final Identifier CREATE_ITEMS_PACKET = new Identifier("roughlyenoughitems", "create_item");
private static final RecipeHelper RECIPE_HELPER = new RecipeHelperImpl();
private static final PluginDisabler PLUGIN_DISABLER = new PluginDisablerImpl();
private static final ItemRegistry ITEM_REGISTRY = new ItemRegistryImpl();
@@ -85,22 +86,7 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer, ModInitiali
public void onInitializeClient() {
configManager = new ConfigManager();
- // If pluginloader is not installed, base functionality should still remain
- if (!FabricLoader.getInstance().isModLoaded("pluginloader")) {
- RoughlyEnoughItemsCore.LOGGER.warn("[REI] Plugin Loader is not loaded! Please consider installing https://minecraft.curseforge.com/projects/pluginloader for REI plugin compatibility!");
- registerPlugin(new Identifier("roughlyenoughitems", "default_plugin"), new DefaultPlugin());
- }
-
- if (FabricLoader.getInstance().isModLoaded("cloth")) {
- try {
- Class.forName("me.shedaniel.rei.utils.ClothRegistry").getDeclaredMethod("register").invoke(null);
- } catch (IllegalAccessException | InvocationTargetException | ClassNotFoundException | NoSuchMethodException e) {
- e.printStackTrace();
- }
- } else {
- RoughlyEnoughItemsCore.LOGGER.fatal("[REI] Cloth NOT found! It is a dependency of REI: https://minecraft.curseforge.com/projects/cloth");
- System.exit(0);
- }
+ registerClothEvents();
if (FabricLoader.getInstance().isModLoaded("modmenu")) {
try {
@@ -111,26 +97,115 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer, ModInitiali
RoughlyEnoughItemsCore.LOGGER.error("[REI] Failed to add config override for ModMenu!", e);
}
}
+
+ discoverPlugins();
}
- @Override
- public void onInitialize() {
- registerFabricPackets();
+ private void discoverPlugins() {
+ List<Pair<Identifier, String>> list = Lists.newArrayList();
+ for(ModMetadata metadata : FabricLoader.getInstance().getAllMods().stream().map(ModContainer::getMetadata).filter(metadata -> metadata.containsCustomElement("roughlyenoughitems:plugins")).collect(Collectors.toList())) {
+ try {
+ JsonElement pluginsElement = metadata.getCustomElement("roughlyenoughitems:plugins");
+ if (pluginsElement.isJsonArray()) {
+ for(JsonElement element : pluginsElement.getAsJsonArray())
+ if (element.isJsonObject())
+ loadPluginFromJsonObject(list, metadata, element.getAsJsonObject());
+ else
+ throw new IllegalStateException("Custom Element in an array is not an object.");
+ } else if (pluginsElement.isJsonObject()) {
+ loadPluginFromJsonObject(list, metadata, pluginsElement.getAsJsonObject());
+ } else
+ throw new IllegalStateException("Custom Element not an array or an object.");
+ } catch (Exception e) {
+ e.printStackTrace();
+ RoughlyEnoughItemsCore.LOGGER.error("[REI] Can't load REI plugins from %s: %s", metadata.getId(), e.getLocalizedMessage());
+ }
+ }
+ for(Pair<Identifier, String> pair : list) {
+ String s = pair.getRight();
+ try {
+ Class<?> aClass = Class.forName(s);
+ if (!REIPlugin.class.isAssignableFrom(aClass)) {
+ RoughlyEnoughItemsCore.LOGGER.error("[REI] Plugin class from %s is not implementing REIPlugin!", s);
+ break;
+ }
+ REIPlugin o = REIPlugin.class.cast(aClass.newInstance());
+ registerPlugin(pair.getLeft(), o);
+ } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
+ RoughlyEnoughItemsCore.LOGGER.error("[REI] Can't load REI plugin class from %s!", s);
+ } catch (ClassCastException e) {
+ RoughlyEnoughItemsCore.LOGGER.error("[REI] Failed to cast plugin class from %s to REIPlugin!", s);
+ }
+ }
}
- private void registerFabricPackets() {
- ServerSidePacketRegistry.INSTANCE.register(DELETE_ITEMS_PACKET, (packetContext, packetByteBuf) -> {
- ServerPlayerEntity player = (ServerPlayerEntity) packetContext.getPlayer();
- if (!player.inventory.getCursorStack().isEmpty())
- player.inventory.setCursorStack(ItemStack.EMPTY);
+ private void loadPluginFromJsonObject(List<Pair<Identifier, String>> list, ModMetadata modMetadata, JsonObject object) {
+ String namespace = modMetadata.getId();
+ if (object.has("namespace"))
+ namespace = object.get("namespace").getAsString();
+ String id = object.get("id").getAsString();
+ String className = object.get("class").getAsString();
+ list.add(new Pair<>(new Identifier(namespace, id), className));
+ }
+
+ private void registerClothEvents() {
+ ClothClientHooks.SYNC_RECIPES.register((minecraftClient, recipeManager, synchronizeRecipesS2CPacket) -> {
+ ((RecipeHelperImpl) RoughlyEnoughItemsCore.getRecipeHelper()).recipesLoaded(recipeManager);
+ });
+ ClothClientHooks.SCREEN_ADD_BUTTON.register((minecraftClient, screen, abstractButtonWidget) -> {
+ if (RoughlyEnoughItemsCore.getConfigManager().getConfig().disableRecipeBook && screen instanceof ContainerScreen && abstractButtonWidget instanceof RecipeBookButtonWidget)
+ return ActionResult.FAIL;
+ return ActionResult.PASS;
+ });
+ ClothClientHooks.SCREEN_INIT_POST.register((minecraftClient, screen, screenHooks) -> {
+ if (screen instanceof ContainerScreen) {
+ if (screen instanceof PlayerInventoryScreen && minecraftClient.interactionManager.hasCreativeInventory())
+ return;
+ ScreenHelper.setLastContainerScreen((ContainerScreen) screen);
+ boolean alreadyAdded = false;
+ for(Element element : Lists.newArrayList(screenHooks.cloth_getInputListeners()))
+ if (ContainerScreenOverlay.class.isAssignableFrom(element.getClass()))
+ if (alreadyAdded)
+ screenHooks.cloth_getInputListeners().remove(element);
+ else
+ alreadyAdded = true;
+ if (!alreadyAdded)
+ screenHooks.cloth_getInputListeners().add(ScreenHelper.getLastOverlay(true, false));
+ }
+ });
+ ClothClientHooks.SCREEN_RENDER_POST.register((minecraftClient, screen, i, i1, v) -> {
+ if (screen instanceof ContainerScreen)
+ ScreenHelper.getLastOverlay().render(i, i1, v);
+ });
+ ClothClientHooks.SCREEN_MOUSE_CLICKED.register((minecraftClient, screen, v, v1, i) -> {
+ if (screen instanceof CreativePlayerInventoryScreen)
+ if (ScreenHelper.isOverlayVisible() && ScreenHelper.getLastOverlay().mouseClicked(v, v1, i))
+ return ActionResult.SUCCESS;
+ return ActionResult.PASS;
+ });
+ ClothClientHooks.SCREEN_MOUSE_SCROLLED.register((minecraftClient, screen, v, v1, v2) -> {
+ if (screen instanceof ContainerScreen)
+ if (ScreenHelper.isOverlayVisible() && ScreenHelper.getLastOverlay().getRectangle().contains(ClientUtils.getMouseLocation()) && ScreenHelper.getLastOverlay().mouseScrolled(v, v1, v2))
+ return ActionResult.SUCCESS;
+ return ActionResult.PASS;
+ });
+ ClothClientHooks.SCREEN_CHAR_TYPED.register((minecraftClient, screen, character, keyCode) -> {
+ if (screen instanceof ContainerScreen)
+ if (ScreenHelper.getLastOverlay().charTyped(character, keyCode))
+ return ActionResult.SUCCESS;
+ return ActionResult.PASS;
+ });
+ ClothClientHooks.SCREEN_LATE_RENDER.register((minecraftClient, screen, i, i1, v) -> {
+ if (!ScreenHelper.isOverlayVisible())
+ return;
+ if (screen instanceof ContainerScreen)
+ ScreenHelper.getLastOverlay().lateRender(i, i1, v);
});
- ServerSidePacketRegistry.INSTANCE.register(CREATE_ITEMS_PACKET, (packetContext, packetByteBuf) -> {
- ServerPlayerEntity player = (ServerPlayerEntity) packetContext.getPlayer();
- ItemStack stack = packetByteBuf.readItemStack();
- if (player.inventory.insertStack(stack.copy()))
- player.addChatMessage(new StringTextComponent(I18n.translate("text.rei.cheat_items").replaceAll("\\{item_name}", ItemListOverlay.tryGetItemStackName(stack.copy())).replaceAll("\\{item_count}", stack.copy().getAmount() + "").replaceAll("\\{player_name}", player.getEntityName())), false);
- else
- player.addChatMessage(new TranslatableTextComponent("text.rei.failed_cheat_items"), false);
+ ClothClientHooks.SCREEN_KEY_PRESSED.register((minecraftClient, screen, i, i1, i2) -> {
+ if (screen instanceof ContainerScreen)
+ if (ScreenHelper.getLastOverlay().keyPressed(i, i1, i2))
+ return ActionResult.SUCCESS;
+ return ActionResult.PASS;
});
}
diff --git a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java
new file mode 100644
index 000000000..d10ff8458
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java
@@ -0,0 +1,35 @@
+package me.shedaniel.rei;
+
+import me.shedaniel.rei.gui.widget.ItemListOverlay;
+import net.fabricmc.api.ModInitializer;
+import net.fabricmc.fabric.api.network.ServerSidePacketRegistry;
+import net.minecraft.client.resource.language.I18n;
+import net.minecraft.item.ItemStack;
+import net.minecraft.server.network.ServerPlayerEntity;
+import net.minecraft.text.StringTextComponent;
+import net.minecraft.text.TranslatableTextComponent;
+import net.minecraft.util.Identifier;
+
+public class RoughlyEnoughItemsNetwork implements ModInitializer {
+
+ public static final Identifier DELETE_ITEMS_PACKET = new Identifier("roughlyenoughitems", "delete_item");
+ public static final Identifier CREATE_ITEMS_PACKET = new Identifier("roughlyenoughitems", "create_item");
+
+ @Override
+ public void onInitialize() {
+ ServerSidePacketRegistry.INSTANCE.register(DELETE_ITEMS_PACKET, (packetContext, packetByteBuf) -> {
+ ServerPlayerEntity player = (ServerPlayerEntity) packetContext.getPlayer();
+ if (!player.inventory.getCursorStack().isEmpty())
+ player.inventory.setCursorStack(ItemStack.EMPTY);
+ });
+ ServerSidePacketRegistry.INSTANCE.register(CREATE_ITEMS_PACKET, (packetContext, packetByteBuf) -> {
+ ServerPlayerEntity player = (ServerPlayerEntity) packetContext.getPlayer();
+ ItemStack stack = packetByteBuf.readItemStack();
+ if (player.inventory.insertStack(stack.copy()))
+ player.addChatMessage(new StringTextComponent(I18n.translate("text.rei.cheat_items").replaceAll("\\{item_name}", ItemListOverlay.tryGetItemStackName(stack.copy())).replaceAll("\\{item_count}", stack.copy().getAmount() + "").replaceAll("\\{player_name}", player.getEntityName())), false);
+ else
+ player.addChatMessage(new TranslatableTextComponent("text.rei.failed_cheat_items"), false);
+ });
+ }
+
+}
diff --git a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsPlugins.java b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsPlugins.java
deleted file mode 100644
index 452e97eea..000000000
--- a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsPlugins.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package me.shedaniel.rei;
-
-import info.tehnut.pluginloader.LoaderCreator;
-import info.tehnut.pluginloader.PluginLoaderBuilder;
-import info.tehnut.pluginloader.ValidationStrategy;
-import me.shedaniel.rei.api.REIPlugin;
-import net.fabricmc.loader.language.LanguageAdapter;
-import net.fabricmc.loader.language.LanguageAdapterException;
-import net.minecraft.util.Identifier;
-
-public class RoughlyEnoughItemsPlugins implements LoaderCreator {
-
- @Override
- public void createLoaders() {
- LanguageAdapter.Options instantiationOptions = new LanguageAdapter.Options();
-
- new PluginLoaderBuilder("roughlyenoughitems").withValidator(ValidationStrategy.hasInterface(REIPlugin.class)).withInitializer((aClass, container) -> {
- Identifier id = new Identifier(container.getOwner().getInfo().getId(), container.getInfo().getId());
- try {
- REIPlugin plugin = (REIPlugin) container.getOwner().getAdapter().createInstance(aClass, instantiationOptions);
- RoughlyEnoughItemsCore.registerPlugin(id, plugin);
- } catch (LanguageAdapterException e) {
- RoughlyEnoughItemsCore.LOGGER.error("[REI] Error loading plugin %s", id, e);
- }
- }).build();
- }
-}
diff --git a/src/main/java/me/shedaniel/rei/client/ClientHelper.java b/src/main/java/me/shedaniel/rei/client/ClientHelper.java
index 103f5784f..764362074 100644
--- a/src/main/java/me/shedaniel/rei/client/ClientHelper.java
+++ b/src/main/java/me/shedaniel/rei/client/ClientHelper.java
@@ -3,6 +3,7 @@ package me.shedaniel.rei.client;
import com.google.common.collect.ImmutableList;
import io.netty.buffer.Unpooled;
import me.shedaniel.rei.RoughlyEnoughItemsCore;
+import me.shedaniel.rei.RoughlyEnoughItemsNetwork;
import me.shedaniel.rei.api.RecipeCategory;
import me.shedaniel.rei.api.RecipeDisplay;
import me.shedaniel.rei.api.RecipeHelper;
@@ -43,7 +44,6 @@ public class ClientHelper implements ClientModInitializer {
String modid = location.getNamespace();
if (modid.equalsIgnoreCase("minecraft"))
return "Minecraft";
- // return FabricLoader.getInstance().getAllMods().stream().map(ModContainer::getMetadata).filter(metadata -> metadata.getId().equals(modid)).findFirst().map(ModMetadata::getName).orElse(modid);
return FabricLoader.getInstance().getModContainer(modid).map(ModContainer::getMetadata).map(ModMetadata::getName).orElse(modid);
}
return "";
@@ -67,13 +67,13 @@ public class ClientHelper implements ClientModInitializer {
MinecraftClient.getInstance().player.inventory.setCursorStack(ItemStack.EMPTY);
return;
}
- ClientSidePacketRegistry.INSTANCE.sendToServer(RoughlyEnoughItemsCore.DELETE_ITEMS_PACKET, new PacketByteBuf(Unpooled.buffer()));
+ ClientSidePacketRegistry.INSTANCE.sendToServer(RoughlyEnoughItemsNetwork.DELETE_ITEMS_PACKET, new PacketByteBuf(Unpooled.buffer()));
}
public static boolean tryCheatingStack(ItemStack cheatedStack) {
if (MinecraftClient.getInstance().isInSingleplayer()) {
try {
- ClientSidePacketRegistry.INSTANCE.sendToServer(RoughlyEnoughItemsCore.CREATE_ITEMS_PACKET, new PacketByteBuf(Unpooled.buffer()).writeItemStack(cheatedStack.copy()));
+ ClientSidePacketRegistry.INSTANCE.sendToServer(RoughlyEnoughItemsNetwork.CREATE_ITEMS_PACKET, new PacketByteBuf(Unpooled.buffer()).writeItemStack(cheatedStack.copy()));
return true;
} catch (Exception e) {
return false;
@@ -87,7 +87,6 @@ public class ClientHelper implements ClientModInitializer {
madeUpCommand = og.replaceAll("\\{player_name}", MinecraftClient.getInstance().player.getEntityName()).replaceAll("\\{item_identifier}", identifier.toString()).replaceAll("\\{nbt}", "").replaceAll("\\{count}", String.valueOf(cheatedStack.getAmount()));
MinecraftClient.getInstance().player.addChatMessage(new TranslatableTextComponent("text.rei.too_long_nbt"), false);
}
- System.out.println(madeUpCommand);
MinecraftClient.getInstance().player.sendChatMessage(madeUpCommand);
return true;
}
diff --git a/src/main/java/me/shedaniel/rei/client/ConfigManager.java b/src/main/java/me/shedaniel/rei/client/ConfigManager.java
index 59a870234..7edfc08f7 100644
--- a/src/main/java/me/shedaniel/rei/client/ConfigManager.java
+++ b/src/main/java/me/shedaniel/rei/client/ConfigManager.java
@@ -6,7 +6,10 @@ import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import me.shedaniel.rei.RoughlyEnoughItemsCore;
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 net.minecraft.text.StringTextComponent;
import java.io.File;
import java.io.FileOutputStream;
@@ -14,6 +17,7 @@ import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
+import java.util.List;
public class ConfigManager implements me.shedaniel.rei.api.ConfigManager {
@@ -122,10 +126,44 @@ public class ConfigManager implements me.shedaniel.rei.api.ConfigManager {
@Override
public void openConfigScreen(Screen parent) {
- try {
- Class.forName("me.shedaniel.rei.utils.ClothRegistry").getDeclaredMethod("openConfigScreen", Screen.class).invoke(null, parent);
- } catch (IllegalAccessException | ClassNotFoundException | NoSuchMethodException | InvocationTargetException e) {
- e.printStackTrace();
+ if (FabricLoader.getInstance().isModLoaded("cloth-config")) {
+ try {
+ Class.forName("me.shedaniel.rei.utils.ClothScreenRegistry").getDeclaredMethod("openConfigScreen", Screen.class).invoke(null, parent);
+ } catch (IllegalAccessException | ClassNotFoundException | NoSuchMethodException | InvocationTargetException e) {
+ e.printStackTrace();
+ }
+ } else {
+ MinecraftClient.getInstance().openScreen(new Screen(new StringTextComponent("")) {
+ @Override
+ public void render(int int_1, int int_2, float float_1) {
+ renderDirtBackground(0);
+ List<String> list = minecraft.textRenderer.wrapStringToWidthAsList(I18n.translate("text.rei.no_config_api"), width - 100);
+ int y = (int) (height / 2 - minecraft.textRenderer.fontHeight * 1.3f / 2 * list.size());
+ for(int i = 0; i < list.size(); i++) {
+ String s = list.get(i);
+ drawCenteredString(minecraft.textRenderer, s, width / 2, y, -1);
+ y += minecraft.textRenderer.fontHeight;
+ }
+ super.render(int_1, int_2, float_1);
+ }
+
+ @Override
+ protected void init() {
+ super.init();
+ addButton(new net.minecraft.client.gui.widget.ButtonWidget(width / 2 - 100, height - 26, 200, 20, I18n.translate("gui.done"), buttonWidget -> {
+ this.minecraft.openScreen(parent);
+ }));
+ }
+
+ @Override
+ public boolean keyPressed(int int_1, int int_2, int int_3) {
+ if (int_1 == 256 && this.shouldCloseOnEsc()) {
+ this.minecraft.openScreen(parent);
+ return true;
+ }
+ return super.keyPressed(int_1, int_2, int_3);
+ }
+ });
}
}
diff --git a/src/main/java/me/shedaniel/rei/gui/config/ItemListOrderingEntry.java b/src/main/java/me/shedaniel/rei/gui/config/ItemListOrderingEntry.java
index e543e8b64..f70d1be88 100644
--- a/src/main/java/me/shedaniel/rei/gui/config/ItemListOrderingEntry.java
+++ b/src/main/java/me/shedaniel/rei/gui/config/ItemListOrderingEntry.java
@@ -1,7 +1,6 @@
package me.shedaniel.rei.gui.config;
import com.google.common.collect.Lists;
-import javafx.util.Pair;
import me.shedaniel.cloth.gui.ClothConfigScreen.ListEntry;
import me.shedaniel.rei.RoughlyEnoughItemsCore;
import me.shedaniel.rei.client.ItemListOrdering;
@@ -10,6 +9,7 @@ import net.minecraft.client.gui.Element;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.resource.language.I18n;
import net.minecraft.client.util.Window;
+import net.minecraft.util.Pair;
import java.util.Arrays;
import java.util.List;
@@ -26,8 +26,8 @@ public class ItemListOrderingEntry extends ListEntry {
super(fieldName);
this.value = new AtomicReference(val);
this.buttonWidget = new ButtonWidget(0, 0, 150, 20, "", widget -> {
- int index = Arrays.asList(ItemListOrdering.values()).indexOf(value.get().getKey()) + 1;
- boolean currentAscending = value.get().getValue();
+ int index = Arrays.asList(ItemListOrdering.values()).indexOf(value.get().getLeft()) + 1;
+ boolean currentAscending = value.get().getRight();
if (index >= ItemListOrdering.values().length) {
index = 0;
currentAscending = !currentAscending;
@@ -54,10 +54,10 @@ public class ItemListOrderingEntry extends ListEntry {
@Override
public void render(int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isSelected, float delta) {
Window window = MinecraftClient.getInstance().window;
- this.resetButton.active = this.getDefaultValue().isPresent() && (((Pair<ItemListOrdering, Boolean>) this.getDefaultValue().get()).getKey() != this.value.get().getKey() || ((Pair<ItemListOrdering, Boolean>) this.getDefaultValue().get()).getValue().booleanValue() != this.value.get().getValue().booleanValue());
+ this.resetButton.active = this.getDefaultValue().isPresent() && (((Pair<ItemListOrdering, Boolean>) this.getDefaultValue().get()).getLeft() != this.value.get().getLeft() || ((Pair<ItemListOrdering, Boolean>) this.getDefaultValue().get()).getRight().booleanValue() != this.value.get().getRight().booleanValue());
this.resetButton.y = y;
this.buttonWidget.y = y;
- 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")));
+ this.buttonWidget.setMessage(I18n.translate("text.rei.config.list_ordering_button", I18n.translate(value.get().getLeft().getNameTranslationKey()), I18n.translate(value.get().getRight() ? "ordering.rei.ascending" : "ordering.rei.descending")));
if (MinecraftClient.getInstance().textRenderer.isRightToLeft()) {
MinecraftClient.getInstance().textRenderer.drawWithShadow(I18n.translate(this.getFieldName(), new Object[0]), (float) (window.getScaledWidth() - x - MinecraftClient.getInstance().textRenderer.getStringWidth(I18n.translate(this.getFieldName(), new Object[0]))), (float) (y + 5), 16777215);
this.resetButton.x = x;
@@ -84,7 +84,7 @@ public class ItemListOrderingEntry extends ListEntry {
@Override
public void save() {
- RoughlyEnoughItemsCore.getConfigManager().getConfig().itemListOrdering = value.get().getKey();
- RoughlyEnoughItemsCore.getConfigManager().getConfig().isAscending = value.get().getValue();
+ RoughlyEnoughItemsCore.getConfigManager().getConfig().itemListOrdering = value.get().getLeft();
+ RoughlyEnoughItemsCore.getConfigManager().getConfig().isAscending = value.get().getRight();
}
}
diff --git a/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java b/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java
index f4df73aad..b09ca2fa1 100644
--- a/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java
+++ b/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java
@@ -40,7 +40,8 @@ public class CreditsScreen extends Screen {
@Override
public void onPressed() {
CreditsScreen.this.minecraft.openScreen(parent);
- ScreenHelper.getLastOverlay().init();
+ if (parent instanceof ContainerScreen)
+ ScreenHelper.getLastOverlay().init();
}
});
}
diff --git a/src/main/java/me/shedaniel/rei/listeners/CreativePlayerInventoryScreenHooks.java b/src/main/java/me/shedaniel/rei/listeners/CreativePlayerInventoryScreenHooks.java
deleted file mode 100644
index 209f442f0..000000000
--- a/src/main/java/me/shedaniel/rei/listeners/CreativePlayerInventoryScreenHooks.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package me.shedaniel.rei.listeners;
-
-public interface CreativePlayerInventoryScreenHooks {
- int rei_getSelectedTab();
-
- boolean rei_doRenderScrollBar();
-
- boolean rei_getField2888();
-}
diff --git a/src/main/java/me/shedaniel/rei/mixin/MixinCreativePlayerInventoryScreen.java b/src/main/java/me/shedaniel/rei/mixin/MixinCreativePlayerInventoryScreen.java
deleted file mode 100644
index c3f64df28..000000000
--- a/src/main/java/me/shedaniel/rei/mixin/MixinCreativePlayerInventoryScreen.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package me.shedaniel.rei.mixin;
-
-import me.shedaniel.rei.listeners.CreativePlayerInventoryScreenHooks;
-import net.minecraft.client.gui.ingame.CreativePlayerInventoryScreen;
-import net.minecraft.entity.player.PlayerInventory;
-import net.minecraft.text.TextComponent;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.Shadow;
-
-@Mixin(CreativePlayerInventoryScreen.class)
-public abstract class MixinCreativePlayerInventoryScreen implements CreativePlayerInventoryScreenHooks {
-
- @Shadow
- private static int selectedTab;
- @Shadow
- private boolean field_2888;
-
- @Shadow
- protected abstract boolean doRenderScrollBar();
-
- @Override
- public int rei_getSelectedTab() {
- return selectedTab;
- }
-
- @Override
- public boolean rei_doRenderScrollBar() {
- return doRenderScrollBar();
- }
-
- @Override
- public boolean rei_getField2888() {
- return field_2888;
- }
-
-}
diff --git a/src/main/java/me/shedaniel/rei/utils/ClothRegistry.java b/src/main/java/me/shedaniel/rei/utils/ClothRegistry.java
deleted file mode 100644
index 76b55950a..000000000
--- a/src/main/java/me/shedaniel/rei/utils/ClothRegistry.java
+++ /dev/null
@@ -1,152 +0,0 @@
-package me.shedaniel.rei.utils;
-
-import com.google.common.collect.Lists;
-import javafx.util.Pair;
-import me.shedaniel.cloth.api.ClientUtils;
-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.cloth.hooks.ClothClientHooks;
-import me.shedaniel.rei.RoughlyEnoughItemsCore;
-import me.shedaniel.rei.client.RecipeHelperImpl;
-import me.shedaniel.rei.client.ScreenHelper;
-import me.shedaniel.rei.gui.ContainerScreenOverlay;
-import me.shedaniel.rei.gui.config.ItemListOrderingEntry;
-import me.shedaniel.rei.listeners.CreativePlayerInventoryScreenHooks;
-import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.gui.ContainerScreen;
-import net.minecraft.client.gui.Element;
-import net.minecraft.client.gui.Screen;
-import net.minecraft.client.gui.ingame.CreativePlayerInventoryScreen;
-import net.minecraft.client.gui.ingame.PlayerInventoryScreen;
-import net.minecraft.client.gui.widget.RecipeBookButtonWidget;
-import net.minecraft.item.ItemGroup;
-import net.minecraft.util.ActionResult;
-
-import java.io.IOException;
-
-public class ClothRegistry {
-
- public static void register() {
- ClothClientHooks.SYNC_RECIPES.register((minecraftClient, recipeManager, synchronizeRecipesS2CPacket) -> {
- ((RecipeHelperImpl) RoughlyEnoughItemsCore.getRecipeHelper()).recipesLoaded(recipeManager);
- });
- ClothClientHooks.SCREEN_ADD_BUTTON.register((minecraftClient, screen, abstractButtonWidget) -> {
- if (RoughlyEnoughItemsCore.getConfigManager().getConfig().disableRecipeBook && screen instanceof ContainerScreen && abstractButtonWidget instanceof RecipeBookButtonWidget)
- return ActionResult.FAIL;
- return ActionResult.PASS;
- });
- ClothClientHooks.SCREEN_INIT_POST.register((minecraftClient, screen, screenHooks) -> {
- if (screen instanceof ContainerScreen) {
- if (screen instanceof CreativePlayerInventoryScreen)
- if (((CreativePlayerInventoryScreenHooks) screen).rei_getSelectedTab() != ItemGroup.INVENTORY.getIndex())
- return;
- if (screen instanceof PlayerInventoryScreen && minecraftClient.interactionManager.hasCreativeInventory())
- return;
- ScreenHelper.setLastContainerScreen((ContainerScreen) screen);
- boolean alreadyAdded = false;
- for(Element element : Lists.newArrayList(screenHooks.cloth_getInputListeners()))
- if (ContainerScreenOverlay.class.isAssignableFrom(element.getClass()))
- if (alreadyAdded)
- screenHooks.cloth_getInputListeners().remove(element);
- else
- alreadyAdded = true;
- if (!alreadyAdded)
- screenHooks.cloth_getInputListeners().add(ScreenHelper.getLastOverlay(true, false));
- }
- });
- ClothClientHooks.SCREEN_RENDER_POST.register((minecraftClient, screen, i, i1, v) -> {
- if (screen instanceof ContainerScreen) {
- if (screen instanceof CreativePlayerInventoryScreen) {
- CreativePlayerInventoryScreenHooks creativePlayerInventoryScreenHooks = (CreativePlayerInventoryScreenHooks) screen;
- if (creativePlayerInventoryScreenHooks.rei_getSelectedTab() != ItemGroup.INVENTORY.getIndex())
- return;
- }
- ScreenHelper.getLastOverlay().render(i, i1, v);
- }
- });
- ClothClientHooks.SCREEN_MOUSE_CLICKED.register((minecraftClient, screen, v, v1, i) -> {
- if (screen instanceof CreativePlayerInventoryScreen)
- if (((CreativePlayerInventoryScreenHooks) screen).rei_getSelectedTab() == ItemGroup.INVENTORY.getIndex())
- if (ScreenHelper.isOverlayVisible() && ScreenHelper.getLastOverlay().mouseClicked(v, v1, i))
- return ActionResult.SUCCESS;
- return ActionResult.PASS;
- });
- ClothClientHooks.SCREEN_MOUSE_SCROLLED.register((minecraftClient, screen, v, v1, v2) -> {
- if (screen instanceof ContainerScreen)
- if (screen instanceof CreativePlayerInventoryScreen) {
- if (((CreativePlayerInventoryScreenHooks) screen).rei_doRenderScrollBar())
- return ActionResult.PASS;
- if (ScreenHelper.isOverlayVisible() && ScreenHelper.getLastOverlay().getRectangle().contains(ClientUtils.getMouseLocation()) && ScreenHelper.getLastOverlay().mouseScrolled(v, v1, v2))
- return ActionResult.SUCCESS;
- } else {
- ContainerScreenOverlay overlay = ScreenHelper.getLastOverlay();
- if (ScreenHelper.isOverlayVisible() && ContainerScreenOverlay.getItemListOverlay().getListArea().contains(ClientUtils.getMouseLocation()))
- if (overlay.mouseScrolled(v, v1, v2))
- return ActionResult.SUCCESS;
- }
- return ActionResult.PASS;
- });
- ClothClientHooks.SCREEN_CHAR_TYPED.register((minecraftClient, screen, character, keyCode) -> {
- if (screen instanceof ContainerScreen)
- if (screen instanceof CreativePlayerInventoryScreen) {
- if (((CreativePlayerInventoryScreenHooks) screen).rei_getField2888() || ((CreativePlayerInventoryScreenHooks) screen).rei_getSelectedTab() != ItemGroup.INVENTORY.getIndex())
- return ActionResult.PASS;
- if (ScreenHelper.getLastOverlay().charTyped(character, keyCode))
- return ActionResult.SUCCESS;
- } else if (ScreenHelper.getLastOverlay().charTyped(character, keyCode))
- return ActionResult.SUCCESS;
- return ActionResult.PASS;
- });
- ClothClientHooks.SCREEN_LATE_RENDER.register((minecraftClient, screen, i, i1, v) -> {
- if (!ScreenHelper.isOverlayVisible())
- return;
- if (screen instanceof CreativePlayerInventoryScreen)
- if (((CreativePlayerInventoryScreenHooks) screen).rei_getSelectedTab() != ItemGroup.INVENTORY.getIndex())
- return;
- if (screen instanceof ContainerScreen)
- ScreenHelper.getLastOverlay().lateRender(i, i1, v);
- });
- ClothClientHooks.SCREEN_KEY_PRESSED.register((minecraftClient, screen, i, i1, i2) -> {
- if (screen instanceof CreativePlayerInventoryScreen)
- if (((CreativePlayerInventoryScreenHooks)