From 2da199c1ccb5ea3a6d42054c60f60709e225f832 Mon Sep 17 00:00:00 2001 From: zy <854865755@163.com> Date: Wed, 3 Jan 2024 04:12:23 +0800 Subject: [PATCH] add magnet card add energy card add quantum bridge card fluid terminal display potion effect support all terminal add data sync button ultra terminal add automatic stock item --- .../java/com/glodblock/github/FluidCraft.java | 3 + .../github/client/gui/GuiFluidMonitor.java | 1 + .../client/gui/GuiFluidPatternTerminal.java | 1 + .../client/gui/GuiFluidPatternTerminalEx.java | 5 +- .../client/gui/GuiFluidPortableCell.java | 4 + .../github/client/gui/GuiFluidStorageBus.java | 6 +- .../client/gui/GuiInterfaceWireless.java | 1 + .../github/client/gui/GuiItemMonitor.java | 1 + .../github/client/gui/GuiLevelMaintainer.java | 3 + .../github/client/gui/GuiLevelTerminal.java | 1 + .../github/client/gui/GuiMagnet.java | 178 ++++++++++++ .../github/client/gui/base/FCBaseMEGui.java | 178 +++++++++++- .../client/gui/base/FCGuiEncodeTerminal.java | 39 ++- .../github/client/gui/base/FCGuiMonitor.java | 6 +- .../client/gui/container/ContainerMagnet.java | 90 ++++++ .../gui/container/base/FCBaseContainer.java | 45 ++- .../container/base/FCContainerMonitor.java | 9 +- .../client/gui/widget/FCGuiBaseButton.java | 85 ++++++ .../gui/{ => widget}/FCGuiLineField.java | 2 +- .../gui/{ => widget}/FCGuiTextField.java | 2 +- .../gui/{ => widget}/GuiFCImgButton.java | 12 +- .../com/glodblock/github/common/Config.java | 1 + .../common/item/ItemBaseWirelessTerminal.java | 50 +++- .../github/common/item/ItemEnergyCard.java | 45 +++ .../github/common/item/ItemMagnetCard.java | 204 +++++++++++++ .../common/item/ItemQuantumBridgeCard.java | 46 +++ .../item/ItemWirelessFluidTerminal.java | 2 +- .../item/ItemWirelessInterfaceTerminal.java | 2 +- .../item/ItemWirelessLevelTerminal.java | 2 +- .../item/ItemWirelessPatternTerminal.java | 2 +- .../item/ItemWirelessUltraTerminal.java | 21 +- .../common/parts/PartFluidTerminal.java | 32 ++- .../github/coremod/hooker/CoreModHooks.java | 51 ++++ .../transform/CraftingCpuTransformer.java | 65 ++++- .../crossmod/waila/FCTooltipHandlerWaila.java | 11 + .../github/inventory/gui/GuiType.java | 69 +---- .../github/inventory/gui/ItemGuiFactory.java | 4 +- .../inventory/gui/PartOrItemGuiFactory.java | 4 +- .../inventory/item/BaseWirelessInventory.java | 175 ++++++++++++ .../github/inventory/item/IItemTerminal.java | 32 ++- .../inventory/item/IWirelessExtendCard.java | 28 ++ .../item/IWirelessMagnetCardFilter.java | 25 ++ .../inventory/item/IWirelessTerminal.java | 5 + .../WirelessCraftingTerminalInventory.java | 12 +- .../item/WirelessFluidTerminalInventory.java | 12 +- .../WirelessInterfaceTerminalInventory.java | 2 +- .../item/WirelessLevelTerminalInventory.java | 2 +- .../WirelessMagnetCardFilterInventory.java | 215 ++++++++++++++ .../WirelessPatternTerminalExInventory.java | 12 +- .../WirelessPatternTerminalInventory.java | 12 +- .../github/loader/ChannelLoader.java | 6 +- .../github/loader/ItemAndBlockHolder.java | 31 +- .../github/loader/KeybindLoader.java | 24 +- .../glodblock/github/loader/RecipeLoader.java | 135 +++++---- .../recipe/WirelessTerminalEnergyRecipe.java | 85 ++++++ ...irelessTerminalInfinityBoosterRecipe.java} | 43 ++- .../recipe/WirelessTerminalMagnetRecipe.java | 92 ++++++ .../github/nei/recipes/FluidRecipe.java | 37 ++- .../github/network/CPacketCraftRequest.java | 43 ++- ...tns.java => CPacketFluidTerminalBtns.java} | 76 ++++- .../github/network/CPacketValueConfig.java | 54 +++- .../network/SPacketMEItemInvUpdate.java | 4 + .../glodblock/github/proxy/ClientProxy.java | 52 ++++ .../glodblock/github/proxy/CommonProxy.java | 89 ++++++ .../com/glodblock/github/util/NameConst.java | 21 ++ .../java/com/glodblock/github/util/Util.java | 269 ++++++++++++------ .../resources/assets/ae2fc/lang/en_US.lang | 34 ++- .../ae2fc/textures/gui/magnet_filter.png | Bin 0 -> 16636 bytes .../assets/ae2fc/textures/gui/states3.png | Bin 0 -> 1803 bytes .../ae2fc/textures/items/energy_card.png | Bin 0 -> 419 bytes .../ae2fc/textures/items/magnet_card.png | Bin 0 -> 502 bytes .../textures/items/quantum_bridge_card.png | Bin 0 -> 487 bytes 72 files changed, 2517 insertions(+), 393 deletions(-) create mode 100644 src/main/java/com/glodblock/github/client/gui/GuiMagnet.java create mode 100644 src/main/java/com/glodblock/github/client/gui/container/ContainerMagnet.java create mode 100644 src/main/java/com/glodblock/github/client/gui/widget/FCGuiBaseButton.java rename src/main/java/com/glodblock/github/client/gui/{ => widget}/FCGuiLineField.java (94%) rename src/main/java/com/glodblock/github/client/gui/{ => widget}/FCGuiTextField.java (98%) rename src/main/java/com/glodblock/github/client/gui/{ => widget}/GuiFCImgButton.java (93%) create mode 100644 src/main/java/com/glodblock/github/common/item/ItemEnergyCard.java create mode 100644 src/main/java/com/glodblock/github/common/item/ItemMagnetCard.java create mode 100644 src/main/java/com/glodblock/github/common/item/ItemQuantumBridgeCard.java create mode 100644 src/main/java/com/glodblock/github/inventory/item/BaseWirelessInventory.java create mode 100644 src/main/java/com/glodblock/github/inventory/item/IWirelessExtendCard.java create mode 100644 src/main/java/com/glodblock/github/inventory/item/IWirelessMagnetCardFilter.java create mode 100644 src/main/java/com/glodblock/github/inventory/item/WirelessMagnetCardFilterInventory.java create mode 100644 src/main/java/com/glodblock/github/loader/recipe/WirelessTerminalEnergyRecipe.java rename src/main/java/com/glodblock/github/loader/recipe/{WirelessTerminalRecipe.java => WirelessTerminalInfinityBoosterRecipe.java} (54%) create mode 100644 src/main/java/com/glodblock/github/loader/recipe/WirelessTerminalMagnetRecipe.java rename src/main/java/com/glodblock/github/network/{CPacketFluidPatternTermBtns.java => CPacketFluidTerminalBtns.java} (50%) create mode 100644 src/main/resources/assets/ae2fc/textures/gui/magnet_filter.png create mode 100644 src/main/resources/assets/ae2fc/textures/gui/states3.png create mode 100644 src/main/resources/assets/ae2fc/textures/items/energy_card.png create mode 100644 src/main/resources/assets/ae2fc/textures/items/magnet_card.png create mode 100644 src/main/resources/assets/ae2fc/textures/items/quantum_bridge_card.png diff --git a/src/main/java/com/glodblock/github/FluidCraft.java b/src/main/java/com/glodblock/github/FluidCraft.java index 5cbaff6b0..6ba855f15 100644 --- a/src/main/java/com/glodblock/github/FluidCraft.java +++ b/src/main/java/com/glodblock/github/FluidCraft.java @@ -76,6 +76,9 @@ public static void postInit(FMLPostInitializationEvent event) { if (!Config.removeRecipe) { RecipeLoader.INSTANCE.run(); } + if (Config.enableTestItemRecipe) { + RecipeLoader.addTestItem(); + } RecipeLoader.runTerminalRecipe(); if (ModAndClassUtil.isV2) { diff --git a/src/main/java/com/glodblock/github/client/gui/GuiFluidMonitor.java b/src/main/java/com/glodblock/github/client/gui/GuiFluidMonitor.java index 971613856..8f41a19a1 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiFluidMonitor.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiFluidMonitor.java @@ -43,6 +43,7 @@ public void postUpdate(final List list, boolean resort) { public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { this.fontRendererObj.drawString(this.getGuiDisplayName(GuiText.Terminal.getLocal()), 8, 6, 4210752); this.fontRendererObj.drawString(GuiText.inventory.getLocal(), 8, this.ySize - 96 + 3, 4210752); + super.drawFG(offsetX, offsetY, mouseX, mouseY); } @Override diff --git a/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminal.java b/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminal.java index 9d0900a9a..b549ea27d 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminal.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminal.java @@ -9,6 +9,7 @@ import com.glodblock.github.client.gui.base.FCGuiEncodeTerminal; import com.glodblock.github.client.gui.container.ContainerFluidPatternTerminal; import com.glodblock.github.client.gui.container.ContainerFluidPatternWireless; +import com.glodblock.github.client.gui.widget.GuiFCImgButton; import com.glodblock.github.inventory.item.IWirelessTerminal; import com.glodblock.github.util.ModAndClassUtil; import com.glodblock.github.util.NameConst; diff --git a/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminalEx.java b/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminalEx.java index 6ec82b0e6..2b5c65dec 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminalEx.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminalEx.java @@ -9,8 +9,9 @@ import com.glodblock.github.client.gui.base.FCGuiEncodeTerminal; import com.glodblock.github.client.gui.container.ContainerFluidPatternExWireless; import com.glodblock.github.client.gui.container.ContainerFluidPatternTerminalEx; +import com.glodblock.github.client.gui.widget.GuiFCImgButton; import com.glodblock.github.inventory.item.IWirelessTerminal; -import com.glodblock.github.network.CPacketFluidPatternTermBtns; +import com.glodblock.github.network.CPacketFluidTerminalBtns; import com.glodblock.github.util.ModAndClassUtil; import com.glodblock.github.util.NameConst; @@ -219,7 +220,7 @@ public void handleMouseInput() { private void changeActivePage() { FluidCraft.proxy.netHandler.sendToServer( - new CPacketFluidPatternTermBtns( + new CPacketFluidTerminalBtns( "PatternTerminal.ActivePage", String.valueOf(this.processingScrollBar.getCurrentScroll()))); } diff --git a/src/main/java/com/glodblock/github/client/gui/GuiFluidPortableCell.java b/src/main/java/com/glodblock/github/client/gui/GuiFluidPortableCell.java index e8803be15..2c7123574 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiFluidPortableCell.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiFluidPortableCell.java @@ -27,4 +27,8 @@ protected int getMaxRows() { return 3; } } + + protected boolean isPortableCell() { + return true; + } } diff --git a/src/main/java/com/glodblock/github/client/gui/GuiFluidStorageBus.java b/src/main/java/com/glodblock/github/client/gui/GuiFluidStorageBus.java index d216071ce..85a3de418 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiFluidStorageBus.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiFluidStorageBus.java @@ -11,7 +11,7 @@ import com.glodblock.github.common.parts.PartFluidStorageBus; import com.glodblock.github.inventory.InventoryHandler; import com.glodblock.github.inventory.gui.GuiType; -import com.glodblock.github.network.CPacketFluidPatternTermBtns; +import com.glodblock.github.network.CPacketFluidTerminalBtns; import com.glodblock.github.util.NameConst; import appeng.api.config.AccessRestriction; @@ -89,9 +89,9 @@ protected void actionPerformed(final GuiButton btn) { super.actionPerformed(btn); final boolean backwards = Mouse.isButtonDown(1); if (btn == this.partition) { - FluidCraft.proxy.netHandler.sendToServer(new CPacketFluidPatternTermBtns("StorageBus.Action", "Partition")); + FluidCraft.proxy.netHandler.sendToServer(new CPacketFluidTerminalBtns("StorageBus.Action", "Partition")); } else if (btn == this.clear) { - FluidCraft.proxy.netHandler.sendToServer(new CPacketFluidPatternTermBtns("StorageBus.Action", "Clear")); + FluidCraft.proxy.netHandler.sendToServer(new CPacketFluidTerminalBtns("StorageBus.Action", "Clear")); } else if (btn == this.priority) { InventoryHandler.switchGui(GuiType.PRIORITY); } else if (btn == this.rwMode) { diff --git a/src/main/java/com/glodblock/github/client/gui/GuiInterfaceWireless.java b/src/main/java/com/glodblock/github/client/gui/GuiInterfaceWireless.java index d855ba0d7..feca4fe7c 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiInterfaceWireless.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiInterfaceWireless.java @@ -34,6 +34,7 @@ import com.glodblock.github.FluidCraft; import com.glodblock.github.client.gui.base.FCBaseMEGui; import com.glodblock.github.client.gui.container.ContainerInterfaceWireless; +import com.glodblock.github.client.gui.widget.GuiFCImgButton; import com.glodblock.github.inventory.item.IWirelessTerminal; import com.glodblock.github.network.CPacketRenamer; diff --git a/src/main/java/com/glodblock/github/client/gui/GuiItemMonitor.java b/src/main/java/com/glodblock/github/client/gui/GuiItemMonitor.java index d95d7e865..b507f1e82 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiItemMonitor.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiItemMonitor.java @@ -37,6 +37,7 @@ public void postUpdate(final List list, boolean resort) { public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { this.fontRendererObj.drawString(this.getGuiDisplayName(GuiText.Terminal.getLocal()), 8, 6, 4210752); this.fontRendererObj.drawString(GuiText.inventory.getLocal(), 8, this.ySize - 96 + 3, 4210752); + super.drawFG(offsetX, offsetY, mouseX, mouseY); } @Override diff --git a/src/main/java/com/glodblock/github/client/gui/GuiLevelMaintainer.java b/src/main/java/com/glodblock/github/client/gui/GuiLevelMaintainer.java index e72266429..b0972396b 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiLevelMaintainer.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiLevelMaintainer.java @@ -22,6 +22,9 @@ import com.glodblock.github.FluidCraft; import com.glodblock.github.client.gui.container.ContainerLevelMaintainer; +import com.glodblock.github.client.gui.widget.FCGuiLineField; +import com.glodblock.github.client.gui.widget.FCGuiTextField; +import com.glodblock.github.client.gui.widget.GuiFCImgButton; import com.glodblock.github.common.item.ItemWirelessUltraTerminal; import com.glodblock.github.common.parts.PartLevelTerminal; import com.glodblock.github.common.tile.TileLevelMaintainer; diff --git a/src/main/java/com/glodblock/github/client/gui/GuiLevelTerminal.java b/src/main/java/com/glodblock/github/client/gui/GuiLevelTerminal.java index 0cccefc9d..507544225 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiLevelTerminal.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiLevelTerminal.java @@ -43,6 +43,7 @@ import com.glodblock.github.FluidCraft; import com.glodblock.github.client.gui.base.FCBaseMEGui; import com.glodblock.github.client.gui.container.ContainerLevelTerminal; +import com.glodblock.github.client.gui.widget.GuiFCImgButton; import com.glodblock.github.common.tile.TileLevelMaintainer.State; import com.glodblock.github.common.tile.TileLevelMaintainer.TLMTags; import com.glodblock.github.inventory.InventoryHandler; diff --git a/src/main/java/com/glodblock/github/client/gui/GuiMagnet.java b/src/main/java/com/glodblock/github/client/gui/GuiMagnet.java new file mode 100644 index 000000000..05b02d103 --- /dev/null +++ b/src/main/java/com/glodblock/github/client/gui/GuiMagnet.java @@ -0,0 +1,178 @@ +package com.glodblock.github.client.gui; + +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +import com.glodblock.github.FluidCraft; +import com.glodblock.github.client.gui.container.ContainerMagnet; +import com.glodblock.github.client.gui.widget.FCGuiBaseButton; +import com.glodblock.github.client.gui.widget.GuiFCImgButton; +import com.glodblock.github.common.item.ItemMagnetCard; +import com.glodblock.github.common.item.ItemWirelessUltraTerminal; +import com.glodblock.github.inventory.InventoryHandler; +import com.glodblock.github.network.CPacketFluidTerminalBtns; +import com.glodblock.github.util.NameConst; + +import appeng.api.config.ActionItems; +import appeng.api.config.Settings; +import appeng.api.storage.ITerminalHost; +import appeng.client.gui.AEBaseMEGui; +import appeng.client.gui.widgets.GuiImgButton; +import appeng.client.gui.widgets.GuiTabButton; + +public class GuiMagnet extends AEBaseMEGui { + + protected FCGuiBaseButton listModeBtn; + protected ContainerMagnet cont; + private static final ResourceLocation TEX_BG = FluidCraft.resource("textures/gui/magnet_filter.png"); + + protected Component components[] = new Component[3]; + protected GuiTabButton originalGuiBtn; + protected GuiImgButton clearBtn; + + public GuiMagnet(InventoryPlayer ip, ITerminalHost container) { + super(new ContainerMagnet(ip, container)); + this.xSize = 195; + this.ySize = 214; + this.cont = (ContainerMagnet) this.inventorySlots; + + } + + private class Component { + + private GuiFCImgButton enable; + private GuiFCImgButton disable; + private String action; + + private boolean var; + + public Component(int x, int y, boolean var, String action) { + this.enable = new GuiFCImgButton(x, y, "ENABLE_12x", "ENABLE", false); + this.disable = new GuiFCImgButton(x, y, "DISABLE_12x", "DISABLE", false); + this.var = var; + this.action = action; + buttonList.add(this.enable); + buttonList.add(this.disable); + } + + public boolean sameBtn(GuiButton btn) { + return btn == this.enable || btn == this.disable; + } + + public boolean getVar() { + return this.var; + } + + public void setVar(boolean var) { + this.var = var; + } + + public void send() { + FluidCraft.proxy.netHandler.sendToServer(new CPacketFluidTerminalBtns(this.action, !this.getVar())); + } + + public void draw() { + if (var) { + this.enable.visible = true; + this.disable.visible = false; + } else { + this.enable.visible = false; + this.disable.visible = true; + } + } + } + + @Override + public void initGui() { + super.initGui(); + this.buttonList.clear(); + + this.buttonList.add( + this.listModeBtn = new FCGuiBaseButton( + 0, + this.guiLeft + 86, + this.guiTop + 4, + 64, + 14, + NameConst.i18n( + this.cont.listMode == ItemMagnetCard.ListMode.WhiteList + ? NameConst.GUI_MAGNET_CARD_WhiteList + : NameConst.GUI_MAGNET_CARD_BlackList))); + this.components[0] = new Component( + this.guiLeft + 156, + this.guiTop + 18, + this.cont.nbt, + "WirelessTerminal.magnet.NBT"); + this.components[1] = new Component( + this.guiLeft + 156, + this.guiTop + 31, + this.cont.meta, + "WirelessTerminal.magnet.Meta"); + this.components[2] = new Component( + this.guiLeft + 156, + this.guiTop + 44, + this.cont.ore, + "WirelessTerminal.magnet.Ore"); + + this.buttonList.add( + this.originalGuiBtn = new GuiTabButton( + this.guiLeft + this.xSize - 44, + this.guiTop - 4, + this.cont.getPortableCell().getItemStack(), + this.cont.getPortableCell().getItemStack().getDisplayName(), + itemRender)); + this.originalGuiBtn.setHideEdge(13); // GuiTabButton implementation // + + this.clearBtn = new GuiImgButton(this.guiLeft + 8, this.guiTop + 48, Settings.ACTIONS, ActionItems.CLOSE); + this.clearBtn.setHalfSize(true); + this.buttonList.add(this.clearBtn); + } + + @Override + public void drawFG(int offsetX, int offsetY, int mouseX, int mouseY) { + this.fontRendererObj.drawString(getGuiDisplayName(NameConst.i18n(NameConst.GUI_MAGNET_CARD)), 8, 6, 0x404040); + this.fontRendererObj + .drawString(getGuiDisplayName(NameConst.i18n(NameConst.GUI_MAGNET_CARD_NBT)), 61, 22, 0x404040); + this.fontRendererObj + .drawString(getGuiDisplayName(NameConst.i18n(NameConst.GUI_MAGNET_CARD_META)), 61, 34, 0x404040); + this.fontRendererObj + .drawString(getGuiDisplayName(NameConst.i18n(NameConst.GUI_MAGNET_CARD_ORE)), 61, 46, 0x404040); + this.components[0].setVar(this.cont.nbt); + this.components[1].setVar(this.cont.meta); + this.components[2].setVar(this.cont.ore); + for (Component c : components) { + c.draw(); + } + this.listModeBtn.displayString = NameConst.i18n( + this.cont.listMode == ItemMagnetCard.ListMode.WhiteList ? NameConst.GUI_MAGNET_CARD_WhiteList + : NameConst.GUI_MAGNET_CARD_BlackList); + } + + @Override + public void drawBG(int offsetX, int offsetY, int mouseX, int mouseY) { + mc.getTextureManager().bindTexture(TEX_BG); + drawTexturedModalRect(offsetX, offsetY, 0, 0, 176, ySize); + } + + @Override + protected void actionPerformed(GuiButton btn) { + for (Component c : components) { + if (c.sameBtn(btn)) { + c.send(); + break; + } + } + if (btn == this.listModeBtn) { + FluidCraft.proxy.netHandler.sendToServer( + new CPacketFluidTerminalBtns( + "WirelessTerminal.magnet.FilterMode", + this.cont.listMode != ItemMagnetCard.ListMode.WhiteList)); + } else if (btn == this.originalGuiBtn) { + InventoryHandler.switchGui(ItemWirelessUltraTerminal.readMode(this.cont.getPortableCell().getItemStack())); + } else if (btn == this.clearBtn) { + FluidCraft.proxy.netHandler.sendToServer(new CPacketFluidTerminalBtns("WirelessTerminal.magnet.clear", 1)); + } + super.actionPerformed(btn); + } +} diff --git a/src/main/java/com/glodblock/github/client/gui/base/FCBaseMEGui.java b/src/main/java/com/glodblock/github/client/gui/base/FCBaseMEGui.java index 90f29f01f..63cefe827 100644 --- a/src/main/java/com/glodblock/github/client/gui/base/FCBaseMEGui.java +++ b/src/main/java/com/glodblock/github/client/gui/base/FCBaseMEGui.java @@ -1,27 +1,39 @@ package com.glodblock.github.client.gui.base; +import static com.glodblock.github.util.NameConst.TT_FLUID_TERMINAL_AMOUNT; + +import java.text.NumberFormat; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; -import com.glodblock.github.client.gui.GuiEssentiaTerminal; -import com.glodblock.github.client.gui.GuiFCImgButton; -import com.glodblock.github.client.gui.GuiFluidCraftingWireless; -import com.glodblock.github.client.gui.GuiFluidPatternExWireless; -import com.glodblock.github.client.gui.GuiFluidPatternWireless; -import com.glodblock.github.client.gui.GuiFluidPortableCell; -import com.glodblock.github.client.gui.GuiInterfaceWireless; -import com.glodblock.github.client.gui.GuiLevelWireless; +import com.glodblock.github.FluidCraft; +import com.glodblock.github.client.gui.*; import com.glodblock.github.client.gui.container.base.FCBaseContainer; +import com.glodblock.github.client.gui.container.base.FCContainerMonitor; +import com.glodblock.github.client.gui.widget.GuiFCImgButton; +import com.glodblock.github.common.item.ItemMagnetCard; import com.glodblock.github.common.item.ItemWirelessUltraTerminal; import com.glodblock.github.inventory.gui.GuiType; import com.glodblock.github.inventory.item.IWirelessTerminal; +import com.glodblock.github.network.CPacketFluidTerminalBtns; import com.glodblock.github.util.ModAndClassUtil; +import com.glodblock.github.util.Util; +import appeng.api.storage.StorageChannel; +import appeng.api.storage.data.IAEItemStack; import appeng.client.gui.AEBaseMEGui; +import appeng.client.me.SlotME; +import appeng.container.slot.SlotFake; +import appeng.core.AEConfig; +import appeng.util.Platform; public abstract class FCBaseMEGui extends AEBaseMEGui { @@ -32,8 +44,19 @@ public abstract class FCBaseMEGui extends AEBaseMEGui { protected GuiFCImgButton InterfaceTerminal; protected GuiFCImgButton LevelTerminal; protected GuiFCImgButton PatternTerminalEx; + protected GuiFCImgButton magnetOff; + protected GuiFCImgButton magnetInv; + protected GuiFCImgButton magnetME; + protected GuiFCImgButton magnetFilter; + protected GuiFCImgButton restockEnableBtn; + protected GuiFCImgButton restockDisableBtn; + protected GuiFCImgButton dataSyncEnableBtn; + protected GuiFCImgButton dataSyncDisableBtn; protected List termBtns = new ArrayList<>(); protected boolean drawSwitchGuiBtn; + private boolean hasMagnetCard = false; + private StorageChannel channel = null; + private static boolean sync = true; public FCBaseMEGui(final InventoryPlayer inventoryPlayer, Container container) { super(container); @@ -42,16 +65,80 @@ public FCBaseMEGui(final InventoryPlayer inventoryPlayer, Container container) { if (target instanceof IWirelessTerminal && ((IWirelessTerminal) target).getItemStack().getItem() instanceof ItemWirelessUltraTerminal) { this.drawSwitchGuiBtn = true; + this.hasMagnetCard = Util.Wireless.hasMagnetCard(((IWirelessTerminal) target).getItemStack()); + this.channel = ((IWirelessTerminal) target).getChannel(); } } } + @Override + public List handleItemTooltip(final ItemStack stack, final int mouseX, final int mouseY, + final List currentToolTip) { + if (this instanceof GuiFluidMonitor) { + if (stack != null && !isShiftKeyDown()) { + final Slot s = this.getSlot(mouseX, mouseY); + final boolean isSlotME = s instanceof SlotME; + if (isSlotME || s instanceof SlotFake) { + final int BigNumber = AEConfig.instance.useTerminalUseLargeFont() ? 999 : 9999; + + IAEItemStack myStack = null; + + try { + myStack = Platform.getAEStackInSlot(s); + } catch (final Throwable ignore) {} + + if (myStack != null) { + if (myStack.getStackSize() > BigNumber || (myStack.getStackSize() > 1)) { + final String formattedAmount = NumberFormat.getNumberInstance(Locale.US) + .format(myStack.getStackSize()); + final String format = I18n.format(TT_FLUID_TERMINAL_AMOUNT, formattedAmount); + currentToolTip.add("\u00a77" + format); + } + } + } + } + return currentToolTip; + } else { + return super.handleItemTooltip(stack, mouseX, mouseY, currentToolTip); + } + + } + + protected ItemMagnetCard.Mode getMagnetMode() { + if (this.hasMagnetCard) { + return ((FCBaseContainer) this.inventorySlots).mode; + } + return null; + } + + protected boolean isRestock() { + return ((FCBaseContainer) this.inventorySlots).restock; + } + @Override public void onGuiClosed() { super.onGuiClosed(); } + protected void setSyncState() { + if (this.inventorySlots instanceof FCContainerMonitor && !isPortableCell()) { + this.buttonList.add( + this.dataSyncEnableBtn = new GuiFCImgButton( + this.guiLeft + this.xSize - 18, + this.guiTop + this.ySize - 44, + "DATA_SYNC", + "ENABLE")); + this.buttonList.add( + this.dataSyncDisableBtn = new GuiFCImgButton( + this.guiLeft + this.xSize - 18, + this.guiTop + this.ySize - 44, + "DATA_SYNC", + "DISABLE")); + } + } + protected void initGuiDone() { + this.setSyncState(); if (drawSwitchGuiBtn) { drawSwitchGuiBtns(); } @@ -67,6 +154,46 @@ protected void drawSwitchGuiBtns() { if (!termBtns.isEmpty()) { this.termBtns.clear(); } + if (this.getMagnetMode() != null && this.channel == StorageChannel.ITEMS) { + this.buttonList.add( + this.magnetOff = new GuiFCImgButton( + this.guiLeft + this.xSize - 18, + this.guiTop + this.ySize - 124, + "MAGNET_CARD", + "OFF")); + this.buttonList.add( + this.magnetInv = new GuiFCImgButton( + this.guiLeft + this.xSize - 18, + this.guiTop + this.ySize - 124, + "MAGNET_CARD", + "INV")); + this.buttonList.add( + this.magnetME = new GuiFCImgButton( + this.guiLeft + this.xSize - 18, + this.guiTop + this.ySize - 124, + "MAGNET_CARD", + "ME")); + this.buttonList.add( + this.magnetFilter = new GuiFCImgButton( + this.guiLeft + this.xSize - 18, + this.guiTop + this.ySize - 104, + "MAGNET_CARD", + "FILTER")); + } + if (this.channel == StorageChannel.ITEMS) { + this.buttonList.add( + this.restockEnableBtn = new GuiFCImgButton( + this.guiLeft + this.xSize - 18, + this.guiTop + this.ySize - 84, + "RESTOCK", + "ENABLE")); + this.buttonList.add( + this.restockDisableBtn = new GuiFCImgButton( + this.guiLeft + this.xSize - 18, + this.guiTop + this.ySize - 84, + "RESTOCK", + "DISABLE")); + } if (!(this instanceof GuiFluidCraftingWireless)) { this.buttonList.add( this.CraftingTerminal = new GuiFCImgButton( @@ -137,6 +264,25 @@ protected void addSwitchGuiBtns() { this.buttonList.addAll(termBtns); } + @Override + public void drawFG(int offsetX, int offsetY, int mouseX, int mouseY) { + if (isPortableCell()) return; + if (getMagnetMode() != null && this.channel == StorageChannel.ITEMS) { + GuiFCImgButton[] magnetButtons = { this.magnetOff, this.magnetInv, this.magnetME }; + for (int i = 0; i < magnetButtons.length; i++) { + magnetButtons[i].visible = getMagnetMode().ordinal() == i; + } + } + if (this.inventorySlots instanceof FCContainerMonitor) { + this.dataSyncDisableBtn.visible = !sync; + this.dataSyncEnableBtn.visible = sync; + } + if (this.drawSwitchGuiBtn && this.channel == StorageChannel.ITEMS) { // Only ultra terminal + this.restockDisableBtn.visible = !this.isRestock(); + this.restockEnableBtn.visible = this.isRestock(); + } + } + @Override protected void actionPerformed(final GuiButton btn) { if (btn instanceof GuiFCImgButton) { @@ -155,7 +301,23 @@ protected void actionPerformed(final GuiButton btn) { } else if (btn == this.PatternTerminalEx) { ItemWirelessUltraTerminal.switchTerminal(this.mc.thePlayer, GuiType.WIRELESS_FLUID_PATTERN_TERMINAL_EX); } + if (btn == this.magnetOff || btn == this.magnetME || btn == this.magnetInv) { + FluidCraft.proxy.netHandler.sendToServer( + new CPacketFluidTerminalBtns("WirelessTerminal.MagnetMode", this.getMagnetMode().ordinal())); + } else if (btn == this.magnetFilter) { + FluidCraft.proxy.netHandler + .sendToServer(new CPacketFluidTerminalBtns("WirelessTerminal.OpenMagnet", 0)); + } else if (btn == this.restockDisableBtn || btn == this.restockEnableBtn) { + FluidCraft.proxy.netHandler.sendToServer(new CPacketFluidTerminalBtns("WirelessTerminal.Stock", 1)); + } else if (btn == this.dataSyncDisableBtn || btn == this.dataSyncEnableBtn) { + sync = !sync; + FluidCraft.proxy.netHandler.sendToServer(new CPacketFluidTerminalBtns("Terminal.Sync", sync)); + } } super.actionPerformed(btn); } + + protected boolean isPortableCell() { + return false; + } } diff --git a/src/main/java/com/glodblock/github/client/gui/base/FCGuiEncodeTerminal.java b/src/main/java/com/glodblock/github/client/gui/base/FCGuiEncodeTerminal.java index 13cdac569..7bc71304d 100644 --- a/src/main/java/com/glodblock/github/client/gui/base/FCGuiEncodeTerminal.java +++ b/src/main/java/com/glodblock/github/client/gui/base/FCGuiEncodeTerminal.java @@ -8,14 +8,14 @@ import org.lwjgl.opengl.GL11; import com.glodblock.github.FluidCraft; -import com.glodblock.github.client.gui.GuiFCImgButton; import com.glodblock.github.client.gui.GuiItemMonitor; import com.glodblock.github.client.gui.container.base.FCContainerEncodeTerminal; +import com.glodblock.github.client.gui.widget.GuiFCImgButton; import com.glodblock.github.common.item.ItemFluidPacket; import com.glodblock.github.inventory.InventoryHandler; import com.glodblock.github.inventory.gui.GuiType; import com.glodblock.github.inventory.slot.SlotSingleItem; -import com.glodblock.github.network.CPacketFluidPatternTermBtns; +import com.glodblock.github.network.CPacketFluidTerminalBtns; import com.glodblock.github.util.ModAndClassUtil; import appeng.api.storage.ITerminalHost; @@ -67,17 +67,16 @@ public void initGui() { super.initGui(); this.buttonList.add( this.autoFillPatternEnableBtn = new GuiFCImgButton( - this.guiLeft - 18, - this.offsetY, + this.guiLeft + this.xSize - 18, + this.guiTop + this.ySize - 64, "FILL_PATTERN", "DO_FILL")); this.buttonList.add( this.autoFillPatternDisableBtn = new GuiFCImgButton( - this.guiLeft - 18, - this.offsetY, + this.guiLeft + this.xSize - 18, + this.guiTop + this.ySize - 64, "NOT_FILL_PATTERN", "DONT_FILL")); - this.offsetY += 20; } @Override @@ -87,48 +86,44 @@ protected void actionPerformed(final GuiButton btn) { InventoryHandler.switchGui(GuiType.CRAFTING_STATUS); } else if (this.tabCraftButton == btn || this.tabProcessButton == btn) { FluidCraft.proxy.netHandler.sendToServer( - new CPacketFluidPatternTermBtns( + new CPacketFluidTerminalBtns( "PatternTerminal.CraftMode", this.tabProcessButton == btn ? MODE_CRAFTING : MODE_PROCESSING)); } else if (this.encodeBtn == btn) { FluidCraft.proxy.netHandler.sendToServer( - new CPacketFluidPatternTermBtns( + new CPacketFluidTerminalBtns( "PatternTerminal.Encode", (isCtrlKeyDown() ? 1 : 0) << 1 | (isShiftKeyDown() ? 1 : 0))); } else if (this.clearBtn == btn) { - FluidCraft.proxy.netHandler.sendToServer(new CPacketFluidPatternTermBtns("PatternTerminal.Clear", "1")); + FluidCraft.proxy.netHandler.sendToServer(new CPacketFluidTerminalBtns("PatternTerminal.Clear", "1")); } else if (this.substitutionsEnabledBtn == btn || this.substitutionsDisabledBtn == btn) { FluidCraft.proxy.netHandler.sendToServer( - new CPacketFluidPatternTermBtns( + new CPacketFluidTerminalBtns( "PatternTerminal.Substitute", this.substitutionsEnabledBtn == btn ? SUBSTITUTION_DISABLE : SUBSTITUTION_ENABLE)); } else if (this.fluidPrioritizedEnabledBtn == btn || this.fluidPrioritizedDisabledBtn == btn) { FluidCraft.proxy.netHandler.sendToServer( - new CPacketFluidPatternTermBtns( + new CPacketFluidTerminalBtns( "PatternTerminal.Prioritize", isShiftKeyDown() ? "2" : (container.prioritize ? PRIORITY_DISABLE : PRIORITY_ENABLE))); } else if (this.invertBtn == btn) { FluidCraft.proxy.netHandler.sendToServer( - new CPacketFluidPatternTermBtns("PatternTerminal.Invert", container.inverted ? "0" : "1")); + new CPacketFluidTerminalBtns("PatternTerminal.Invert", container.inverted ? "0" : "1")); } else if (this.combineDisableBtn == btn || this.combineEnableBtn == btn) { FluidCraft.proxy.netHandler.sendToServer( - new CPacketFluidPatternTermBtns( - "PatternTerminal.Combine", - this.combineDisableBtn == btn ? "1" : "0")); + new CPacketFluidTerminalBtns("PatternTerminal.Combine", this.combineDisableBtn == btn ? "1" : "0")); } else if (ModAndClassUtil.isDoubleButton && doubleBtn == btn) { FluidCraft.proxy.netHandler.sendToServer( - new CPacketFluidPatternTermBtns( + new CPacketFluidTerminalBtns( "PatternTerminal.Double", Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) ? "1" : "0")); } else if (ModAndClassUtil.isBeSubstitutionsButton && beSubstitutionsDisabledBtn == btn) { - FluidCraft.proxy.netHandler - .sendToServer(new CPacketFluidPatternTermBtns("PatternTerminal.beSubstitute", "1")); + FluidCraft.proxy.netHandler.sendToServer(new CPacketFluidTerminalBtns("PatternTerminal.beSubstitute", "1")); } else if (ModAndClassUtil.isBeSubstitutionsButton && beSubstitutionsEnabledBtn == btn) { - FluidCraft.proxy.netHandler - .sendToServer(new CPacketFluidPatternTermBtns("PatternTerminal.beSubstitute", "0")); + FluidCraft.proxy.netHandler.sendToServer(new CPacketFluidTerminalBtns("PatternTerminal.beSubstitute", "0")); } else if (this.autoFillPatternDisableBtn == btn || this.autoFillPatternEnableBtn == btn) { FluidCraft.proxy.netHandler.sendToServer( - new CPacketFluidPatternTermBtns( + new CPacketFluidTerminalBtns( "PatternTerminal.AutoFillerPattern", this.autoFillPatternDisableBtn == btn ? "1" : "0")); } diff --git a/src/main/java/com/glodblock/github/client/gui/base/FCGuiMonitor.java b/src/main/java/com/glodblock/github/client/gui/base/FCGuiMonitor.java index f331106b0..7103977d9 100644 --- a/src/main/java/com/glodblock/github/client/gui/base/FCGuiMonitor.java +++ b/src/main/java/com/glodblock/github/client/gui/base/FCGuiMonitor.java @@ -16,9 +16,9 @@ import org.lwjgl.input.Mouse; import com.glodblock.github.FluidCraft; -import com.glodblock.github.client.gui.FCGuiTextField; import com.glodblock.github.client.gui.GuiItemMonitor; import com.glodblock.github.client.gui.container.base.FCContainerMonitor; +import com.glodblock.github.client.gui.widget.FCGuiTextField; import com.glodblock.github.inventory.InventoryHandler; import com.glodblock.github.inventory.gui.GuiType; import com.glodblock.github.network.CPacketInventoryAction; @@ -783,4 +783,8 @@ public void handleKeyboardInput() { hasShiftKeyDown = false; } } + + public IDisplayRepo getRepo() { + return this.repo; + } } diff --git a/src/main/java/com/glodblock/github/client/gui/container/ContainerMagnet.java b/src/main/java/com/glodblock/github/client/gui/container/ContainerMagnet.java new file mode 100644 index 000000000..1f6f7ebef --- /dev/null +++ b/src/main/java/com/glodblock/github/client/gui/container/ContainerMagnet.java @@ -0,0 +1,90 @@ +package com.glodblock.github.client.gui.container; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; + +import com.glodblock.github.client.gui.container.base.FCBaseContainer; +import com.glodblock.github.common.item.ItemMagnetCard; +import com.glodblock.github.inventory.item.*; + +import appeng.api.storage.ITerminalHost; +import appeng.container.guisync.GuiSync; +import appeng.container.slot.*; +import appeng.util.Platform; + +public class ContainerMagnet extends FCBaseContainer implements IOptionalSlotHost { + + @GuiSync(101) + public ItemMagnetCard.ListMode listMode; + + @GuiSync(102) + public boolean nbt; + + @GuiSync(103) + public boolean meta; + + @GuiSync(104) + public boolean ore; + protected SlotFake[] filterSlots; + protected final IInventory filter; + + public ContainerMagnet(InventoryPlayer ip, ITerminalHost monitorable) { + super(ip, monitorable); + this.filter = ((IItemTerminal) monitorable).getInventoryByName("config"); + this.filterSlots = new SlotFake[27]; + for (int y = 0; y < 3; y++) { + for (int x = 0; x < 9; x++) { + this.addSlotToContainer( + this.filterSlots[x + y * 9] = new SlotPatternOutputs( + this.filter, + this, + x + y * 9, + 8 + x * 18, + 58 + y * 18, + 0, + 0, + 1)); + } + } + bindPlayerInventory(ip, 0, 126); + } + + @Override + protected boolean isWirelessTerminal() { + return true; + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer p, int idx) { + AppEngSlot clickSlot = (AppEngSlot) this.inventorySlots.get(idx); + if (clickSlot == null || !clickSlot.getHasStack()) return null; + ItemStack tis = clickSlot.getStack(); + for (SlotFake slot : this.filterSlots) { + if (!slot.getHasStack()) { + slot.putStack(tis); + detectAndSendChanges(); + break; + } + } + return super.transferStackInSlot(p, idx); + } + + @Override + public void detectAndSendChanges() { + if (Platform.isServer() && this.getPortableCell() instanceof IWirelessMagnetCardFilter) { + IWirelessMagnetCardFilter host = (IWirelessMagnetCardFilter) this.getHost(); + this.listMode = host.getListMode(); + this.meta = host.getMetaMode(); + this.nbt = host.getNBTMode(); + this.ore = host.getOreMode(); + } + super.detectAndSendChanges(); + } + + @Override + public boolean isSlotEnabled(int idx) { + return true; + } +} diff --git a/src/main/java/com/glodblock/github/client/gui/container/base/FCBaseContainer.java b/src/main/java/com/glodblock/github/client/gui/container/base/FCBaseContainer.java index 5676f8b85..9be67fea8 100644 --- a/src/main/java/com/glodblock/github/client/gui/container/base/FCBaseContainer.java +++ b/src/main/java/com/glodblock/github/client/gui/container/base/FCBaseContainer.java @@ -2,33 +2,46 @@ import net.minecraft.entity.player.InventoryPlayer; +import com.glodblock.github.common.item.ItemMagnetCard; import com.glodblock.github.inventory.item.IFluidPortableCell; +import com.glodblock.github.inventory.item.IItemTerminal; +import com.glodblock.github.inventory.item.IWirelessExtendCard; import com.glodblock.github.util.Util; import appeng.api.storage.ITerminalHost; import appeng.container.AEBaseContainer; +import appeng.container.guisync.GuiSync; +import appeng.util.Platform; public abstract class FCBaseContainer extends AEBaseContainer { private int ticks; private final double powerMultiplier = 0.5; - private IFluidPortableCell host; + private ITerminalHost host; private int slot = -1; private final InventoryPlayer ip; + @GuiSync(105) + public boolean restock = false; + + @GuiSync(106) + public ItemMagnetCard.Mode mode = ItemMagnetCard.Mode.Off; + + @GuiSync(107) + public boolean sync = true; public FCBaseContainer(InventoryPlayer ip, ITerminalHost monitorable) { super(ip, monitorable); this.ip = ip; + this.host = monitorable; if (isWirelessTerminal()) { - host = (IFluidPortableCell) monitorable; this.slot = lockSlot(); } } private int lockSlot() { if (isWirelessTerminal()) { - if (this.host != null) { - final int slotIndex = this.host.getInventorySlot(); + if (this.host instanceof IFluidPortableCell) { + final int slotIndex = ((IFluidPortableCell) this.host).getInventorySlot(); if (Util.GuiHelper.decodeInvType(slotIndex).getLeft() == Util.GuiHelper.InvType.PLAYER_INV) { this.lockPlayerInventorySlot(slotIndex); } @@ -44,13 +57,22 @@ private int lockSlot() { public void detectAndSendChanges() { if (isWirelessTerminal()) { - this.ticks = Util.drainItemPower( + this.ticks = Util.Wireless.drainItemPower( this, this.getPlayerInv(), this.slot, this.ticks, this.getPowerMultiplier(), - this.host); + ((IFluidPortableCell) this.host)); + } + if (Platform.isServer()) { + if (this.host instanceof IWirelessExtendCard) { + this.mode = ((IWirelessExtendCard) this.host).getMagnetCardMode(); + this.restock = ((IWirelessExtendCard) this.host).isRestock(); + } + if (this.host != null && this.host instanceof IItemTerminal) { + this.sync = ((IItemTerminal) this.host).getSyncData(); + } } super.detectAndSendChanges(); } @@ -59,4 +81,15 @@ public double getPowerMultiplier() { return this.powerMultiplier; } + public ITerminalHost getHost() { + return this.host; + } + + public IFluidPortableCell getPortableCell() { + if (this.host instanceof IFluidPortableCell) { + return (IFluidPortableCell) this.host; + } else { + return null; + } + } } diff --git a/src/main/java/com/glodblock/github/client/gui/container/base/FCContainerMonitor.java b/src/main/java/com/glodblock/github/client/gui/container/base/FCContainerMonitor.java index 80afc26c6..667194a29 100644 --- a/src/main/java/com/glodblock/github/client/gui/container/base/FCContainerMonitor.java +++ b/src/main/java/com/glodblock/github/client/gui/container/base/FCContainerMonitor.java @@ -51,6 +51,7 @@ public abstract class FCContainerMonitor> extends FCBaseCo @GuiSync(98) public boolean hasPower = false; + protected boolean forceSync = true; protected IConfigManagerHost gui; protected IConfigManager serverCM; @@ -105,7 +106,10 @@ public void detectAndSendChanges() { } } } - processItemList(); + if (sync || forceSync) { + forceSync = false; + processItemList(); + } this.updatePowerStatus(); final boolean oldAccessible = this.canAccessViewCells; this.canAccessViewCells = this.host instanceof WirelessTerminalGuiObject @@ -230,7 +234,4 @@ public void updateSetting(final IConfigManager manager, final Enum settingName, } } - public ITerminalHost getHost() { - return this.host; - } } diff --git a/src/main/java/com/glodblock/github/client/gui/widget/FCGuiBaseButton.java b/src/main/java/com/glodblock/github/client/gui/widget/FCGuiBaseButton.java new file mode 100644 index 000000000..e6c7180af --- /dev/null +++ b/src/main/java/com/glodblock/github/client/gui/widget/FCGuiBaseButton.java @@ -0,0 +1,85 @@ +package com.glodblock.github.client.gui.widget; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.util.ResourceLocation; + +import org.lwjgl.opengl.GL11; + +public class FCGuiBaseButton extends GuiButton { + + // copy from wct button + protected static final ResourceLocation buttonTextures = new ResourceLocation( + "minecraft", + "textures/gui/widgets.png"); + + public FCGuiBaseButton(int id, int xPosition, int yPosition, int width, int height, String displayString) { + super(id, xPosition, yPosition, width, height, displayString); + this.enabled = true; + this.visible = true; + this.id = id; + this.xPosition = xPosition; + this.yPosition = yPosition; + this.width = width; + this.height = height; + this.displayString = displayString; + } + + @Override + public void drawButton(Minecraft mc, int mouseX, int mouseY) { + if (this.visible) { + FontRenderer fontrenderer = mc.fontRenderer; + mc.getTextureManager().bindTexture(buttonTextures); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.field_146123_n = mouseX >= this.xPosition && mouseY >= this.yPosition + && mouseX < this.xPosition + this.width + && mouseY < this.yPosition + this.height; + int k = this.getHoverState(this.field_146123_n); + GL11.glEnable(GL11.GL_BLEND); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + + this.drawTexturedModalRect(this.xPosition, this.yPosition, 0, 46 + k * 20, this.width / 2, this.height); + this.drawTexturedModalRect( + this.xPosition + this.width / 2, + this.yPosition, + 200 - this.width / 2, + 46 + k * 20, + this.width / 2, + this.height - 2); + this.drawTexturedModalRect( + this.xPosition + 2, + this.yPosition + (this.height - 2), + 200 - (this.width - 2), + 64 + k * 20, + this.width - 2, + 2); + this.drawTexturedModalRect( + this.xPosition, + this.yPosition + (this.height - 1), + 200 - this.width, + 65 + k * 20, + this.width, + 1); + this.mouseDragged(mc, mouseX, mouseY); + int l = 14737632; + + if (packedFGColour != 0) { + l = packedFGColour; + } else if (!this.enabled) { + l = 10526880; + } else if (this.field_146123_n) { + l = 16777120; + } + + this.drawCenteredString( + fontrenderer, + this.displayString, + this.xPosition + this.width / 2, + this.yPosition + (this.height - 8) / 2, + l); + } + } +} diff --git a/src/main/java/com/glodblock/github/client/gui/FCGuiLineField.java b/src/main/java/com/glodblock/github/client/gui/widget/FCGuiLineField.java similarity index 94% rename from src/main/java/com/glodblock/github/client/gui/FCGuiLineField.java rename to src/main/java/com/glodblock/github/client/gui/widget/FCGuiLineField.java index dd0064dc6..33aae7c03 100644 --- a/src/main/java/com/glodblock/github/client/gui/FCGuiLineField.java +++ b/src/main/java/com/glodblock/github/client/gui/widget/FCGuiLineField.java @@ -1,4 +1,4 @@ -package com.glodblock.github.client.gui; +package com.glodblock.github.client.gui.widget; import net.minecraft.client.gui.FontRenderer; diff --git a/src/main/java/com/glodblock/github/client/gui/FCGuiTextField.java b/src/main/java/com/glodblock/github/client/gui/widget/FCGuiTextField.java similarity index 98% rename from src/main/java/com/glodblock/github/client/gui/FCGuiTextField.java rename to src/main/java/com/glodblock/github/client/gui/widget/FCGuiTextField.java index 90f70f8a1..6b5032904 100644 --- a/src/main/java/com/glodblock/github/client/gui/FCGuiTextField.java +++ b/src/main/java/com/glodblock/github/client/gui/widget/FCGuiTextField.java @@ -1,4 +1,4 @@ -package com.glodblock.github.client.gui; +package com.glodblock.github.client.gui.widget; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiTextField; diff --git a/src/main/java/com/glodblock/github/client/gui/GuiFCImgButton.java b/src/main/java/com/glodblock/github/client/gui/widget/GuiFCImgButton.java similarity index 93% rename from src/main/java/com/glodblock/github/client/gui/GuiFCImgButton.java rename to src/main/java/com/glodblock/github/client/gui/widget/GuiFCImgButton.java index 75fda0058..f717b8c1d 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiFCImgButton.java +++ b/src/main/java/com/glodblock/github/client/gui/widget/GuiFCImgButton.java @@ -1,4 +1,4 @@ -package com.glodblock.github.client.gui; +package com.glodblock.github.client.gui.widget; import java.util.HashMap; import java.util.Map; @@ -66,6 +66,16 @@ public GuiFCImgButton(final int x, final int y, final String idx, final String v this.registerApp(22, "SWITCH", "DISABLE", "disable"); this.registerApp(23, "CONFIG", "YES", "open_configuration"); this.registerApp(24, "HIGHLIGHT", "YES", "block_highlight"); + this.registerApp(30, "MAGNET_CARD", "INV", "magnet_card.inv"); + this.registerApp(30, "MAGNET_CARD", "ME", "magnet_card.me"); + this.registerApp(30, "MAGNET_CARD", "FILTER", "magnet_card.filter"); + this.registerApp(31, "MAGNET_CARD", "OFF", "magnet_card.off"); + this.registerApp(32, "DATA_SYNC", "ENABLE", "data_sync.enable"); + this.registerApp(33, "ENABLE_12x", "ENABLE", "enable"); + this.registerApp(34, "DISABLE_12x", "DISABLE", "disable"); + this.registerApp(35, "DATA_SYNC", "DISABLE", "data_sync.disable"); + this.registerApp(36, "RESTOCK", "ENABLE", "restock.on"); + this.registerApp(37, "RESTOCK", "DISABLE", "restock.off"); } } diff --git a/src/main/java/com/glodblock/github/common/Config.java b/src/main/java/com/glodblock/github/common/Config.java index b8a74ddaf..bce5774d8 100644 --- a/src/main/java/com/glodblock/github/common/Config.java +++ b/src/main/java/com/glodblock/github/common/Config.java @@ -15,6 +15,7 @@ public class Config { public static boolean noFluidPacket; public static boolean fluidIOBus; public static boolean removeRecipe; + public static boolean enableTestItemRecipe = true; public static double portableCellBattery; public static boolean fluidP2PInterface; public static int packetSize; diff --git a/src/main/java/com/glodblock/github/common/item/ItemBaseWirelessTerminal.java b/src/main/java/com/glodblock/github/common/item/ItemBaseWirelessTerminal.java index 749264a47..76e0de17c 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemBaseWirelessTerminal.java +++ b/src/main/java/com/glodblock/github/common/item/ItemBaseWirelessTerminal.java @@ -1,13 +1,16 @@ package com.glodblock.github.common.item; -import static com.glodblock.github.loader.recipe.WirelessTerminalRecipe.getInfinityBoosterCard; -import static com.glodblock.github.util.Util.hasInfinityBoosterCard; +import static com.glodblock.github.loader.recipe.WirelessTerminalEnergyRecipe.getEnergyCard; +import static com.glodblock.github.loader.recipe.WirelessTerminalInfinityBoosterRecipe.getInfinityBoosterCard; +import static com.glodblock.github.loader.recipe.WirelessTerminalMagnetRecipe.getMagnetCard; +import static com.glodblock.github.util.Util.Wireless.*; import java.util.List; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -33,17 +36,39 @@ public class ItemBaseWirelessTerminal extends ToolWirelessTerminal implements II protected GuiType type; public static String infinityBoosterCard = "infinityBoosterCard"; + public static String magnetCard = "magnetCard"; + public static String restockItems = "restock"; + public static String infinityEnergyCard = "InfinityEnergyCard"; + public static String syncData = "syncData"; + private static boolean effect = false; public ItemBaseWirelessTerminal(GuiType t) { super(); this.type = t; } + public static void setEffect(boolean e) { + effect = e; + } + + public static boolean getEffect() { + return effect; + } + + @Override + public boolean hasEffect(ItemStack par1ItemStack, int pass) { + if (Platform.isClient()) { + return getEffect(); + } + return super.hasEffect(par1ItemStack, pass); + } + @Override public ItemStack onItemRightClick(final ItemStack item, final World w, final EntityPlayer player) { if (player.isSneaking()) return removeInfinityBoosterCard(player, item); if (ForgeEventFactory.onItemUseStart(player, item, 1) > 0) { if (Platform.isClient()) { + setEffect(false); return item; } IWirelessTermRegistry term = AEApi.instance().registries().wireless(); @@ -88,6 +113,21 @@ private ItemStack removeInfinityBoosterCard(final EntityPlayer player, ItemStack return is; } + private ItemStack removeMagnetCard(final EntityPlayer player, ItemStack is) { + if (hasMagnetCard(is)) { + if (!player.inventory.addItemStackToInventory(getMagnetCard())) { + player.entityDropItem(getMagnetCard(), 0); + } + is.getTagCompound().setBoolean(magnetCard, false); + } + return is; + } + + public static void toggleRestockItemsMode(ItemStack is, boolean state) { + NBTTagCompound data = Platform.openNbtData(is); + data.setBoolean(restockItems, state); + } + @SideOnly(Side.CLIENT) @Override public void addCheckedInformation(ItemStack stack, EntityPlayer player, List lines, @@ -98,6 +138,12 @@ public void addCheckedInformation(ItemStack stack, EntityPlayer player, List getEntitiesInRange(Class entityType, World world, int x, int y, int z, + int distance) { + return world.getEntitiesWithinAABB( + entityType, + AxisAlignedBB.getBoundingBox( + x - distance, + y - distance, + z - distance, + x + distance, + y + distance, + z + distance)); + } + + @SuppressWarnings("unchecked") + public static List getFilteredItems(ItemStack wirelessTerm) { + if (wirelessTerm == null) { + return null; + } + if (wirelessTerm.getItem() instanceof ItemWirelessUltraTerminal) { + if (wirelessTerm.hasTagCompound()) { + NBTTagCompound data = Platform.openNbtData(wirelessTerm); + if (!data.hasKey(filterKey)) { + return Collections.emptyList(); + } + AppEngInternalInventory filterList = new ItemBiggerAppEngInventory(wirelessTerm, filterKey, 27); + ArrayList list = new ArrayList<>(); + filterList.iterator().forEachRemaining(list::add); + return list; + } + } + return Collections.emptyList(); + } + + public static boolean isConfigured(ItemStack wirelessTerm) { + NBTTagCompound data = Platform.openNbtData(wirelessTerm); + return data.hasKey(modeKey); + } + + public static void doMagnet(ItemStack wirelessTerm, World world, EntityPlayer player, + WirelessMagnetCardFilterInventory inv) { + if (Platform.isClient() || wirelessTerm == null + || ItemMagnetCard.getMode(wirelessTerm) == Mode.Off + || player == null + || player.isSneaking() + || !isConfigured(wirelessTerm)) + return; + + Iterator iterator = getEntitiesInRange( + EntityItem.class, + world, + (int) player.posX, + (int) player.posY, + (int) player.posZ, + distanceFromPlayer).iterator(); + IItemList filteredList = inv.getAEFilteredItems(); + while (iterator.hasNext()) { + EntityItem itemToGet = (EntityItem) iterator.next(); + if (itemToGet.func_145800_j() != null && itemToGet.func_145800_j().equals(player.getCommandSenderName())) { + continue; + } + + EntityPlayer closestPlayer = world.getClosestPlayerToEntity(itemToGet, distanceFromPlayer); + + if (closestPlayer != null && closestPlayer != player) { + continue; + } + ItemStack stack = itemToGet.getEntityItem(); + if ((inv.getListMode() == ListMode.WhiteList && !filteredList.isEmpty() + && inv.isItemFiltered(stack, filteredList)) + || (inv.getListMode() == ListMode.BlackList && !inv.isItemFiltered(stack, filteredList))) { + if (itemToGet.delayBeforeCanPickup > 0) { + itemToGet.delayBeforeCanPickup = 0; + } + itemToGet.motionX = itemToGet.motionY = itemToGet.motionZ = 0; + itemToGet.setPosition( + player.posX - 0.2 + (world.rand.nextDouble() * 0.4), + player.posY - 0.6, + player.posZ - 0.2 + (world.rand.nextDouble() * 0.4)); + } + } + + // xp + iterator = getEntitiesInRange( + EntityXPOrb.class, + world, + (int) player.posX, + (int) player.posY, + (int) player.posZ, + distanceFromPlayer).iterator(); + while (iterator.hasNext()) { + EntityXPOrb xpToGet = (EntityXPOrb) iterator.next(); + if (xpToGet.isDead || xpToGet.isInvisible()) { + continue; + } + int xpAmount = xpToGet.xpValue; + xpToGet.xpValue = 0; + player.xpCooldown = 0; + player.addExperience(xpAmount); + xpToGet.setDead(); + xpToGet.setInvisible(true); + world.playSoundAtEntity( + player, + "random.orb", + 0.08F, + 0.5F * ((world.rand.nextFloat() - world.rand.nextFloat()) * 0.7F + 1.8F)); + } + } + + @Override + public ItemMagnetCard register() { + GameRegistry.registerItem(this, NameConst.ITEM_MAGNET_CARD, FluidCraft.MODID); + setCreativeTab(FluidCraftingTabs.INSTANCE); + return this; + } + + @Override + @SuppressWarnings("unchecked") + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List toolTip, boolean flag) { + if (isShiftKeyDown()) { + toolTip.addAll(RenderUtil.listFormattedStringToWidth(NameConst.i18n(NameConst.TT_MAGNET_CARD_DESC))); + } else { + toolTip.add(NameConst.i18n(NameConst.TT_SHIFT_FOR_MORE)); + } + } + + public enum Mode { + Off, + Inv, + ME + } + + public enum ListMode { + WhiteList, + BlackList + } + + public static Mode getMode(ItemStack is) { + if (is != null && Util.Wireless.hasMagnetCard(is) && is.getItem() instanceof ItemWirelessUltraTerminal) { + NBTTagCompound data = Platform.openNbtData(is); + if (data.hasKey(modeKey)) { + return Mode.values()[data.getInteger(modeKey)]; + } + setMode(is, Mode.Off); + } + return Mode.Off; + } + + public static void setMode(ItemStack is, Mode mode) { + if (is != null && Util.Wireless.hasMagnetCard(is) && is.getItem() instanceof ItemWirelessUltraTerminal) { + NBTTagCompound data = Platform.openNbtData(is); + data.setInteger(modeKey, mode.ordinal()); + } + } + +} diff --git a/src/main/java/com/glodblock/github/common/item/ItemQuantumBridgeCard.java b/src/main/java/com/glodblock/github/common/item/ItemQuantumBridgeCard.java new file mode 100644 index 000000000..0923402d3 --- /dev/null +++ b/src/main/java/com/glodblock/github/common/item/ItemQuantumBridgeCard.java @@ -0,0 +1,46 @@ +package com.glodblock.github.common.item; + +import static net.minecraft.client.gui.GuiScreen.isShiftKeyDown; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +import com.glodblock.github.FluidCraft; +import com.glodblock.github.common.tabs.FluidCraftingTabs; +import com.glodblock.github.util.NameConst; +import com.glodblock.github.util.RenderUtil; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class ItemQuantumBridgeCard extends FCBaseItem { + + public ItemQuantumBridgeCard() { + super(); + this.setMaxStackSize(64); + this.setUnlocalizedName(NameConst.ITEM_QUANTUM_BRIDGE_CARD); + this.setTextureName(FluidCraft.resource(NameConst.ITEM_QUANTUM_BRIDGE_CARD).toString()); + } + + @Override + public ItemQuantumBridgeCard register() { + GameRegistry.registerItem(this, NameConst.ITEM_QUANTUM_BRIDGE_CARD, FluidCraft.MODID); + setCreativeTab(FluidCraftingTabs.INSTANCE); + return this; + } + + @Override + @SuppressWarnings("unchecked") + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List toolTip, boolean flag) { + if (isShiftKeyDown()) { + toolTip.addAll( + RenderUtil.listFormattedStringToWidth(NameConst.i18n(NameConst.TT_QUANTUM_BRIDGE_CARD_DESC))); + } else { + toolTip.add(NameConst.i18n(NameConst.TT_SHIFT_FOR_MORE)); + } + } +} diff --git a/src/main/java/com/glodblock/github/common/item/ItemWirelessFluidTerminal.java b/src/main/java/com/glodblock/github/common/item/ItemWirelessFluidTerminal.java index f0d4c7474..412394f3b 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemWirelessFluidTerminal.java +++ b/src/main/java/com/glodblock/github/common/item/ItemWirelessFluidTerminal.java @@ -41,7 +41,7 @@ public ItemWirelessFluidTerminal register() { @Override public Object getInventory(ItemStack stack, World world, int x, int y, int z, EntityPlayer player) { try { - IGridNode gridNode = Util.getWirelessGrid(stack); + IGridNode gridNode = Util.Wireless.getWirelessGrid(stack); return new WirelessFluidTerminalInventory(stack, x, gridNode, player); } catch (Exception e) { player.addChatMessage(PlayerMessages.OutOfRange.get()); diff --git a/src/main/java/com/glodblock/github/common/item/ItemWirelessInterfaceTerminal.java b/src/main/java/com/glodblock/github/common/item/ItemWirelessInterfaceTerminal.java index a3740f6f8..cba1f0479 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemWirelessInterfaceTerminal.java +++ b/src/main/java/com/glodblock/github/common/item/ItemWirelessInterfaceTerminal.java @@ -41,7 +41,7 @@ public ItemWirelessInterfaceTerminal register() { @Override public Object getInventory(ItemStack stack, World world, int x, int y, int z, EntityPlayer player) { try { - IGridNode gridNode = Util.getWirelessGrid(stack); + IGridNode gridNode = Util.Wireless.getWirelessGrid(stack); return new WirelessInterfaceTerminalInventory(stack, x, gridNode, player); } catch (Exception e) { player.addChatMessage(PlayerMessages.OutOfRange.get()); diff --git a/src/main/java/com/glodblock/github/common/item/ItemWirelessLevelTerminal.java b/src/main/java/com/glodblock/github/common/item/ItemWirelessLevelTerminal.java index a762a1437..d66bdd5ba 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemWirelessLevelTerminal.java +++ b/src/main/java/com/glodblock/github/common/item/ItemWirelessLevelTerminal.java @@ -41,7 +41,7 @@ public ItemWirelessLevelTerminal register() { @Override public Object getInventory(ItemStack stack, World world, int x, int y, int z, EntityPlayer player) { try { - IGridNode gridNode = Util.getWirelessGrid(stack); + IGridNode gridNode = Util.Wireless.getWirelessGrid(stack); return new WirelessLevelTerminalInventory(stack, x, gridNode, player); } catch (Exception e) { player.addChatMessage(PlayerMessages.OutOfRange.get()); diff --git a/src/main/java/com/glodblock/github/common/item/ItemWirelessPatternTerminal.java b/src/main/java/com/glodblock/github/common/item/ItemWirelessPatternTerminal.java index 6b036a3af..0dc749a36 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemWirelessPatternTerminal.java +++ b/src/main/java/com/glodblock/github/common/item/ItemWirelessPatternTerminal.java @@ -41,7 +41,7 @@ public ItemWirelessPatternTerminal register() { @Override public Object getInventory(ItemStack stack, World world, int x, int y, int z, EntityPlayer player) { try { - IGridNode gridNode = Util.getWirelessGrid(stack); + IGridNode gridNode = Util.Wireless.getWirelessGrid(stack); return new WirelessPatternTerminalInventory(stack, x, gridNode, player); } catch (Exception e) { player.addChatMessage(PlayerMessages.OutOfRange.get()); diff --git a/src/main/java/com/glodblock/github/common/item/ItemWirelessUltraTerminal.java b/src/main/java/com/glodblock/github/common/item/ItemWirelessUltraTerminal.java index 939799544..cf59c4bcf 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemWirelessUltraTerminal.java +++ b/src/main/java/com/glodblock/github/common/item/ItemWirelessUltraTerminal.java @@ -21,12 +21,7 @@ import com.glodblock.github.common.tabs.FluidCraftingTabs; import com.glodblock.github.inventory.InventoryHandler; import com.glodblock.github.inventory.gui.GuiType; -import com.glodblock.github.inventory.item.WirelessCraftingTerminalInventory; -import com.glodblock.github.inventory.item.WirelessFluidTerminalInventory; -import com.glodblock.github.inventory.item.WirelessInterfaceTerminalInventory; -import com.glodblock.github.inventory.item.WirelessLevelTerminalInventory; -import com.glodblock.github.inventory.item.WirelessPatternTerminalExInventory; -import com.glodblock.github.inventory.item.WirelessPatternTerminalInventory; +import com.glodblock.github.inventory.item.*; import com.glodblock.github.loader.IRegister; import com.glodblock.github.network.CPacketSwitchGuis; import com.glodblock.github.util.BlockPos; @@ -100,9 +95,11 @@ public String getItemStackDisplayName(ItemStack stack) { @Override public Object getInventory(ItemStack stack, World world, int x, int y, int z, EntityPlayer player) { try { - IGridNode gridNode = Util.getWirelessGrid(stack); + IGridNode gridNode = Util.Wireless.getWirelessGrid(stack); final GuiType gui; - if (Util.GuiHelper.decodeType(y).getLeft() == Util.GuiHelper.GuiType.ITEM && z > 0) { + if (Util.GuiHelper.decodeType(y).getLeft() == Util.GuiHelper.GuiType.ITEM && z == -1) { + gui = GuiType.WIRELESS_MAGNET_CARD_FILTER; + } else if (Util.GuiHelper.decodeType(y).getLeft() == Util.GuiHelper.GuiType.ITEM && z > 0) { gui = getGuis().get(Util.GuiHelper.decodeType(y).getRight()); } else { gui = readMode(stack); @@ -121,6 +118,8 @@ public Object getInventory(ItemStack stack, World world, int x, int y, int z, En return new WirelessLevelTerminalInventory(stack, x, gridNode, player); } else if (gui == GuiType.WIRELESS_FLUID_PATTERN_TERMINAL_EX) { return new WirelessPatternTerminalExInventory(stack, x, gridNode, player); + } else if (gui == GuiType.WIRELESS_MAGNET_CARD_FILTER) { + return new WirelessMagnetCardFilterInventory(stack, x, gridNode, player); } else { this.setMode(GuiType.WIRELESS_FLUID_TERMINAL, stack); // set as default mode return new WirelessFluidTerminalInventory(stack, x, gridNode, player); @@ -179,7 +178,7 @@ public void setMode(GuiType mode, ItemStack stack) { } public static void switchTerminal(EntityPlayer player, GuiType guiType) { - ImmutablePair term = Util.getUltraWirelessTerm(player); + ImmutablePair term = Util.Wireless.getUltraWirelessTerm(player); if (term == null) return; if (term.getRight().getItem() instanceof ItemWirelessUltraTerminal) { ((ItemWirelessUltraTerminal) term.getRight().getItem()).setMode(guiType, term.getRight()); @@ -202,10 +201,10 @@ public static void switchTerminal(EntityPlayer player, GuiType guiType) { } public static boolean hasInfinityBoosterCard(EntityPlayer player) { - ImmutablePair term = Util.getUltraWirelessTerm(player); + ImmutablePair term = Util.Wireless.getUltraWirelessTerm(player); if (term == null) return false; if (term.getRight().getItem() instanceof ItemWirelessUltraTerminal) { - return Util.hasInfinityBoosterCard(term.getRight()); + return Util.Wireless.hasInfinityBoosterCard(term.getRight()); } return false; } diff --git a/src/main/java/com/glodblock/github/common/parts/PartFluidTerminal.java b/src/main/java/com/glodblock/github/common/parts/PartFluidTerminal.java index 9b42bea4a..15ae1c3a9 100644 --- a/src/main/java/com/glodblock/github/common/parts/PartFluidTerminal.java +++ b/src/main/java/com/glodblock/github/common/parts/PartFluidTerminal.java @@ -1,12 +1,19 @@ package com.glodblock.github.common.parts; +import static com.glodblock.github.common.item.ItemBaseWirelessTerminal.syncData; + import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import com.glodblock.github.client.textures.FCPartsTexture; +import com.glodblock.github.common.item.ItemBaseWirelessTerminal; import com.glodblock.github.common.parts.base.FCPart; import com.glodblock.github.inventory.gui.GuiType; +import com.glodblock.github.inventory.item.IItemTerminal; + +import appeng.util.Platform; -public class PartFluidTerminal extends FCPart { +public class PartFluidTerminal extends FCPart implements IItemTerminal { private static final FCPartsTexture FRONT_BRIGHT_ICON = FCPartsTexture.PartFluidTerminal_Bright; private static final FCPartsTexture FRONT_DARK_ICON = FCPartsTexture.PartFluidTerminal_Colored; @@ -45,4 +52,27 @@ public boolean isBooting() { public GuiType getGui() { return GuiType.FLUID_TERMINAL; } + + @Override + public boolean getSyncData() { + ItemStack term = getItemStack(); + if (term != null && term.getItem() instanceof ItemBaseWirelessTerminal) { + NBTTagCompound data = Platform.openNbtData(term); + if (data.hasKey(syncData)) { + return data.getBoolean(syncData); + } + setSyncData(true); + } + return true; + } + + @Override + public void setSyncData(boolean sync) { + ItemStack term = getItemStack(); + if (term != null && term.getItem() instanceof ItemBaseWirelessTerminal) { + NBTTagCompound data = Platform.openNbtData(term); + data.setBoolean(syncData, sync); + term.setTagCompound(data); + } + } } diff --git a/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooks.java b/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooks.java index 3a3f63f5a..637f60f86 100644 --- a/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooks.java +++ b/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooks.java @@ -1,17 +1,21 @@ package com.glodblock.github.coremod.hooker; +import java.lang.reflect.Field; import java.util.HashSet; import java.util.Set; import javax.annotation.Nullable; import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.inventory.InventoryCrafting; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidStack; +import com.glodblock.github.FluidCraft; import com.glodblock.github.client.gui.GuiFluidCraftConfirm; import com.glodblock.github.common.item.ItemFluidDrop; import com.glodblock.github.common.item.ItemFluidPacket; @@ -20,8 +24,10 @@ import com.glodblock.github.inventory.FluidConvertingInventoryAdaptor; import com.glodblock.github.inventory.FluidConvertingInventoryCrafting; import com.glodblock.github.loader.ItemAndBlockHolder; +import com.glodblock.github.network.SPacketMEItemInvUpdate; import com.glodblock.github.util.Ae2Reflect; import com.glodblock.github.util.SetBackedMachineSet; +import com.glodblock.github.util.Util; import com.google.common.collect.Sets; import appeng.api.config.Actionable; @@ -29,6 +35,8 @@ import appeng.api.networking.IGridHost; import appeng.api.networking.IGridNode; import appeng.api.networking.IMachineSet; +import appeng.api.networking.security.BaseActionSource; +import appeng.api.networking.security.PlayerSource; import appeng.api.networking.storage.IStorageGrid; import appeng.api.storage.IMEInventory; import appeng.api.storage.data.IAEFluidStack; @@ -189,4 +197,47 @@ public static boolean shouldShowTooltip(GuiContainer gui) { } return true; } + + public static void craftingComplete(CraftingCPUCluster cpuCluster) { + try { + if (cpuCluster.isBusy()) return; + Field f; + f = cpuCluster.getClass().getField("player"); + EntityPlayer player = (EntityPlayer) f.get(cpuCluster); + if (player != null) { + ItemStack term = Util.Wireless.getWirelessTerm(player); + if (term != null) { + SPacketMEItemInvUpdate piu = new SPacketMEItemInvUpdate((byte) 2); + f = cpuCluster.getClass().getField("requestItem"); + IAEItemStack is = (IAEItemStack) f.get(cpuCluster); + if (is != null) { + piu.appendItem(is); + FluidCraft.proxy.netHandler.sendTo(piu, (EntityPlayerMP) player); + } + } + } + } catch (Exception ignored) { + + } + } + + public static void craftingAddActionSource(CraftingCPUCluster cpuCluster, BaseActionSource src) { + try { + Field f; + f = cpuCluster.getClass().getField("player"); + if (src instanceof PlayerSource) { + f.set(cpuCluster, ((PlayerSource) src).player); + } else { + f.set(cpuCluster, null); + } + f = cpuCluster.getClass().getField("requestItem"); + IAEItemStack is = cpuCluster.getFinalOutput(); + if (is != null) { + f.set(cpuCluster, is.copy()); + } + + } catch (Exception ignored) { + + } + } } diff --git a/src/main/java/com/glodblock/github/coremod/transform/CraftingCpuTransformer.java b/src/main/java/com/glodblock/github/coremod/transform/CraftingCpuTransformer.java index 348fada5b..7216e3e46 100644 --- a/src/main/java/com/glodblock/github/coremod/transform/CraftingCpuTransformer.java +++ b/src/main/java/com/glodblock/github/coremod/transform/CraftingCpuTransformer.java @@ -1,9 +1,6 @@ package com.glodblock.github.coremod.transform; -import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.Label; -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; +import org.objectweb.asm.*; import com.glodblock.github.coremod.FCClassTransformer; @@ -32,9 +29,69 @@ public MethodVisitor visitMethod(int access, String name, String desc, String si return new TransformExecuteCrafting(api, super.visitMethod(access, name, desc, signature, exceptions)); } else if (name.equals("cancel")) { return new TransformStoreItems(api, super.visitMethod(access, name, desc, signature, exceptions)); + } else if (name.equals("completeJob")) { + return new TransformCompleteJob(api, super.visitMethod(access, name, desc, signature, exceptions)); + } else if (name.equals("submitJob")) { + return new TransformSubmitJob(api, super.visitMethod(access, name, desc, signature, exceptions)); } return super.visitMethod(access, name, desc, signature, exceptions); } + + @Override + public void visitEnd() { + FieldVisitor p = cv + .visitField(Opcodes.ACC_PUBLIC, "player", "Lnet/minecraft/entity/player/EntityPlayer;", null, null); + p.visitEnd(); + FieldVisitor is = cv.visitField( + Opcodes.ACC_PUBLIC, + "requestItem", + "Lappeng/api/storage/data/IAEItemStack;", + null, + null); + is.visitEnd(); + super.visitEnd(); + } + } + + private static class TransformSubmitJob extends MethodVisitor { + + TransformSubmitJob(int api, MethodVisitor mv) { + super(api, mv); + } + + @Override + public void visitInsn(int opcode) { + if (opcode == Opcodes.ARETURN) { + super.visitVarInsn(Opcodes.ALOAD, 0); + super.visitVarInsn(Opcodes.ALOAD, 3); + super.visitMethodInsn( + Opcodes.INVOKESTATIC, + "com/glodblock/github/coremod/hooker/CoreModHooks", + "craftingAddActionSource", + "(Lappeng/me/cluster/implementations/CraftingCPUCluster;Lappeng/api/networking/security/BaseActionSource;)V"); + } + super.visitInsn(opcode); + } + } + + private static class TransformCompleteJob extends MethodVisitor { + + TransformCompleteJob(int api, MethodVisitor mv) { + super(api, mv); + } + + @Override + public void visitInsn(int opcode) { + if (opcode == Opcodes.RETURN) { + super.visitVarInsn(Opcodes.ALOAD, 0); + super.visitMethodInsn( + Opcodes.INVOKESTATIC, + "com/glodblock/github/coremod/hooker/CoreModHooks", + "craftingComplete", + "(Lappeng/me/cluster/implementations/CraftingCPUCluster;)V"); + } + super.visitInsn(opcode); + } } private static class TransformExecuteCrafting extends MethodVisitor { diff --git a/src/main/java/com/glodblock/github/crossmod/waila/FCTooltipHandlerWaila.java b/src/main/java/com/glodblock/github/crossmod/waila/FCTooltipHandlerWaila.java index 877aba9a7..a4eda092c 100644 --- a/src/main/java/com/glodblock/github/crossmod/waila/FCTooltipHandlerWaila.java +++ b/src/main/java/com/glodblock/github/crossmod/waila/FCTooltipHandlerWaila.java @@ -1,14 +1,17 @@ package com.glodblock.github.crossmod.waila; +import java.util.ArrayList; import java.util.List; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.item.ItemPotion; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import net.minecraftforge.fluids.FluidStack; import com.glodblock.github.common.item.ItemFluidDrop; +import com.glodblock.github.util.ModAndClassUtil; import com.glodblock.github.util.Util; import mcp.mobius.waila.handlers.nei.TooltipHandlerWaila; @@ -36,6 +39,14 @@ public List handleItemTooltip(GuiContainer arg0, ItemStack itemstack, in } String modName = Util.getFluidModName(fs.getFluid()); if (modName != null && !modName.equals("")) currenttip.set(currenttip.size() - 1, "§9§o" + modName); + if (ModAndClassUtil.GT5NH || ModAndClassUtil.GT5) { + ItemStack potion = Util.FluidUtil.getPotion(fs); + if (potion != null && potion.getItem() instanceof ItemPotion) { + List potionEffects = new ArrayList<>(); + potion.getItem().addInformation(potion, Minecraft.getMinecraft().thePlayer, potionEffects, false); + currenttip.addAll(currenttip.size() - 1, potionEffects); + } + } } return currenttip; } diff --git a/src/main/java/com/glodblock/github/inventory/gui/GuiType.java b/src/main/java/com/glodblock/github/inventory/gui/GuiType.java index 45bd85936..b39c6ffe4 100644 --- a/src/main/java/com/glodblock/github/inventory/gui/GuiType.java +++ b/src/main/java/com/glodblock/github/inventory/gui/GuiType.java @@ -6,61 +6,8 @@ import net.minecraft.entity.player.EntityPlayer; -import com.glodblock.github.client.gui.GuiCraftingStatus; -import com.glodblock.github.client.gui.GuiDualInterface; -import com.glodblock.github.client.gui.GuiEssentiaTerminal; -import com.glodblock.github.client.gui.GuiFCPriority; -import com.glodblock.github.client.gui.GuiFluidAutoFiller; -import com.glodblock.github.client.gui.GuiFluidCraftAmount; -import com.glodblock.github.client.gui.GuiFluidCraftConfirm; -import com.glodblock.github.client.gui.GuiFluidCraftingWireless; -import com.glodblock.github.client.gui.GuiFluidIO; -import com.glodblock.github.client.gui.GuiFluidInterface; -import com.glodblock.github.client.gui.GuiFluidLevelEmitter; -import com.glodblock.github.client.gui.GuiFluidPacketDecoder; -import com.glodblock.github.client.gui.GuiFluidPatternEncoder; -import com.glodblock.github.client.gui.GuiFluidPatternExWireless; -import com.glodblock.github.client.gui.GuiFluidPatternTerminal; -import com.glodblock.github.client.gui.GuiFluidPatternTerminalEx; -import com.glodblock.github.client.gui.GuiFluidPatternWireless; -import com.glodblock.github.client.gui.GuiFluidPortableCell; -import com.glodblock.github.client.gui.GuiFluidStorageBus; -import com.glodblock.github.client.gui.GuiFluidTerminal; -import com.glodblock.github.client.gui.GuiIngredientBuffer; -import com.glodblock.github.client.gui.GuiInterfaceWireless; -import com.glodblock.github.client.gui.GuiLargeIngredientBuffer; -import com.glodblock.github.client.gui.GuiLevelMaintainer; -import com.glodblock.github.client.gui.GuiLevelTerminal; -import com.glodblock.github.client.gui.GuiLevelWireless; -import com.glodblock.github.client.gui.GuiOCPatternEditor; -import com.glodblock.github.client.gui.GuiPatternValueAmount; -import com.glodblock.github.client.gui.GuiRenamer; -import com.glodblock.github.client.gui.container.ContainerCraftingWireless; -import com.glodblock.github.client.gui.container.ContainerDualInterface; -import com.glodblock.github.client.gui.container.ContainerEssentiaMonitor; -import com.glodblock.github.client.gui.container.ContainerFluidAutoFiller; -import com.glodblock.github.client.gui.container.ContainerFluidCraftConfirm; -import com.glodblock.github.client.gui.container.ContainerFluidIO; -import com.glodblock.github.client.gui.container.ContainerFluidInterface; -import com.glodblock.github.client.gui.container.ContainerFluidLevelEmitter; -import com.glodblock.github.client.gui.container.ContainerFluidMonitor; -import com.glodblock.github.client.gui.container.ContainerFluidPacketDecoder; -import com.glodblock.github.client.gui.container.ContainerFluidPatternEncoder; -import com.glodblock.github.client.gui.container.ContainerFluidPatternExWireless; -import com.glodblock.github.client.gui.container.ContainerFluidPatternTerminal; -import com.glodblock.github.client.gui.container.ContainerFluidPatternTerminalEx; -import com.glodblock.github.client.gui.container.ContainerFluidPatternWireless; -import com.glodblock.github.client.gui.container.ContainerFluidPortableCell; -import com.glodblock.github.client.gui.container.ContainerFluidStorageBus; -import com.glodblock.github.client.gui.container.ContainerIngredientBuffer; -import com.glodblock.github.client.gui.container.ContainerInterfaceWireless; -import com.glodblock.github.client.gui.container.ContainerLargeIngredientBuffer; -import com.glodblock.github.client.gui.container.ContainerLevelMaintainer; -import com.glodblock.github.client.gui.container.ContainerLevelTerminal; -import com.glodblock.github.client.gui.container.ContainerLevelWireless; -import com.glodblock.github.client.gui.container.ContainerOCPatternEditor; -import com.glodblock.github.client.gui.container.ContainerPatternValueAmount; -import com.glodblock.github.client.gui.container.ContainerRenamer; +import com.glodblock.github.client.gui.*; +import com.glodblock.github.client.gui.container.*; import com.glodblock.github.common.parts.PartFluidLevelEmitter; import com.glodblock.github.common.parts.PartFluidStorageBus; import com.glodblock.github.common.parts.base.FCPart; @@ -86,6 +33,18 @@ public enum GuiType { + WIRELESS_MAGNET_CARD_FILTER(new ItemGuiFactory<>(ITerminalHost.class) { + + @Override + protected Object createServerGui(EntityPlayer player, ITerminalHost inv) { + return new ContainerMagnet(player.inventory, inv); + } + + @Override + protected Object createClientGui(EntityPlayer player, ITerminalHost inv) { + return new GuiMagnet(player.inventory, inv); + } + }), RENAMER(new PartOrItemGuiFactory<>(ITerminalHost.class) { @Override diff --git a/src/main/java/com/glodblock/github/inventory/gui/ItemGuiFactory.java b/src/main/java/com/glodblock/github/inventory/gui/ItemGuiFactory.java index 1b489354d..ab0e2f7a8 100644 --- a/src/main/java/com/glodblock/github/inventory/gui/ItemGuiFactory.java +++ b/src/main/java/com/glodblock/github/inventory/gui/ItemGuiFactory.java @@ -30,7 +30,7 @@ protected T getInventory(Object inv) { @Nullable @Override public Object createServerGui(EntityPlayer player, World world, int x, int y, int z, ForgeDirection face) { - ItemStack item = Util.getWirelessTerminal(player, x); + ItemStack item = Util.Wireless.getWirelessTerminal(player, x); if (item == null || !(item.getItem() instanceof IItemInventory)) { return null; } @@ -57,7 +57,7 @@ public Object createServerGui(EntityPlayer player, World world, int x, int y, in @Nullable @Override public Object createClientGui(EntityPlayer player, World world, int x, int y, int z, ForgeDirection face) { - ItemStack item = Util.getWirelessTerminal(player, x); + ItemStack item = Util.Wireless.getWirelessTerminal(player, x); if (item == null || !(item.getItem() instanceof IItemInventory)) { return null; } diff --git a/src/main/java/com/glodblock/github/inventory/gui/PartOrItemGuiFactory.java b/src/main/java/com/glodblock/github/inventory/gui/PartOrItemGuiFactory.java index e2cea6561..a2089a8cc 100644 --- a/src/main/java/com/glodblock/github/inventory/gui/PartOrItemGuiFactory.java +++ b/src/main/java/com/glodblock/github/inventory/gui/PartOrItemGuiFactory.java @@ -31,7 +31,7 @@ protected T getItemInventory(Object inv) { public Object createServerGui(EntityPlayer player, World world, int x, int y, int z, ForgeDirection face) { ImmutablePair result = Util.GuiHelper.decodeType(y); if (result.getLeft() == Util.GuiHelper.GuiType.ITEM) { - ItemStack item = Util.getWirelessTerminal(player, x); + ItemStack item = Util.Wireless.getWirelessTerminal(player, x); if (item == null || !(item.getItem() instanceof IItemInventory)) { return null; } @@ -62,7 +62,7 @@ public Object createServerGui(EntityPlayer player, World world, int x, int y, in public Object createClientGui(EntityPlayer player, World world, int x, int y, int z, ForgeDirection face) { ImmutablePair result = Util.GuiHelper.decodeType(y); if (result.left == Util.GuiHelper.GuiType.ITEM) { - ItemStack item = Util.getWirelessTerminal(player, x); + ItemStack item = Util.Wireless.getWirelessTerminal(player, x); if (item == null || !(item.getItem() instanceof IItemInventory)) { return null; } diff --git a/src/main/java/com/glodblock/github/inventory/item/BaseWirelessInventory.java b/src/main/java/com/glodblock/github/inventory/item/BaseWirelessInventory.java new file mode 100644 index 000000000..8f87352ee --- /dev/null +++ b/src/main/java/com/glodblock/github/inventory/item/BaseWirelessInventory.java @@ -0,0 +1,175 @@ +package com.glodblock.github.inventory.item; + +import static com.glodblock.github.common.item.ItemBaseWirelessTerminal.restockItems; +import static com.glodblock.github.common.item.ItemMagnetCard.modeKey; + +import java.util.Objects; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import com.glodblock.github.common.item.ItemBaseWirelessTerminal; +import com.glodblock.github.common.item.ItemMagnetCard; +import com.glodblock.github.util.Util; + +import appeng.api.config.Actionable; +import appeng.api.config.PowerMultiplier; +import appeng.api.implementations.items.IAEItemPowerStorage; +import appeng.api.networking.IGridNode; +import appeng.api.networking.security.PlayerSource; +import appeng.api.networking.storage.IStorageGrid; +import appeng.api.storage.MEMonitorHandler; +import appeng.api.storage.StorageChannel; +import appeng.api.storage.data.IAEFluidStack; +import appeng.api.storage.data.IAEItemStack; +import appeng.api.storage.data.IAEStack; +import appeng.api.util.AECableType; +import appeng.items.tools.powered.ToolWirelessTerminal; +import appeng.util.Platform; + +public abstract class BaseWirelessInventory extends MEMonitorHandler implements IWirelessTerminal, IWirelessExtendCard { + + protected final ItemStack target; + protected final IAEItemPowerStorage ips; + protected final int inventorySlot; + + protected final IGridNode grid; + + protected final PlayerSource source; + protected final StorageChannel channel; + protected ItemMagnetCard.Mode magnetMode = ItemMagnetCard.Mode.Off;; + protected EntityPlayer player; + protected boolean restock; + + @SuppressWarnings("unchecked") + public BaseWirelessInventory(final ItemStack is, final int slot, IGridNode gridNode, EntityPlayer player, + StorageChannel channel) { + super(Objects.requireNonNull(Util.Wireless.getWirelessInv(is, player, channel))); + this.ips = (ToolWirelessTerminal) is.getItem(); + this.grid = gridNode; + this.target = is; + this.inventorySlot = slot; + this.channel = channel; + this.source = new PlayerSource(player, this); + this.readFromNBT(); + } + + private void readFromNBT() { + NBTTagCompound data = Platform.openNbtData(this.target); + this.setMagnetCardMode(ItemMagnetCard.Mode.values()[data.getInteger(modeKey)]); + this.setRestock(data.getBoolean(ItemBaseWirelessTerminal.restockItems)); + } + + public StorageChannel getChannel() { + return this.channel; + } + + @Override + public ItemStack getItemStack() { + return this.target; + } + + @Override + public double extractAEPower(double amt, Actionable mode, PowerMultiplier usePowerMultiplier) { + amt = usePowerMultiplier.multiply(amt); + if (mode == Actionable.SIMULATE) { + return usePowerMultiplier.divide(Math.min(amt, this.ips.getAECurrentPower(this.target))); + } + return usePowerMultiplier.divide(this.ips.extractAEPower(this.target, amt)); + } + + @Override + public int getInventorySlot() { + return this.inventorySlot; + } + + @Override + public IGridNode getGridNode(ForgeDirection dir) { + return this.grid; + } + + @Override + public AECableType getCableConnectionType(ForgeDirection dir) { + return AECableType.NONE; + } + + @Override + public void securityBreak() { + this.getGridNode(ForgeDirection.UNKNOWN).getMachine().securityBreak(); + } + + @Override + public void saveChanges() { + + } + + @Override + public IGridNode getActionableNode() { + return this.grid; + } + + @Override + public PlayerSource getActionSource() { + return this.source; + } + + @Override + public void setMagnetCardMode(ItemMagnetCard.Mode mode) { + this.magnetMode = mode; + } + + @Override + public ItemMagnetCard.Mode getMagnetCardMode() { + return this.magnetMode; + } + + public void setMagnetCardNextMode() { + setMagnetCardMode( + ItemMagnetCard.Mode.values()[(getMagnetCardMode().ordinal() + 1) + % ItemMagnetCard.Mode.values().length]); + } + + public void setRestock(boolean val) { + this.restock = val; + } + + public boolean isRestock() { + return this.restock; + } + + public IAEStack injectItems(IAEStack aeStack) { + try { + if (aeStack.isItem()) { + return ((IStorageGrid) getActionableNode().getGrid().getCache(IStorageGrid.class)).getItemInventory() + .injectItems((IAEItemStack) aeStack, Actionable.MODULATE, getActionSource()); + } else { + return ((IStorageGrid) getActionableNode().getGrid().getCache(IStorageGrid.class)).getFluidInventory() + .injectItems((IAEFluidStack) aeStack, Actionable.MODULATE, getActionSource()); + } + } catch (Exception e) { + return aeStack; + } + } + + public IAEStack extractItems(IAEStack aeStack) { + try { + if (aeStack.isItem()) { + return ((IStorageGrid) getActionableNode().getGrid().getCache(IStorageGrid.class)).getItemInventory() + .extractItems((IAEItemStack) aeStack, Actionable.MODULATE, getActionSource()); + } else { + return ((IStorageGrid) getActionableNode().getGrid().getCache(IStorageGrid.class)).getFluidInventory() + .extractItems((IAEFluidStack) aeStack, Actionable.MODULATE, getActionSource()); + } + } catch (Exception e) { + return null; + } + } + + public void saveSettings() { + NBTTagCompound data = Platform.openNbtData(this.target); + data.setBoolean(restockItems, this.restock); + data.setInteger(modeKey, this.getMagnetCardMode().ordinal()); + } +} diff --git a/src/main/java/com/glodblock/github/inventory/item/IItemTerminal.java b/src/main/java/com/glodblock/github/inventory/item/IItemTerminal.java index 5764099c9..8080b87b4 100644 --- a/src/main/java/com/glodblock/github/inventory/item/IItemTerminal.java +++ b/src/main/java/com/glodblock/github/inventory/item/IItemTerminal.java @@ -1,11 +1,41 @@ package com.glodblock.github.inventory.item; +import static com.glodblock.github.common.item.ItemBaseWirelessTerminal.syncData; + import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +import com.glodblock.github.common.item.ItemBaseWirelessTerminal; + +import appeng.api.implementations.guiobjects.IGuiItemObject; +import appeng.util.Platform; -public interface IItemTerminal { +public interface IItemTerminal extends IGuiItemObject { IInventory getInventoryByName(final String name); default void saveSettings() {} + default boolean getSyncData() { + ItemStack term = getItemStack(); + if (term != null && term.getItem() instanceof ItemBaseWirelessTerminal) { + NBTTagCompound data = Platform.openNbtData(term); + if (data.hasKey(syncData)) { + return data.getBoolean(syncData); + } + setSyncData(true); + } + return true; + } + + default void setSyncData(boolean sync) { + ItemStack term = getItemStack(); + if (term != null && term.getItem() instanceof ItemBaseWirelessTerminal) { + NBTTagCompound data = Platform.openNbtData(term); + data.setBoolean(syncData, sync); + term.setTagCompound(data); + } + } + } diff --git a/src/main/java/com/glodblock/github/inventory/item/IWirelessExtendCard.java b/src/main/java/com/glodblock/github/inventory/item/IWirelessExtendCard.java new file mode 100644 index 000000000..e046da95a --- /dev/null +++ b/src/main/java/com/glodblock/github/inventory/item/IWirelessExtendCard.java @@ -0,0 +1,28 @@ +package com.glodblock.github.inventory.item; + +import com.glodblock.github.common.item.ItemMagnetCard; + +import appeng.api.networking.security.PlayerSource; +import appeng.api.storage.data.IAEStack; + +public interface IWirelessExtendCard { + + default void setMagnetCardMode(ItemMagnetCard.Mode mode) {} + + ItemMagnetCard.Mode getMagnetCardMode(); + + PlayerSource getActionSource(); + + IAEStack injectItems(IAEStack aeStack); + + IAEStack extractItems(IAEStack aeStack); + + default void setMagnetCardNextMode() {}; + + void setRestock(boolean val); + + default boolean isRestock() { + return false; + } + +} diff --git a/src/main/java/com/glodblock/github/inventory/item/IWirelessMagnetCardFilter.java b/src/main/java/com/glodblock/github/inventory/item/IWirelessMagnetCardFilter.java new file mode 100644 index 000000000..959193ae1 --- /dev/null +++ b/src/main/java/com/glodblock/github/inventory/item/IWirelessMagnetCardFilter.java @@ -0,0 +1,25 @@ +package com.glodblock.github.inventory.item; + +import com.glodblock.github.common.item.ItemMagnetCard; + +public interface IWirelessMagnetCardFilter extends IWirelessTerminal, IItemTerminal { + + ItemMagnetCard.ListMode getListMode(); + + boolean getNBTMode(); + + boolean getMetaMode(); + + boolean getOreMode(); + + void setListMode(ItemMagnetCard.ListMode mode); + + void setNBTMode(boolean ignoreNBT); + + void setMetaMode(boolean ignoreMeta); + + void setOreMode(boolean useOre); + + default void clearConfig() {}; + +} diff --git a/src/main/java/com/glodblock/github/inventory/item/IWirelessTerminal.java b/src/main/java/com/glodblock/github/inventory/item/IWirelessTerminal.java index 8e0657176..620c8890c 100644 --- a/src/main/java/com/glodblock/github/inventory/item/IWirelessTerminal.java +++ b/src/main/java/com/glodblock/github/inventory/item/IWirelessTerminal.java @@ -8,6 +8,7 @@ import appeng.api.implementations.tiles.IViewCellStorage; import appeng.api.networking.IGridHost; import appeng.api.networking.security.IActionHost; +import appeng.api.storage.StorageChannel; import appeng.tile.inventory.IAEAppEngInventory; public interface IWirelessTerminal @@ -21,4 +22,8 @@ default boolean isUniversal(Object holder) { return false; } + default StorageChannel getChannel() { + return null; + }; + } diff --git a/src/main/java/com/glodblock/github/inventory/item/WirelessCraftingTerminalInventory.java b/src/main/java/com/glodblock/github/inventory/item/WirelessCraftingTerminalInventory.java index 0dce26857..c4c03de54 100644 --- a/src/main/java/com/glodblock/github/inventory/item/WirelessCraftingTerminalInventory.java +++ b/src/main/java/com/glodblock/github/inventory/item/WirelessCraftingTerminalInventory.java @@ -1,7 +1,5 @@ package com.glodblock.github.inventory.item; -import java.util.Objects; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; @@ -9,7 +7,6 @@ import net.minecraftforge.common.util.ForgeDirection; import com.glodblock.github.inventory.ItemBiggerAppEngInventory; -import com.glodblock.github.util.Util; import appeng.api.config.Actionable; import appeng.api.config.PowerMultiplier; @@ -20,9 +17,7 @@ import appeng.api.config.ViewItems; import appeng.api.implementations.items.IAEItemPowerStorage; import appeng.api.networking.IGridNode; -import appeng.api.storage.IMEInventoryHandler; import appeng.api.storage.IMEMonitor; -import appeng.api.storage.MEMonitorHandler; import appeng.api.storage.StorageChannel; import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IAEItemStack; @@ -35,8 +30,7 @@ import appeng.util.ConfigManager; import appeng.util.Platform; -public class WirelessCraftingTerminalInventory extends MEMonitorHandler - implements IWirelessCraftTerminal { +public class WirelessCraftingTerminalInventory extends BaseWirelessInventory implements IWirelessCraftTerminal { private final ItemStack target; private final IAEItemPowerStorage ips; @@ -51,9 +45,7 @@ public class WirelessCraftingTerminalInventory extends MEMonitorHandler) Objects - .requireNonNull(Util.getWirelessInv(is, player, StorageChannel.ITEMS))); + super(is, slot, gridNode, player, StorageChannel.ITEMS); this.ips = (ToolWirelessTerminal) is.getItem(); this.grid = gridNode; this.target = is; diff --git a/src/main/java/com/glodblock/github/inventory/item/WirelessFluidTerminalInventory.java b/src/main/java/com/glodblock/github/inventory/item/WirelessFluidTerminalInventory.java index e28512b20..a51780c8f 100644 --- a/src/main/java/com/glodblock/github/inventory/item/WirelessFluidTerminalInventory.java +++ b/src/main/java/com/glodblock/github/inventory/item/WirelessFluidTerminalInventory.java @@ -1,15 +1,11 @@ package com.glodblock.github.inventory.item; -import java.util.Objects; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.util.ForgeDirection; -import com.glodblock.github.util.Util; - import appeng.api.config.Actionable; import appeng.api.config.PowerMultiplier; import appeng.api.config.Settings; @@ -18,9 +14,7 @@ import appeng.api.config.ViewItems; import appeng.api.implementations.items.IAEItemPowerStorage; import appeng.api.networking.IGridNode; -import appeng.api.storage.IMEInventoryHandler; import appeng.api.storage.IMEMonitor; -import appeng.api.storage.MEMonitorHandler; import appeng.api.storage.StorageChannel; import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IAEItemStack; @@ -33,7 +27,7 @@ import appeng.util.ConfigManager; import appeng.util.Platform; -public class WirelessFluidTerminalInventory extends MEMonitorHandler implements IWirelessTerminal { +public class WirelessFluidTerminalInventory extends BaseWirelessInventory implements IWirelessTerminal { private final ItemStack target; private final IAEItemPowerStorage ips; @@ -44,9 +38,7 @@ public class WirelessFluidTerminalInventory extends MEMonitorHandler) Objects - .requireNonNull(Util.getWirelessInv(is, player, StorageChannel.FLUIDS))); + super(is, slot, gridNode, player, StorageChannel.FLUIDS); this.ips = (ToolWirelessTerminal) is.getItem(); this.grid = gridNode; this.target = is; diff --git a/src/main/java/com/glodblock/github/inventory/item/WirelessInterfaceTerminalInventory.java b/src/main/java/com/glodblock/github/inventory/item/WirelessInterfaceTerminalInventory.java index d3bee52bf..aee5f1c51 100644 --- a/src/main/java/com/glodblock/github/inventory/item/WirelessInterfaceTerminalInventory.java +++ b/src/main/java/com/glodblock/github/inventory/item/WirelessInterfaceTerminalInventory.java @@ -36,7 +36,7 @@ public class WirelessInterfaceTerminalInventory implements IClickableInTerminal, private Util.DimensionalCoordSide tile; public WirelessInterfaceTerminalInventory(ItemStack is, int slot, IGridNode gridNode, EntityPlayer player) { - Objects.requireNonNull(Util.getWirelessInv(is, player, StorageChannel.ITEMS)); + Objects.requireNonNull(Util.Wireless.getWirelessInv(is, player, StorageChannel.ITEMS)); this.ips = (ToolWirelessTerminal) is.getItem(); this.grid = gridNode; this.target = is; diff --git a/src/main/java/com/glodblock/github/inventory/item/WirelessLevelTerminalInventory.java b/src/main/java/com/glodblock/github/inventory/item/WirelessLevelTerminalInventory.java index 8150d6a1a..bdb9c86fe 100644 --- a/src/main/java/com/glodblock/github/inventory/item/WirelessLevelTerminalInventory.java +++ b/src/main/java/com/glodblock/github/inventory/item/WirelessLevelTerminalInventory.java @@ -36,7 +36,7 @@ public class WirelessLevelTerminalInventory implements IClickableInTerminal, IWi private Util.DimensionalCoordSide tile; public WirelessLevelTerminalInventory(ItemStack is, int slot, IGridNode gridNode, EntityPlayer player) { - Objects.requireNonNull(Util.getWirelessInv(is, player, StorageChannel.ITEMS)); + Objects.requireNonNull(Util.Wireless.getWirelessInv(is, player, StorageChannel.ITEMS)); this.ips = (ToolWirelessTerminal) is.getItem(); this.grid = gridNode; this.target = is; diff --git a/src/main/java/com/glodblock/github/inventory/item/WirelessMagnetCardFilterInventory.java b/src/main/java/com/glodblock/github/inventory/item/WirelessMagnetCardFilterInventory.java new file mode 100644 index 000000000..01b71e1f9 --- /dev/null +++ b/src/main/java/com/glodblock/github/inventory/item/WirelessMagnetCardFilterInventory.java @@ -0,0 +1,215 @@ +package com.glodblock.github.inventory.item; + +import static com.glodblock.github.common.item.ItemMagnetCard.filterConfigKey; +import static com.glodblock.github.common.item.ItemMagnetCard.filterKey; + +import java.util.List; + +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +import com.glodblock.github.common.item.ItemMagnetCard; +import com.glodblock.github.inventory.ItemBiggerAppEngInventory; + +import appeng.api.AEApi; +import appeng.api.config.Actionable; +import appeng.api.config.PowerMultiplier; +import appeng.api.networking.IGridNode; +import appeng.api.storage.IMEMonitor; +import appeng.api.storage.StorageChannel; +import appeng.api.storage.data.IAEFluidStack; +import appeng.api.storage.data.IAEItemStack; +import appeng.api.storage.data.IItemList; +import appeng.api.util.IConfigManager; +import appeng.tile.inventory.AppEngInternalInventory; +import appeng.tile.inventory.InvOperation; +import appeng.util.Platform; + +public class WirelessMagnetCardFilterInventory extends BaseWirelessInventory implements IWirelessMagnetCardFilter { + + private boolean nbt; + private boolean mata; + private boolean ore; + private ItemMagnetCard.ListMode listMode = ItemMagnetCard.ListMode.WhiteList; + protected AppEngInternalInventory filterList; + + @SuppressWarnings("unchecked") + public WirelessMagnetCardFilterInventory(ItemStack is, int slot, IGridNode gridNode, EntityPlayer player) { + super(is, slot, gridNode, player, StorageChannel.ITEMS); + this.filterList = new ItemBiggerAppEngInventory(is, filterKey, 27); + readFromNBT(); + } + + public void readFromNBT() { + NBTTagCompound data = Platform.openNbtData(this.target); + if (!data.hasKey(filterConfigKey)) this.writeToNBT(); + NBTTagCompound tag = (NBTTagCompound) data.getTag(filterConfigKey); + this.nbt = tag.getBoolean("nbt"); + this.mata = tag.getBoolean("meta"); + this.ore = tag.getBoolean("ore"); + this.listMode = ItemMagnetCard.ListMode.values()[tag.getInteger("list")]; + } + + public void writeToNBT() { + NBTTagCompound data = Platform.openNbtData(this.target); + NBTTagCompound tmp = new NBTTagCompound(); + tmp.setBoolean("nbt", this.nbt); + tmp.setBoolean("meta", this.mata); + tmp.setBoolean("ore", this.ore); + tmp.setInteger("list", this.listMode.ordinal()); + data.setTag(filterConfigKey, tmp); + } + + @Override + public ItemMagnetCard.ListMode getListMode() { + return this.listMode; + } + + @Override + public boolean getNBTMode() { + return this.nbt; + } + + @Override + public boolean getMetaMode() { + return this.mata; + } + + @Override + public boolean getOreMode() { + return this.ore; + } + + @Override + public void setListMode(ItemMagnetCard.ListMode mode) { + this.listMode = mode; + } + + @Override + public void setNBTMode(boolean ignoreNBT) { + this.nbt = ignoreNBT; + } + + @Override + public void setMetaMode(boolean ignoreMeta) { + this.mata = ignoreMeta; + } + + @Override + public void setOreMode(boolean useOre) { + this.ore = useOre; + } + + @Override + public void clearConfig() { + IInventory inv = this.getInventoryByName("config"); + for (int i = 0; i < inv.getSizeInventory(); i++) { + inv.setInventorySlotContents(i, null); + } + } + + @Override + public StorageChannel getChannel() { + return null; + } + + @Override + public IInventory getViewCellStorage() { + return null; + } + + @Override + public double extractAEPower(double amt, Actionable mode, PowerMultiplier usePowerMultiplier) { + return 0; + } + + @Override + public IMEMonitor getItemInventory() { + return this; + } + + @Override + public IMEMonitor getFluidInventory() { + return null; + } + + @Override + public IConfigManager getConfigManager() { + return null; + } + + @Override + public void onChangeInventory(IInventory inv, int slot, InvOperation mc, ItemStack removedStack, + ItemStack newStack) { + + } + + @Override + public void saveSettings() { + super.saveSettings(); + writeToNBT(); + } + + @Override + public IInventory getInventoryByName(String name) { + if (name.equals("config")) { + return this.filterList; + } + return null; + } + + public boolean doInject(IAEItemStack is, EntityItem itemToGet, World world) { + IAEItemStack ais = (IAEItemStack) injectItems(is); + if (ais != null) { + player.onItemPickup(itemToGet, ais.getItemStack().stackSize); + player.inventory.addItemStackToInventory(ais.getItemStack()); + world.playSoundAtEntity( + player, + "random.pop", + 0.15F, + ((world.rand.nextFloat() - world.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F); + return false; + } + return true; + } + + public List getFilteredItems() { + return ItemMagnetCard.getFilteredItems(this.target); + } + + public IItemList getAEFilteredItems() { + IItemList list = AEApi.instance().storage().createItemList(); + for (ItemStack is : this.getFilteredItems()) { + list.add(AEApi.instance().storage().createItemStack(is)); + } + return list; + } + + public boolean isItemFiltered(ItemStack is, IItemList list) { + if (is == null && list.isEmpty()) return false; + IAEItemStack ais = AEApi.instance().storage().createItemStack(is); + for (IAEItemStack i : list) { + if (this.ore) { + // use oredict + return i.sameOre(ais); + } else if (!this.mata && !this.nbt) { + // ignore meta & nbt + return Platform.isSameItem(i.getItemStack(), ais.getItemStack()); + } else if (!this.mata && this.nbt) { + // ignore meta only + return Platform.isSameItemPrecise(i.getItemStack(), ais.getItemStack()); + } else if (this.mata) { + // ignore nbt only + return i.getItemDamage() == ais.getItemDamage(); + } else { + // ignore nothing/don't use oredict--must be exact match + return list.findPrecise(ais) != null; + } + } + return false; + } +} diff --git a/src/main/java/com/glodblock/github/inventory/item/WirelessPatternTerminalExInventory.java b/src/main/java/com/glodblock/github/inventory/item/WirelessPatternTerminalExInventory.java index be2e3149b..42ca6fa3d 100644 --- a/src/main/java/com/glodblock/github/inventory/item/WirelessPatternTerminalExInventory.java +++ b/src/main/java/com/glodblock/github/inventory/item/WirelessPatternTerminalExInventory.java @@ -2,7 +2,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.Objects; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; @@ -14,7 +13,6 @@ import com.glodblock.github.common.item.ItemFluidPacket; import com.glodblock.github.inventory.ItemBiggerAppEngInventory; import com.glodblock.github.inventory.WirelessFluidPatternTerminalPatterns; -import com.glodblock.github.util.Util; import appeng.api.config.Actionable; import appeng.api.config.PowerMultiplier; @@ -27,9 +25,7 @@ import appeng.api.implementations.items.IAEItemPowerStorage; import appeng.api.networking.IGridNode; import appeng.api.networking.crafting.ICraftingPatternDetails; -import appeng.api.storage.IMEInventoryHandler; import appeng.api.storage.IMEMonitor; -import appeng.api.storage.MEMonitorHandler; import appeng.api.storage.StorageChannel; import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IAEItemStack; @@ -42,8 +38,7 @@ import appeng.util.ConfigManager; import appeng.util.Platform; -public class WirelessPatternTerminalExInventory extends MEMonitorHandler - implements IWirelessPatternTerminal { +public class WirelessPatternTerminalExInventory extends BaseWirelessInventory implements IWirelessPatternTerminal { private final ItemStack target; private final IAEItemPowerStorage ips; @@ -68,9 +63,7 @@ public class WirelessPatternTerminalExInventory extends MEMonitorHandler) Objects - .requireNonNull(Util.getWirelessInv(is, player, StorageChannel.ITEMS))); + super(is, slot, gridNode, player, StorageChannel.ITEMS); this.ips = (ToolWirelessTerminal) is.getItem(); this.grid = gridNode; this.target = is; @@ -419,6 +412,7 @@ public void setAutoFillPattern(boolean canFill) { @Override public void saveSettings() { + super.saveSettings(); this.writeToNBT(); } diff --git a/src/main/java/com/glodblock/github/inventory/item/WirelessPatternTerminalInventory.java b/src/main/java/com/glodblock/github/inventory/item/WirelessPatternTerminalInventory.java index 7bea99f98..cdb392130 100644 --- a/src/main/java/com/glodblock/github/inventory/item/WirelessPatternTerminalInventory.java +++ b/src/main/java/com/glodblock/github/inventory/item/WirelessPatternTerminalInventory.java @@ -2,7 +2,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.Objects; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; @@ -14,7 +13,6 @@ import com.glodblock.github.common.item.ItemFluidPacket; import com.glodblock.github.inventory.ItemBiggerAppEngInventory; import com.glodblock.github.inventory.WirelessFluidPatternTerminalPatterns; -import com.glodblock.github.util.Util; import appeng.api.config.Actionable; import appeng.api.config.PowerMultiplier; @@ -27,9 +25,7 @@ import appeng.api.implementations.items.IAEItemPowerStorage; import appeng.api.networking.IGridNode; import appeng.api.networking.crafting.ICraftingPatternDetails; -import appeng.api.storage.IMEInventoryHandler; import appeng.api.storage.IMEMonitor; -import appeng.api.storage.MEMonitorHandler; import appeng.api.storage.StorageChannel; import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IAEItemStack; @@ -42,8 +38,7 @@ import appeng.util.ConfigManager; import appeng.util.Platform; -public class WirelessPatternTerminalInventory extends MEMonitorHandler - implements IWirelessPatternTerminal { +public class WirelessPatternTerminalInventory extends BaseWirelessInventory implements IWirelessPatternTerminal { private final ItemStack target; private final IAEItemPowerStorage ips; @@ -68,9 +63,7 @@ public class WirelessPatternTerminalInventory extends MEMonitorHandler) Objects - .requireNonNull(Util.getWirelessInv(is, player, StorageChannel.ITEMS))); + super(is, slot, gridNode, player, StorageChannel.ITEMS); this.ips = (ToolWirelessTerminal) is.getItem(); this.grid = gridNode; this.target = is; @@ -391,6 +384,7 @@ public void setAutoFillPattern(boolean canFill) { @Override public void saveSettings() { + super.saveSettings(); this.writeToNBT(); } diff --git a/src/main/java/com/glodblock/github/loader/ChannelLoader.java b/src/main/java/com/glodblock/github/loader/ChannelLoader.java index bd5244f6e..6cfb578df 100644 --- a/src/main/java/com/glodblock/github/loader/ChannelLoader.java +++ b/src/main/java/com/glodblock/github/loader/ChannelLoader.java @@ -8,7 +8,7 @@ import com.glodblock.github.network.CPacketCraftRequest; import com.glodblock.github.network.CPacketDumpTank; import com.glodblock.github.network.CPacketEncodePattern; -import com.glodblock.github.network.CPacketFluidPatternTermBtns; +import com.glodblock.github.network.CPacketFluidTerminalBtns; import com.glodblock.github.network.CPacketFluidUpdate; import com.glodblock.github.network.CPacketInventoryAction; import com.glodblock.github.network.CPacketLevelMaintainer; @@ -39,8 +39,8 @@ public void run() { FCNetworkWrapper netHandler = FluidCraft.proxy.netHandler; netHandler.registerMessage(new CPacketSwitchGuis.Handler(), CPacketSwitchGuis.class, id++, Side.SERVER); netHandler.registerMessage( - new CPacketFluidPatternTermBtns.Handler(), - CPacketFluidPatternTermBtns.class, + new CPacketFluidTerminalBtns.Handler(), + CPacketFluidTerminalBtns.class, id++, Side.SERVER); netHandler.registerMessage(new CPacketEncodePattern.Handler(), CPacketEncodePattern.class, id++, Side.SERVER); diff --git a/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java b/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java index 466bc82ff..2572dc722 100644 --- a/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java +++ b/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java @@ -15,33 +15,7 @@ import com.glodblock.github.common.block.BlockLevelMaintainer; import com.glodblock.github.common.block.BlockOCPatternEditor; import com.glodblock.github.common.block.BlockWalrus; -import com.glodblock.github.common.item.ItemBasicFluidStorageCell; -import com.glodblock.github.common.item.ItemBasicFluidStoragePart; -import com.glodblock.github.common.item.ItemCreativeFluidStorageCell; -import com.glodblock.github.common.item.ItemFluidConversionMonitor; -import com.glodblock.github.common.item.ItemFluidDrop; -import com.glodblock.github.common.item.ItemFluidEncodedPattern; -import com.glodblock.github.common.item.ItemFluidExportBus; -import com.glodblock.github.common.item.ItemFluidExtremeStorageCell; -import com.glodblock.github.common.item.ItemFluidImportBus; -import com.glodblock.github.common.item.ItemFluidLevelEmitter; -import com.glodblock.github.common.item.ItemFluidPacket; -import com.glodblock.github.common.item.ItemFluidStorageHousing; -import com.glodblock.github.common.item.ItemFluidStorageMonitor; -import com.glodblock.github.common.item.ItemMultiFluidStorageCell; -import com.glodblock.github.common.item.ItemPartFluidInterface; -import com.glodblock.github.common.item.ItemPartFluidP2PInterface; -import com.glodblock.github.common.item.ItemPartFluidPatternTerminal; -import com.glodblock.github.common.item.ItemPartFluidPatternTerminalEx; -import com.glodblock.github.common.item.ItemPartFluidStorageBus; -import com.glodblock.github.common.item.ItemPartFluidTerminal; -import com.glodblock.github.common.item.ItemPartLevelTerminal; -import com.glodblock.github.common.item.ItemPortableFluidCell; -import com.glodblock.github.common.item.ItemWirelessFluidTerminal; -import com.glodblock.github.common.item.ItemWirelessInterfaceTerminal; -import com.glodblock.github.common.item.ItemWirelessLevelTerminal; -import com.glodblock.github.common.item.ItemWirelessPatternTerminal; -import com.glodblock.github.common.item.ItemWirelessUltraTerminal; +import com.glodblock.github.common.item.*; import com.glodblock.github.common.storage.CellType; import com.glodblock.github.util.NameConst; @@ -49,6 +23,9 @@ public class ItemAndBlockHolder { public static void init() {} + public static ItemEnergyCard ENERGY_CARD = new ItemEnergyCard().register(); + public static ItemQuantumBridgeCard QUANTUM_BRIDGE_CARD = new ItemQuantumBridgeCard().register(); + public static ItemMagnetCard MAGNET_CARD = new ItemMagnetCard().register(); public static BlockCertusQuartzTank CERTUS_QUARTZ_TANK = new BlockCertusQuartzTank().register(); public static BlockFluidAutoFiller FLUID_AUTO_FILLER = new BlockFluidAutoFiller().register(); public static BlockFluidDiscretizer DISCRETIZER = new BlockFluidDiscretizer().register(); diff --git a/src/main/java/com/glodblock/github/loader/KeybindLoader.java b/src/main/java/com/glodblock/github/loader/KeybindLoader.java index f232cc461..165fbffd4 100644 --- a/src/main/java/com/glodblock/github/loader/KeybindLoader.java +++ b/src/main/java/com/glodblock/github/loader/KeybindLoader.java @@ -4,11 +4,15 @@ import net.minecraft.client.entity.EntityClientPlayerMP; import net.minecraft.client.settings.KeyBinding; import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; import org.apache.commons.lang3.tuple.ImmutablePair; import org.lwjgl.input.Keyboard; +import com.glodblock.github.FluidCraft; import com.glodblock.github.common.item.ItemWirelessUltraTerminal; +import com.glodblock.github.network.CPacketValueConfig; +import com.glodblock.github.util.NameConst; import com.glodblock.github.util.Util; import cpw.mods.fml.client.registry.ClientRegistry; @@ -22,11 +26,14 @@ public class KeybindLoader implements Runnable { public static KeyBinding openTerminal; + public static KeyBinding restock; @Override public void run() { - openTerminal = new KeyBinding("key.OpenTerminal", Keyboard.CHAR_NONE, "itemGroup.ae2fc"); + openTerminal = new KeyBinding(FluidCraft.MODID + ".key.OpenTerminal", Keyboard.CHAR_NONE, "itemGroup.ae2fc"); + restock = new KeyBinding(FluidCraft.MODID + ".key.Restock", Keyboard.CHAR_NONE, "itemGroup.ae2fc"); ClientRegistry.registerKeyBinding(openTerminal); + ClientRegistry.registerKeyBinding(restock); FMLCommonHandler.instance().bus().register(this); } @@ -39,12 +46,25 @@ public void onKeyInput(InputEvent.KeyInputEvent event) { } if (openTerminal.isPressed()) { - ImmutablePair term = Util.getUltraWirelessTerm(p); + ImmutablePair term = Util.Wireless.getUltraWirelessTerm(p); if (term != null && term.getRight().getItem() instanceof ItemWirelessUltraTerminal) { ItemWirelessUltraTerminal.switchTerminal( p, ((ItemWirelessUltraTerminal) term.getRight().getItem()).guiGuiType(term.getRight())); } + } else if (restock.isPressed()) { + ImmutablePair term = Util.Wireless.getUltraWirelessTerm(p); + if (term != null) { + p.addChatMessage( + new ChatComponentText( + NameConst.i18n( + !Util.Wireless.isRestock(term.getRight()) + ? NameConst.TT_ULTRA_TERMINAL_RESTOCK_ON + : NameConst.TT_ULTRA_TERMINAL_RESTOCK_OFF))); + FluidCraft.proxy.netHandler.sendToServer(new CPacketValueConfig(0, 1)); + + } + } } } diff --git a/src/main/java/com/glodblock/github/loader/RecipeLoader.java b/src/main/java/com/glodblock/github/loader/RecipeLoader.java index 878a3bf85..9eee004c4 100644 --- a/src/main/java/com/glodblock/github/loader/RecipeLoader.java +++ b/src/main/java/com/glodblock/github/loader/RecipeLoader.java @@ -1,57 +1,11 @@ package com.glodblock.github.loader; import static com.glodblock.github.common.storage.CellType.Cell16384kPart; -import static com.glodblock.github.loader.ItemAndBlockHolder.BUFFER; -import static com.glodblock.github.loader.ItemAndBlockHolder.CELL1024K; -import static com.glodblock.github.loader.ItemAndBlockHolder.CELL1024KM; -import static com.glodblock.github.loader.ItemAndBlockHolder.CELL16384K; -import static com.glodblock.github.loader.ItemAndBlockHolder.CELL16384KM; -import static com.glodblock.github.loader.ItemAndBlockHolder.CELL16K; -import static com.glodblock.github.loader.ItemAndBlockHolder.CELL16KM; -import static com.glodblock.github.loader.ItemAndBlockHolder.CELL1K; -import static com.glodblock.github.loader.ItemAndBlockHolder.CELL1KM; -import static com.glodblock.github.loader.ItemAndBlockHolder.CELL256K; -import static com.glodblock.github.loader.ItemAndBlockHolder.CELL256KM; -import static com.glodblock.github.loader.ItemAndBlockHolder.CELL4096K; -import static com.glodblock.github.loader.ItemAndBlockHolder.CELL4096KM; -import static com.glodblock.github.loader.ItemAndBlockHolder.CELL4K; -import static com.glodblock.github.loader.ItemAndBlockHolder.CELL4KM; -import static com.glodblock.github.loader.ItemAndBlockHolder.CELL64K; -import static com.glodblock.github.loader.ItemAndBlockHolder.CELL64KM; -import static com.glodblock.github.loader.ItemAndBlockHolder.CELL_HOUSING; -import static com.glodblock.github.loader.ItemAndBlockHolder.CERTUS_QUARTZ_TANK; -import static com.glodblock.github.loader.ItemAndBlockHolder.DECODER; -import static com.glodblock.github.loader.ItemAndBlockHolder.DISCRETIZER; -import static com.glodblock.github.loader.ItemAndBlockHolder.ENCODER; -import static com.glodblock.github.loader.ItemAndBlockHolder.FLUID_AUTO_FILLER; -import static com.glodblock.github.loader.ItemAndBlockHolder.FLUID_BUFFER; -import static com.glodblock.github.loader.ItemAndBlockHolder.FLUID_CONVERSION_MONITOR; -import static com.glodblock.github.loader.ItemAndBlockHolder.FLUID_EXPORT_BUS; -import static com.glodblock.github.loader.ItemAndBlockHolder.FLUID_IMPORT_BUS; -import static com.glodblock.github.loader.ItemAndBlockHolder.FLUID_INTERFACE; -import static com.glodblock.github.loader.ItemAndBlockHolder.FLUID_INTERFACE_P2P; -import static com.glodblock.github.loader.ItemAndBlockHolder.FLUID_LEVEL_EMITTER; -import static com.glodblock.github.loader.ItemAndBlockHolder.FLUID_STORAGE_BUS; -import static com.glodblock.github.loader.ItemAndBlockHolder.FLUID_STORAGE_MONITOR; -import static com.glodblock.github.loader.ItemAndBlockHolder.FLUID_TERM; -import static com.glodblock.github.loader.ItemAndBlockHolder.FLUID_TERMINAL; -import static com.glodblock.github.loader.ItemAndBlockHolder.FLUID_TERMINAL_EX; -import static com.glodblock.github.loader.ItemAndBlockHolder.INTERFACE; -import static com.glodblock.github.loader.ItemAndBlockHolder.LARGE_BUFFER; -import static com.glodblock.github.loader.ItemAndBlockHolder.LEVEL_MAINTAINER; -import static com.glodblock.github.loader.ItemAndBlockHolder.LEVEL_TERMINAL; -import static com.glodblock.github.loader.ItemAndBlockHolder.OC_EDITOR; -import static com.glodblock.github.loader.ItemAndBlockHolder.PATTERN; -import static com.glodblock.github.loader.ItemAndBlockHolder.PORTABLE_FLUID_CELL; -import static com.glodblock.github.loader.ItemAndBlockHolder.QUANTUM_CELL; -import static com.glodblock.github.loader.ItemAndBlockHolder.SINGULARITY_CELL; -import static com.glodblock.github.loader.ItemAndBlockHolder.WALRUS; -import static com.glodblock.github.loader.ItemAndBlockHolder.WIRELESS_FLUID_TERM; -import static com.glodblock.github.loader.ItemAndBlockHolder.WIRELESS_INTERFACE_TERM; -import static com.glodblock.github.loader.ItemAndBlockHolder.WIRELESS_LEVEL_TERM; -import static com.glodblock.github.loader.ItemAndBlockHolder.WIRELESS_PATTERN_TERM; -import static com.glodblock.github.loader.ItemAndBlockHolder.WIRELESS_ULTRA_TERM; -import static net.minecraft.init.Blocks.redstone_torch; +import static com.glodblock.github.loader.ItemAndBlockHolder.*; +import static com.glodblock.github.loader.recipe.WirelessTerminalEnergyRecipe.energyCards; +import static com.glodblock.github.loader.recipe.WirelessTerminalInfinityBoosterRecipe.infCards; +import static com.glodblock.github.loader.recipe.WirelessTerminalMagnetRecipe.magnetCards; +import static net.minecraft.init.Blocks.*; import static net.minecraft.init.Items.fish; import java.util.Arrays; @@ -67,7 +21,9 @@ import com.glodblock.github.common.Config; import com.glodblock.github.common.item.FCBaseItemCell; import com.glodblock.github.common.storage.CellType; -import com.glodblock.github.loader.recipe.WirelessTerminalRecipe; +import com.glodblock.github.loader.recipe.WirelessTerminalEnergyRecipe; +import com.glodblock.github.loader.recipe.WirelessTerminalInfinityBoosterRecipe; +import com.glodblock.github.loader.recipe.WirelessTerminalMagnetRecipe; import com.glodblock.github.util.ModAndClassUtil; import appeng.api.AEApi; @@ -165,10 +121,29 @@ public class RecipeLoader implements Runnable { .findItemStack("appliedenergistics2", "tile.BlockDenseEnergyCell", 1); public static final ItemStack THE_WIRELESS_TERM = GameRegistry .findItemStack("thaumicenergistics", "wireless.essentia.terminal", 1); + public static final ItemStack AE2_ANNIHILATION_PLANE = new ItemStack( + GameRegistry.findItem("appliedenergistics2", "item.ItemMultiPart"), + 1, + 301); + public static final ItemStack AE2_ADVANCED_CARD = new ItemStack( + GameRegistry.findItem("appliedenergistics2", "item.ItemMultiMaterial"), + 1, + 28); + public static final ItemStack AE2_FLUIX_PEARL = new ItemStack( + GameRegistry.findItem("appliedenergistics2", "item.ItemMultiMaterial"), + 1, + 9); + public static final ItemStack AE2_WIRELESS_RECEIVER = new ItemStack( + GameRegistry.findItem("appliedenergistics2", "item.ItemMultiMaterial"), + 1, + 41); private static final ItemStack WCT_WIRELESS_TERM = GameRegistry .findItemStack("ae2wct", "wirelessCraftingTerminal", 1); public static final ItemStack BUCKET = new ItemStack(Items.bucket, 1); public static final ItemStack IRON_BAR = new ItemStack(Blocks.iron_bars, 1); + public static final ItemStack REDSTONE_BLOCK = new ItemStack(redstone_block, 1); + public static final ItemStack LAPIS_BLOCK = new ItemStack(lapis_block, 1); + public static final ItemStack IRON_BLOCK = new ItemStack(iron_block, 1); @Override public void run() { @@ -639,13 +614,57 @@ public void run() { } } + public static void addTestItem() { + GameRegistry.addRecipe( + new ShapedOreRecipe( + ENERGY_CARD.stack(), + "EEE", + "EAE", + "EEE", + 'E', + AE2_DENSE_ENERGY_CELL, + 'A', + AE2_ADVANCED_CARD)); + GameRegistry.addRecipe( + new ShapedOreRecipe( + MAGNET_CARD.stack(), + "RBL", + "IAI", + "III", + 'I', + IRON_BLOCK, + 'R', + REDSTONE_BLOCK, + 'B', + AE2_ANNIHILATION_PLANE, + 'L', + LAPIS_BLOCK, + 'A', + AE2_ADVANCED_CARD)); + GameRegistry.addRecipe( + new ShapedOreRecipe( + QUANTUM_BRIDGE_CARD.stack(), + " ", + "P P", + " R ", + 'P', + AE2_FLUIX_PEARL, + 'R', + AE2_WIRELESS_RECEIVER)); + } + public static void runTerminalRecipe() { - if (ModAndClassUtil.WCT) { - GameRegistry.addRecipe(new WirelessTerminalRecipe(WIRELESS_PATTERN_TERM.stack())); - GameRegistry.addRecipe(new WirelessTerminalRecipe(WIRELESS_FLUID_TERM.stack())); - GameRegistry.addRecipe(new WirelessTerminalRecipe(WIRELESS_ULTRA_TERM.stack())); - GameRegistry.addRecipe(new WirelessTerminalRecipe(WIRELESS_INTERFACE_TERM.stack())); - GameRegistry.addRecipe(new WirelessTerminalRecipe(WIRELESS_LEVEL_TERM.stack())); + for (ItemStack c : infCards) { + GameRegistry.addRecipe(new WirelessTerminalInfinityBoosterRecipe(WIRELESS_PATTERN_TERM.stack(), c)); + GameRegistry.addRecipe(new WirelessTerminalInfinityBoosterRecipe(WIRELESS_FLUID_TERM.stack(), c)); + GameRegistry.addRecipe(new WirelessTerminalInfinityBoosterRecipe(WIRELESS_ULTRA_TERM.stack(), c)); + GameRegistry.addRecipe(new WirelessTerminalInfinityBoosterRecipe(WIRELESS_INTERFACE_TERM.stack(), c)); + } + for (ItemStack m : magnetCards) { + GameRegistry.addRecipe(new WirelessTerminalMagnetRecipe(WIRELESS_ULTRA_TERM.stack(), m)); + } + for (ItemStack e : energyCards) { + GameRegistry.addRecipe(new WirelessTerminalEnergyRecipe(WIRELESS_ULTRA_TERM.stack(), e)); } ItemStack[] term = { AE2_WIRELESS_TERMINAL, WIRELESS_FLUID_TERM.stack(), WIRELESS_PATTERN_TERM.stack(), diff --git a/src/main/java/com/glodblock/github/loader/recipe/WirelessTerminalEnergyRecipe.java b/src/main/java/com/glodblock/github/loader/recipe/WirelessTerminalEnergyRecipe.java new file mode 100644 index 000000000..ed61b81db --- /dev/null +++ b/src/main/java/com/glodblock/github/loader/recipe/WirelessTerminalEnergyRecipe.java @@ -0,0 +1,85 @@ +package com.glodblock.github.loader.recipe; + +import static com.glodblock.github.loader.ItemAndBlockHolder.ENERGY_CARD; +import static com.glodblock.github.util.Util.Wireless.hasEnergyCard; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.ShapelessRecipes; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +import com.glodblock.github.common.item.ItemBaseWirelessTerminal; + +import appeng.util.Platform; + +public class WirelessTerminalEnergyRecipe extends ShapelessRecipes { + + private final ItemStack installedTerm; + public static List energyCards = getEnergyCards(); + + public WirelessTerminalEnergyRecipe(ItemStack term, ItemStack energyCard) { + super(term, Arrays.asList(term, energyCard)); + this.installedTerm = installEnergyCard(term); + } + + private static List getEnergyCards() { + return new ArrayList() { + + { + add(ENERGY_CARD.stack()); + } + }; + } + + private boolean isEnergyCard(ItemStack is) { + if (is == null || is.getItem() == null) return false; + for (ItemStack c : energyCards) { + if (Objects.equals(c.getItem(), is.getItem())) { + return true; + } + } + return false; + } + + @Override + public boolean matches(InventoryCrafting inv, World w) { + ItemStack term = inv.getStackInSlot(0); + ItemStack card = inv.getStackInSlot(1); + return term != null && term.getItem() instanceof ItemBaseWirelessTerminal + && !hasEnergyCard(term) + && isEnergyCard(card); + } + + public static ItemStack getEnergyCard() { + return ENERGY_CARD.stack(); + } + + @Override + public ItemStack getCraftingResult(InventoryCrafting inv) { + return installEnergyCard(inv.getStackInSlot(0)); + } + + @Override + public int getRecipeSize() { + return 2; + } + + private ItemStack installEnergyCard(ItemStack is) { + is = is.copy(); + NBTTagCompound data = Platform.openNbtData(is); + data.setBoolean(ItemBaseWirelessTerminal.infinityEnergyCard, true); + is.setTagCompound(data); + return is; + } + + @Override + public ItemStack getRecipeOutput() { + return installedTerm; + } +} diff --git a/src/main/java/com/glodblock/github/loader/recipe/WirelessTerminalRecipe.java b/src/main/java/com/glodblock/github/loader/recipe/WirelessTerminalInfinityBoosterRecipe.java similarity index 54% rename from src/main/java/com/glodblock/github/loader/recipe/WirelessTerminalRecipe.java rename to src/main/java/com/glodblock/github/loader/recipe/WirelessTerminalInfinityBoosterRecipe.java index b3a8467fe..8f36aeca1 100644 --- a/src/main/java/com/glodblock/github/loader/recipe/WirelessTerminalRecipe.java +++ b/src/main/java/com/glodblock/github/loader/recipe/WirelessTerminalInfinityBoosterRecipe.java @@ -1,8 +1,12 @@ package com.glodblock.github.loader.recipe; -import static com.glodblock.github.util.Util.hasInfinityBoosterCard; +import static com.glodblock.github.loader.ItemAndBlockHolder.QUANTUM_BRIDGE_CARD; +import static com.glodblock.github.util.Util.Wireless.hasInfinityBoosterCard; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; +import java.util.Objects; import net.minecraft.inventory.InventoryCrafting; import net.minecraft.item.ItemStack; @@ -10,18 +14,42 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import net.p455w0rd.wirelesscraftingterminal.items.ItemEnum; -import net.p455w0rd.wirelesscraftingterminal.items.ItemInfinityBooster; import com.glodblock.github.common.item.ItemBaseWirelessTerminal; +import com.glodblock.github.loader.ItemAndBlockHolder; +import com.glodblock.github.util.ModAndClassUtil; import appeng.util.Platform; -public class WirelessTerminalRecipe extends ShapelessRecipes { +public class WirelessTerminalInfinityBoosterRecipe extends ShapelessRecipes { - private static final ItemStack infinityBoosterCard = ItemEnum.BOOSTER_CARD.getStack(); private final ItemStack installedTerm; + public static List infCards = getInfinityCards(); - public WirelessTerminalRecipe(ItemStack term) { + private static List getInfinityCards() { + List list = new ArrayList() { + + { + add(QUANTUM_BRIDGE_CARD.stack()); + } + }; + if (ModAndClassUtil.WCT) { + list.add(ItemEnum.BOOSTER_CARD.getStack()); + } + return list; + } + + public boolean isInfinityCard(ItemStack is) { + if (is == null || is.getItem() == null) return false; + for (ItemStack c : infCards) { + if (Objects.equals(c.getItem(), is.getItem())) { + return true; + } + } + return false; + } + + public WirelessTerminalInfinityBoosterRecipe(ItemStack term, ItemStack infinityBoosterCard) { super(term, Arrays.asList(term, infinityBoosterCard)); this.installedTerm = installInfinityBoosterCard(term); } @@ -32,12 +60,11 @@ public boolean matches(InventoryCrafting inv, World w) { ItemStack infinityBoosterCard = inv.getStackInSlot(1); return term != null && term.getItem() instanceof ItemBaseWirelessTerminal && !hasInfinityBoosterCard(term) - && infinityBoosterCard != null - && infinityBoosterCard.getItem() instanceof ItemInfinityBooster; + && isInfinityCard(infinityBoosterCard); } public static ItemStack getInfinityBoosterCard() { - return infinityBoosterCard.copy(); + return ItemAndBlockHolder.QUANTUM_BRIDGE_CARD.stack(); } @Override diff --git a/src/main/java/com/glodblock/github/loader/recipe/WirelessTerminalMagnetRecipe.java b/src/main/java/com/glodblock/github/loader/recipe/WirelessTerminalMagnetRecipe.java new file mode 100644 index 000000000..36871a5e4 --- /dev/null +++ b/src/main/java/com/glodblock/github/loader/recipe/WirelessTerminalMagnetRecipe.java @@ -0,0 +1,92 @@ +package com.glodblock.github.loader.recipe; + +import static com.glodblock.github.loader.ItemAndBlockHolder.MAGNET_CARD; +import static com.glodblock.github.util.Util.Wireless.hasMagnetCard; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.ShapelessRecipes; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.p455w0rd.wirelesscraftingterminal.items.ItemEnum; + +import com.glodblock.github.common.item.ItemBaseWirelessTerminal; +import com.glodblock.github.loader.ItemAndBlockHolder; +import com.glodblock.github.util.ModAndClassUtil; + +import appeng.util.Platform; + +public class WirelessTerminalMagnetRecipe extends ShapelessRecipes { + + private final ItemStack installedTerm; + public static List magnetCards = getMagnetCards(); + + public WirelessTerminalMagnetRecipe(ItemStack term, ItemStack magnetCard) { + super(term, Arrays.asList(term, magnetCard)); + this.installedTerm = installMagnetCard(term); + } + + private static List getMagnetCards() { + List list = new ArrayList() { + + { + add(MAGNET_CARD.stack()); + } + }; + if (ModAndClassUtil.WCT) { + list.add(ItemEnum.MAGNET_CARD.getStack()); + } + return list; + } + + private boolean isMagnetCard(ItemStack is) { + if (is == null || is.getItem() == null) return false; + for (ItemStack c : magnetCards) { + if (Objects.equals(c.getItem(), is.getItem())) { + return true; + } + } + return false; + } + + @Override + public boolean matches(InventoryCrafting inv, World w) { + ItemStack term = inv.getStackInSlot(0); + ItemStack magnetCard = inv.getStackInSlot(1); + return term != null && term.getItem() instanceof ItemBaseWirelessTerminal + && !hasMagnetCard(term) + && isMagnetCard(magnetCard); + } + + public static ItemStack getMagnetCard() { + return ItemAndBlockHolder.MAGNET_CARD.stack(); + } + + @Override + public ItemStack getCraftingResult(InventoryCrafting inv) { + return installMagnetCard(inv.getStackInSlot(0)); + } + + @Override + public int getRecipeSize() { + return 2; + } + + private ItemStack installMagnetCard(ItemStack is) { + is = is.copy(); + NBTTagCompound data = Platform.openNbtData(is); + data.setBoolean(ItemBaseWirelessTerminal.magnetCard, true); + is.setTagCompound(data); + return is; + } + + @Override + public ItemStack getRecipeOutput() { + return installedTerm; + } +} diff --git a/src/main/java/com/glodblock/github/nei/recipes/FluidRecipe.java b/src/main/java/com/glodblock/github/nei/recipes/FluidRecipe.java index 8e4f54fc6..f152d2691 100644 --- a/src/main/java/com/glodblock/github/nei/recipes/FluidRecipe.java +++ b/src/main/java/com/glodblock/github/nei/recipes/FluidRecipe.java @@ -1,10 +1,6 @@ package com.glodblock.github.nei.recipes; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; +import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import net.minecraft.item.ItemStack; @@ -58,19 +54,30 @@ public static List> getPackageInputs(IRecipeHandler recipe, int in } private static List> getDefaultPackageInputs(TemplateRecipeHandler tRecipe, int index) { - List> tmp = new LinkedList<>(); - AtomicInteger i = new AtomicInteger(0); - tRecipe.getIngredientStacks(index) - .forEach(ps -> tmp.add(new OrderStack<>(ps.item, i.getAndIncrement(), ps.items))); - return tmp; + try { + List> tmp = new LinkedList<>(); + AtomicInteger i = new AtomicInteger(0); + tRecipe.getIngredientStacks(index).stream().filter(Objects::nonNull).filter(ps -> ps.item != null) + .forEach(ps -> tmp.add(new OrderStack<>(ps.item, i.getAndIncrement(), ps.items))); + return tmp; + } catch (Exception e) { + return Collections.emptyList(); + } } private static List> getDefaultPackageOutputs(TemplateRecipeHandler tRecipe, int index) { - List> tmp = new LinkedList<>(); - AtomicInteger i = new AtomicInteger(0); - tmp.add(new OrderStack<>(tRecipe.getResultStack(index).item, i.getAndIncrement())); - tRecipe.getOtherStacks(index).forEach(ps -> tmp.add(new OrderStack<>(ps.item, i.getAndIncrement()))); - return tmp; + try { + List> tmp = new LinkedList<>(); + AtomicInteger i = new AtomicInteger(0); + if (tRecipe.getResultStack(index) != null) { + tmp.add(new OrderStack<>(tRecipe.getResultStack(index).item, i.getAndIncrement())); + } + tRecipe.getOtherStacks(index).stream().filter(Objects::nonNull).filter(ps -> ps.item != null) + .forEach(ps -> tmp.add(new OrderStack<>(ps.item, i.getAndIncrement()))); + return tmp; + } catch (Exception e) { + return Collections.emptyList(); + } } public static List> getPackageOutputs(IRecipeHandler recipe, int index, boolean useOther) { diff --git a/src/main/java/com/glodblock/github/network/CPacketCraftRequest.java b/src/main/java/com/glodblock/github/network/CPacketCraftRequest.java index 42d4f0ffb..a32878006 100644 --- a/src/main/java/com/glodblock/github/network/CPacketCraftRequest.java +++ b/src/main/java/com/glodblock/github/network/CPacketCraftRequest.java @@ -19,10 +19,12 @@ import appeng.api.networking.IGridNode; import appeng.api.networking.crafting.ICraftingGrid; import appeng.api.networking.crafting.ICraftingJob; +import appeng.api.storage.data.IAEItemStack; import appeng.container.ContainerOpenContext; import appeng.container.implementations.ContainerCraftAmount; import appeng.container.implementations.ContainerCraftConfirm; import appeng.core.AELog; +import appeng.util.item.AEItemStack; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import cpw.mods.fml.common.network.simpleimpl.MessageContext; @@ -32,24 +34,55 @@ public class CPacketCraftRequest implements IMessage { private long amount; private boolean heldShift; + private IAEItemStack item = null; + private Mode mode; + + private enum Mode { + ITEM, + STACK_SIZE + } public CPacketCraftRequest() {} - public CPacketCraftRequest(final int craftAmt, final boolean shift) { + public CPacketCraftRequest(final IAEItemStack item, final boolean shift) { + this.item = item; + this.heldShift = shift; + this.mode = Mode.ITEM; + } + + public CPacketCraftRequest(final long craftAmt, final boolean shift) { amount = craftAmt; heldShift = shift; + mode = Mode.STACK_SIZE; } @Override public void toBytes(ByteBuf buf) { - buf.writeLong(amount); - buf.writeBoolean(heldShift); + buf.writeInt(mode.ordinal()); + if (mode == Mode.ITEM) { + try { + item.writeToPacket(buf); + buf.writeBoolean(heldShift); + } catch (Exception ignored) {} + } else { + buf.writeLong(amount); + buf.writeBoolean(heldShift); + } + } @Override public void fromBytes(ByteBuf buf) { - amount = buf.readLong(); - heldShift = buf.readBoolean(); + mode = Mode.values()[buf.readInt()]; + if (mode == Mode.ITEM) { + try { + item = AEItemStack.loadItemStackFromPacket(buf); + heldShift = buf.readBoolean(); + } catch (Exception ignored) {} + } else { + amount = buf.readLong(); + heldShift = buf.readBoolean(); + } } public static class Handler implements IMessageHandler { diff --git a/src/main/java/com/glodblock/github/network/CPacketFluidPatternTermBtns.java b/src/main/java/com/glodblock/github/network/CPacketFluidTerminalBtns.java similarity index 50% rename from src/main/java/com/glodblock/github/network/CPacketFluidPatternTermBtns.java rename to src/main/java/com/glodblock/github/network/CPacketFluidTerminalBtns.java index 921382559..11c5e01e2 100644 --- a/src/main/java/com/glodblock/github/network/CPacketFluidPatternTermBtns.java +++ b/src/main/java/com/glodblock/github/network/CPacketFluidTerminalBtns.java @@ -1,31 +1,46 @@ package com.glodblock.github.network; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; +import net.minecraftforge.common.util.ForgeDirection; import com.glodblock.github.client.gui.container.ContainerFluidStorageBus; +import com.glodblock.github.client.gui.container.base.FCBaseContainer; import com.glodblock.github.client.gui.container.base.FCContainerEncodeTerminal; +import com.glodblock.github.common.item.ItemMagnetCard; +import com.glodblock.github.inventory.InventoryHandler; +import com.glodblock.github.inventory.gui.GuiType; +import com.glodblock.github.inventory.item.IItemTerminal; +import com.glodblock.github.inventory.item.IWirelessExtendCard; +import com.glodblock.github.inventory.item.IWirelessMagnetCardFilter; +import com.glodblock.github.util.BlockPos; +import com.glodblock.github.util.Util; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import cpw.mods.fml.common.network.simpleimpl.MessageContext; import io.netty.buffer.ByteBuf; -public class CPacketFluidPatternTermBtns implements IMessage { +public class CPacketFluidTerminalBtns implements IMessage { private String Name = ""; private String Value = ""; - public CPacketFluidPatternTermBtns(final String name, final String value) { + public CPacketFluidTerminalBtns(final String name, final String value) { Name = name; Value = value; } - public CPacketFluidPatternTermBtns(final String name, final Integer value) { + public CPacketFluidTerminalBtns(final String name, final boolean value) { + this(name, value ? 1 : 0); + } + + public CPacketFluidTerminalBtns(final String name, final Integer value) { Name = name; Value = value.toString(); } - public CPacketFluidPatternTermBtns() { + public CPacketFluidTerminalBtns() { // NO-OP } @@ -57,14 +72,61 @@ public void toBytes(ByteBuf buf) { } } - public static class Handler implements IMessageHandler { + public static class Handler implements IMessageHandler { @Override - public IMessage onMessage(CPacketFluidPatternTermBtns message, MessageContext ctx) { + public IMessage onMessage(CPacketFluidTerminalBtns message, MessageContext ctx) { String Name = message.Name; String Value = message.Value; + final EntityPlayer player = ctx.getServerHandler().playerEntity; final Container c = ctx.getServerHandler().playerEntity.openContainer; - if (Name.startsWith("PatternTerminal.") && (c instanceof final FCContainerEncodeTerminal cpt)) { + if(Name.equals("Terminal.Sync")){ + final FCBaseContainer cpt = (FCBaseContainer) c; + final IItemTerminal itemTerminal = (IItemTerminal) cpt.getHost(); + itemTerminal.setSyncData(Value.equals("1")); + itemTerminal.saveSettings(); + } else if (Name.startsWith("WirelessTerminal.") && (c instanceof FCBaseContainer)) { + final FCBaseContainer cpt = (FCBaseContainer) c; + final IItemTerminal itemTerminal = (IItemTerminal) cpt.getHost(); + final IWirelessExtendCard iwt = (IWirelessExtendCard) itemTerminal; + switch (Name) { + case "WirelessTerminal.Stock": + iwt.setRestock(!iwt.isRestock()); + break; + case "WirelessTerminal.MagnetMode": + iwt.setMagnetCardNextMode(); + break; + case "WirelessTerminal.OpenMagnet": + InventoryHandler.openGui( + player, + player.worldObj, + new BlockPos( + cpt.getPortableCell().getInventorySlot(), + Util.GuiHelper.encodeType(0, Util.GuiHelper.GuiType.ITEM), + -1), + ForgeDirection.UNKNOWN, + GuiType.WIRELESS_MAGNET_CARD_FILTER); + break; + case "WirelessTerminal.magnet.NBT": + ((IWirelessMagnetCardFilter) itemTerminal).setNBTMode(Value.equals("1")); + break; + case "WirelessTerminal.magnet.Meta": + ((IWirelessMagnetCardFilter) itemTerminal).setMetaMode(Value.equals("1")); + break; + case "WirelessTerminal.magnet.Ore": + ((IWirelessMagnetCardFilter) itemTerminal).setOreMode(Value.equals("1")); + break; + case "WirelessTerminal.magnet.FilterMode": + ((IWirelessMagnetCardFilter) itemTerminal).setListMode( + Value.equals("1") ? ItemMagnetCard.ListMode.WhiteList + : ItemMagnetCard.ListMode.BlackList); + break; + case "WirelessTerminal.magnet.clear": + ((IWirelessMagnetCardFilter) itemTerminal).clearConfig(); + break; + } + itemTerminal.saveSettings(); + } else if (Name.startsWith("PatternTerminal.") && (c instanceof final FCContainerEncodeTerminal cpt)) { switch (Name) { case "PatternTerminal.CraftMode" -> cpt.getPatternTerminal().setCraftingRecipe(Value.equals("1")); case "PatternTerminal.Encode" -> { diff --git a/src/main/java/com/glodblock/github/network/CPacketValueConfig.java b/src/main/java/com/glodblock/github/network/CPacketValueConfig.java index 26cf6a197..8a3afc27b 100644 --- a/src/main/java/com/glodblock/github/network/CPacketValueConfig.java +++ b/src/main/java/com/glodblock/github/network/CPacketValueConfig.java @@ -2,9 +2,20 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; +import net.minecraft.inventory.ContainerPlayer; +import net.minecraft.item.ItemStack; + +import org.apache.commons.lang3.tuple.ImmutablePair; import com.glodblock.github.client.gui.container.ContainerFluidLevelEmitter; +import com.glodblock.github.common.item.ItemBaseWirelessTerminal; +import com.glodblock.github.inventory.item.WirelessCraftingTerminalInventory; +import com.glodblock.github.util.Util; +import appeng.api.AEApi; +import appeng.api.config.Actionable; +import appeng.api.networking.IGridNode; +import appeng.api.storage.data.IAEItemStack; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import cpw.mods.fml.common.network.simpleimpl.MessageContext; @@ -37,15 +48,54 @@ public void toBytes(ByteBuf buf) { public static class Handler implements IMessageHandler { @Override + public IMessage onMessage(CPacketValueConfig message, MessageContext ctx) { EntityPlayer player = ctx.getServerHandler().playerEntity; - if (player.openContainer != null) { - Container container = player.openContainer; + Container container = player.openContainer; + if (container != null) { if (container instanceof ContainerFluidLevelEmitter) { ((ContainerFluidLevelEmitter) container).setLevel(message.amount, player); + } else if (container instanceof ContainerPlayer) { + ImmutablePair result = Util.Wireless.getUltraWirelessTerm(player); + if (result == null) return null; + if (message.valueIndex == 1) { + ItemBaseWirelessTerminal + .toggleRestockItemsMode(result.getRight(), !Util.Wireless.isRestock(result.getRight())); + return null; + } else if (Util.Wireless.isRestock(result.getRight())) { + restockItems(result.getRight(), result.getLeft(), player); + } } } return null; } + + @SuppressWarnings("unchecked") + private void restockItems(ItemStack terminal, int slot, EntityPlayer player) { + IGridNode iGridNode = Util.Wireless.getWirelessGrid(terminal); + if (iGridNode == null) return; + WirelessCraftingTerminalInventory inv = new WirelessCraftingTerminalInventory( + terminal, + slot, + iGridNode, + player); + + for (int i = 0; i < 9; i++) { + ItemStack is = player.inventory.mainInventory[i]; + if (is == null) continue; + int maxSize = is.getMaxStackSize(); + if (is.stackSize == maxSize) continue; + + int fillSize = maxSize - is.stackSize; + + IAEItemStack ias = AEApi.instance().storage().createItemStack(is); + + ias.setStackSize(fillSize); + IAEItemStack extractedItem = (IAEItemStack) inv + .extractItems(ias, Actionable.MODULATE, inv.getActionSource()); + if (extractedItem == null) continue; + player.inventory.addItemStackToInventory(extractedItem.getItemStack()); + } + } } } diff --git a/src/main/java/com/glodblock/github/network/SPacketMEItemInvUpdate.java b/src/main/java/com/glodblock/github/network/SPacketMEItemInvUpdate.java index 4c8715804..13e9b8760 100644 --- a/src/main/java/com/glodblock/github/network/SPacketMEItemInvUpdate.java +++ b/src/main/java/com/glodblock/github/network/SPacketMEItemInvUpdate.java @@ -10,6 +10,7 @@ import com.glodblock.github.client.gui.GuiFluidCraftConfirm; import com.glodblock.github.client.gui.GuiItemMonitor; import com.glodblock.github.client.gui.GuiLevelMaintainer; +import com.glodblock.github.proxy.ClientProxy; import appeng.api.storage.data.IAEItemStack; import appeng.util.item.AEItemStack; @@ -93,6 +94,9 @@ public static class Handler implements IMessageHandler result = Util.Wireless.getUltraWirelessTerm(mc.thePlayer); + if (result == null || !Util.Wireless.isRestock(result.getRight()) || mc.currentScreen != null) return; + FluidCraft.proxy.netHandler.sendToServer(new CPacketValueConfig(1, 0)); + refreshTick = System.currentTimeMillis(); + } + } + + public static void postUpdate(List list, final byte ref) { + if (ref == 2) { + setWirelessTerminalEffect(list); + } + } + + private static void setWirelessTerminalEffect(List list) { + ItemBaseWirelessTerminal.setEffect(true); + for (IAEItemStack is : list) { + mc.thePlayer.addChatMessage( + new ChatComponentText( + I18n.format( + NameConst.TT_CRAFTING_COMPLETE, + is.getItemStack().getDisplayName(), + format.toWideReadableForm(is.getStackSize())))); + } + } } diff --git a/src/main/java/com/glodblock/github/proxy/CommonProxy.java b/src/main/java/com/glodblock/github/proxy/CommonProxy.java index aa9364254..e7d3f6a68 100644 --- a/src/main/java/com/glodblock/github/proxy/CommonProxy.java +++ b/src/main/java/com/glodblock/github/proxy/CommonProxy.java @@ -1,9 +1,17 @@ package com.glodblock.github.proxy; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.player.EntityItemPickupEvent; + +import org.apache.commons.lang3.tuple.ImmutablePair; import com.glodblock.github.FluidCraft; import com.glodblock.github.common.Config; +import com.glodblock.github.common.item.ItemMagnetCard; import com.glodblock.github.common.parts.PartFluidInterface; import com.glodblock.github.common.parts.PartFluidP2PInterface; import com.glodblock.github.common.tile.TileFluidInterface; @@ -11,24 +19,105 @@ import com.glodblock.github.crossmod.extracells.EC2Replacer; import com.glodblock.github.crossmod.thaumcraft.AspectUtil; import com.glodblock.github.inventory.external.AEFluidInterfaceHandler; +import com.glodblock.github.inventory.item.WirelessMagnetCardFilterInventory; import com.glodblock.github.loader.ItemAndBlockHolder; import com.glodblock.github.network.SPacketMEUpdateBuffer; import com.glodblock.github.network.wrapper.FCNetworkWrapper; import com.glodblock.github.util.ModAndClassUtil; +import com.glodblock.github.util.Util; import appeng.api.AEApi; import appeng.api.IAppEngApi; import appeng.api.config.Upgrades; +import appeng.api.networking.IGridNode; +import appeng.api.storage.data.IAEItemStack; +import appeng.api.storage.data.IItemList; +import appeng.util.Platform; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLLoadCompleteEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.gameevent.TickEvent; public class CommonProxy { public final FCNetworkWrapper netHandler = new FCNetworkWrapper(FluidCraft.MODID); + public CommonProxy() { + MinecraftForge.EVENT_BUS.register(this); + FMLCommonHandler.instance().bus().register(this); + } + + @SuppressWarnings("unchecked") + @SubscribeEvent + public void pickupEvent(EntityItemPickupEvent e) { + try { + if (Platform.isClient() || e.entityPlayer == null) return; + EntityPlayer player = e.entityPlayer; + EntityItem itemEntity = e.item; + ItemStack stack = itemEntity.getEntityItem(); + World world = player.getEntityWorld(); + + ImmutablePair result = Util.Wireless.getUltraWirelessTerm(player); + if (result == null) return; + final ItemStack wirelessTerm = result.getRight(); + ItemMagnetCard.Mode mode = ItemMagnetCard.getMode(wirelessTerm); + if (!Util.Wireless.hasMagnetCard(wirelessTerm) || mode != ItemMagnetCard.Mode.ME) return; + IGridNode gridNode = Util.Wireless.getWirelessGrid(wirelessTerm); + if (gridNode == null || !Util.Wireless.rangeCheck(wirelessTerm, player, gridNode)) return; + WirelessMagnetCardFilterInventory inv = new WirelessMagnetCardFilterInventory( + wirelessTerm, + result.getLeft(), + gridNode, + player); + + IItemList filteredList = inv.getAEFilteredItems(); + IAEItemStack ais = AEApi.instance().storage().createItemStack(stack); + if (inv.getListMode() == ItemMagnetCard.ListMode.WhiteList) { // whitelisting + if (!filteredList.isEmpty() && inv.isItemFiltered(stack, filteredList)) { + if (inv.doInject(ais, itemEntity, world)) { + stack = null; + itemEntity.setDead(); + e.setCanceled(true); + } + } + } else if (inv.getListMode() == ItemMagnetCard.ListMode.BlackList) { + if (!inv.isItemFiltered(stack, filteredList)) { + if (inv.doInject(ais, itemEntity, world)) { + stack = null; + itemEntity.setDead(); + e.setCanceled(true); + } + } + } + + } catch (NullPointerException ex) { + ex.printStackTrace(); + } + } + + @SubscribeEvent + public void tickEvent(TickEvent.PlayerTickEvent e) { + EntityPlayer player = e.player; + ImmutablePair result = Util.Wireless.getUltraWirelessTerm(player); + if (result == null) return; + final ItemStack wirelessTerm = result.getRight(); + if (!Util.Wireless.hasMagnetCard(wirelessTerm) + || ItemMagnetCard.getMode(wirelessTerm) == ItemMagnetCard.Mode.Off) + return; + IGridNode gridNode = Util.Wireless.getWirelessGrid(wirelessTerm); + if (gridNode == null) return; + WirelessMagnetCardFilterInventory inv = new WirelessMagnetCardFilterInventory( + wirelessTerm, + result.getLeft(), + gridNode, + player); + ItemMagnetCard.doMagnet(wirelessTerm, e.player.worldObj, e.player, inv); + + } + public void preInit(FMLPreInitializationEvent event) { ModAndClassUtil.init(); ItemAndBlockHolder.init(); diff --git a/src/main/java/com/glodblock/github/util/NameConst.java b/src/main/java/com/glodblock/github/util/NameConst.java index f5644bfac..90cca2a9b 100644 --- a/src/main/java/com/glodblock/github/util/NameConst.java +++ b/src/main/java/com/glodblock/github/util/NameConst.java @@ -49,9 +49,14 @@ public class NameConst { public static final String ITEM_WIRELESS_FLUID_PATTERN_TERMINAL = "wireless_fluid_pattern_terminal"; public static final String ITEM_FLUID_PART = "fluid_part"; public static final String ITEM_FLUID_STORAGE_HOUSING = "fluid_storage_housing"; + public static final String ITEM_MAGNET_CARD = "magnet_card"; + public static final String ITEM_QUANTUM_BRIDGE_CARD = "quantum_bridge_card"; + public static final String ITEM_ENERGY_CARD = "energy_card"; public static final String TT_KEY = FluidCraft.MODID + ".tooltip."; + public static final String TT_CRAFTING_COMPLETE = TT_KEY + "crafting_complete"; public static final String TT_FLUID_TERMINAL = TT_KEY + "fluid_terminal"; + public static final String TT_FLUID_TERMINAL_AMOUNT = TT_FLUID_TERMINAL + ".amount"; public static final String TT_LEVEL_TERMINAL = TT_KEY + "level_terminal"; public static final String TT_INVALID_FLUID = TT_KEY + "invalid_fluid"; public static final String TT_FLUID_PACKET = TT_KEY + "fluid_packet"; @@ -84,6 +89,12 @@ public class NameConst { public static final String TT_LEVEL_MAINTAINER_EXPORT_DESC = TT_LEVEL_MAINTAINER + "export_desc"; public static final String TT_LEVEL_MAINTAINER_ERROR = TT_LEVEL_MAINTAINER + "error"; public static final String TT_LEVEL_MAINTAINER_ERROR_DESC = TT_LEVEL_MAINTAINER + "error_desc"; + public static final String TT_QUANTUM_BRIDGE_CARD = TT_KEY + "quantum_bridge_card"; + public static final String TT_QUANTUM_BRIDGE_CARD_DESC = TT_QUANTUM_BRIDGE_CARD + ".desc"; + public static final String TT_MAGNET_CARD = TT_KEY + "magnet_card"; + public static final String TT_MAGNET_CARD_DESC = TT_MAGNET_CARD + ".desc"; + public static final String TT_ENERGY_CARD = TT_KEY + "energy_card"; + public static final String TT_ENERGY_CARD_DESC = TT_ENERGY_CARD + ".desc"; public static final String TT_CELL_CONTENTS = TT_KEY + "cell_contents"; public static final String TT_CELL_EMPTY = TT_KEY + "cell_empty"; public static final String TT_CELL_PORTABLE = TT_KEY + "cell_portable"; @@ -94,6 +105,10 @@ public class NameConst { public static final String TT_ULTRA_TERMINAL_TIPS = TT_ULTRA_TERMINAL + ".tips"; public static final String TT_ULTRA_TERMINAL_TIPS_DESC = TT_ULTRA_TERMINAL_TIPS + ".desc"; + public static final String TT_ULTRA_TERMINAL_RESTOCK = TT_ULTRA_TERMINAL + ".restock"; + public static final String TT_ULTRA_TERMINAL_RESTOCK_ON = TT_ULTRA_TERMINAL_RESTOCK + ".on"; + public static final String TT_ULTRA_TERMINAL_RESTOCK_OFF = TT_ULTRA_TERMINAL_RESTOCK + ".off"; + public static final String WAILA_KEY = FluidCraft.MODID + ".waila."; public static final String WAILA_ENABLE = WAILA_KEY + "enable"; public static final String WAILA_DISABLE = WAILA_KEY + "disable"; @@ -117,6 +132,12 @@ public class NameConst { public static final String GUI_FLUID_IMPORT = GUI_KEY + ITEM_PART_FLUID_IMPORT; public static final String GUI_FLUID_EXPORT = GUI_KEY + ITEM_PART_FLUID_EXPORT; public static final String GUI_FLUID_STORAGE_BUS = GUI_KEY + ITEM_PART_FLUID_STORAGE_BUS; + public static final String GUI_MAGNET_CARD = GUI_KEY + ITEM_MAGNET_CARD; + public static final String GUI_MAGNET_CARD_NBT = GUI_MAGNET_CARD + ".nbt"; + public static final String GUI_MAGNET_CARD_META = GUI_MAGNET_CARD + ".meta"; + public static final String GUI_MAGNET_CARD_ORE = GUI_MAGNET_CARD + ".ore"; + public static final String GUI_MAGNET_CARD_WhiteList = GUI_MAGNET_CARD + ".whitelist"; + public static final String GUI_MAGNET_CARD_BlackList = GUI_MAGNET_CARD + ".blacklist"; public static String i18n(String t, String delimiter, boolean hint) { if (!hint) { diff --git a/src/main/java/com/glodblock/github/util/Util.java b/src/main/java/com/glodblock/github/util/Util.java index 2bed4fba1..541ab1cbd 100644 --- a/src/main/java/com/glodblock/github/util/Util.java +++ b/src/main/java/com/glodblock/github/util/Util.java @@ -1,6 +1,7 @@ package com.glodblock.github.util; -import static com.glodblock.github.common.item.ItemBaseWirelessTerminal.infinityBoosterCard; +import static com.glodblock.github.common.item.ItemBaseWirelessTerminal.*; +import static net.minecraft.init.Items.glass_bottle; import java.io.IOException; import java.util.ArrayList; @@ -11,6 +12,7 @@ import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; +import net.minecraft.item.ItemPotion; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.util.ForgeDirection; @@ -61,129 +63,196 @@ public final class Util { - public static int drainItemPower(AEBaseContainer c, InventoryPlayer ip, int slot, int ticks, double pm, - IFluidPortableCell wt) { - if (slot != -1) { - final ItemStack currentItem = getWirelessTerminal(ip.player, slot); - if (wt != null) { - if (currentItem != wt.getItemStack()) { - if (currentItem != null) { - if (Platform.isSameItem(wt.getItemStack(), currentItem)) { - if (GuiHelper.decodeInvType(slot).getLeft() == GuiHelper.InvType.PLAYER_INV) { - ip.setInventorySlotContents(slot, wt.getItemStack()); - } else { - BaublesApi.getBaubles(ip.player).setInventorySlotContents( - GuiHelper.decodeInvType(slot).getRight(), - wt.getItemStack()); - } - } else { - c.setValidContainer(false); + public static class Wireless { + + public static boolean hasInfinityBoosterCard(ItemStack is) { + if (is.getItem() instanceof ItemBaseWirelessTerminal) { + NBTTagCompound data = Platform.openNbtData(is); + return data.hasKey(infinityBoosterCard) && data.getBoolean(infinityBoosterCard); + } + return false; + } + + public static boolean rangeCheck(ItemStack is, EntityPlayer player, IGrid grid) { + boolean canConnect = false; + if (hasInfinityBoosterCard(is)) { + canConnect = true; + } else { + for (IGridNode node : grid.getMachines(TileWireless.class)) { + IWirelessAccessPoint accessPoint = (IWirelessAccessPoint) node.getMachine(); + if (accessPoint.isActive() && accessPoint.getLocation().getDimension() == player.dimension) { + WorldCoord distance = accessPoint.getLocation() + .subtract((int) player.posX, (int) player.posY, (int) player.posZ); + int squaredDistance = distance.x * distance.x + distance.y * distance.y + + distance.z * distance.z; + if (squaredDistance <= accessPoint.getRange() * accessPoint.getRange()) { + canConnect = true; + break; } - } else { - c.setValidContainer(false); } } - } else { - c.setValidContainer(false); } - } else { - c.setValidContainer(false); + return canConnect; } - ticks++; - if (ticks > 10 && wt != null) { - wt.extractAEPower(pm * ticks, Actionable.MODULATE, PowerMultiplier.CONFIG); - ticks = 0; + + public static boolean rangeCheck(ItemStack is, EntityPlayer player, IGridNode grid) { + if (grid.getGrid() == null) return false; + return rangeCheck(is, player, grid.getGrid()); } - return ticks; - } - public static boolean hasInfinityBoosterCard(ItemStack is) { - if (ModAndClassUtil.WCT && is.getItem() instanceof ItemBaseWirelessTerminal) { - NBTTagCompound data = Platform.openNbtData(is); - return data.hasKey(infinityBoosterCard) && data.getBoolean(infinityBoosterCard); + public static boolean isRestock(ItemStack is) { + if (is.getItem() instanceof ItemBaseWirelessTerminal) { + NBTTagCompound data = Platform.openNbtData(is); + return data.hasKey(restockItems) && data.getBoolean(restockItems); + } + return false; } - return false; - } - public static IGridNode getWirelessGrid(ItemStack is) { - if (is.getItem() instanceof ToolWirelessTerminal) { - String key = ((ToolWirelessTerminal) is.getItem()).getEncryptionKey(is); - IGridHost securityTerminal = (IGridHost) AEApi.instance().registries().locatable() - .getLocatableBy(Long.parseLong(key)); - if (securityTerminal == null) return null; - return securityTerminal.getGridNode(ForgeDirection.UNKNOWN); + public static boolean hasMagnetCard(ItemStack is) { + if (is.getItem() instanceof ItemBaseWirelessTerminal) { + NBTTagCompound data = Platform.openNbtData(is); + return data.hasKey(magnetCard) && data.getBoolean(magnetCard); + } + return false; } - return null; - } - public static IMEInventoryHandler getWirelessInv(ItemStack is, EntityPlayer player, StorageChannel channel) { - if (Platform.isClient()) return new NullInventory<>(); - IGridNode gridNode = getWirelessGrid(is); - if (gridNode == null) return null; - IGrid grid = gridNode.getGrid(); - if (grid == null) return null; - boolean canConnect = false; - if (hasInfinityBoosterCard(is)) { - canConnect = true; - } else { - for (IGridNode node : grid.getMachines(TileWireless.class)) { - IWirelessAccessPoint accessPoint = (IWirelessAccessPoint) node.getMachine(); - if (accessPoint.isActive() && accessPoint.getLocation().getDimension() == player.dimension) { - WorldCoord distance = accessPoint.getLocation() - .subtract((int) player.posX, (int) player.posY, (int) player.posZ); - int squaredDistance = distance.x * distance.x + distance.y * distance.y + distance.z * distance.z; - if (squaredDistance <= accessPoint.getRange() * accessPoint.getRange()) { - canConnect = true; - break; + public static boolean hasEnergyCard(ItemStack is) { + if (is.getItem() instanceof ItemBaseWirelessTerminal) { + NBTTagCompound data = Platform.openNbtData(is); + return data.hasKey(infinityEnergyCard) && data.getBoolean(infinityEnergyCard); + } + return false; + } + + public static int drainItemPower(AEBaseContainer c, InventoryPlayer ip, int slot, int ticks, double pm, + IFluidPortableCell wt) { + if (slot != -1) { + final ItemStack currentItem = getWirelessTerminal(ip.player, slot); + if (wt != null) { + if (currentItem != wt.getItemStack()) { + if (currentItem != null) { + if (Platform.isSameItem(wt.getItemStack(), currentItem)) { + if (GuiHelper.decodeInvType(slot).getLeft() == GuiHelper.InvType.PLAYER_INV) { + ip.setInventorySlotContents(slot, wt.getItemStack()); + } else { + BaublesApi.getBaubles(ip.player).setInventorySlotContents( + GuiHelper.decodeInvType(slot).getRight(), + wt.getItemStack()); + } + } else { + c.setValidContainer(false); + } + } else { + c.setValidContainer(false); + } } + } else { + c.setValidContainer(false); + } + } else { + c.setValidContainer(false); + } + ticks++; + if (wt != null) { + if (hasEnergyCard(wt.getItemStack())) { + ticks = 0; + } else if (ticks > 10) { + wt.extractAEPower(pm * ticks, Actionable.MODULATE, PowerMultiplier.CONFIG); + ticks = 0; } } + return ticks; } - if (canConnect) { - IStorageGrid gridCache = grid.getCache(IStorageGrid.class); - if (gridCache != null) { - if (channel == StorageChannel.FLUIDS) { - return gridCache.getFluidInventory(); - } else { - return gridCache.getItemInventory(); + + public static IGridNode getWirelessGrid(ItemStack is) { + if (is.getItem() instanceof ToolWirelessTerminal) { + String key = ((ToolWirelessTerminal) is.getItem()).getEncryptionKey(is); + IGridHost securityTerminal = (IGridHost) AEApi.instance().registries().locatable() + .getLocatableBy(Long.parseLong(key)); + if (securityTerminal == null) return null; + return securityTerminal.getGridNode(ForgeDirection.UNKNOWN); + } + return null; + } + + public static IMEInventoryHandler getWirelessInv(ItemStack is, EntityPlayer player, StorageChannel channel) { + if (Platform.isClient()) return new NullInventory<>(); + IGridNode gridNode = getWirelessGrid(is); + if (gridNode == null) return null; + IGrid grid = gridNode.getGrid(); + if (grid == null) return null; + boolean canConnect = rangeCheck(is, player, grid); + if (canConnect) { + IStorageGrid gridCache = grid.getCache(IStorageGrid.class); + if (gridCache != null) { + if (channel == StorageChannel.FLUIDS) { + return gridCache.getFluidInventory(); + } else { + return gridCache.getItemInventory(); + } } } + return null; } - return null; - } - public static ItemStack getWirelessTerminal(EntityPlayer player, int x) { - ImmutablePair result = GuiHelper.decodeInvType(x); - if (result.getLeft() == GuiHelper.InvType.PLAYER_INV) { - return player.inventory.getStackInSlot(result.getRight()); - } else { - return BaublesApi.getBaubles(player).getStackInSlot(result.getRight()); + public static ItemStack getWirelessTerminal(EntityPlayer player, int x) { + ImmutablePair result = GuiHelper.decodeInvType(x); + if (result.getLeft() == GuiHelper.InvType.PLAYER_INV) { + return player.inventory.getStackInSlot(result.getRight()); + } else { + return BaublesApi.getBaubles(player).getStackInSlot(result.getRight()); + } } - } - public static ImmutablePair getUltraWirelessTerm(EntityPlayer player) { - int invSize = player.inventory.getSizeInventory(); + public static ItemStack getWirelessTerm(EntityPlayer player) { + int invSize = player.inventory.getSizeInventory(); - if (invSize <= 0) { + if (invSize <= 0) { + return null; + } + for (int i = 0; i < invSize; ++i) { + ItemStack is = player.inventory.getStackInSlot(i); + if (is != null && is.getItem() instanceof ItemBaseWirelessTerminal) { + return is; + } + } + IInventory handler = BaublesApi.getBaubles(player); + if (handler != null) { + invSize = handler.getSizeInventory(); + for (int i = 0; i < invSize; ++i) { + ItemStack is = handler.getStackInSlot(i); + if (is != null && is.getItem() instanceof ItemBaseWirelessTerminal) { + return is; + } + } + } return null; } - for (int i = 0; i < invSize; ++i) { - ItemStack is = player.inventory.getStackInSlot(i); - if (is != null && is.getItem() instanceof ItemWirelessUltraTerminal) { - return new ImmutablePair<>(i, is); + + public static ImmutablePair getUltraWirelessTerm(EntityPlayer player) { + int invSize = player.inventory.getSizeInventory(); + + if (invSize <= 0) { + return null; } - } - IInventory handler = BaublesApi.getBaubles(player); - if (handler != null) { - invSize = handler.getSizeInventory(); for (int i = 0; i < invSize; ++i) { - ItemStack is = handler.getStackInSlot(i); + ItemStack is = player.inventory.getStackInSlot(i); if (is != null && is.getItem() instanceof ItemWirelessUltraTerminal) { - return new ImmutablePair<>(GuiHelper.encodeType(i, GuiHelper.InvType.PLAYER_BAUBLES), is); + return new ImmutablePair<>(i, is); + } + } + IInventory handler = BaublesApi.getBaubles(player); + if (handler != null) { + invSize = handler.getSizeInventory(); + for (int i = 0; i < invSize; ++i) { + ItemStack is = handler.getStackInSlot(i); + if (is != null && is.getItem() instanceof ItemWirelessUltraTerminal) { + return new ImmutablePair<>(GuiHelper.encodeType(i, GuiHelper.InvType.PLAYER_BAUBLES), is); + } } } + return null; } - return null; } public static int findItemInPlayerInvSlot(EntityPlayer player, ItemStack itemStack) { @@ -430,6 +499,18 @@ public static int clamp(int value, int min, int max) { public static class FluidUtil { + private static final ItemStack glassBottle = new ItemStack(glass_bottle, 1); + + public static ItemStack getPotion(FluidStack fs) { + if (fs == null) return null; + MutablePair fillStack = Util.FluidUtil.fillStack(glassBottle, fs); + if (fillStack != null && fillStack.getRight() != null + && fillStack.getRight().getItem() instanceof ItemPotion) { + return fillStack.right; + } + return null; + } + public static void fluidTankInfoWriteToNBT(FluidTankInfo[] infos, NBTTagCompound data) { int i = 0; for (FluidTankInfo info : infos) { diff --git a/src/main/resources/assets/ae2fc/lang/en_US.lang b/src/main/resources/assets/ae2fc/lang/en_US.lang index 58ae1a029..70b387b54 100644 --- a/src/main/resources/assets/ae2fc/lang/en_US.lang +++ b/src/main/resources/assets/ae2fc/lang/en_US.lang @@ -25,6 +25,9 @@ item.wireless_ultra_terminal.WIRELESS_ESSENTIA_TERMINAL.name=Universal Wireless item.wireless_ultra_terminal.WIRELESS_INTERFACE_TERMINAL.name=Universal Wireless Terminal - Interface item.wireless_ultra_terminal.WIRELESS_FLUID_PATTERN_TERMINAL_EX.name=Universal Wireless Terminal - Processing Pattern item.fluid_packet.name=Fluid Packet +item.magnet_card.name=Magnet Card +item.quantum_bridge_card.name=Quantum Bridge Card +item.energy_card.name=Energy Card item.creative_fluid_storage.name=Creative ME Fluid Storage Cell item.fluid_storage.1.name=%s1k%s ME Fluid Storage Cell item.fluid_storage.4.name=%s4k%s ME Fluid Storage Cell @@ -110,10 +113,15 @@ ae2fc.tooltip.ultra_terminal=Right click + sneaking to switch mode. ae2fc.tooltip.ultra_terminal.tips=ToolTips: ae2fc.tooltip.ultra_terminal.tips.desc=1.You can put it to baubles slot and use hotkey to open.\n2.Interface mode hold §3Shift§7 toggle interface renamer button.\n3.When you are in the crafting plan screen.\nHold §3Shift§7 click cancel button will automatically add missing items to NEI bookmark. +ae2fc.tooltip.quantum_bridge_card.desc=Allows wireless terminals to connect to a quantum bridge, allowing for unlimited range +ae2fc.tooltip.magnet_card.desc=Magnet upgrade for the Wireless Terminal +ae2fc.tooltip.energy_card.desc=Infinity Energy for the Wireless Terminal + ae2fc.tooltip.cell_contents=Contains Fluid: ae2fc.tooltip.cell_empty=Cell is empty ae2fc.tooltip.cell_portable=Right click to open its GUI. It works like a backpack, but you need to charge it before using. ae2fc.tooltip.fluid_terminal=uh So we don't need EC2 anymore? +ae2fc.tooltip.fluid_terminal.amount=Amount: %s L ae2fc.tooltip.level_terminal=uh... ae2fc.tooltip.invalid_fluid=Invalid fluid! ae2fc.tooltip.encode_pattern=Encode Pattern @@ -149,6 +157,23 @@ ae2fc.tooltip.fill_pattern.hint=Enabled ae2fc.tooltip.not_fill_pattern.hint=Disabled ae2fc.tooltip.open_configuration=Open configuration ae2fc.tooltip.block_highlight=Highlight Block +ae2fc.tooltip.magnet_card.off=Magnet Card +ae2fc.tooltip.magnet_card.off.hint=Off +ae2fc.tooltip.magnet_card.inv=Magnet Card +ae2fc.tooltip.magnet_card.inv.hint=Pickup to Inventory +ae2fc.tooltip.magnet_card.me=Magnet Card +ae2fc.tooltip.magnet_card.me.hint=Pickup to ME +ae2fc.tooltip.magnet_card.filter=Magnet Filter +ae2fc.tooltip.restock.on=Toggle Restock +ae2fc.tooltip.restock.on.hint=Enable +ae2fc.tooltip.restock.off=Toggle Restock +ae2fc.tooltip.restock.off.hint=Disable +ae2fc.tooltip.crafting_complete=Item: %s x%s Crafting Complete + +ae2fc.tooltip.data_sync.enable=Data Sync +ae2fc.tooltip.data_sync.enable.hint=Enable +ae2fc.tooltip.data_sync.disable=Data Sync +ae2fc.tooltip.data_sync.disable.hint=Disable ae2fc.gui.part_fluid_pattern_terminal=Fluid Pattern Terminal ae2fc.gui.part_fluid_pattern_terminal_ex=Fluid Processing Pattern Terminal @@ -173,6 +198,12 @@ ae2fc.gui.part_fluid_export=ME Fluid Export Bus ae2fc.gui.part_fluid_terminal=ME Fluid Terminal ae2fc.gui.part_fluid_storage_bus=ME Fluid Storage Bus ae2fc.gui.fluid_auto_filler=ME Fluid Auto Filler +ae2fc.gui.magnet_card=Magnet Filter +ae2fc.gui.magnet_card.nbt=Ignore NBT Data +ae2fc.gui.magnet_card.meta=Ignore Meta Data +ae2fc.gui.magnet_card.ore=Use Ore Dictionary +ae2fc.gui.magnet_card.whitelist=Whitelisting +ae2fc.gui.magnet_card.blacklist=BlackListing ae2fc.gui.color.StateNone=00000000 ae2fc.gui.color.StateIdle=FF55FF55 @@ -182,6 +213,7 @@ ae2fc.gui.color.StateError=FFFF5555 error.unknown=Unknown -key.OpenTerminal=Open Wireless Universal Terminal +ae2fc.key.OpenTerminal=Open Wireless Universal Terminal +ae2fc.key.Restock=Toggle Restock itemGroup.ae2fc=Fluid Craft For AE2 diff --git a/src/main/resources/assets/ae2fc/textures/gui/magnet_filter.png b/src/main/resources/assets/ae2fc/textures/gui/magnet_filter.png new file mode 100644 index 0000000000000000000000000000000000000000..7312b62cba9b2d064f899a226fe64d665c3be2b1 GIT binary patch literal 16636 zcmeI3e{37o9l)Q{(1c8M0fv}pU0obNKz6x1|MtZ(>Ec2%)g?+jH67iW%iTG-)b<(s z61&mZTo4NTqbL-0MVk=(!B8~`C=!fHw8hofIt{7Xn1BdcDf{tHQM)1b1G>?%@7?*w z<;8ieO3}3GS@PZczVDCs-sk(?_v}CJ2P0eWy{_Yy4usHk!$a{=gj~>cq4u?K+nGO< zg4?yZp&bQ;*1chVT?cyBtw*Tukd_=X#u8gZSiTRVsFvctLG;6Z(wN@9~%e)j!pBWped_vV|%;pvaY^ z94GYhTr(#{uKVO>@@Z>oip;5LHKS&Y0{96{{c=;fp%cHWAiK^s3L9ZSxD~5sobbq&}Z_px_K6s(%o$JhL&n1XIUguv+CT{lD3MQsj=Ox ztzc&;3TqVy^QvU%`J}F=WA-i^sUc(r2d!Pj+_7EDDtfVSXOzQT8u@NSQ{$4M#$Z1N zS>DHbg(UA210m7tV|l;G^Nt|4B^D#0D_UxgBSrxHl7dh421P#PjN!1vW5D@QBtyEa zC{9~P97PsWdOjl=F)bras$4ER8RZ(C4$Jzk5(o9Po`-3vF<+Ex*6r}JcA7YxEf`W( zR)^y;=;+lnMGOle>5Uww??l$s?SFFTZFwR(_(o-&G3UfnbaJLGasz8!VB8y-H&na_f> z_5~!OAkBWxGzeZ<@=Jc!pHlrSFZp>^@&{#>R|0Sdf^y2Ag3W$qY4F1%Hz`1g3y405 zZCAPfUK$#^Se}xyld2NqYAdUC{4Zth^6KH0Wv=P7<^Lda_DNh`6Ki#LWets*KPyD2 zzfcP#tL_O=Zbe^X&)D{3W*tq>SoV=14vnjVzkTcn^EUXIuEv6afG-f`@NV2=L@TN3vA70L(1Q6S@CJfaCtTCibH}Ql4o%h5 zPL|^*wN*duUiiTd{}s6UpM@2rwf+RUnvKSiu4Ys$799iwLKZ15G9OG!abZBnBE?1K zgJ~%)3Vor!L$??281k9Tx33&mg2&IkVT4% z%m>p_To@3tNO6(*U|Na`140%lE;1iXOL1X9$Rfo>=7VV|E({1+q`1g@FfGM}0U?VN z7nu*HrMNI4WRc<`^TD(f7Y2kZQe0#{n3m$gfRIIsi_8bpQd}4ivPf}}`CwX#3j;zH zDK0V}OiOWLK*%D+MdpKPDJ~2MS){ngd@wD=g#jUpL|h$>*KgGTvfuyVBi9U_eCy2dN9JQcdS__M8yC;M)pch6XT{s*{2u~B4zGbrWu4jVLmzgofo3bTIzc;NDqYPwEMvHs5uV=lx4*V6TwHwVi3_N*Z(#Ox zdnXcoR`(N&)RDl{3hg~r=ZOWBRun{`;mZ~+@wu^TQ{gwWfI4|FfA-+MYK zpWHX_9oMJR(4&8Pd*0ofA-(2hBB`)Rl zd(XizzZpf(x*>p_8sI@l3?vOcwk4{3{2=wopw`n_oBrpja6!RqtmtdaGl=WglCw&uGRems2+2Iwj8 zN}MlUQ^U$%3hRcPnFIHwF1hXnHw^Qwj`GVg*u(5$0|1bAlo7>vl7rCCp_v`16+_ZRLe1Fdg#6b5AP*g6S{e4>{ ziaeh09p9;ajQB5?A8nui#=ZTY{_)-Ii5BLU2k&}n1dX?#Iw< zDZwfYDXICX5faQpNi0}MeQYcELv4r#s?_8rUP^MOoY|ep?Ck8`%}t}t2b;Y+vuEe~ z&YW{*MlsjHi2sozN9e}s&)C?QN77h2E$)vVJregWnBs=09b|d-1tKikO97rPuYKS^gvF6x(F%OL_&WaO{a0W?Sgu~G}eIgyY8c~ zun=uOUBSAIuVIJVw;@sD``Ff03akiVZ#mCw@QSeCjXLqXt(#-pi>0`jd0@5INc%)E z#<(lQBRU3m+9mnFM@BGse^^|&br;1&MHn9+N7d`)cy7td_-^E}xCSOh)JLSfAYTk1 z4s80hRN0^1cp8UW0Ja4{F?{wR zVs~$y$Ns{_2jbmbFD$hQ;JW8cA)XiAT<{2>&><1>y8f7}9C-C)BRZ<<(YOC2{Brm+ z>qm9_O*c!Gh`Jx^J@x_6!^4&fRzbchq{qK(TU1iwGt_ag_5+-0K8q@(fQA;;(*}q( z646%H0oDS>cY^a?AeM$6&^E$)ndN49(b}Qb0l8RF$V|E~Y+v8y{wfxwFbu*z_@XhZz9k=eH>T(L?c~1T5VB+Q?73Ce31CK{Wu;TP-)$s-X$@MJ{$o|Wdj{WX)Yi(XPLWDIbhpogu#r-nb-%N2eNMQ3(6h+JRorF z*s;(-X`sHoK6H0?Tl;5fFOe+*7w3tj(~#{24=Mt_-6#!^NK7?PPEKOpym`oGv*_&X zL~Cnn=-~bR{h|HC!^44nRB1iuiEo`dPq{+6!KqZoCM^pYTn`a>B29$F6eSYkcUM;z z9zJ{+STPV%O`^V|pC=@F(cS{awDW`xj{sSXq{nHnSS*Ist5=H+U44DMXb(b^Y8GTq zVIw@h#W_z%uWRL-u~vY+>4umKYZanF$n!*qe(%|{2lMC8M<$aIf@Xq1d-puSE`Z5h ztR{kcHhcxD%`aeLVnW1vV`C%Y@wk|UwQJYn+O=z9W@ZDz`$-ixT!hS&2+!ePgi=!2 zz$$<|R8diZ#ful?+_`gTYHAWWaq845ai6sr@FG-%=X?5tjCr~$D=UQvx&{UYRD6f! zK$Il5*~iiVoe{KjzTO5QIa^oo*8EZ zb$AgWBSqA>d64nGs16I|<>eSMw$5v|Y&k|odD~Xve=9&j zE?6<=6lXn8%=zCWeNF^7dYHbMvzo0GCJ@sPyVPWQm@h9!Efw1&DC__HE&< zRjXF9*$g|KaM-$o>4XrGU$$(S`fW=pa)d6@v_}N-HgD@5xazc3OHXUyx8DOy7~@sVx_51Yrpy{n;l#4w#P!@;GfJXqKc1NuJuM&kQXI zojegVNeAVGM}R)n`N9+tg}e?klxzvDi&ek$sg`j*(@@G6p-G!ac-j*tdAKpWa^=dr zhPOFF&xu^KAPFKQp*?N-gPeBxd#2>&)>^h{x#baI4ULe5_Jt66MUQ`da2s;fax>Px$T}ebiR5*>TlfO#>VI0Ok7dGTw9!NtC`6ncigwUVR7KGrSU@qAvRNNFzR)WLP zk3olUb1^~s6WW@Znt~u~lYG6iCAbFf&htEtsAqX!zI>nO`@GNlzVJs#&PLNT3&1qZ zu?EvH0O)qR0IbGh$g)hSRFYf)P1CGIJU(^GTc^Wou}D&txP5sBAQe%`&M!+LZ)4w{ z=0`XjrulGBd~<`8T}y-_0L(eI{p5DD&Z43KFc=Kj+1h4dX@!R9(GWczzXSkd4!q=a zrr?Usaxfv#Zr1q_g6qpO4D*xygTs*nPX-M6lLF~X0f3A16ON8g=^MuH9P|x?o2#-* zb~0EmS7}it8jT_=3Rzv3re@$J1E`VVw7XVI^7n>d^jMzq`5-;kYPG;R*w^SFsY-$C zEQ}ptw`YMWO|0)i{4CHD0=-fJK(}jp5W@%8<6bUj!RXWY5ftFR;2Z1tis*E9Tmb+8 N002ovPDHLkV1hQfyCMJp literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ae2fc/textures/items/magnet_card.png b/src/main/resources/assets/ae2fc/textures/items/magnet_card.png new file mode 100644 index 0000000000000000000000000000000000000000..1d61d17bd1ff86bdd2631bbcb377a95d8e9d4fe3 GIT binary patch literal 502 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>%( zIVmYGFR!Pwv$C=h$N+MIf@@c-nAq1>#K5qMpV8~>&4s^TESNJV*vpQ=e(UTRGZc<) zz54%~vyFkdp*n-~6rfS76?I+#O=c?z@&maJ2=bP(PXtnoN#5=*3>~bp9zYIffk$L9 z0|U1(2s1Lwnj--eWH0gbb!C6bCMO`qd1hzyJfKjWr;B5V#O2)c5BUx$@VEu0@M&BK z42Zt>-*f313!%OC{`=Yz&iI=@|D(ae@LnXw##^#~vCo32?8V17Px&PEVC5!{{bF2? zlVS}nXGC%sKi<`$G%1;hXNe4v~4Y~O#nQ4`{H3Yc)m?5qqIUoQ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ae2fc/textures/items/quantum_bridge_card.png b/src/main/resources/assets/ae2fc/textures/items/quantum_bridge_card.png new file mode 100644 index 0000000000000000000000000000000000000000..59b5bfd2871add53f05dfb4663eb2e052aa382c5 GIT binary patch literal 487 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>lVtR#xWazfCh4u1o?p+1qR!n2Q36L7?Zr+T^Kr8Wj%l#&H|6fVg?3oVGw3ym^DWN zD9B#o>Fdh=lub@RjPuOS=y^b)GEW!B5Q)pV{eeQw3OuYUMY%auK3(}8ztwZ;+P-(s z)!wuS=-C9FViPR((+j$}Qpsw2f5R%K?seI>eNtAO72VG(%aXB8oT*M3!~x0bQV4 z;u=wsl30>zm0Xkxq!^40j0|-R%yf+nLJZBUjEt-dEVT^`tPBhkB^?w|H00)|WTsW( V))3(GV=hnwgQu&X%Q~loCIDLOo#Oxi literal 0 HcmV?d00001