diff --git a/README.md b/README.md index 78c3f6d..7937019 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,9 @@ the [release page](https://minecraft.curseforge.com/projects/just-enough-calcula - [ ] Infinite recipe inputs, outputs and catalysts ## Known Issues -- [ ] Client Only + +- [ ] **May crash** if you open the gui immediately after entering the world +- [ ] Client only - [ ] Fluid from NEI ItemPanel will be recognized as item - [ ] Some OreDict items renders wrong with overlay (Now removed the overlay) - [ ] GUI will cover the NEI's GUI like tooltip on item panel diff --git a/src/main/java/me/towdium/jecalculation/JustEnoughCalculation.java b/src/main/java/me/towdium/jecalculation/JustEnoughCalculation.java index 123ee54..07683c8 100644 --- a/src/main/java/me/towdium/jecalculation/JustEnoughCalculation.java +++ b/src/main/java/me/towdium/jecalculation/JustEnoughCalculation.java @@ -1,13 +1,11 @@ package me.towdium.jecalculation; -import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import me.towdium.jecalculation.nei.Adapter; import me.towdium.jecalculation.nei.NEIPlugin; import me.towdium.jecalculation.network.ClientHandler; import org.apache.logging.log4j.LogManager; @@ -43,8 +41,6 @@ public class JustEnoughCalculation { @Mod.EventHandler public static void init(FMLInitializationEvent event) { handler.init(); - Adapter.init(); - } @Mod.EventHandler diff --git a/src/main/java/me/towdium/jecalculation/data/Controller.java b/src/main/java/me/towdium/jecalculation/data/Controller.java index 0795244..7524154 100644 --- a/src/main/java/me/towdium/jecalculation/data/Controller.java +++ b/src/main/java/me/towdium/jecalculation/data/Controller.java @@ -9,7 +9,7 @@ import me.towdium.jecalculation.data.structure.*; import me.towdium.jecalculation.polyfill.MethodsReturnNonnullByDefault; import me.towdium.jecalculation.utils.Utilities; import me.towdium.jecalculation.utils.wrappers.Pair; -import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityClientPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ChatComponentTranslation; @@ -72,10 +72,13 @@ public class Controller { } private static void export(String s, Function r) { + EntityClientPlayerMP player = Utilities.getPlayer(); + if (player == null) + return; + File f = JecaConfig.getDataFile(s); Utilities.Json.write(r.apply(getRecipes()), f); - Minecraft.getMinecraft().thePlayer.addChatMessage( - new ChatComponentTranslation("jecalculation.chat.export", f.getAbsolutePath())); + player.addChatMessage(new ChatComponentTranslation("jecalculation.chat.export", f.getAbsolutePath())); } public static void export(String group) { diff --git a/src/main/java/me/towdium/jecalculation/data/label/ILabel.java b/src/main/java/me/towdium/jecalculation/data/label/ILabel.java index d8f33f2..dda6329 100644 --- a/src/main/java/me/towdium/jecalculation/data/label/ILabel.java +++ b/src/main/java/me/towdium/jecalculation/data/label/ILabel.java @@ -124,7 +124,7 @@ public interface ILabel { * For registering, see {@link Serializer}. */ class Merger { - private Utilities.Relation functions = new Utilities.Relation<>(); + private final Utilities.Relation functions = new Utilities.Relation<>(); private Merger() { } @@ -173,7 +173,7 @@ public interface ILabel { public static final String KEY_IDENTIFIER = "type"; public static final String KEY_CONTENT = "content"; - private HashMap> idToData = new HashMap<>(); + private final HashMap> idToData = new HashMap<>(); private Serializer() { } @@ -272,6 +272,7 @@ public interface ILabel { return guess.isEmpty() ? labels.get(0) : guess.get(0); } + // to test if the labels can be converted to other labels (like oreDict) public Pair, List> guess(List labels, @Nullable Class context) { List suggest = new ReversedIterator<>(handlers.get(Priority.SUGGEST)).stream() .flatMap(h -> h.convert(labels, @@ -295,7 +296,7 @@ public interface ILabel { class RegistryEditor { - private ArrayList records = new ArrayList<>(); + private final ArrayList records = new ArrayList<>(); private RegistryEditor() { } diff --git a/src/main/java/me/towdium/jecalculation/data/structure/CostList.java b/src/main/java/me/towdium/jecalculation/data/structure/CostList.java index 3341ac4..15aa05e 100644 --- a/src/main/java/me/towdium/jecalculation/data/structure/CostList.java +++ b/src/main/java/me/towdium/jecalculation/data/structure/CostList.java @@ -6,6 +6,7 @@ import me.towdium.jecalculation.polyfill.MethodsReturnNonnullByDefault; import me.towdium.jecalculation.utils.Utilities; import me.towdium.jecalculation.utils.wrappers.Pair; import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityClientPlayerMP; import net.minecraft.util.ChatComponentTranslation; import javax.annotation.Nullable; @@ -116,6 +117,8 @@ public class CostList { private int index; public Calculator() throws ArithmeticException { + EntityClientPlayerMP player = Utilities.getPlayer(); + HashSet set = new HashSet<>(); set.add(CostList.this); Pair next = find(true); @@ -144,8 +147,8 @@ public class CostList { addCatalyst(next.one.getLabel(Recipe.IO.CATALYST)); next = find(true); } - if (count++ > 1000) { - Minecraft.getMinecraft().thePlayer.addChatMessage( + if (count++ > 1000 && player != null) { + player.addChatMessage( new ChatComponentTranslation("jecalculation.chat.max_loop")); break; } diff --git a/src/main/java/me/towdium/jecalculation/gui/JecaGui.java b/src/main/java/me/towdium/jecalculation/gui/JecaGui.java index 4b9769d..b5108ea 100644 --- a/src/main/java/me/towdium/jecalculation/gui/JecaGui.java +++ b/src/main/java/me/towdium/jecalculation/gui/JecaGui.java @@ -145,7 +145,6 @@ public class JecaGui extends GuiContainer { return s; } - public static boolean mouseIn(int xPos, int yPos, int xSize, int ySize, int xMouse, int yMouse) { return xMouse > xPos && yMouse > yPos && xMouse <= xPos + xSize && yMouse <= yPos + ySize; } diff --git a/src/main/java/me/towdium/jecalculation/gui/guis/GuiCraft.java b/src/main/java/me/towdium/jecalculation/gui/guis/GuiCraft.java index 835347f..8c7d8c4 100644 --- a/src/main/java/me/towdium/jecalculation/gui/guis/GuiCraft.java +++ b/src/main/java/me/towdium/jecalculation/gui/guis/GuiCraft.java @@ -102,6 +102,11 @@ public class GuiCraft extends WContainer implements IGui { refreshCalculator(); } + @Override + public boolean acceptsTransfer() { + return true; + } + void setMode(RecordCraft.Mode mode) { record.mode = mode; Controller.setRCraft(record); @@ -193,6 +198,7 @@ public class GuiCraft extends WContainer implements IGui { .map(i -> i.matches(l)) .filter(Optional::isPresent) .map(Optional::get) + .map(ILabel::copy) .collect(Collectors.toList()); } diff --git a/src/main/java/me/towdium/jecalculation/gui/guis/GuiDisamb.java b/src/main/java/me/towdium/jecalculation/gui/guis/GuiDisamb.java deleted file mode 100644 index ed9161c..0000000 --- a/src/main/java/me/towdium/jecalculation/gui/guis/GuiDisamb.java +++ /dev/null @@ -1,45 +0,0 @@ -package me.towdium.jecalculation.gui.guis; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import me.towdium.jecalculation.gui.guis.pickers.IPicker; -import me.towdium.jecalculation.gui.Resource; -import me.towdium.jecalculation.gui.widgets.*; -import me.towdium.jecalculation.data.label.ILabel; - -import javax.annotation.ParametersAreNonnullByDefault; -import java.util.List; -import java.util.function.Consumer; - -import static me.towdium.jecalculation.gui.Resource.*; - -/** - * Author: towdium - * Date: 17-9-16. - */ -@ParametersAreNonnullByDefault -@SideOnly(Side.CLIENT) -public class GuiDisamb extends IPicker.Impl implements IGui { -// protected WLabelScroll up = new WLabelScroll(25, 48, 7, 3, WLabel.Mode.PICKER, true); -// protected WLabelScroll down = new WLabelScroll(25, 105, 7, 3, WLabel.Mode.PICKER, true); -// protected List> record; -// -// public GuiDisamb(List> record) { -// this.record = record; -// WSwitcher switcher = new WSwitcher(7, 7, 162, this.record.size()).setListener(i -> setPage(i.getIndex())); -// ListenerValue consumer = (i, v) -> callback.accept(i.get(v).copy().multiply(-1)); -// add(new WPanel()); -// add(new WIcon(7, 24, 20, 20, ICN_TEXT, "common.search")); -// add(new WIcon(7, 48, 18, 54, ICN_LIST, "disamb.list")); -// add(new WIcon(7, 105, 18, 54, ICN_LABEL, "disamb.label")); -// add(new WSearch(25, 24, 90, up.setListener(consumer), down.setListener(consumer))); -// add(switcher, up, down); -// setPage(0); -// } -// -// -// protected void setPage(int n) { -// up.setLabels(record.get(n)); -// down.setLabels(ILabel.CONVERTER.guess(record.get(n)).one); -// } -} diff --git a/src/main/java/me/towdium/jecalculation/gui/guis/GuiRecipe.java b/src/main/java/me/towdium/jecalculation/gui/guis/GuiRecipe.java index f2c62e2..08428d5 100644 --- a/src/main/java/me/towdium/jecalculation/gui/guis/GuiRecipe.java +++ b/src/main/java/me/towdium/jecalculation/gui/guis/GuiRecipe.java @@ -140,6 +140,11 @@ public class GuiRecipe extends WContainer implements IGui { return true; } + @Override + public boolean acceptsTransfer() { + return true; + } + public void setNewGroup(boolean b) { if (b) { remove(neu, label, clear, copy, save); diff --git a/src/main/java/me/towdium/jecalculation/gui/guis/IGui.java b/src/main/java/me/towdium/jecalculation/gui/guis/IGui.java index 50af269..2c60557 100644 --- a/src/main/java/me/towdium/jecalculation/gui/guis/IGui.java +++ b/src/main/java/me/towdium/jecalculation/gui/guis/IGui.java @@ -13,4 +13,8 @@ import me.towdium.jecalculation.gui.widgets.IContainer; public interface IGui extends IContainer { default void onVisible(JecaGui gui) { } + + default boolean acceptsTransfer() { + return false; + } } diff --git a/src/main/java/me/towdium/jecalculation/gui/widgets/WContainer.java b/src/main/java/me/towdium/jecalculation/gui/widgets/WContainer.java index 1a1ce91..9744c5e 100644 --- a/src/main/java/me/towdium/jecalculation/gui/widgets/WContainer.java +++ b/src/main/java/me/towdium/jecalculation/gui/widgets/WContainer.java @@ -58,9 +58,13 @@ public class WContainer implements IContainer { public boolean onDraw(JecaGui gui, int mouseX, int mouseY) { IWidget[] w = new IWidget[1]; widgets.forEach(widget -> { - if(widget.onDraw(gui, mouseX, mouseY)) w[0] = widget; + if (widget.onDraw(gui, mouseX, mouseY)) + w[0] = widget; }); - if(w[0] != null) w[0].onDraw(gui, mouseX, mouseY); + if (w[0] != null) + w[0].onDraw(gui, mouseX, mouseY); + if (overlay != null) + overlay.onDraw(gui, mouseX, mouseY); return false; } @@ -68,7 +72,8 @@ public class WContainer implements IContainer { public boolean onMouseClicked(JecaGui gui, int xMouse, int yMouse, int button) { boolean b = overlay != null && overlay.onMouseClicked(gui, xMouse, yMouse, button); return b || new Utilities.ReversedIterator<>(widgets).stream() - .anyMatch(i -> i.onMouseClicked(gui, xMouse, yMouse, button)); + .anyMatch(i -> i.onMouseClicked(gui, xMouse, yMouse, + button)); } @Override @@ -81,21 +86,22 @@ public class WContainer implements IContainer { public boolean onMouseReleased(JecaGui gui, int xMouse, int yMouse, int button) { boolean b = overlay != null && overlay.onMouseReleased(gui, xMouse, yMouse, button); return b || new Utilities.ReversedIterator<>(widgets).stream() - .anyMatch(i -> i.onMouseReleased(gui, xMouse, yMouse, button)); + .anyMatch(i -> i.onMouseReleased(gui, xMouse, yMouse, + button)); } @Override public boolean onMouseScroll(JecaGui gui, int xMouse, int yMouse, int diff) { boolean b = overlay != null && overlay.onMouseScroll(gui, xMouse, yMouse, diff); return b || new Utilities.ReversedIterator<>(widgets).stream() - .anyMatch(i -> i.onMouseScroll(gui, xMouse, yMouse, diff)); + .anyMatch(i -> i.onMouseScroll(gui, xMouse, yMouse, diff)); } @Override public boolean onTooltip(JecaGui gui, int xMouse, int yMouse, List tooltip) { boolean b = overlay != null && overlay.onTooltip(gui, xMouse, yMouse, tooltip); return b || new Utilities.ReversedIterator<>(widgets).stream() - .anyMatch(i -> i.onTooltip(gui, xMouse, yMouse, tooltip)); + .anyMatch(i -> i.onTooltip(gui, xMouse, yMouse, tooltip)); } @Nullable diff --git a/src/main/java/me/towdium/jecalculation/nei/NEIPlugin.java b/src/main/java/me/towdium/jecalculation/nei/NEIPlugin.java index 079892b..08aa322 100644 --- a/src/main/java/me/towdium/jecalculation/nei/NEIPlugin.java +++ b/src/main/java/me/towdium/jecalculation/nei/NEIPlugin.java @@ -4,30 +4,24 @@ import codechicken.nei.guihook.GuiContainerManager; import codechicken.nei.recipe.*; import me.towdium.jecalculation.JustEnoughCalculation; import me.towdium.jecalculation.data.label.ILabel; -import me.towdium.jecalculation.data.structure.CostList; -import me.towdium.jecalculation.data.structure.Recipe; -import me.towdium.jecalculation.utils.wrappers.Trio; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; -import scala.tools.cmd.Opt; import javax.annotation.Nonnull; -import java.util.ArrayList; -import java.util.EnumMap; -import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; public class NEIPlugin { public static void init() { GuiContainerManager.addTooltipHandler(new JecaTooltipHandler()); + Adapter.init(); } private static ItemStack currentItemStack; public static ILabel getLabelUnderMouse() { - if (NEIPlugin.currentItemStack == null) return ILabel.EMPTY; + if (NEIPlugin.currentItemStack == null) + return ILabel.EMPTY; return ILabel.Converter.from(NEIPlugin.currentItemStack); } @@ -38,14 +32,14 @@ public class NEIPlugin { public static Optional getCatalyst(@Nonnull IRecipeHandler handler) { final String handlerName = handler.toString().split("@")[0]; final String handlerID; - if(handler instanceof TemplateRecipeHandler) { - handlerID = (((TemplateRecipeHandler)handler).getOverlayIdentifier()); + if (handler instanceof TemplateRecipeHandler) { + handlerID = (((TemplateRecipeHandler) handler).getOverlayIdentifier()); } else { handlerID = null; } HandlerInfo info = GuiRecipeTab.getHandlerInfo(handlerName, handlerID); - if(info == null) { + if (info == null) { return Optional.empty(); } ItemStack itemStack = info.getItemStack(); @@ -69,6 +63,4 @@ public class NEIPlugin { } - - }