From 2e0e576b64545cb45a0ab3e0d0fe81cfb7a61307 Mon Sep 17 00:00:00 2001 From: Unknown Date: Sat, 16 Feb 2019 17:52:40 +0800 Subject: Same as v2.3 in Fabric --- src/main/java/me/shedaniel/rei/REIMixinInit.java | 15 -- .../me/shedaniel/rei/RoughlyEnoughItemsCore.java | 16 +- .../me/shedaniel/rei/RoughlyEnoughItemsInit.java | 21 +++ .../me/shedaniel/rei/RoughlyEnoughItemsMixin.java | 15 ++ .../me/shedaniel/rei/RoughlyEnoughItemsPlugin.java | 2 +- .../java/me/shedaniel/rei/api/IItemRegisterer.java | 35 ++++ .../java/me/shedaniel/rei/api/IPluginDisabler.java | 23 +++ .../java/me/shedaniel/rei/api/IRecipePlugin.java | 12 +- .../java/me/shedaniel/rei/api/PluginFunction.java | 5 + .../java/me/shedaniel/rei/client/ClientHelper.java | 53 +----- .../java/me/shedaniel/rei/client/ConfigHelper.java | 19 +- .../java/me/shedaniel/rei/client/GuiHelper.java | 18 +- .../me/shedaniel/rei/client/ItemListHelper.java | 53 ++++++ .../java/me/shedaniel/rei/client/REIConfig.java | 1 + .../java/me/shedaniel/rei/client/RecipeHelper.java | 20 +- .../me/shedaniel/rei/gui/ContainerGuiOverlay.java | 62 +++--- .../me/shedaniel/rei/gui/config/ConfigEntry.java | 77 ++++++++ .../rei/gui/config/ConfigEntryListWidget.java | 35 ++++ .../me/shedaniel/rei/gui/config/ConfigGui.java | 207 +++++++++++++++++++++ .../me/shedaniel/rei/gui/credits/CreditsEntry.java | 22 +++ .../rei/gui/credits/CreditsEntryListWidget.java | 35 ++++ .../me/shedaniel/rei/gui/credits/CreditsGui.java | 64 +++++++ .../me/shedaniel/rei/gui/widget/ButtonWidget.java | 49 +++-- .../me/shedaniel/rei/gui/widget/ConfigWidget.java | 177 ------------------ .../gui/widget/CraftableToggleButtonWidget.java | 9 +- .../shedaniel/rei/gui/widget/ItemListOverlay.java | 43 ++--- .../shedaniel/rei/gui/widget/ItemSlotWidget.java | 37 ++-- .../rei/gui/widget/RecipeViewingWidgetGui.java | 10 +- .../rei/gui/widget/SpeedCraftingButtonWidget.java | 1 + .../rei/listeners/IMixinGuiContainer.java | 15 +- .../me/shedaniel/rei/mixin/MixinGuiContainer.java | 21 +-- .../rei/mixin/MixinNetHandlerPlayClient.java | 2 - .../me/shedaniel/rei/plugin/DefaultPlugin.java | 69 +++++-- .../rei/plugin/DefaultSmeltingCategory.java | 2 +- .../me/shedaniel/rei/plugin/PluginManager.java | 43 +++++ .../me/shedaniel/rei/update/UpdateChecker.java | 6 +- 36 files changed, 874 insertions(+), 420 deletions(-) delete mode 100644 src/main/java/me/shedaniel/rei/REIMixinInit.java create mode 100644 src/main/java/me/shedaniel/rei/RoughlyEnoughItemsInit.java create mode 100644 src/main/java/me/shedaniel/rei/RoughlyEnoughItemsMixin.java create mode 100644 src/main/java/me/shedaniel/rei/api/IItemRegisterer.java create mode 100644 src/main/java/me/shedaniel/rei/api/IPluginDisabler.java create mode 100644 src/main/java/me/shedaniel/rei/api/PluginFunction.java create mode 100644 src/main/java/me/shedaniel/rei/client/ItemListHelper.java create mode 100644 src/main/java/me/shedaniel/rei/gui/config/ConfigEntry.java create mode 100644 src/main/java/me/shedaniel/rei/gui/config/ConfigEntryListWidget.java create mode 100644 src/main/java/me/shedaniel/rei/gui/config/ConfigGui.java create mode 100644 src/main/java/me/shedaniel/rei/gui/credits/CreditsEntry.java create mode 100644 src/main/java/me/shedaniel/rei/gui/credits/CreditsEntryListWidget.java create mode 100644 src/main/java/me/shedaniel/rei/gui/credits/CreditsGui.java delete mode 100644 src/main/java/me/shedaniel/rei/gui/widget/ConfigWidget.java create mode 100644 src/main/java/me/shedaniel/rei/plugin/PluginManager.java (limited to 'src/main/java') diff --git a/src/main/java/me/shedaniel/rei/REIMixinInit.java b/src/main/java/me/shedaniel/rei/REIMixinInit.java deleted file mode 100644 index 39f3639e2..000000000 --- a/src/main/java/me/shedaniel/rei/REIMixinInit.java +++ /dev/null @@ -1,15 +0,0 @@ -package me.shedaniel.rei; - -import org.dimdev.riftloader.listener.InitializationListener; -import org.spongepowered.asm.launch.MixinBootstrap; -import org.spongepowered.asm.mixin.Mixins; - -public class REIMixinInit implements InitializationListener { - - @Override - public void onInitialization() { - MixinBootstrap.init(); - Mixins.addConfiguration("roughlyenoughitems.client.json"); - } - -} diff --git a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java index b7104b301..90e1f5217 100644 --- a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java +++ b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java @@ -1,7 +1,10 @@ package me.shedaniel.rei; -import me.shedaniel.rei.client.ClientHelper; +import me.shedaniel.rei.api.IItemRegisterer; +import me.shedaniel.rei.api.IPluginDisabler; +import me.shedaniel.rei.client.ItemListHelper; import me.shedaniel.rei.client.RecipeHelper; +import me.shedaniel.rei.plugin.PluginManager; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -9,14 +12,19 @@ public class RoughlyEnoughItemsCore { public static final Logger LOGGER = LogManager.getFormatterLogger("REI"); private static final RecipeHelper RECIPE_HELPER = new RecipeHelper(); - private static final ClientHelper CLIENT_HELPER = new ClientHelper(); + private static final ItemListHelper ITEM_LIST_HELPER = new ItemListHelper(); + private static final PluginManager PLUGIN_MANAGER = new PluginManager(); public static RecipeHelper getRecipeHelper() { return RECIPE_HELPER; } - public static ClientHelper getClientHelper() { - return CLIENT_HELPER; + public static IItemRegisterer getItemRegisterer() { + return ITEM_LIST_HELPER; + } + + public static IPluginDisabler getPluginDisabler() { + return PLUGIN_MANAGER; } } diff --git a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsInit.java b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsInit.java new file mode 100644 index 000000000..8459bdb33 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsInit.java @@ -0,0 +1,21 @@ +package me.shedaniel.rei; + +import me.shedaniel.rei.update.UpdateChecker; +import org.dimdev.riftloader.listener.InitializationListener; + +import java.lang.reflect.InvocationTargetException; + +public class RoughlyEnoughItemsInit implements InitializationListener { + + @Override + public void onInitialization() { + UpdateChecker.onInitialization(); + try { + Class pluginClass = Class.forName("me.shedaniel.rei.RoughlyEnoughItemsPlugin"); + pluginClass.getMethod("discoverPlugins").invoke(null); + } catch (ClassNotFoundException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) { + e.printStackTrace(); + } + } + +} diff --git a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsMixin.java b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsMixin.java new file mode 100644 index 000000000..3cd7cca6d --- /dev/null +++ b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsMixin.java @@ -0,0 +1,15 @@ +package me.shedaniel.rei; + +import org.dimdev.riftloader.listener.InitializationListener; +import org.spongepowered.asm.launch.MixinBootstrap; +import org.spongepowered.asm.mixin.Mixins; + +public class RoughlyEnoughItemsMixin implements InitializationListener { + + @Override + public void onInitialization() { + MixinBootstrap.init(); + Mixins.addConfiguration("roughlyenoughitems.client.json"); + } + +} diff --git a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsPlugin.java b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsPlugin.java index ad3c15ba6..2bb33bfc4 100644 --- a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsPlugin.java +++ b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsPlugin.java @@ -35,6 +35,7 @@ public class RoughlyEnoughItemsPlugin { public static IRecipePlugin registerPlugin(String resourceLocation, IRecipePlugin plugin) { plugins.put(resourceLocation, plugin); RoughlyEnoughItemsPlugin.LOGGER.info("REI: Registered Plugin from %s by %s.", resourceLocation.toString(), plugin.getClass().getSimpleName()); + plugin.onFirstLoad(RoughlyEnoughItemsCore.getPluginDisabler()); return plugin; } @@ -77,7 +78,6 @@ public class RoughlyEnoughItemsPlugin { RoughlyEnoughItemsPlugin.LOGGER.error("REI: Failed to load plugin file from %s. (%s)", (Object) modInfo.id, (Object) e.getLocalizedMessage()); } }); - plugins.values().forEach(IRecipePlugin::onFirstLoad); new LinkedList<>(plugins.keySet()).stream().filter(location -> disablingPlugins.contains(location)).forEach(location -> { plugins.remove(location); LOGGER.info("REI: Disabled REI plugin %s.", location.toString()); diff --git a/src/main/java/me/shedaniel/rei/api/IItemRegisterer.java b/src/main/java/me/shedaniel/rei/api/IItemRegisterer.java new file mode 100644 index 000000000..f397b15c0 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/api/IItemRegisterer.java @@ -0,0 +1,35 @@ +package me.shedaniel.rei.api; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import java.util.List; + +public interface IItemRegisterer { + + public List getItemList(); + + @Deprecated + public List getModifiableItemList(); + + public ItemStack[] getAllStacksFromItem(Item item); + + public void registerItemStack(Item afterItem, ItemStack stack); + + default public void registerItemStack(Item afterItem, ItemStack... stacks) { + for(ItemStack stack : stacks) + if (stack != null && !stack.isEmpty()) + registerItemStack(afterItem, stack); + } + + default public void registerItemStack(ItemStack... stacks) { + for(ItemStack stack : stacks) + if (stack != null && !stack.isEmpty()) + registerItemStack(null, stack); + } + + default boolean alreadyContain(ItemStack stack) { + return getItemList().stream().anyMatch(stack1 -> ItemStack.areItemStacksEqual(stack, stack1)); + } + +} diff --git a/src/main/java/me/shedaniel/rei/api/IPluginDisabler.java b/src/main/java/me/shedaniel/rei/api/IPluginDisabler.java new file mode 100644 index 000000000..836cd3e6f --- /dev/null +++ b/src/main/java/me/shedaniel/rei/api/IPluginDisabler.java @@ -0,0 +1,23 @@ +package me.shedaniel.rei.api; + +import net.minecraft.util.ResourceLocation; + +public interface IPluginDisabler { + + default public void disablePluginFunctions(ResourceLocation plugin, PluginFunction... functions) { + for(PluginFunction function : functions) + disablePluginFunction(plugin, function); + } + + default public void enablePluginFunctions(ResourceLocation plugin, PluginFunction... functions) { + for(PluginFunction function : functions) + enablePluginFunction(plugin, function); + } + + public void disablePluginFunction(ResourceLocation plugin, PluginFunction function); + + public void enablePluginFunction(ResourceLocation plugin, PluginFunction function); + + public boolean isFunctionEnabled(ResourceLocation plugin, PluginFunction function); + +} diff --git a/src/main/java/me/shedaniel/rei/api/IRecipePlugin.java b/src/main/java/me/shedaniel/rei/api/IRecipePlugin.java index 13b7518bf..6ba6c70e7 100644 --- a/src/main/java/me/shedaniel/rei/api/IRecipePlugin.java +++ b/src/main/java/me/shedaniel/rei/api/IRecipePlugin.java @@ -1,14 +1,18 @@ package me.shedaniel.rei.api; +import me.shedaniel.rei.client.RecipeHelper; + public interface IRecipePlugin { - default public void onFirstLoad() {} + default public void onFirstLoad(IPluginDisabler pluginDisabler) {} + + public void registerItems(IItemRegisterer itemRegisterer); - public void registerPluginCategories(); + public void registerPluginCategories(RecipeHelper recipeHelper); - public void registerRecipes(); + public void registerRecipeDisplays(RecipeHelper recipeHelper); - public void registerSpeedCraft(); + public void registerSpeedCraft(RecipeHelper recipeHelper); default public int getPriority() { return 0; diff --git a/src/main/java/me/shedaniel/rei/api/PluginFunction.java b/src/main/java/me/shedaniel/rei/api/PluginFunction.java new file mode 100644 index 000000000..bef757db1 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/api/PluginFunction.java @@ -0,0 +1,5 @@ +package me.shedaniel.rei.api; + +public enum PluginFunction { + REGISTER_ITEMS, REGISTER_CATEGORIES, REGISTER_RECIPE_DISPLAYS, REGISTER_SPEED_CRAFT; +} diff --git a/src/main/java/me/shedaniel/rei/client/ClientHelper.java b/src/main/java/me/shedaniel/rei/client/ClientHelper.java index 87e438ab3..fd5418516 100644 --- a/src/main/java/me/shedaniel/rei/client/ClientHelper.java +++ b/src/main/java/me/shedaniel/rei/client/ClientHelper.java @@ -1,21 +1,17 @@ package me.shedaniel.rei.client; import com.google.common.collect.ImmutableList; -import com.google.common.collect.Lists; import me.shedaniel.rei.api.IRecipeCategory; import me.shedaniel.rei.api.IRecipeDisplay; import me.shedaniel.rei.gui.ContainerGuiOverlay; -import me.shedaniel.rei.gui.widget.ConfigWidget; +import me.shedaniel.rei.gui.config.ConfigGui; import me.shedaniel.rei.gui.widget.RecipeViewingWidgetGui; import me.shedaniel.rei.network.CreateItemsPacket; import me.shedaniel.rei.network.DeleteItemsPacket; import net.minecraft.client.Minecraft; import net.minecraft.client.MouseHelper; import net.minecraft.client.gui.GuiScreen; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.init.Items; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.NonNullList; import net.minecraft.util.ResourceLocation; @@ -24,19 +20,13 @@ import org.dimdev.riftloader.RiftLoader; import java.awt.*; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; public class ClientHelper { - private static List itemList; private static boolean cheating = false; - public ClientHelper() { - this.itemList = Lists.newLinkedList(); - } - public static String getModFromItemStack(ItemStack stack) { if (!stack.isEmpty()) { ResourceLocation location = IRegistry.ITEM.getKey(stack.getItem()); @@ -53,10 +43,6 @@ public class ClientHelper { return ""; } - public static List getItemList() { - return itemList; - } - public static Point getMouseLocation() { Minecraft client = Minecraft.getInstance(); MouseHelper mouse = client.mouseHelper; @@ -117,7 +103,7 @@ public class ClientHelper { } public static void openConfigWindow(GuiScreen parent) { - Minecraft.getInstance().displayGuiScreen(new ConfigWidget(parent)); + Minecraft.getInstance().displayGuiScreen(new ConfigGui(parent)); } public static List getInventoryItemsTypes() { @@ -130,39 +116,4 @@ public class ClientHelper { return inventoryStacks; } - public void clientLoaded() { - IRegistry.ITEM.forEach(item -> { - if (!item.equals(Items.ENCHANTED_BOOK)) - registerItem(item); - }); - IRegistry.ENCHANTMENT.forEach(enchantment -> { - for(int i = enchantment.getMinLevel(); i < enchantment.getMaxLevel(); i++) { - Map map = new HashMap<>(); - map.put(enchantment, i); - ItemStack itemStack = new ItemStack(Items.ENCHANTED_BOOK); - EnchantmentHelper.setEnchantments(map, itemStack); - registerItemStack(itemStack); - } - }); - } - - public void registerItem(Item item) { - registerItemStack(item.getDefaultInstance()); - NonNullList stacks = NonNullList.create(); - item.fillItemGroup(item.getGroup(), stacks); - stacks.forEach(this::registerItemStack); - } - - public void registerItemStack(ItemStack stack) { - if (!stack.getItem().equals(Items.AIR) && !alreadyContain(stack)) - itemList.add(stack); - } - - private boolean alreadyContain(ItemStack stack) { - for(ItemStack itemStack : itemList) - if (ItemStack.areItemStacksEqual(stack, itemStack)) - return true; - return false; - } - } diff --git a/src/main/java/me/shedaniel/rei/client/ConfigHelper.java b/src/main/java/me/shedaniel/rei/client/ConfigHelper.java index 9b6c15596..ff03ba720 100644 --- a/src/main/java/me/shedaniel/rei/client/ConfigHelper.java +++ b/src/main/java/me/shedaniel/rei/client/ConfigHelper.java @@ -11,15 +11,11 @@ import java.nio.file.Files; public class ConfigHelper { + private static ConfigHelper instance = new ConfigHelper(); private final File configFile; private REIConfig config; - private static ConfigHelper instance = new ConfigHelper(); private boolean craftableOnly; - public static ConfigHelper getInstance() { - return instance; - } - public ConfigHelper() { this.configFile = new File(RiftLoader.instance.configDir, "rei.json"); this.craftableOnly = false; @@ -27,11 +23,16 @@ public class ConfigHelper { if (!configFile.getParentFile().exists() || !configFile.getParentFile().isDirectory()) configFile.getParentFile().mkdirs(); loadConfig(); + RoughlyEnoughItemsCore.LOGGER.info("REI: Config is loaded."); } catch (IOException e) { e.printStackTrace(); } } + public static ConfigHelper getInstance() { + return instance; + } + public void saveConfig() throws IOException { configFile.getParentFile().mkdirs(); if (!configFile.exists() && !configFile.createNewFile()) { @@ -126,4 +127,12 @@ public class ConfigHelper { config.mirrorItemPanel = mirrorItemPanel; } + public boolean isLoadingDefaultPlugin() { + return config.loadDefaultPlugin; + } + + public void setLoadingDefaultPlugin(boolean loadDefaultPlugin) { + config.loadDefaultPlugin = loadDefaultPlugin; + } + } diff --git a/src/main/java/me/shedaniel/rei/client/GuiHelper.java b/src/main/java/me/shedaniel/rei/client/GuiHelper.java index 1f603463b..78e283b52 100644 --- a/src/main/java/me/shedaniel/rei/client/GuiHelper.java +++ b/src/main/java/me/shedaniel/rei/client/GuiHelper.java @@ -19,7 +19,6 @@ public class GuiHelper implements ClientTickable { private static boolean overlayVisible = true; private static ContainerGuiOverlay overlay; private static GuiContainer lastGuiContainer; - private static IMixinGuiContainer lastMixinGuiContainer; public static boolean isOverlayVisible() { return overlayVisible; @@ -29,13 +28,16 @@ public class GuiHelper implements ClientTickable { overlayVisible = !overlayVisible; } - public static ContainerGuiOverlay getLastOverlay() { + public static ContainerGuiOverlay getLastOverlay(boolean reset) { + if (overlay == null || reset) { + overlay = new ContainerGuiOverlay(); + overlay.onInitialized(); + } return overlay; } - public static void setOverlay(ContainerGuiOverlay overlay) { - GuiHelper.overlay = overlay; - overlay.onInitialized(); + public static ContainerGuiOverlay getLastOverlay() { + return getLastOverlay(false); } public static GuiContainer getLastGuiContainer() { @@ -47,18 +49,14 @@ public class GuiHelper implements ClientTickable { } public static IMixinGuiContainer getLastMixinGuiContainer() { - return lastMixinGuiContainer; + return (IMixinGuiContainer) lastGuiContainer; } - public static void setLastMixinGuiContainer(IMixinGuiContainer lastMixinGuiContainer) { - GuiHelper.lastMixinGuiContainer = lastMixinGuiContainer; - } @Override public void clientTick(Minecraft client) { if (client.currentScreen instanceof GuiContainer && lastGuiContainer != client.currentScreen) { GuiHelper.lastGuiContainer = (GuiContainer) client.currentScreen; - GuiHelper.lastMixinGuiContainer = (IMixinGuiContainer) lastGuiContainer; } UpdateAnnouncer.clientTick(client); } diff --git a/src/main/java/me/shedaniel/rei/client/ItemListHelper.java b/src/main/java/me/shedaniel/rei/client/ItemListHelper.java new file mode 100644 index 000000000..731c8e70c --- /dev/null +++ b/src/main/java/me/shedaniel/rei/client/ItemListHelper.java @@ -0,0 +1,53 @@ +package me.shedaniel.rei.client; + +import com.google.common.collect.Lists; +import me.shedaniel.rei.api.IItemRegisterer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; + +import java.util.Collections; +import java.util.List; +import java.util.TreeSet; +import java.util.stream.Collectors; + +public class ItemListHelper implements IItemRegisterer { + + private final List itemList = Lists.newLinkedList(); + + @Override + public List getItemList() { + return Collections.unmodifiableList(itemList); + } + + @Deprecated + @Override + public List getModifiableItemList() { + return itemList; + } + + @Override + public ItemStack[] getAllStacksFromItem(Item item) { + NonNullList list = NonNullList.create(); + list.add(item.getDefaultInstance()); + item.fillItemGroup(item.getGroup(), list); + TreeSet stackSet = list.stream().collect(Collectors.toCollection(() -> new TreeSet((p1, p2) -> ItemStack.areItemStacksEqual(p1, p2) ? 0 : 1))); + return Lists.newArrayList(stackSet).toArray(new ItemStack[0]); + } + + @Override + public void registerItemStack(Item afterItem, ItemStack stack) { + if (!stack.isEmpty() && !alreadyContain(stack)) + if (afterItem == null || afterItem.equals(Items.AIR)) + itemList.add(stack); + else { + int last = itemList.size(); + for(int i = 0; i < itemList.size(); i++) + if (itemList.get(i).getItem().equals(afterItem)) + last = i + 1; + itemList.add(last, stack); + } + } + +} diff --git a/src/main/java/me/shedaniel/rei/client/REIConfig.java b/src/main/java/me/shedaniel/rei/client/REIConfig.java index b5b798371..be4eabfeb 100644 --- a/src/main/java/me/shedaniel/rei/client/REIConfig.java +++ b/src/main/java/me/shedaniel/rei/client/REIConfig.java @@ -14,5 +14,6 @@ public class REIConfig { public String giveCommandPrefix = "/give"; public boolean checkUpdates = true; public boolean mirrorItemPanel = false; + public boolean loadDefaultPlugin = true; } diff --git a/src/main/java/me/shedaniel/rei/client/RecipeHelper.java b/src/main/java/me/shedaniel/rei/client/RecipeHelper.java index eec9f4bbc..79128d814 100644 --- a/src/main/java/me/shedaniel/rei/client/RecipeHelper.java +++ b/src/main/java/me/shedaniel/rei/client/RecipeHelper.java @@ -18,9 +18,9 @@ public class RecipeHelper { private final Map> recipeCategoryListMap = Maps.newHashMap(); private final List categories = Lists.newArrayList(); - private RecipeManager recipeManager; private final Map speedCraftAreaSupplierMap = Maps.newHashMap(); private final Map> speedCraftFunctionalMap = Maps.newHashMap(); + private RecipeManager recipeManager; public static RecipeHelper getInstance() { return RoughlyEnoughItemsCore.getRecipeHelper(); @@ -60,7 +60,7 @@ public class RecipeHelper { recipeCategoryListMap.put(category.getResourceLocation(), Lists.newLinkedList()); } - public void registerRecipe(ResourceLocation categoryIdentifier, IRecipeDisplay display) { + public void registerDisplay(ResourceLocation categoryIdentifier, IRecipeDisplay display) { if (!recipeCategoryListMap.containsKey(categoryIdentifier)) return; recipeCategoryListMap.get(categoryIdentifier).add(display); @@ -148,6 +148,7 @@ public class RecipeHelper { speedCraftFunctionalMap.put(category, list); } + @SuppressWarnings("deprecation") public void recipesLoaded(RecipeManager recipeManager) { this.recipeManager = recipeManager; this.recipeCategoryListMap.clear(); @@ -163,10 +164,19 @@ public class RecipeHelper { return resourceLocation == null ? "NULL" : resourceLocation; }).collect(Collectors.toList()))); Collections.reverse(plugins); + RoughlyEnoughItemsCore.getItemRegisterer().getModifiableItemList().clear(); + IPluginDisabler pluginDisabler = RoughlyEnoughItemsCore.getPluginDisabler(); plugins.forEach(plugin -> { - plugin.registerPluginCategories(); - plugin.registerRecipes(); - plugin.registerSpeedCraft(); + String location = RoughlyEnoughItemsPlugin.getPluginResourceLocation(plugin); + ResourceLocation resourceLocation = new ResourceLocation(location == null ? "null" : location); + if (pluginDisabler.isFunctionEnabled(resourceLocation, PluginFunction.REGISTER_ITEMS)) + plugin.registerItems(RoughlyEnoughItemsCore.getItemRegisterer()); + if (pluginDisabler.isFunctionEnabled(resourceLocation, PluginFunction.REGISTER_CATEGORIES)) + plugin.registerPluginCategories(this); + if (pluginDisabler.isFunctionEnabled(resourceLocation, PluginFunction.REGISTER_RECIPE_DISPLAYS)) + plugin.registerRecipeDisplays(this); + if (pluginDisabler.isFunctionEnabled(resourceLocation, PluginFunction.REGISTER_SPEED_CRAFT)) + plugin.registerSpeedCraft(this); }); RoughlyEnoughItemsCore.LOGGER.info("Registered REI Categories: " + String.join(", ", categories.stream().map(category -> { return category.getCategoryName(); diff --git a/src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java b/src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java index e1963ea12..19dd03c70 100644 --- a/src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java +++ b/src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java @@ -1,15 +1,15 @@ package me.shedaniel.rei.gui; import com.google.common.collect.Lists; -import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.client.ClientHelper; import me.shedaniel.rei.client.ConfigHelper; import me.shedaniel.rei.client.GuiHelper; import me.shedaniel.rei.client.KeyBindHelper; +import me.shedaniel.rei.gui.credits.CreditsGui; import me.shedaniel.rei.gui.widget.*; import net.minecraft.client.MainWindow; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.GuiEventHandler; import net.minecraft.client.gui.IGuiEventListener; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.GlStateManager; @@ -17,6 +17,7 @@ import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.resources.I18n; import net.minecraft.item.ItemStack; import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.TextComponentTranslation; import java.awt.*; import java.util.Collections; @@ -24,7 +25,7 @@ import java.util.LinkedList; import java.util.List; import java.util.stream.Collectors; -public class ContainerGuiOverlay extends GuiScreen { +public class ContainerGuiOverlay extends GuiEventHandler { private static final List QUEUED_TOOLTIPS = Lists.newArrayList(); public static String searchTerm = ""; @@ -46,7 +47,7 @@ public class ContainerGuiOverlay extends GuiScreen { widgets.add(this.itemListOverlay = new ItemListOverlay(page)); this.itemListOverlay.updateList(getItemListArea(), page, searchTerm); - widgets.add(buttonLeft = new ButtonWidget(rectangle.x, rectangle.y + 5, 16, 16, "<") { + widgets.add(buttonLeft = new ButtonWidget(rectangle.x, rectangle.y + 5, 16, 16, new TextComponentTranslation("text.rei.left_arrow")) { @Override public void onPressed(int button, double mouseX, double mouseY) { page--; @@ -55,7 +56,7 @@ public class ContainerGuiOverlay extends GuiScreen { itemListOverlay.updateList(getItemListArea(), page, searchTerm); } }); - widgets.add(buttonRight = new ButtonWidget(rectangle.x + rectangle.width - 18, rectangle.y + 5, 16, 16, ">") { + widgets.add(buttonRight = new ButtonWidget(rectangle.x + rectangle.width - 18, rectangle.y + 5, 16, 16, new TextComponentTranslation("text.rei.right_arrow")) { @Override public void onPressed(int button, double mouseX, double mouseY) { page++; @@ -83,7 +84,13 @@ public class ContainerGuiOverlay extends GuiScreen { ClientHelper.openConfigWindow(GuiHelper.getLastGuiContainer()); } }); - this.widgets.add(new LabelWidget(rectangle.x + (rectangle.width / 2), rectangle.y + 10, "") { + widgets.add(new ButtonWidget(ConfigHelper.getInstance().isMirrorItemPanel() ? window.getScaledWidth() - 50 : 10, window.getScaledHeight() - 30, 40, 20, I18n.format("text.rei.credits")) { + @Override + public void onPressed(int button, double mouseX, double mouseY) { + Minecraft.getInstance().displayGuiScreen(new CreditsGui(GuiHelper.getLastGuiContainer())); + } + }); + widgets.add(new LabelWidget(rectangle.x + (rectangle.width / 2), rectangle.y + 10, "") { @Override public void draw(int mouseX, int mouseY, float partialTicks) { page = MathHelper.clamp(page, 0, getTotalPage()); @@ -104,7 +111,7 @@ public class ContainerGuiOverlay extends GuiScreen { }; GuiHelper.searchField.setChangedListener(s -> { searchTerm = s; - itemListOverlay.updateList(page, searchTerm); + itemListOverlay.updateList(getItemListArea(), page, searchTerm); }); GuiHelper.searchField.setBounds(getTextFieldArea()); this.widgets.add(GuiHelper.searchField); @@ -114,12 +121,11 @@ public class ContainerGuiOverlay extends GuiScreen { @Override public void onPressed(int button, double mouseX, double mouseY) { ConfigHelper.getInstance().toggleCraftableOnly(); - itemListOverlay.updateList(page, searchTerm); + itemListOverlay.updateList(getItemListArea(), page, searchTerm); } }); this.itemListOverlay.updateList(getItemListArea(), page, searchTerm); - this.children.addAll(widgets); } private Rectangle getTextFieldArea() { @@ -130,7 +136,7 @@ public class ContainerGuiOverlay extends GuiScreen { RecipeViewingWidgetGui widget = (RecipeViewingWidgetGui) Minecraft.getInstance().currentScreen; return new Rectangle(widget.getBounds().x, window.getScaledHeight() - 22, widget.getBounds().width - widthRemoved, 18); } - return new Rectangle(GuiHelper.getLastMixinGuiContainer().getContainerLeft(), window.getScaledHeight() - 22, GuiHelper.getLastMixinGuiContainer().getContainerWidth() - widthRemoved, 18); + return new Rectangle(GuiHelper.getLastMixinGuiContainer().rei_getContainerLeft(), window.getScaledHeight() - 22, GuiHelper.getLastMixinGuiContainer().rei_etContainerWidth() - widthRemoved, 18); } private Rectangle getCraftableToggleArea() { @@ -158,7 +164,7 @@ public class ContainerGuiOverlay extends GuiScreen { onInitialized(); else if (ConfigHelper.getInstance().craftableOnly() && (!hasSameListContent(new LinkedList<>(GuiHelper.inventoryStacks), currentStacks) || (currentStacks.size() != GuiHelper.inventoryStacks.size()))) { GuiHelper.inventoryStacks = ClientHelper.getInventoryItemsTypes(); - itemListOverlay.updateList(page, searchTerm); + itemListOverlay.updateList(getItemListArea(), page, searchTerm); } GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F); RenderHelper.disableStandardItemLighting(); @@ -188,7 +194,6 @@ public class ContainerGuiOverlay extends GuiScreen { QUEUED_TOOLTIPS.add(queuedTooltip); } - @Override public void render(int int_1, int int_2, float float_1) { if (!GuiHelper.isOverlayVisible()) return; @@ -197,14 +202,11 @@ public class ContainerGuiOverlay extends GuiScreen { widget.draw(int_1, int_2, float_1); }); RenderHelper.disableStandardItemLighting(); - itemListOverlay.draw(int_1, int_2, float_1); - RenderHelper.disableStandardItemLighting(); - super.render(int_1, int_2, float_1); } private Rectangle calculateBoundary() { if (!ConfigHelper.getInstance().isMirrorItemPanel()) { - int startX = GuiHelper.getLastMixinGuiContainer().getContainerLeft() + GuiHelper.getLastMixinGuiContainer().getContainerWidth() + 10; + int startX = GuiHelper.getLastMixinGuiContainer().rei_getContainerLeft() + GuiHelper.getLastMixinGuiContainer().rei_etContainerWidth() + 10; int width = window.getScaledWidth() - startX; if (Minecraft.getInstance().currentScreen instanceof RecipeViewingWidgetGui) { RecipeViewingWidgetGui widget = (RecipeViewingWidgetGui) Minecraft.getInstance().currentScreen; @@ -213,12 +215,7 @@ public class ContainerGuiOverlay extends GuiScreen { } return new Rectangle(startX, 0, width, window.getScaledHeight()); } - int width = GuiHelper.getLastMixinGuiContainer().getContainerLeft() - 6; - if (Minecraft.getInstance().currentScreen instanceof RecipeViewingWidgetGui) { - RecipeViewingWidgetGui widget = (RecipeViewingWidgetGui) Minecraft.getInstance().currentScreen; - width = widget.getBounds().x - 6; - } - return new Rectangle(4, 0, width, window.getScaledHeight()); + return new Rectangle(4, 0, getLeft() - 6, window.getScaledHeight()); } private int getLeft() { @@ -226,7 +223,9 @@ public class ContainerGuiOverlay extends GuiScreen { RecipeViewingWidgetGui widget = (RecipeViewingWidgetGui) Minecraft.getInstance().currentScreen; return widget.getBounds().x; } - return GuiHelper.getLastMixinGuiContainer().getContainerLeft(); + if (Minecraft.getInstance().player.getRecipeBook().isGuiOpen()) + return GuiHelper.getLastMixinGuiContainer().rei_getContainerLeft() - 147 - 30; + return GuiHelper.getLastMixinGuiContainer().rei_getContainerLeft(); } private int getTotalPage() { @@ -254,15 +253,15 @@ public class ContainerGuiOverlay extends GuiScreen { @Override public boolean keyPressed(int int_1, int int_2, int int_3) { + for(IGuiEventListener listener : widgets) + if (listener.keyPressed(int_1, int_2, int_3)) + return true; if (KeyBindHelper.HIDE.matchesKey(int_1, int_2)) { GuiHelper.toggleOverlayVisible(); return true; } if (!GuiHelper.isOverlayVisible()) return false; - for(IGuiEventListener listener : children) - if (listener.keyPressed(int_1, int_2, int_3)) - return true; Point point = ClientHelper.getMouseLocation(); ItemStack itemStack = null; for(IWidget widget : itemListOverlay.getListeners()) @@ -279,8 +278,8 @@ public class ContainerGuiOverlay extends GuiScreen { } } if (itemStack == null && Minecraft.getInstance().currentScreen instanceof GuiContainer) - if (GuiHelper.getLastMixinGuiContainer().getHoveredSlot() != null) - itemStack = GuiHelper.getLastMixinGuiContainer().getHoveredSlot().getStack(); + if (GuiHelper.getLastMixinGuiContainer().rei_getHoveredSlot() != null) + itemStack = GuiHelper.getLastMixinGuiContainer().rei_getHoveredSlot().getStack(); if (itemStack != null && !itemStack.isEmpty()) { if (KeyBindHelper.RECIPE.matchesKey(int_1, int_2)) return ClientHelper.executeRecipeKeyBind(this, itemStack); @@ -294,12 +293,17 @@ public class ContainerGuiOverlay extends GuiScreen { public boolean charTyped(char char_1, int int_1) { if (!GuiHelper.isOverlayVisible()) return false; - for(IGuiEventListener listener : children) + for(IGuiEventListener listener : widgets) if (listener.charTyped(char_1, int_1)) return true; return super.charTyped(char_1, int_1); } + @Override + protected List getChildren() { + return widgets; + } + @Override public boolean mouseClicked(double double_1, double double_2, int int_1) { if (!GuiHelper.isOverlayVisible()) diff --git a/src/main/java/me/shedaniel/rei/gui/config/ConfigEntry.java b/src/main/java/me/shedaniel/rei/gui/config/ConfigEntry.java new file mode 100644 index 000000000..5637f2575 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/gui/config/ConfigEntry.java @@ -0,0 +1,77 @@ +package me.shedaniel.rei.gui.config; + +import me.shedaniel.rei.client.ClientHelper; +import me.shedaniel.rei.gui.widget.ButtonWidget; +import net.minecraft.client.MainWindow; +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.SimpleSound; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.GuiListExtended; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.text.ITextComponent; + +import java.awt.*; + + +public class ConfigEntry extends GuiListExtended.IGuiListEntry { + + private static final FontRenderer FONT_RENDERER = Minecraft.getInstance().fontRenderer; + private ITextComponent nameComponent; + private ConfigEntryButtonProvider buttonProvider; + private ButtonWidget buttonWidget; + + public ConfigEntry(ITextComponent nameComponent, ConfigEntryButtonProvider buttonProvider) { + this.nameComponent = nameComponent; + this.buttonProvider = buttonProvider; + this.buttonWidget = new ButtonWidget(0, 0, 150, 20, "") { + @Override + public boolean onMouseClick(int button, double mouseX, double mouseY) { + if (getBounds().contains(mouseX, mouseY) && enabled) + if (buttonProvider.onPressed(button, mouseX, mouseY)) { + Minecraft.getInstance().getSoundHandler().play(SimpleSound.master(SoundEvents.UI_BUTTON_CLICK, 1.0F)); + return true; + } + return false; + } + + @Override + public void onPressed(int button, double mouseX, double mouseY) {} + }; + } + + @Override + public void drawEntry(int entryWidth, int height, int i3, int i4, boolean isSelected, float delta) { + MainWindow window = Minecraft.getInstance().mainWindow; + Point mouse = ClientHelper.getMouseLocation(); + if (Minecraft.getInstance().fontRenderer.getBidiFlag()) { + Minecraft.getInstance().fontRenderer.drawStringWithShadow(nameComponent.getFormattedText(), window.getScaledWidth() - FONT_RENDERER.getStringWidth(nameComponent.getFormattedText()) - 40, getY() + 5, 16777215); + this.buttonWidget.text = buttonProvider.getText(); + this.buttonWidget.getBounds().setLocation(getX(), getY() + 2); + } else { + Minecraft.getInstance().fontRenderer.drawStringWithShadow(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 boolean onPressed(int button, double mouseX, double mouseY); + + public String getText(); + + default public void draw(ButtonWidget button, Point mouse, float delta) { + button.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 new file mode 100644 index 000000000..ef6d1cef1 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/gui/config/ConfigEntryListWidget.java @@ -0,0 +1,35 @@ +package me.shedaniel.rei.gui.config; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiListExtended; + +public class ConfigEntryListWidget extends GuiListExtended { + + public ConfigEntryListWidget(Minecraft client, int width, int height, int startY, int endY, int entryHeight) { + super(client, width, height, startY, endY, entryHeight); + setShowSelectionBox(false); //toggleShowSelection + } + + public void configClearEntries() { + clearEntries(); + } + + private ConfigEntry getEntry(int int_1) { + return this.getChildren().get(int_1); + } + + public void configAddEntry(ConfigEntry entry) { + addEntry(entry); + } + + @Override + public int getListWidth() { + return width - 80; + } + + @Override + protected int getScrollBarX() { + return width - 40; + } + +} diff --git a/src/main/java/me/shedaniel/rei/gui/config/ConfigGui.java b/src/main/java/me/shedaniel/rei/gui/config/ConfigGui.java new file mode 100644 index 000000000..2511b0c21 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/gui/config/ConfigGui.java @@ -0,0 +1,207 @@ +package me.shedaniel.rei.gui.config; + +import me.shedaniel.rei.client.ConfigHelper; +import me.shedaniel.rei.client.GuiHelper; +import me.shedaniel.rei.client.REIItemListOrdering; +import me.shedaniel.rei.gui.widget.ButtonWidget; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.IGuiEventListener; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.resources.I18n; +import net.minecraft.util.text.TextComponentTranslation; + +import java.awt.*; +import java.io.IOException; +import java.util.Arrays; + +public class ConfigGui extends GuiScreen { + + private GuiScreen parent; + private ConfigEntryListWidget entryListWidget; + + public ConfigGui(GuiScreen parent) { + this.parent = parent; + } + + @Override + public boolean keyPressed(int int_1, int int_2, int int_3) { + if (int_1 == 256 && this.allowCloseWithEscape()) { + Minecraft.getInstance().displayGuiScreen(parent); + GuiHelper.getLastOverlay().onInitialized(); + return true; + } else { + return super.keyPressed(int_1, int_2, int_3); + } + } + + @Override + protected void initGui() { + children.add(entryListWidget = new ConfigEntryListWidget(mc, width, height, 32, height - 32, 24)); + entryListWidget.configClearEntries(); + entryListWidget.configAddEntry(new ConfigEntry(new TextComponentTranslation("text.rei.side_searchbox"), new ConfigEntry.ConfigEntryButtonProvider() { + @Override + public boolean onPressed(int button, double mouseX, double mouseY) { + if (button == 0) + ConfigHelper.getInstance().setSideSearchField(!ConfigHelper.getInstance().sideSearchField()); + try { + ConfigHelper.getInstance().saveConfig(); + } catch (IOException e) { + e.printStackTrace(); + return false; + } + return true; + } + + @Override + public String getText() { + return getTrueFalseText(ConfigHelper.getInstance().sideSearchField()); + } + })); + entryListWidget.configAddEntry(new ConfigEntry(new TextComponentTranslation("text.rei.enable_craftable_only"), new ConfigEntry.ConfigEntryButtonProvider() { + @Override + public boolean onPressed(int button, double mouseX, double mouseY) { + if (button == 0) + ConfigHelper.getInstance().setShowCraftableOnlyButton(!ConfigHelper.getInstance().showCraftableOnlyButton()); + try { + ConfigHelper.getInstance().saveConfig(); + } catch (IOException e) { + e.printStackTrace(); + return false; + } + return true; + } + + @Override + public String getText() { + return getTrueFalseText(ConfigHelper.getInstance().showCraftableOnlyButton()); + } + })); + entryListWidget.configAddEntry(new ConfigEntry(new TextComponentTranslation("text.rei.list_ordering"), new ConfigEntry.ConfigEntryButtonProvider() { + @Override + public boolean onPressed(int button, double mouseX, double mouseY) { + int index = Arrays.asList(REIItemListOrdering.values()).indexOf(ConfigHelper.getInstance().getItemListOrdering()) + 1; + if (index >= REIItemListOrdering.values().length) { + index = 0; + ConfigHelper.getInstance().setAscending(!ConfigHelper.getInstance().isAscending()); + } + ConfigHelper.getInstance().setItemListOrdering(REIItemListOrdering.values()[index]); + try { + ConfigHelper.getInstance().saveConfig(); + } catch (IOException e) { + e.printStackTrace(); + return false; + } + return true; + } + + @Override + public String getText() { + return I18n.format("text.rei.list_ordering_button", I18n.format(ConfigHelper.getInstance().getItemListOrdering().getNameTranslationKey()), I18n.format(ConfigHelper.getInstance().isAscending() ? "ordering.rei.ascending" : "ordering.rei.descending")); + } + })); + entryListWidget.configAddEntry(new ConfigEntry(new TextComponentTranslation("text.rei.mirror_rei"), new ConfigEntry.ConfigEntryButtonProvider() { + @Override + public boolean onPressed(int button, double mouseX, double mouseY) { + if (button == 0) + ConfigHelper.getInstance().setMirrorItemPanel(!ConfigHelper.getInstance().isMirrorItemPanel()); + try { + ConfigHelper.getInstance().saveConfig(); + } catch (IOException e) { + e.printStackTrace(); + return false; + } + return true; + } + + @Override + public String getText() { + return getTrueFalseText(ConfigHelper.getInstance().isMirrorItemPanel()); + } + })); + entryListWidget.configAddEntry(new ConfigEntry(new TextComponentTranslation("text.rei.check_updates"), new ConfigEntry.ConfigEntryButtonProvider() { + @Override + public boolean onPressed(int button, double mouseX, double mouseY) { + if (button == 0) + ConfigHelper.getInstance().setCheckUpdates(!ConfigHelper.getInstance().checkUpdates()); + try { + ConfigHelper.getInstance().saveConfig(); + } catch (IOException e) { + e.printStackTrace(); + return false; + } + return true; + } + + @Override + public String getText() { + return getTrueFalseText(ConfigHelper.getInstance().checkUpdates()); + } + })); + entryListWidget.configAddEntry(new ConfigEntry(new TextComponentTranslation("text.rei.load_default_plugin"), new ConfigEntry.ConfigEntryButtonProvider() { + @Override + public boolean onPressed(int button, double mouseX, double mouseY) { + if (button == 0) + ConfigHelper.getInstance().setLoadingDefaultPlugin(!ConfigHelper.getInstance().isLoadingDefaultPlugin()); + try { + ConfigHelper.getInstance().saveConfig(); + } catch (IOException e) { + e.printStackTrace(); + return false; + } + return true; + } + + @Override + public String getText() { + return getTrueFalseText(ConfigHelper.getInstance().isLoadingDefaultPlugin()); + } + + @Override + public void draw(ButtonWidget button, Point mouse, float delta) { + button.draw(mouse.x, mouse.y, delta); + if (button.getBounds().contains(mouse)) { + RenderHelper.disableStandardItemLighting(); + drawHoveringText(Arrays.asList(I18n.format("text.rei.load_default_plugin.restart_tooltip").split("\n")), mouse.x, mouse.y); + RenderHelper.disableStandardItemLighting(); + } + } + })); + addButton(new net.minecraft.client.gui.GuiButton(0, width / 2 - 100, height - 26, I18n.format("gui.done")) { + @Override + public void onClick(double double_1, double double_2) { + try { + ConfigHelper.getInstance().saveConfig(); + } catch (IOException e) { + e.printStackTrace(); + } + ConfigGui.this.mc.displayGuiScreen(parent); + GuiHelper.getLastOverlay().onInitialized(); + } + }); + super.initGui(); + } + + private String getTrueFalseText(boolean showCraftableOnlyButton) { + return String.format("%s%b", showCraftableOnlyButton ? "§a" : "§c", showCraftableOnlyButton); + } + + @Override + public void render(int int_1, int int_2, float float_1) { + this.drawBackground(0); + this.entryListWidget.drawScreen(int_1, int_2, float_1); + this.drawCenteredString(this.fontRenderer, I18n.format("text.rei.config"), this.width / 2, 16, 16777215); + super.render(int_1, int_2, float_1); + } + + @Override + public boolean doesGuiPauseGame() { + return false; + } + + @Override + public IGuiEventListener getFocused() { + return entryListWidget; + } + +} \ No newline at end of file diff --git a/src/main/java/me/shedaniel/rei/gui/credits/CreditsEntry.java b/src/main/java/me/shedaniel/rei/gui/credits/CreditsEntry.java new file mode 100644 index 000000000..32896a9f8 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/gui/credits/CreditsEntry.java @@ -0,0 +1,22 @@ +package me.shedaniel.rei.gui.credits; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiListExtended; +import net.minecraft.util.text.ITextComponent; + +public class CreditsEntry extends GuiListExtended.IGuiListEntry { + + private ITextComponent textComponent; + + public CreditsEntry(ITextComponent textComponent) { + this.textComponent = textComponent; + } + + @Override + public void drawEntry(int entryWidth, int height, int i3, int i4, boolean isSelected, float delta) { + int x = getX(); + int y = getY(); + Minecraft.getInstance().fontRenderer.drawStringWithShadow(textComponent.getFormattedText(), x + 5, y + 5, -1); + } + +} diff --git a/src/main/java/me/shedaniel/rei/gui/credits/CreditsEntryListWidget.java b/src/main/java/me/shedaniel/rei/gui/credits/CreditsEntryListWidget.java new file mode 100644 index 000000000..bfc13e331 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/gui/credits/CreditsEntryListWidget.java @@ -0,0 +1,35 @@ +package me.shedaniel.rei.gui.credits; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiListExtended; + +public class CreditsEntryListWidget extends GuiListExtended { + + public CreditsEntryListWidget(Minecraft client, int width, int height, int startY, int endY, int entryHeight) { + super(client, width, height, startY, endY, entryHeight); + setShowSelectionBox(false); //toggleShowSelection + } + + public void creditsClearEntries() { + clearEntries(); + } + + private CreditsEntry getEntry(int int_1) { + return this.getChildren().get(int_1); + } + + public void creditsAddEntry(CreditsEntry entry) { + addEntry(entry); + } + + @Override + public int getListWidth() { + return width - 80; + } + + @Override + protected int getScrollBarX() { + return width - 40; + } + +} diff --git a/src/main/java/me/shedaniel/rei/gui/credits/CreditsGui.java b/src/main/java/me/shedaniel/rei/gui/credits/CreditsGui.java new file mode 100644 index 000000000..be9652dc4 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/gui/credits/CreditsGui.java @@ -0,0 +1,64 @@ +package me.shedaniel.rei.gui.credits; + +import me.shedaniel.rei.client.GuiHelper; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.IGuiEventListener; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.resources.I18n; +import net.minecraft.util.text.TextComponentString; + +public class CreditsGui extends GuiScreen { + + private GuiContainer parent; + private CreditsEntryListWidget entryListWidget; + + public CreditsGui(GuiContainer parent) { + this.parent = parent; + } + + @Override + public boolean keyPressed(int int_1, int int_2, int int_3) { + if (int_1 == 256 && this.allowCloseWithEscape()) { + this.mc.displayGuiScreen(parent); + GuiHelper.getLastOverlay().onInitialized(); + return true; + } + return super.keyPressed(int_1, int_2, int_3); + } + + @Override + protected void initGui() { + children.add(entryListWidget = new CreditsEntryListWidget(mc, width, height, 32, height - 32, 12)); + entryListWidget.creditsClearEntries(); + for(String line : I18n.format("text.rei.credit.text").split("\n")) + entryListWidget.creditsAddEntry(new CreditsEntry(new TextComponentString(line))); + entryListWidget.creditsAddEntry(new CreditsEntry(new TextComponentString(""))); + addButton(new GuiButton(0, width / 2 - 100, height - 26, I18n.format("gui.done")) { + @Override + public void onClick(double double_1, double double_2) { + CreditsGui.this.mc.displayGuiScreen(parent); + GuiHelper.getLastOverlay().onInitialized(); + } + }); + } + + @Override + public void render(int int_1, int int_2, float float_1) { + this.drawBackground(0); + this.entryListWidget.drawScreen(int_1, int_2, float_1); + this.drawCenteredString(this.fontRenderer, I18n.format("text.rei.credits"), this.width / 2, 16, 16777215); + super.render(int_1, int_2, float_1); + } + + @Override + public boolean doesGuiPauseGame() { + return false; + } + + @Override + public IGuiEventListener getFocused() { + return entryListWidget; + } + +} diff --git a/src/main/java/me/shedaniel/rei/gui/widget/ButtonWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/ButtonWidget.java index 99e36f0c9..d8443c8ad 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/ButtonWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/ButtonWidget.java @@ -8,6 +8,7 @@ import net.minecraft.client.renderer.GlStateManager; import net.minecraft.init.SoundEvents; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.ITextComponent; import java.awt.*; import java.util.ArrayList; @@ -16,32 +17,30 @@ import java.util.List; public abstract class ButtonWidget extends Gui implements IWidget { protected static final ResourceLocation WIDGET_TEX = new ResourceLocation("textures/gui/widgets.png"); - public int x; - public int y; public String text; public boolean enabled; public boolean visible; - protected int width; - protected int height; protected boolean hovered; private boolean pressed; private Rectangle bounds; - public ButtonWidget(Rectangle rectangle, String text) { - this(rectangle.x, rectangle.y, rectangle.width, rectangle.height, text); + public ButtonWidget(Rectangle rectangle, ITextComponent text) { + this(rectangle, text.getFormattedText()); } - public ButtonWidget(int x, int y, int width, int height, String text) { - this.width = 200; - this.height = 20; + public ButtonWidget(Rectangle rectangle, String text) { + this.bounds = rectangle; this.enabled = true; this.visible = true; - this.x = x; - this.y = y; - this.width = width; - this.height = height; this.text = text; - this.bounds = new Rectangle(x, this.y, this.width, this.height); + } + + public ButtonWidget(int x, int y, int width, int height, String text) { + this(new Rectangle(x, y, width, height), text); + } + + public ButtonWidget(int x, int y, int width, int height, ITextComponent text) { + this(new Rectangle(x, y, width, height), text); } public Rectangle getBounds() { @@ -66,8 +65,8 @@ public abstract class ButtonWidget extends Gui implements IWidget { @Override public void draw(int mouseX, int mouseY, float partialTicks) { - if (this.visible) { + int x = bounds.x, y = bounds.y, width = bounds.width, height = bounds.height; Minecraft minecraftClient_1 = Minecraft.getInstance(); FontRenderer fontRenderer_1 = minecraftClient_1.fontRenderer; minecraftClient_1.getTextureManager().bindTexture(WIDGET_TEX); @@ -78,18 +77,18 @@ public abstract class ButtonWidget extends Gui implements IWidget { GlStateManager.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); //Four Corners - this.drawTexturedModalRect(this.x, this.y, 0, 46 + textureOffset * 20, 4, 4); - this.drawTexturedModalRect(this.x + this.width - 4, this.y, 196, 46 + textureOffset * 20, 4, 4); - this.drawTexturedModalRect(this.x, this.y + this.height - 4, 0, 62 + textureOffset * 20, 4, 4); - this.drawTexturedModalRect(this.x + this.width - 4, this.y + this.height - 4, 196, 62 + textureOffset * 20, 4, 4); + this.drawTexturedModalRect(x, y, 0, 46 + textureOffset * 20, 4, 4); + this.drawTexturedModalRect(x + width - 4, y, 196, 46 + textureOffset * 20, 4, 4); + this.drawTexturedModalRect(x, y + height - 4, 0, 62 + textureOffset * 20, 4, 4); + this.drawTexturedModalRect(x + width - 4, y + height - 4, 196, 62 + textureOffset * 20, 4, 4); //Sides - this.drawTexturedModalRect(this.x + 4, this.y, 4, 46 + textureOffset * 20, this.width - 8, 4); - this.drawTexturedModalRect(this.x + 4, this.y + this.height - 4, 4, 62 + textureOffset * 20, this.width - 8, 4); + this.drawTexturedModalRect(x + 4, y, 4, 46 + textureOffset * 20, width - 8, 4); + this.drawTexturedModalRect(x + 4, y + height - 4, 4, 62 + textureOffset * 20, width - 8, 4); - for(int i = this.y + 4; i < this.y + this.height - 4; i += 4) { - this.drawTexturedModalRect(this.x, i, 0, 50 + textureOffset * 20, this.width / 2, MathHelper.clamp(this.y + this.height - 4 - i, 0, 4)); - this.drawTexturedModalRect(this.x + this.width / 2, i, 200 - this.width / 2, 50 + textureOffset * 20, this.width / 2, MathHelper.clamp(this.y + this.height - 4 - i, 0, 4)); + for(int i = y + 4; i < y + height - 4; i += 4) { + this.drawTexturedModalRect(x, i, 0, 50 + textureOffset * 20, width / 2, MathHelper.clamp(y + height - 4 - i, 0, 4)); + this.drawTexturedModalRect(x + width / 2, i, 200 - width / 2, 50 + textureOffset * 20, width / 2, MathHelper.clamp(y + height - 4 - i, 0, 4)); } int colour = 14737632; @@ -99,7 +98,7 @@ public abstract class ButtonWidget extends Gui implements IWidget { colour = 16777120; } - this.drawCenteredString(fontRenderer_1, this.text, this.x + this.width / 2, this.y + (this.height - 8) / 2, colour); + this.drawCenteredString(fontRenderer_1, this.text, x + width / 2, y + (height - 8) / 2, colour); } } diff --git a/src/main/java/me/shedaniel/rei/gui/widget/ConfigWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/ConfigWidget.java deleted file mode 100644 index 9519a949a..000000000 --- a/src/main/java/me/shedaniel/rei/gui/widget/ConfigWidget.java +++ /dev/null @@ -1,177 +0,0 @@ -package me.shedaniel.rei.gui.widget; - -import com.google.common.collect.Lists; -import me.shedaniel.rei.client.ConfigHelper; -import me.shedaniel.rei.client.REIItemListOrdering; -import net.minecraft.client.MainWindow; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.gui.IGuiEventListener; -import net.minecraft.client.renderer.RenderHelper; -import net.minecraft.client.resources.I18n; - -import java.io.IOException; -import java.util.Arrays; -import java.util.List; - -public class ConfigWidget extends GuiScreen { - - private List widgets; - private GuiScreen parent; - - public ConfigWidget(GuiScreen parent) { - this.parent = parent; - this.widgets = Lists.newArrayList(); - } - - @Override - public boolean keyPressed(int int_1, int int_2, int int_3) { - if (int_1 == 256 && this.allowCloseWithEscape()) { - Minecraft.getInstance().displayGuiScreen(parent); - return true; - } else { - return super.keyPressed(int_1, int_2, int_3); - } - } - - @Override - protected void initGui() { - super.initGui(); - widgets.clear(); - MainWindow window = Minecraft.getInstance().mainWindow; - widgets.add(new ButtonWidget(window.getScaledWidth() / 2 - 20, 30, 40, 20, "") { - @Override - public void onPressed(int button, double mouseX, double mouseY) { - if (button == 0) - ConfigHelper.getInstance().setSideSearchField(!ConfigHelper.getInstance().sideSearchField()); - try { - ConfigHelper.getInstance().saveConfig(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Override - public void draw(int mouseX,