diff options
| author | Unknown <shekwancheung0528@gmail.com> | 2019-01-08 18:23:00 +0800 |
|---|---|---|
| committer | Unknown <shekwancheung0528@gmail.com> | 2019-01-08 18:23:00 +0800 |
| commit | 4c175cf8a0f02dc3c4ef4e0c92eaa54f4e0bafd5 (patch) | |
| tree | 468a1d03c3a7295b43f28e71b84856a512e72b3f /src/main/java/me | |
| parent | eea47c59b58b000e0a3d329102c7a26c67e37039 (diff) | |
| download | RoughlyEnoughItems-4c175cf8a0f02dc3c4ef4e0c92eaa54f4e0bafd5.tar.gz RoughlyEnoughItems-4c175cf8a0f02dc3c4ef4e0c92eaa54f4e0bafd5.tar.bz2 RoughlyEnoughItems-4c175cf8a0f02dc3c4ef4e0c92eaa54f4e0bafd5.zip | |
Craftable Only WIP
Diffstat (limited to 'src/main/java/me')
55 files changed, 289 insertions, 106 deletions
diff --git a/src/main/java/me/shedaniel/Core.java b/src/main/java/me/shedaniel/Core.java index 498b0a43b..2cc74161b 100755 --- a/src/main/java/me/shedaniel/Core.java +++ b/src/main/java/me/shedaniel/Core.java @@ -1,6 +1,7 @@ package me.shedaniel; import me.shedaniel.config.REIConfig; +import me.shedaniel.config.REIRuntimeConfig; import me.shedaniel.listenerdefinitions.ClientTickable; import me.shedaniel.listenerdefinitions.IEvent; import me.shedaniel.listeners.DrawContainerListener; @@ -31,8 +32,8 @@ public class Core implements ClientModInitializer { private static List<IEvent> events = new LinkedList<>(); public static final File configFile = new File(FabricLoader.INSTANCE.getConfigDirectory(), "rei.json"); public static REIConfig config; + public static REIRuntimeConfig runtimeConfig; public static ClientListener clientListener; - public static boolean centreSearchBox; public static Logger LOGGER = LogManager.getFormatterLogger("REI"); @Override @@ -42,7 +43,7 @@ public class Core implements ClientModInitializer { registerFabricEvents(); try { loadConfig(); - centreSearchBox = config.centreSearchBox; + runtimeConfig = new REIRuntimeConfig(); } catch (IOException e) { e.printStackTrace(); } @@ -52,6 +53,8 @@ public class Core implements ClientModInitializer { private void registerFabricEvents() { ClientTickEvent.CLIENT.register(minecraftClient -> { getListeners(ClientTickable.class).forEach(ClientTickable::clientTick); + if (!Core.config.enableCraftableOnlyButton) + Core.runtimeConfig.craftableOnly = false; }); } diff --git a/src/main/java/me/shedaniel/api/IDisplayCategory.java b/src/main/java/me/shedaniel/api/IDisplayCategory.java index 3e4c938cb..309a836ac 100755 --- a/src/main/java/me/shedaniel/api/IDisplayCategory.java +++ b/src/main/java/me/shedaniel/api/IDisplayCategory.java @@ -10,6 +10,7 @@ import java.util.List; * Created by James on 8/7/2018. */ public interface IDisplayCategory<T extends IRecipe> { + public String getId(); public String getDisplayName(); diff --git a/src/main/java/me/shedaniel/api/DisplayCategoryCraftable.java b/src/main/java/me/shedaniel/api/IDisplayCategoryCraftable.java index c0be7bd11..c34c1e37b 100644 --- a/src/main/java/me/shedaniel/api/DisplayCategoryCraftable.java +++ b/src/main/java/me/shedaniel/api/IDisplayCategoryCraftable.java @@ -8,7 +8,7 @@ import net.minecraft.client.gui.Gui; import java.util.List; -public interface DisplayCategoryCraftable<T extends IRecipe> extends IDisplayCategory<T> { +public interface IDisplayCategoryCraftable<T extends IRecipe> extends IDisplayCategory<T> { public boolean canAutoCraftHere(Class<? extends Gui> guiClass, T recipe); diff --git a/src/main/java/me/shedaniel/api/IDisplayHelper.java b/src/main/java/me/shedaniel/api/IDisplayHelper.java deleted file mode 100755 index 6f230d3b5..000000000 --- a/src/main/java/me/shedaniel/api/IDisplayHelper.java +++ /dev/null @@ -1,7 +0,0 @@ -package me.shedaniel.api; - -/** - * Created by James on 8/7/2018. - */ -public interface IDisplayHelper { -} diff --git a/src/main/java/me/shedaniel/api/IDrawable.java b/src/main/java/me/shedaniel/api/IDrawable.java index 102b7e1c5..48294bea7 100755 --- a/src/main/java/me/shedaniel/api/IDrawable.java +++ b/src/main/java/me/shedaniel/api/IDrawable.java @@ -4,7 +4,9 @@ package me.shedaniel.api; * Created by James on 8/7/2018. */ public interface IDrawable { + public void draw(); - + public boolean isHighlighted(); + } diff --git a/src/main/java/me/shedaniel/api/IRecipe.java b/src/main/java/me/shedaniel/api/IRecipe.java index 84cce4c79..a79123ddd 100755 --- a/src/main/java/me/shedaniel/api/IRecipe.java +++ b/src/main/java/me/shedaniel/api/IRecipe.java @@ -1,5 +1,7 @@ package me.shedaniel.api; +import net.minecraft.item.ItemStack; + import java.util.List; /** @@ -13,4 +15,6 @@ public interface IRecipe<T> { public List<List<T>> getInput(); + public List<List<T>> getRecipeRequiredInput(); + } diff --git a/src/main/java/me/shedaniel/api/IRecipeManager.java b/src/main/java/me/shedaniel/api/IRecipeManager.java index 355a1cd4d..82135bf3f 100755 --- a/src/main/java/me/shedaniel/api/IRecipeManager.java +++ b/src/main/java/me/shedaniel/api/IRecipeManager.java @@ -17,4 +17,5 @@ public interface IRecipeManager { public void addDisplayAdapter(IDisplayCategory adapter); public Map<IDisplayCategory, List<IRecipe>> getRecipesFor(ItemStack stack); + } diff --git a/src/main/java/me/shedaniel/api/TriBooleanProducer.java b/src/main/java/me/shedaniel/api/TriBooleanSupplier.java index 0925fee75..241307740 100755 --- a/src/main/java/me/shedaniel/api/TriBooleanProducer.java +++ b/src/main/java/me/shedaniel/api/TriBooleanSupplier.java @@ -3,6 +3,6 @@ package me.shedaniel.api; /** * Created by James on 8/4/2018. */ -public interface TriBooleanProducer { +public interface TriBooleanSupplier { public boolean accept(int first, int second, int third); } diff --git a/src/main/java/me/shedaniel/config/REIConfig.java b/src/main/java/me/shedaniel/config/REIConfig.java index c3dad7b6f..c9e2efe47 100644 --- a/src/main/java/me/shedaniel/config/REIConfig.java +++ b/src/main/java/me/shedaniel/config/REIConfig.java @@ -9,8 +9,6 @@ public class REIConfig { public static Gson GSON = new GsonBuilder() .setPrettyPrinting() - .serializeNulls() - .disableHtmlEscaping() .create(); public int recipeKeyBind = KeyEvent.VK_R; @@ -19,5 +17,6 @@ public class REIConfig { public boolean centreSearchBox = false; public REIItemListOrdering itemListOrdering = REIItemListOrdering.REGISTRY; public boolean isAscending = true; + public boolean enableCraftableOnlyButton = false; } diff --git a/src/main/java/me/shedaniel/config/REIItemListOrdering.java b/src/main/java/me/shedaniel/config/REIItemListOrdering.java index 20bbaddab..f0a6b5356 100644 --- a/src/main/java/me/shedaniel/config/REIItemListOrdering.java +++ b/src/main/java/me/shedaniel/config/REIItemListOrdering.java @@ -17,4 +17,5 @@ public enum REIItemListOrdering { public String getNameTranslationKey() { return nameTranslationKey; } + } diff --git a/src/main/java/me/shedaniel/config/REIRuntimeConfig.java b/src/main/java/me/shedaniel/config/REIRuntimeConfig.java new file mode 100644 index 000000000..b13a72bfb --- /dev/null +++ b/src/main/java/me/shedaniel/config/REIRuntimeConfig.java @@ -0,0 +1,8 @@ +package me.shedaniel.config; + +public class REIRuntimeConfig { + + public boolean craftableOnly = false; + public boolean centreSearchBox = false; + +} diff --git a/src/main/java/me/shedaniel/gui/ConfigGui.java b/src/main/java/me/shedaniel/gui/ConfigGui.java index 266347adf..6deeb24ea 100644 --- a/src/main/java/me/shedaniel/gui/ConfigGui.java +++ b/src/main/java/me/shedaniel/gui/ConfigGui.java @@ -76,6 +76,30 @@ public class ConfigGui extends Gui { addButton(new ButtonWidget(1001, parent.width / 2 - 90, 150, 150, 20, "") { @Override public void onPressed(double double_1, double double_2) { + Core.config.enableCraftableOnlyButton = !Core.config.enableCraftableOnlyButton; + try { + Core.saveConfig(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public void draw(int int_1, int int_2, float float_1) { + GuiLighting.disable(); + this.text = I18n.translate("text.rei.enable_craftable_only.button", Core.config.enableCraftableOnlyButton ? "§a" : "§c", Core.config.enableCraftableOnlyButton); + super.draw(int_1, int_2, float_1); + if (this.hovered) + drawSuggestion(int_1, int_2); + } + + protected void drawSuggestion(int x, int y) { + drawTooltip(Arrays.asList(I18n.translate("text.rei.enable_craftable_only.tooltip").split("\n")), x, y); + } + }); + addButton(new ButtonWidget(1002, parent.width / 2 - 90, 180, 150, 20, "") { + @Override + public void onPressed(double double_1, double double_2) { int index = Arrays.asList(REIItemListOrdering.values()).indexOf(Core.config.itemListOrdering) + 1; if (index >= REIItemListOrdering.values().length) { index = 0; @@ -89,7 +113,7 @@ public class ConfigGui extends Gui { e.printStackTrace(); } } - + @Override public void draw(int int_1, int int_2, float float_1) { GuiLighting.disable(); @@ -112,7 +136,7 @@ public class ConfigGui extends Gui { text = I18n.translate("key.rei.hide") + ": "; drawString(MinecraftClient.getInstance().fontRenderer, text, parent.width / 2 - 25 - MinecraftClient.getInstance().fontRenderer.getStringWidth(text), 90 + 6, -1); text = I18n.translate("text.rei.list_ordering") + ": "; - drawString(MinecraftClient.getInstance().fontRenderer, text, parent.width / 2 - 95 - MinecraftClient.getInstance().fontRenderer.getStringWidth(text), 150 + 6, -1); + drawString(MinecraftClient.getInstance().fontRenderer, text, parent.width / 2 - 95 - MinecraftClient.getInstance().fontRenderer.getStringWidth(text), 180 + 6, -1); } @Override @@ -126,4 +150,5 @@ public class ConfigGui extends Gui { return super.keyPressed(p_keyPressed_1_, p_keyPressed_2_, p_keyPressed_3_); } } + } diff --git a/src/main/java/me/shedaniel/gui/Drawable.java b/src/main/java/me/shedaniel/gui/Drawable.java index 76d49e049..a2e5740a4 100755 --- a/src/main/java/me/shedaniel/gui/Drawable.java +++ b/src/main/java/me/shedaniel/gui/Drawable.java @@ -9,6 +9,7 @@ import java.awt.*; * Created by James on 7/28/2018. */ public abstract class Drawable implements IDrawable { + protected Rectangle rect; public Drawable(int x, int y, int width, int height) { @@ -30,4 +31,5 @@ public abstract class Drawable implements IDrawable { } return false; } + } diff --git a/src/main/java/me/shedaniel/gui/GuiItemList.java b/src/main/java/me/shedaniel/gui/GuiItemList.java index 18ea59d9b..18f8c3db8 100755 --- a/src/main/java/me/shedaniel/gui/GuiItemList.java +++ b/src/main/java/me/shedaniel/gui/GuiItemList.java @@ -1,8 +1,10 @@ package me.shedaniel.gui; +import com.google.common.collect.ImmutableList; import com.mojang.blaze3d.platform.GlStateManager; import me.shedaniel.ClientListener; import me.shedaniel.Core; +import me.shedaniel.api.IRecipe; import me.shedaniel.config.REIItemListOrdering; import me.shedaniel.gui.widget.Button; import me.shedaniel.gui.widget.Control; @@ -14,12 +16,15 @@ import net.fabricmc.fabric.client.itemgroup.FabricCreativeGuiComponents; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.ContainerGui; import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.client.render.GuiLighting; import net.minecraft.client.resource.language.I18n; import net.minecraft.client.util.Window; +import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; import net.minecraft.text.TextComponent; import net.minecraft.text.TranslatableTextComponent; +import net.minecraft.util.DefaultedList; import net.minecraft.util.Identifier; import net.minecraft.util.math.MathHelper; import net.minecraft.util.registry.Registry; @@ -45,10 +50,11 @@ public class GuiItemList extends Drawable { protected boolean visible = true; private int oldGuiLeft = 0; private boolean cheatMode = false; + private List<ItemStack> lastPlayerItems = new ArrayList<>(); public GuiItemList(ContainerGui overlayedGui) { super(calculateRect(overlayedGui)); - FOOTERSIZE = Core.centreSearchBox ? 18 : 44; + FOOTERSIZE = Core.runtimeConfig.centreSearchBox ? 18 : 44; displaySlots = new ArrayList<>(); controls = new ArrayList<>(); this.overlayedGui = overlayedGui; @@ -102,11 +108,21 @@ public class GuiItemList extends Drawable { } searchBox = new TextBox(getSearchBoxArea()); searchBox.setText(savedText); + if (Core.config.enableCraftableOnlyButton) { + Button buttonCraftableOnly = new Button(getCraftableToggleArea(), ""); + buttonCraftableOnly.setOnClick(i -> { + Core.runtimeConfig.craftableOnly = !Core.runtimeConfig.craftableOnly; + REIRenderHelper.updateSearch(); + return true; + }); + controls.add(buttonCraftableOnly); + } controls.add(searchBox); buttonCheating = new Button(5, 5, 45, 20, getCheatModeText()); buttonCheating.onClick = this::cheatClicked; buttonConfig = new Button(5, 28, 45, 20, I18n.translate("text.rei.config")); buttonConfig.onClick = i -> { + MinecraftClient.getInstance().openGui(null); MinecraftClient.getInstance().openGui(new ConfigGui(overlayedGui)); return true; }; @@ -119,13 +135,21 @@ public class GuiItemList extends Drawable { } private Rectangle getSearchBoxArea() { + int widthOffset = Core.config.enableCraftableOnlyButton ? -24 : 0; int ch = ((IMixinContainerGui) overlayedGui).getContainerHeight(), cw = ((IMixinContainerGui) overlayedGui).getContainerWidth(); - if (Core.centreSearchBox) { + if (Core.runtimeConfig.centreSearchBox) { if (ch + 4 + 18 > MinecraftClient.getInstance().window.getScaledHeight()) //Will be out of bounds - return new Rectangle(overlayedGui.width / 2 - cw / 2, rect.height + 100, cw, 18); - return new Rectangle(overlayedGui.width / 2 - cw / 2, rect.height - 31, cw, 18); + return new Rectangle(overlayedGui.width / 2 - cw / 2, rect.height + 100, cw + widthOffset, 18); + return new Rectangle(overlayedGui.width / 2 - cw / 2, rect.height - 31, cw + widthOffset, 18); } - return new Rectangle(rect.x, rect.height - 31, rect.width - 4, 18); + return new Rectangle(rect.x, rect.height - 31, rect.width - 4 + widthOffset, 18); + } + + private Rectangle getCraftableToggleArea() { + Rectangle searchBoxArea = getSearchBoxArea(); + searchBoxArea.setLocation(searchBoxArea.x + searchBoxArea.width + 4, searchBoxArea.y - 2); + searchBoxArea.setSize(20, 20); + return searchBoxArea; } private void fillSlots() { @@ -184,11 +208,22 @@ public class GuiItemList extends Drawable { public void draw() { if (!visible) return; + if (MinecraftClient.getInstance().currentGui instanceof ContainerGui) + overlayedGui = (ContainerGui) MinecraftClient.getInstance().currentGui; + if (Core.runtimeConfig.craftableOnly) { + List<ItemStack> currentPlayerItems = getInventoryItemsTypes(); + for(ItemStack item : lastPlayerItems) + if (!currentPlayerItems.contains(item) || currentPlayerItems.size() != lastPlayerItems.size()) { + lastPlayerItems = new ArrayList<>(currentPlayerItems); + updateView(); + } + } if (needsResize == true || oldGuiLeft != ((IMixinContainerGui) overlayedGui).getGuiLeft()) resize(); GlStateManager.pushMatrix(); updateButtons(); controls.forEach(Control::draw); + GuiLighting.disable(); String header = String.format("%s/%s", page + 1, MathHelper.ceil(view.size() / displaySlots.size()) + 1); MinecraftClient.getInstance().fontRenderer.drawWithShadow(header, rect.x + (rect.width / 2) - (MinecraftClient.getInstance().fontRenderer.getStringWidth(header) / 2), |
