diff options
| author | Unknown <shekwancheung0528@gmail.com> | 2018-12-30 20:10:36 +0800 |
|---|---|---|
| committer | Unknown <shekwancheung0528@gmail.com> | 2018-12-30 20:10:36 +0800 |
| commit | 3e1f4333a51513b440b32adfe9b698590fbf76f5 (patch) | |
| tree | cf337b4e12df85cd30d25721bab6c1ba1f4591f8 /src/main | |
| parent | 814e2e94ad643f04576ab0569c4b94f96b275f51 (diff) | |
| download | RoughlyEnoughItems-3e1f4333a51513b440b32adfe9b698590fbf76f5.tar.gz RoughlyEnoughItems-3e1f4333a51513b440b32adfe9b698590fbf76f5.tar.bz2 RoughlyEnoughItems-3e1f4333a51513b440b32adfe9b698590fbf76f5.zip | |
Better stuff
Diffstat (limited to 'src/main')
35 files changed, 954 insertions, 231 deletions
diff --git a/src/main/java/me/shedaniel/ClientListener.java b/src/main/java/me/shedaniel/ClientListener.java index 9d52addd5..d6c4017c7 100755 --- a/src/main/java/me/shedaniel/ClientListener.java +++ b/src/main/java/me/shedaniel/ClientListener.java @@ -1,12 +1,14 @@ package me.shedaniel; -import me.shedaniel.api.IAEIPlugin; -import me.shedaniel.gui.AEIRenderHelper; -import me.shedaniel.impl.AEIRecipeManager; +import me.shedaniel.api.IREIPlugin; +import me.shedaniel.gui.REIRenderHelper; +import me.shedaniel.impl.REIRecipeManager; import me.shedaniel.library.KeyBindManager; import me.shedaniel.listenerdefinitions.DoneLoading; import me.shedaniel.listenerdefinitions.RecipeLoadListener; import net.minecraft.client.settings.KeyBinding; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; @@ -16,34 +18,43 @@ import net.minecraft.util.registry.IRegistry; import java.awt.event.KeyEvent; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; public class ClientListener implements DoneLoading, RecipeLoadListener { public static KeyBinding recipeKeybind; public static KeyBinding hideKeybind; public static KeyBinding useKeybind; - private List<IAEIPlugin> plugins; + private List<IREIPlugin> plugins; public static List<ItemStack> stackList; @Override public void onDoneLoading() { - plugins = new ArrayList<>(); stackList = new ArrayList<>(); - recipeKeybind = KeyBindManager.createKeybinding("key.aei.recipe", KeyEvent.VK_R, "key.aei.category", AEIRenderHelper::recipeKeybind); - hideKeybind = KeyBindManager.createKeybinding("key.aei.hide", KeyEvent.VK_O, "key.aei.category", AEIRenderHelper::hideKeybind); - useKeybind = KeyBindManager.createKeybinding("key.aei.use", KeyEvent.VK_U, "key.aei.category", AEIRenderHelper::useKeybind); + recipeKeybind = KeyBindManager.createKeybinding("key.rei.recipe", KeyEvent.VK_R, "key.rei.category", REIRenderHelper::recipeKeybind); + hideKeybind = KeyBindManager.createKeybinding("key.rei.hide", KeyEvent.VK_O, "key.rei.category", REIRenderHelper::hideKeybind); + useKeybind = KeyBindManager.createKeybinding("key.rei.use", KeyEvent.VK_U, "key.rei.category", REIRenderHelper::useKeybind); buildItemList(); } private void buildItemList() { - if (!IRegistry.ITEM.isEmpty()) { - IRegistry.ITEM.forEach(item -> processItem((Item) item)); - } - + if (!IRegistry.ITEM.isEmpty()) + IRegistry.ITEM.forEach(this::processItem); + if (!IRegistry.ENCHANTMENT.isEmpty()) + IRegistry.ENCHANTMENT.forEach(enchantment -> { + for(int i = enchantment.getMinLevel(); i < enchantment.getMaxLevel(); i++) { + ItemStack stack = new ItemStack(Items.ENCHANTED_BOOK); + Map<Enchantment, Integer> map = new HashMap<>(); + map.put(enchantment, i); + EnchantmentHelper.setEnchantments(map, stack); + processItemStack(stack); + } + }); } private void processItem(Item item) { @@ -52,15 +63,19 @@ public class ClientListener implements DoneLoading, RecipeLoadListener { item.fillItemGroup(item.getGroup(), items); items.forEach(stackList::add); } catch (NullPointerException e) { - if (item == Items.ENCHANTED_BOOK) { - item.fillItemGroup(ItemGroup.TOOLS, items); - items.forEach(stackList::add); - } +// if (item == Items.ENCHANTED_BOOK) { +// item.fillItemGroup(ItemGroup.TOOLS, items); +// items.forEach(stackList::add); +// } } } + private void processItemStack(ItemStack item) { + stackList.add(item); + } + @Override public void recipesLoaded(net.minecraft.item.crafting.RecipeManager recipeManager) { - AEIRecipeManager.instance().RecipesLoaded(recipeManager); + REIRecipeManager.instance().RecipesLoaded(recipeManager); } } diff --git a/src/main/java/me/shedaniel/api/IDisplayCategory.java b/src/main/java/me/shedaniel/api/IDisplayCategory.java index f5cb02a4d..7e41920bd 100755 --- a/src/main/java/me/shedaniel/api/IDisplayCategory.java +++ b/src/main/java/me/shedaniel/api/IDisplayCategory.java @@ -1,7 +1,9 @@ package me.shedaniel.api; -import me.shedaniel.gui.widget.AEISlot; import me.shedaniel.gui.widget.Control; +import me.shedaniel.gui.widget.REISlot; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import java.util.List; @@ -17,11 +19,13 @@ public interface IDisplayCategory<T extends IRecipe> { public void resetRecipes(); - public List<AEISlot> setupDisplay(int number); + public List<REISlot> setupDisplay(int number); public boolean canDisplay(T recipe); public void drawExtras(); public void addWidget(List<Control> controls, int number); + + public ItemStack getCategoryIcon(); } diff --git a/src/main/java/me/shedaniel/api/IAEIPlugin.java b/src/main/java/me/shedaniel/api/IREIPlugin.java index 9f5b5da6e..98060163d 100755 --- a/src/main/java/me/shedaniel/api/IAEIPlugin.java +++ b/src/main/java/me/shedaniel/api/IREIPlugin.java @@ -3,7 +3,7 @@ package me.shedaniel.api; /** * Created by James on 7/27/2018. */ -public interface IAEIPlugin { +public interface IREIPlugin { public void register(); } diff --git a/src/main/java/me/shedaniel/gui/Drawable.java b/src/main/java/me/shedaniel/gui/Drawable.java index 8fffc17af..76d49e049 100755 --- a/src/main/java/me/shedaniel/gui/Drawable.java +++ b/src/main/java/me/shedaniel/gui/Drawable.java @@ -22,10 +22,10 @@ public abstract class Drawable implements IDrawable { public abstract void draw(); public boolean isHighlighted() { - Point mousePoint = AEIRenderHelper.getMouseLoc(); + Point mousePoint = REIRenderHelper.getMouseLoc(); if (rect.contains(mousePoint.x, mousePoint.y)) { if (this instanceof Control) - AEIRenderHelper.aeiGui.setLastHovered((Control) this); + REIRenderHelper.reiGui.setLastHovered((Control) this); return true; } return false; diff --git a/src/main/java/me/shedaniel/gui/GuiItemList.java b/src/main/java/me/shedaniel/gui/GuiItemList.java index 80666f2cb..f23ab9f85 100755 --- a/src/main/java/me/shedaniel/gui/GuiItemList.java +++ b/src/main/java/me/shedaniel/gui/GuiItemList.java @@ -1,9 +1,9 @@ package me.shedaniel.gui; import me.shedaniel.ClientListener; -import me.shedaniel.gui.widget.AEISlot; import me.shedaniel.gui.widget.Button; import me.shedaniel.gui.widget.Control; +import me.shedaniel.gui.widget.REISlot; import me.shedaniel.gui.widget.TextBox; import me.shedaniel.listenerdefinitions.IMixinGuiContainer; import net.minecraft.client.MainWindow; @@ -19,13 +19,17 @@ import net.minecraft.util.text.TextComponentTranslation; import java.awt.*; import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; public class GuiItemList extends Drawable { public static final int FOOTERSIZE = 44; private GuiContainer overlayedGui; private static int page = 0; - private ArrayList<AEISlot> displaySlots; + private ArrayList<REISlot> displaySlots; protected ArrayList<Control> controls; private boolean needsResize = false; Button buttonLeft; @@ -60,14 +64,14 @@ public class GuiItemList extends Drawable { } private static Rectangle calculateRect(GuiContainer overlayedGui) { - MainWindow res = AEIRenderHelper.getResolution(); + MainWindow res = REIRenderHelper.getResolution(); int startX = (((IMixinGuiContainer) overlayedGui).getGuiLeft() + ((IMixinGuiContainer) overlayedGui).getXSize()) + 10; int width = res.getScaledWidth() - startX; return new Rectangle(startX, 0, width, res.getScaledHeight()); } protected void resize() { - MainWindow res = AEIRenderHelper.getResolution(); + MainWindow res = REIRenderHelper.getResolution(); if (overlayedGui != Minecraft.getInstance().currentScreen) { if (Minecraft.getInstance().currentScreen instanceof GuiContainer) { @@ -117,25 +121,42 @@ public class GuiItemList extends Drawable { } private void calculateSlots() { - int x = rect.x; - int y = rect.y + 20; - MainWindow res = AEIRenderHelper.getResolution(); + int x = rect.x, y = rect.y + 20; + MainWindow res = REIRenderHelper.getResolution(); displaySlots.clear(); - int xOffset = 4; - int yOffset = 4; + int xOffset = 0, yOffset = 0, row = 0, perRow = 0, currentX = 0, currentY = 0; while (true) { - AEISlot slot = new AEISlot(x + xOffset, y + yOffset); - slot.setCheatable(true); xOffset += 18; - displaySlots.add(slot); - if (x + xOffset + 18 > res.getScaledWidth()) { - xOffset = 4; + if (row == 0) + perRow++; + if (x + xOffset + 22 > res.getScaledWidth()) { + xOffset = 0; yOffset += 18; + row++; } if (y + yOffset + 9 + FOOTERSIZE > rect.height) { + xOffset = 0; + yOffset = 0; break; } } + x += (rect.width - perRow * 18) / 2; + y += (rect.height - FOOTERSIZE - 2 - row * 18) / 2; + while (true) { + REISlot slot = new REISlot(x + xOffset, y + yOffset); + slot.setCheatable(true); + xOffset += 18; + currentX++; + displaySlots.add(slot); + if (currentX >= perRow) { + xOffset = 0; + yOffset += 18; + currentX = 0; + currentY++; + } + if (currentY >= row) + break; + } } @Override @@ -196,52 +217,70 @@ public class GuiItemList extends Drawable { private String getCheatModeText() { if (cheatMode) { - TextComponentTranslation cheat = new TextComponentTranslation("text.aei.cheat", new Object[]{null}); + TextComponentTranslation cheat = new TextComponentTranslation("text.rei.cheat", new Object[]{null}); return cheat.getFormattedText(); } - TextComponentTranslation noCheat = new TextComponentTranslation("text.aei.nocheat", new Object[]{null}); + TextComponentTranslation noCheat = new TextComponentTranslation("text.rei.nocheat", new Object[]{null}); return noCheat.getFormattedText(); } protected void updateView() { String searchText = searchBox.getText(); - String modText = null; - if (searchText.contains("@")) { - int nextBreak = searchText.indexOf(' ', searchText.indexOf('@')); - if (nextBreak == 0 || nextBreak == -1) - nextBreak = searchText.length(); - modText = searchText.substring(searchText.indexOf('@'), nextBreak); - searchText = searchText.replace(modText, "").trim(); - modText = modText.replace("@", "").toLowerCase(); - } - view.clear(); - if (searchText.equals("") || searchText == null) { - for(ItemStack stack : ClientListener.stackList) { - if (modText != null) { - if (getMod(stack).contains(modText)) { - view.add(stack); - } - } else { - view.add(stack); - } - } - } else { - for(ItemStack stack : ClientListener.stackList) { - if (stack.getItem().getName().getString().toLowerCase().contains(searchText)) - if (modText != null) { - if (getMod(stack).contains(modText)) { - view.add(stack); - } - } else { - view.add(stack); - } - } - } + List<ItemStack> stacks = new ArrayList<>(); + Arrays.stream(searchText.split("\\|")).forEachOrdered(s -> { + List<SearchArgument> arguments = new ArrayList<>(); + while (s.startsWith(" ")) s = s.substring(1); + while (s.endsWith(" ")) s = s.substring(0, s.length()); + if (s.startsWith("@-") || s.startsWith("-@")) + arguments.add(new SearchArgument(SearchArgument.ArgumentType.MOD, s.substring(2), false)); + else if (s.startsWith("@")) + arguments.add(new SearchArgument(SearchArgument.ArgumentType.MOD, s.substring(1), true)); + else if (s.startsWith("#-") || s.startsWith("-#")) + arguments.add(new SearchArgument(SearchArgument.ArgumentType.TOOLTIP, s.substring(2), false)); + else if (s.startsWith("#")) + arguments.add(new SearchArgument(SearchArgument.ArgumentType.TOOLTIP, s.substring(1), true)); + else if (s.startsWith("-")) + arguments.add(new SearchArgument(SearchArgument.ArgumentType.TEXT, s.substring(1), false)); + else + arguments.add(new SearchArgument(SearchArgument.ArgumentType.TEXT, s, true)); + ClientListener.stackList.stream().filter(itemStack -> filterItem(itemStack, arguments)).forEachOrdered(stacks::add); + }); + view.addAll(stacks.stream().distinct().collect(Collectors.toList())); page = 0; fillSlots(); } + private boolean filterItem(ItemStack itemStack, List<SearchArgument> arguments) { + String mod = getMod(itemStack); + List<String> toolTipsList = REIRenderHelper.getOverlayedGui().getItemToolTip(itemStack); + String toolTipsMixed = toolTipsList.stream().skip(1).collect(Collectors.joining()).toLowerCase(); + String allMixed = Stream.of(itemStack.getDisplayName().getString(), toolTipsMixed).collect(Collectors.joining()).toLowerCase(); + for(SearchArgument searchArgument : arguments.stream().filter(searchArgument -> !searchArgument.isInclude()).collect(Collectors.toList())) { + if (searchArgument.getArgumentType().equals(SearchArgument.ArgumentType.MOD)) + if (mod.toLowerCase().contains(searchArgument.getText().toLowerCase())) + return false; + if (searchArgument.getArgumentType().equals(SearchArgument.ArgumentType.TOOLTIP)) + if (toolTipsMixed.contains(searchArgument.getText().toLowerCase())) + return false; + if (searchArgument.getArgumentType().equals(SearchArgument.ArgumentType.TEXT)) + if (allMixed.contains(searchArgument.getText().toLowerCase())) + return false; + } + for(SearchArgument searchArgument : arguments.stream().filter(SearchArgument::isInclude).collect(Collectors.toList())) { + if (searchArgument.getArgumentType().equals(SearchArgument.ArgumentType.MOD)) + if (!mod.toLowerCase().contains(searchArgument.getText().toLowerCase())) + return false; + if (searchArgument.getArgumentType().equals(SearchArgument.ArgumentType.TOOLTIP)) + if (!toolTipsMixed.contains(searchArgument.getText().toLowerCase())) + return false; + if (searchArgument.getArgumentType().equals(SearchArgument.ArgumentType.TEXT)) + if (!allMixed.contains(searchArgument.getText().toLowerCase())) + return false; + } + return true; + } + public void tick() { controls.forEach(f -> f.tick()); } @@ -261,4 +300,5 @@ public class GuiItemList extends Drawable { } return ""; } + } diff --git a/src/main/java/me/shedaniel/gui/AEIRenderHelper.java b/src/main/java/me/shedaniel/gui/REIRenderHelper.java index 3ffbc7d82..74f8c1b02 100755 --- a/src/main/java/me/shedaniel/gui/AEIRenderHelper.java +++ b/src/main/java/me/shedaniel/gui/REIRenderHelper.java @@ -1,9 +1,9 @@ package me.shedaniel.gui; -import me.shedaniel.gui.widget.AEISlot; import me.shedaniel.gui.widget.Control; import me.shedaniel.gui.widget.IFocusable; -import me.shedaniel.impl.AEIRecipeManager; +import me.shedaniel.gui.widget.REISlot; +import me.shedaniel.impl.REIRecipeManager; import me.shedaniel.library.KeyBindManager; import me.shedaniel.listenerdefinitions.IMixinGuiContainer; import net.minecraft.client.MainWindow; @@ -13,6 +13,7 @@ import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.ItemRenderer; import net.minecraft.item.ItemStack; +import org.dimdev.riftloader.RiftLoader; import java.awt.*; import java.util.ArrayList; @@ -23,9 +24,9 @@ import java.util.Optional; /** * Created by James on 7/28/2018. */ -public class AEIRenderHelper { +public class REIRenderHelper { static Point mouseLoc; - static public GuiItemList aeiGui; + static public GuiItemList reiGui; static GuiContainer overlayedGui; static List<TooltipData> tooltipsToRender = new ArrayList<>(); @@ -40,25 +41,36 @@ public class AEIRenderHelper { } public static MainWindow getResolution() { - return Minecraft.getInstance().mainWindow; } - public static void drawAEI(GuiContainer overlayedGui) { - AEIRenderHelper.overlayedGui = overlayedGui; - if (aeiGui == null) { - aeiGui = new GuiItemList(overlayedGui); + public static String tryGettingModName(String modid) { + if (modid.equalsIgnoreCase("minecraft")) + return "Minecraft"; + return RiftLoader.instance.getMods().stream() + .filter(modInfo -> modInfo.id.equals(modid) || (modInfo.name != null && modInfo.name.equals(modid))) + .findFirst().map(modInfo -> { + if (modInfo.name != null) + return modInfo.name; + return modid; + }).orElse(modid); + } + + public static void drawREI(GuiContainer overlayedGui) { + REIRenderHelper.overlayedGui = overlayedGui; + if (reiGui == null) { + reiGui = new GuiItemList(overlayedGui); } - aeiGui.draw(); + reiGui.draw(); renderTooltips(); } - public static void resize() { - if (aeiGui != null) { - aeiGui.resize(); + public static void resize(int scaledWidth, int scaledHeight) { + if (reiGui != null) { + reiGui.resize(); } if (overlayedGui instanceof RecipeGui) { - overlayedGui.onResize(Minecraft.getInstance(), 0, 0); + overlayedGui.onResize(Minecraft.getInstance(), scaledWidth, scaledHeight); } } @@ -94,8 +106,8 @@ public class AEIRenderHelper { } public static boolean mouseClick(int x, int y, int button) { - if (aeiGui.visible) { - for(Control control : aeiGui.controls) { + if (reiGui.visible) { + for(Control control : reiGui.controls) { if (control.isHighlighted() && control.isEnabled() && control.onClick != null) { if (focusedControl != null) focusedControl.setFocused(false); @@ -164,12 +176,12 @@ public class AEIRenderHelper { } public static boolean mouseScrolled(double direction) { - if (!aeiGui.visible) + if (!reiGui.visible) return false; - if (direction > 0 && aeiGui.buttonLeft.isEnabled()) - aeiGui.buttonLeft.onClick.apply(0); - else if (direction < 0 && aeiGui.buttonRight.isEnabled()) - aeiGui.buttonRight.onClick.apply(0); + if (direction > 0 && reiGui.buttonLeft.isEnabled()) + reiGui.buttonLeft.onClick.apply(0); + else if (direction < 0 && reiGui.buttonRight.isEnabled()) + reiGui.buttonRight.onClick.apply(0); return true; } @@ -187,26 +199,26 @@ public class AEIRenderHelper { } public static void updateSearch() { - aeiGui.updateView(); + reiGui.updateView(); } public static void tick() { - if (aeiGui != null && Minecraft.getInstance().currentScreen == overlayedGui) - aeiGui.tick(); + if (reiGui != null && Minecraft.getInstance().currentScreen == overlayedGui) + reiGui.tick(); } public static void recipeKeybind() { if (!(Minecraft.getInstance().currentScreen instanceof GuiContainer)) return; - Control control = aeiGui.getLastHovered(); - if (control != null && control.isHighlighted() && control instanceof AEISlot) { - AEISlot slot = (AEISlot) control; - AEIRecipeManager.instance().displayRecipesFor(slot.getStack()); + Control control = reiGui.getLastHovered(); + if (control != null && control.isHighlighted() && control instanceof REISlot) { + REISlot slot = (REISlot) control; + REIRecipeManager.instance().displayRecipesFor(slot.getStack()); return; } if (((IMixinGuiContainer) overlayedGui).getHoveredSlot() != null) { ItemStack stack = ((IMixinGuiContainer) overlayedGui).getHoveredSlot().getStack(); - AEIRecipeManager.instance().displayRecipesFor(stack); + REIRecipeManager.instance().displayRecipesFor(stack); } } @@ -214,22 +226,22 @@ public class AEIRenderHelper { public static void useKeybind() { if (!(Minecraft.getInstance().currentScreen instanceof GuiContainer)) return; - Control control = aeiGui.getLastHovered(); - if (control != null && control.isHighlighted() && control instanceof AEISlot) { - AEISlot slot = (AEISlot) control; - AEIRecipeManager.instance().displayUsesFor(slot.getStack()); + Control control = reiGui.getLastHovered(); + if (control != null && control.isHighlighted() && control instanceof REISlot) { + REISlot slot = (REISlot) control; + REIRecipeManager.instance().displayUsesFor(slot.getStack()); return; } if (((IMixinGuiContainer) overlayedGui).getHoveredSlot() != null) { ItemStack stack = ((IMixinGuiContainer) overlayedGui).getHoveredSlot().getStack(); - AEIRecipeManager.instance().displayUsesFor(stack); + REIRecipeManager.instance().displayUsesFor(stack); } } public static void hideKeybind() { - if (Minecraft.getInstance().currentScreen == overlayedGui && aeiGui != null) { - aeiGui.visible = !aeiGui.visible; + if (Minecraft.getInstance().currentScreen == overlayedGui && reiGui != null) { + reiGui.visible = !reiGui.visible; } } } diff --git a/src/main/java/me/shedaniel/gui/RecipeGui.java b/src/main/java/me/shedaniel/gui/RecipeGui.java index 6cdd9542a..43cb8333d 100755 --- a/src/main/java/me/shedaniel/gui/RecipeGui.java +++ b/src/main/java/me/shedaniel/gui/RecipeGui.java @@ -2,14 +2,17 @@ package me.shedaniel.gui; import me.shedaniel.api.IDisplayCategory; import me.shedaniel.api.IRecipe; -import me.shedaniel.gui.widget.AEISlot; import me.shedaniel.gui.widget.Button; import me.shedaniel.gui.widget.Control; +import me.shedaniel.gui.widget.REISlot; +import me.shedaniel.gui.widget.Tab; +import me.shedaniel.impl.REIRecipeManager; import net.minecraft.client.MainWindow; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; import net.minecraft.inventory.Container; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.MathHelper; @@ -20,6 +23,8 @@ import java.util.List; import java.util.Map; public class RecipeGui extends GuiContainer { + + private static final ResourceLocation CREATIVE_INVENTORY_TABS = new ResourceLocation("textures/gui/container/creative_inventory/tabs.png"); |
