From e37a24a861623ec0a5503e328a1ff6d27eb0a92e Mon Sep 17 00:00:00 2001 From: lordIcocain Date: Sat, 29 Mar 2025 04:37:30 +0200 Subject: [PATCH 01/10] 1st commit --- .../github/client/gui/FCGuiBaseButton.java | 86 +++++++ .../github/client/gui/GuiFCImgButton.java | 10 + .../github/client/gui/GuiFluidMonitor.java | 1 + .../client/gui/GuiFluidPortableCell.java | 5 + .../github/client/gui/GuiItemMonitor.java | 1 + .../github/client/gui/GuiMagnetFilter.java | 177 ++++++++++++++ .../github/client/gui/base/FCBaseMEGui.java | 87 +++++++ .../gui/container/ContainerMagnetFilter.java | 95 ++++++++ .../gui/container/base/FCBaseContainer.java | 37 ++- .../container/base/FCContainerMonitor.java | 4 - .../com/glodblock/github/common/Config.java | 5 + .../common/item/ItemBaseWirelessTerminal.java | 27 +++ .../item/ItemWirelessUltraTerminal.java | 7 +- .../crossmod/waila/FCTooltipHandlerWaila.java | 12 + .../github/inventory/gui/GuiType.java | 14 ++ .../inventory/item/BaseWirelessInventory.java | 174 ++++++++++++++ .../inventory/item/IWirelessExtendCard.java | 26 +++ .../inventory/item/IWirelessMagnetFilter.java | 23 ++ .../inventory/item/IWirelessTerminal.java | 4 + .../WirelessCraftingTerminalInventory.java | 12 +- .../item/WirelessFluidTerminalInventory.java | 17 +- .../github/inventory/item/WirelessMagnet.java | 169 ++++++++++++++ .../WirelessMagnetCardFilterInventory.java | 215 ++++++++++++++++++ .../WirelessPatternTerminalExInventory.java | 12 +- .../WirelessPatternTerminalInventory.java | 12 +- .../github/loader/KeybindLoader.java | 32 ++- .../network/CPacketFluidPatternTermBtns.java | 59 ++++- .../github/network/CPacketValueConfig.java | 53 ++++- .../glodblock/github/proxy/ClientProxy.java | 27 +++ .../glodblock/github/proxy/CommonProxy.java | 87 +++++++ .../com/glodblock/github/util/NameConst.java | 13 ++ .../java/com/glodblock/github/util/Util.java | 68 ++++-- .../resources/assets/ae2fc/lang/en_US.lang | 22 +- .../ae2fc/textures/gui/magnet_filter.png | Bin 0 -> 16636 bytes .../assets/ae2fc/textures/gui/states3.png | Bin 0 -> 1803 bytes 35 files changed, 1522 insertions(+), 71 deletions(-) create mode 100644 src/main/java/com/glodblock/github/client/gui/FCGuiBaseButton.java create mode 100644 src/main/java/com/glodblock/github/client/gui/GuiMagnetFilter.java create mode 100644 src/main/java/com/glodblock/github/client/gui/container/ContainerMagnetFilter.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/IWirelessMagnetFilter.java create mode 100644 src/main/java/com/glodblock/github/inventory/item/WirelessMagnet.java create mode 100644 src/main/java/com/glodblock/github/inventory/item/WirelessMagnetCardFilterInventory.java 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 diff --git a/src/main/java/com/glodblock/github/client/gui/FCGuiBaseButton.java b/src/main/java/com/glodblock/github/client/gui/FCGuiBaseButton.java new file mode 100644 index 00000000..70ae9078 --- /dev/null +++ b/src/main/java/com/glodblock/github/client/gui/FCGuiBaseButton.java @@ -0,0 +1,86 @@ +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/GuiFCImgButton.java b/src/main/java/com/glodblock/github/client/gui/GuiFCImgButton.java index 75fda005..82e727a5 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiFCImgButton.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiFCImgButton.java @@ -66,6 +66,16 @@ public class GuiFCImgButton extends GuiButton implements ITooltip { 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/client/gui/GuiFluidMonitor.java b/src/main/java/com/glodblock/github/client/gui/GuiFluidMonitor.java index e400d40a..1652483f 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiFluidMonitor.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiFluidMonitor.java @@ -44,6 +44,7 @@ public class GuiFluidMonitor extends FCGuiMonitor { 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/GuiFluidPortableCell.java b/src/main/java/com/glodblock/github/client/gui/GuiFluidPortableCell.java index e8803be1..c3759a61 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,9 @@ public class GuiFluidPortableCell extends GuiFluidTerminal { return 3; } } + + @Override + protected boolean isPortableCell() { + return true; + } } 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 d95d7e86..b507f1e8 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 class GuiItemMonitor extends FCGuiMonitor { 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/GuiMagnetFilter.java b/src/main/java/com/glodblock/github/client/gui/GuiMagnetFilter.java new file mode 100644 index 00000000..331a2a3f --- /dev/null +++ b/src/main/java/com/glodblock/github/client/gui/GuiMagnetFilter.java @@ -0,0 +1,177 @@ +/* Author: asdflj */ +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.ContainerMagnetFilter; +import com.glodblock.github.client.gui.widget.FCGuiBaseButton; +import com.glodblock.github.common.item.ItemWirelessUltraTerminal; +import com.glodblock.github.inventory.InventoryHandler; +import com.glodblock.github.inventory.item.WirelessMagnet; +import com.glodblock.github.network.CPacketFluidPatternTermBtns; +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 GuiMagnetFilter extends AEBaseMEGui { + + protected FCGuiBaseButton listModeBtn; + protected ContainerMagnetFilter 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 GuiMagnetFilter(InventoryPlayer ip, ITerminalHost container) { + super(new ContainerMagnetFilter(ip, container)); + this.xSize = 195; + this.ySize = 214; + this.cont = (ContainerMagnetFilter) 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 CPacketFluidPatternTermBtns(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 == WirelessMagnet.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 == WirelessMagnet.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 CPacketFluidPatternTermBtns( + "WirelessTerminal.magnet.FilterMode", + this.cont.listMode != WirelessMagnet.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 CPacketFluidPatternTermBtns("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 b986b40c..a4dee985 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 @@ -7,6 +7,7 @@ import net.minecraft.client.gui.GuiButton; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; +import com.glodblock.github.FluidCraft; import com.glodblock.github.client.gui.GuiEssentiaTerminal; import com.glodblock.github.client.gui.GuiFCImgButton; import com.glodblock.github.client.gui.GuiFluidCraftingWireless; @@ -19,8 +20,11 @@ import com.glodblock.github.client.gui.container.base.FCBaseContainer; 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.inventory.item.WirelessMagnet; +import com.glodblock.github.network.CPacketFluidPatternTermBtns; import com.glodblock.github.util.ModAndClassUtil; +import appeng.api.storage.StorageChannel; import appeng.client.gui.AEBaseMEGui; public abstract class FCBaseMEGui extends AEBaseMEGui { @@ -32,8 +36,15 @@ 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 List termBtns = new ArrayList<>(); protected boolean drawSwitchGuiBtn; + private StorageChannel channel = null; public FCBaseMEGui(final InventoryPlayer inventoryPlayer, Container container) { super(container); @@ -42,10 +53,19 @@ public abstract class FCBaseMEGui extends AEBaseMEGui { if (target instanceof IWirelessTerminal && ((IWirelessTerminal) target).getItemStack().getItem() instanceof ItemWirelessUltraTerminal) { this.drawSwitchGuiBtn = true; + channel = ((IWirelessTerminal) target).getChannel(); } } } + protected WirelessMagnet.Mode getMagnetMode() { + return ((FCBaseContainer) this.inventorySlots).mode; + } + + protected boolean isRestock() { + return ((FCBaseContainer) this.inventorySlots).restock; + } + @Override public void onGuiClosed() { super.onGuiClosed(); @@ -66,6 +86,46 @@ public abstract class FCBaseMEGui extends AEBaseMEGui { 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( @@ -157,6 +217,21 @@ public abstract class FCBaseMEGui extends AEBaseMEGui { scheduleGuiResize = true; } + @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.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) { @@ -174,8 +249,20 @@ public abstract class FCBaseMEGui extends AEBaseMEGui { ItemWirelessUltraTerminal.switchTerminal(this.mc.thePlayer, GuiType.WIRELESS_LEVEL_TERMINAL); } else if (btn == this.PatternTerminalEx) { ItemWirelessUltraTerminal.switchTerminal(this.mc.thePlayer, GuiType.WIRELESS_FLUID_PATTERN_TERMINAL_EX); + } else if (btn == this.magnetOff || btn == this.magnetME || btn == this.magnetInv) { + FluidCraft.proxy.netHandler.sendToServer( + new CPacketFluidPatternTermBtns("WirelessTerminal.MagnetMode", this.getMagnetMode().ordinal())); + } else if (btn == this.magnetFilter) { + FluidCraft.proxy.netHandler + .sendToServer(new CPacketFluidPatternTermBtns("WirelessTerminal.OpenMagnet", 0)); + } else if (btn == this.restockDisableBtn || btn == this.restockEnableBtn) { + FluidCraft.proxy.netHandler.sendToServer(new CPacketFluidPatternTermBtns("WirelessTerminal.Stock", 1)); } } super.actionPerformed(btn); } + + protected boolean isPortableCell() { + return false; + } } diff --git a/src/main/java/com/glodblock/github/client/gui/container/ContainerMagnetFilter.java b/src/main/java/com/glodblock/github/client/gui/container/ContainerMagnetFilter.java new file mode 100644 index 00000000..09c9672d --- /dev/null +++ b/src/main/java/com/glodblock/github/client/gui/container/ContainerMagnetFilter.java @@ -0,0 +1,95 @@ +/* Author: asdflj */ +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.inventory.item.IItemTerminal; +import com.glodblock.github.inventory.item.IWirelessMagnetFilter; +import com.glodblock.github.inventory.item.WirelessMagnet; + +import appeng.api.storage.ITerminalHost; +import appeng.container.guisync.GuiSync; +import appeng.container.slot.AppEngSlot; +import appeng.container.slot.IOptionalSlotHost; +import appeng.container.slot.SlotFake; +import appeng.container.slot.SlotPatternOutputs; +import appeng.util.Platform; + +public class ContainerMagnetFilter extends FCBaseContainer implements IOptionalSlotHost { + + @GuiSync(101) + public WirelessMagnet.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 ContainerMagnetFilter(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 IWirelessMagnetFilter) { + IWirelessMagnetFilter host = (IWirelessMagnetFilter) 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 5676f8b8..a4ee98c4 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 @@ -3,32 +3,42 @@ package com.glodblock.github.client.gui.container.base; import net.minecraft.entity.player.InventoryPlayer; import com.glodblock.github.inventory.item.IFluidPortableCell; +import com.glodblock.github.inventory.item.IWirelessExtendCard; +import com.glodblock.github.inventory.item.WirelessMagnet; 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 WirelessMagnet.Mode mode = WirelessMagnet.Mode.Off; + 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); } @@ -50,7 +60,14 @@ public abstract class FCBaseContainer extends AEBaseContainer { this.slot, this.ticks, this.getPowerMultiplier(), - this.host); + ((IFluidPortableCell) this.host)); + } + + if (Platform.isServer()) { + if (this.host instanceof IWirelessExtendCard wec) { + this.mode = wec.getMagnetCardMode(); + this.restock = wec.isRestock(); + } } super.detectAndSendChanges(); } @@ -59,4 +76,14 @@ public abstract class FCBaseContainer extends AEBaseContainer { return this.powerMultiplier; } + public ITerminalHost getHost() { + return this.host; + } + + public IFluidPortableCell getPortableCell() { + if (this.host instanceof IFluidPortableCell fpc) { + return fpc; + } + 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 e9a1902a..d4437b01 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 @@ -230,8 +230,4 @@ public abstract class FCContainerMonitor> extends FCBaseCo this.getGui().updateSetting(manager, settingName, newValue); } } - - public ITerminalHost getHost() { - return this.host; - } } diff --git a/src/main/java/com/glodblock/github/common/Config.java b/src/main/java/com/glodblock/github/common/Config.java index b8a74dda..2b2ad1c5 100644 --- a/src/main/java/com/glodblock/github/common/Config.java +++ b/src/main/java/com/glodblock/github/common/Config.java @@ -22,6 +22,8 @@ public class Config { public static boolean replaceEC2; public static int levelMaintainerMinTicks; public static int levelMaintainerMaxTicks; + public static int reStockTime; + public static int magnetRange; public static void run() { loadCategory(); @@ -74,6 +76,9 @@ public class Config { levelMaintainerMaxTicks = Config.get("LevelMaintainer", "maxTick", 120, "Number on ticks for maximal request") .getInt(); + reStockTime = Config.get("UltraWireless", "reStockTime", 1000, "Time between restocks").getInt(); + magnetRange = Config.get("UltraWireless", "magnetRange", 16, "Magnet pick up radius").getInt(); + if (Config.hasChanged()) Config.save(); } 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 db3284dd..f061877e 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemBaseWirelessTerminal.java +++ b/src/main/java/com/glodblock/github/common/item/ItemBaseWirelessTerminal.java @@ -10,6 +10,7 @@ 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; @@ -36,6 +37,8 @@ public class ItemBaseWirelessTerminal extends ToolWirelessTerminal implements II protected GuiType type; public static String infinityBoosterCard = "infinityBoosterCard"; public static String infinityEnergyCard = "InfinityEnergyCard"; + public static String restockItems = "restock"; + private static boolean effect = false; public ItemBaseWirelessTerminal(GuiType t) { super(); @@ -48,6 +51,7 @@ public class ItemBaseWirelessTerminal extends ToolWirelessTerminal implements II // terminal if (ForgeEventFactory.onItemUseStart(player, item, 1) > 0) { if (Platform.isClient()) { + setEffect(false); return item; } IWirelessTermRegistry term = AEApi.instance().registries().wireless(); @@ -105,6 +109,9 @@ public class ItemBaseWirelessTerminal extends ToolWirelessTerminal implements II if (hasEnergyCard(stack)) { lines.add(" " + EnumChatFormatting.GOLD + getEnergyCard().getDisplayName()); } + if (hasEnergyCard(stack)) { + lines.add(" " + EnumChatFormatting.GOLD + getEnergyCard().getDisplayName()); + } } else { lines.add(NameConst.i18n(NameConst.TT_CTRL_FOR_MORE)); } @@ -128,4 +135,24 @@ public class ItemBaseWirelessTerminal extends ToolWirelessTerminal implements II return this.type; } + 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); + } + + public static void toggleRestockItemsMode(ItemStack is, boolean state) { + NBTTagCompound data = Platform.openNbtData(is); + data.setBoolean(restockItems, state); + } } 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 93979954..719d0497 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemWirelessUltraTerminal.java +++ b/src/main/java/com/glodblock/github/common/item/ItemWirelessUltraTerminal.java @@ -25,6 +25,7 @@ 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.WirelessMagnetCardFilterInventory; import com.glodblock.github.inventory.item.WirelessPatternTerminalExInventory; import com.glodblock.github.inventory.item.WirelessPatternTerminalInventory; import com.glodblock.github.loader.IRegister; @@ -102,7 +103,9 @@ public class ItemWirelessUltraTerminal extends ItemBaseWirelessTerminal try { IGridNode gridNode = Util.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_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 +124,8 @@ public class ItemWirelessUltraTerminal extends ItemBaseWirelessTerminal 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_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); 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 877aba9a..36bdb7e7 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,15 @@ public class FCTooltipHandlerWaila extends TooltipHandlerWaila { } 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 49e5890f..f79463af 100644 --- a/src/main/java/com/glodblock/github/inventory/gui/GuiType.java +++ b/src/main/java/com/glodblock/github/inventory/gui/GuiType.java @@ -33,6 +33,7 @@ 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.GuiMagnetFilter; import com.glodblock.github.client.gui.GuiOCPatternEditor; import com.glodblock.github.client.gui.GuiPatternMulti; import com.glodblock.github.client.gui.GuiPatternValueAmount; @@ -61,6 +62,7 @@ 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.ContainerMagnetFilter; import com.glodblock.github.client.gui.container.ContainerOCPatternEditor; import com.glodblock.github.client.gui.container.ContainerPatternMulti; import com.glodblock.github.client.gui.container.ContainerPatternValueAmount; @@ -527,6 +529,18 @@ public enum GuiType { protected Object createClientGui(EntityPlayer player, ITerminalHost inv) { return new GuiPatternMulti(player.inventory, inv); } + }), + WIRELESS_MAGNET_FILTER(new ItemGuiFactory<>(ITerminalHost.class) { + + @Override + protected Object createServerGui(EntityPlayer player, ITerminalHost inv) { + return new ContainerMagnetFilter(player.inventory, inv); + } + + @Override + protected Object createClientGui(EntityPlayer player, ITerminalHost inv) { + return new GuiMagnetFilter(player.inventory, inv); + } }); public static final List VALUES = ImmutableList.copyOf(values()); 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 00000000..50c30c62 --- /dev/null +++ b/src/main/java/com/glodblock/github/inventory/item/BaseWirelessInventory.java @@ -0,0 +1,174 @@ +package com.glodblock.github.inventory.item; + +import static com.glodblock.github.common.item.ItemBaseWirelessTerminal.restockItems; +import static com.glodblock.github.inventory.item.WirelessMagnet.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.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 WirelessMagnet.Mode magnetMode = WirelessMagnet.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.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(WirelessMagnet.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(WirelessMagnet.Mode mode) { + this.magnetMode = mode; + } + + @Override + public WirelessMagnet.Mode getMagnetCardMode() { + return this.magnetMode; + } + + public void setMagnetCardNextMode() { + setMagnetCardMode( + WirelessMagnet.Mode.values()[(getMagnetCardMode().ordinal() + 1) + % WirelessMagnet.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/IWirelessExtendCard.java b/src/main/java/com/glodblock/github/inventory/item/IWirelessExtendCard.java new file mode 100644 index 00000000..ef4efa3e --- /dev/null +++ b/src/main/java/com/glodblock/github/inventory/item/IWirelessExtendCard.java @@ -0,0 +1,26 @@ +package com.glodblock.github.inventory.item; + +import appeng.api.networking.security.PlayerSource; +import appeng.api.storage.data.IAEStack; + +public interface IWirelessExtendCard { + + default void setMagnetCardMode(WirelessMagnet.Mode mode) {} + + WirelessMagnet.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/IWirelessMagnetFilter.java b/src/main/java/com/glodblock/github/inventory/item/IWirelessMagnetFilter.java new file mode 100644 index 00000000..65ace4c1 --- /dev/null +++ b/src/main/java/com/glodblock/github/inventory/item/IWirelessMagnetFilter.java @@ -0,0 +1,23 @@ +package com.glodblock.github.inventory.item; + +public interface IWirelessMagnetFilter extends IWirelessTerminal, IItemTerminal { + + WirelessMagnet.ListMode getListMode(); + + boolean getNBTMode(); + + boolean getMetaMode(); + + boolean getOreMode(); + + void setListMode(WirelessMagnet.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 8e065717..2854afa0 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.guiobjects.IGuiItemObject; 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,7 @@ public interface IWirelessTerminal 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 0dce2685..c4c03de5 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.minecraft.nbt.NBTTagCompound; 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.TypeFilter; 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.tile.inventory.InvOperation; 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 e28512b2..d0cb1ab3 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.SortOrder; 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.tile.inventory.InvOperation; import appeng.util.ConfigManager; import appeng.util.Platform; -public class WirelessFluidTerminalInventory extends MEMonitorHandler implements IWirelessTerminal { +public class WirelessFluidTerminalInventory extends BaseWirelessInventory implements IWirelessTerminal, IItemTerminal { 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; @@ -135,4 +127,9 @@ public class WirelessFluidTerminalInventory extends MEMonitorHandler 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 + || 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, + magnetRange).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())) { /* don`t pick up items dropped by yourself */ + continue; + } + + EntityPlayer closestPlayer = world.getClosestPlayerToEntity(itemToGet, magnetRange); + + 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, + magnetRange).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)); + } + } + + public static Mode getMode(ItemStack is) { + if (is != null && 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 && is.getItem() instanceof ItemWirelessUltraTerminal) { + NBTTagCompound data = Platform.openNbtData(is); + data.setInteger(modeKey, mode.ordinal()); + } + } +} 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 00000000..b07a7ef0 --- /dev/null +++ b/src/main/java/com/glodblock/github/inventory/item/WirelessMagnetCardFilterInventory.java @@ -0,0 +1,215 @@ +/* Author: asdflj */ +package com.glodblock.github.inventory.item; + +import static com.glodblock.github.inventory.item.WirelessMagnet.filterConfigKey; +import static com.glodblock.github.inventory.item.WirelessMagnet.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.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 IWirelessMagnetFilter { + + private boolean nbt; + private boolean mata; + private boolean ore; + private WirelessMagnet.ListMode listMode = WirelessMagnet.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 = WirelessMagnet.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 WirelessMagnet.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(WirelessMagnet.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 WirelessMagnet.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 be2e3149..42ca6fa3 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 @@ package com.glodblock.github.inventory.item; 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.ItemFluidDrop; 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.ICraftingPatternItem; 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.tile.inventory.InvOperation; 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 class WirelessPatternTerminalExInventory 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 class WirelessPatternTerminalInventory extends MEMonitorHandler term = Util.getUltraWirelessTerm(p); + if (term != null) { + p.addChatMessage( + new ChatComponentText( + NameConst.i18n( + !Util.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/network/CPacketFluidPatternTermBtns.java b/src/main/java/com/glodblock/github/network/CPacketFluidPatternTermBtns.java index 44e0e423..8613aa45 100644 --- a/src/main/java/com/glodblock/github/network/CPacketFluidPatternTermBtns.java +++ b/src/main/java/com/glodblock/github/network/CPacketFluidPatternTermBtns.java @@ -1,9 +1,20 @@ 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.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.IWirelessMagnetFilter; +import com.glodblock.github.inventory.item.WirelessMagnet; +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; @@ -25,6 +36,10 @@ public class CPacketFluidPatternTermBtns implements IMessage { Value = value.toString(); } + public CPacketFluidPatternTermBtns(final String name, final boolean value) { + this(name, value ? 1 : 0); + } + public CPacketFluidPatternTermBtns() { // NO-OP } @@ -64,7 +79,49 @@ public class CPacketFluidPatternTermBtns implements IMessage { String Name = message.Name; String Value = message.Value; final Container c = ctx.getServerHandler().playerEntity.openContainer; - if (Name.startsWith("PatternTerminal.") && (c instanceof final FCContainerEncodeTerminal cpt)) { + final EntityPlayer player = ctx.getServerHandler().playerEntity; + 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_FILTER); + break; + case "WirelessTerminal.magnet.NBT": + ((IWirelessMagnetFilter) itemTerminal).setNBTMode(Value.equals("1")); + break; + case "WirelessTerminal.magnet.Meta": + ((IWirelessMagnetFilter) itemTerminal).setMetaMode(Value.equals("1")); + break; + case "WirelessTerminal.magnet.Ore": + ((IWirelessMagnetFilter) itemTerminal).setOreMode(Value.equals("1")); + break; + case "WirelessTerminal.magnet.FilterMode": + ((IWirelessMagnetFilter) itemTerminal).setListMode( + Value.equals("1") ? WirelessMagnet.ListMode.WhiteList + : WirelessMagnet.ListMode.BlackList); + break; + case "WirelessTerminal.magnet.clear": + ((IWirelessMagnetFilter) 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 26cf6a19..6b2ff8e0 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 @@ package com.glodblock.github.network; 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; @@ -39,13 +50,51 @@ public class CPacketValueConfig implements IMessage { @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.getUltraWirelessTerm(player); + if (result == null) return null; + if (message.valueIndex == 1) { + ItemBaseWirelessTerminal + .toggleRestockItemsMode(result.getRight(), !Util.isRestock(result.getRight())); + return null; + } else if (Util.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.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/proxy/ClientProxy.java b/src/main/java/com/glodblock/github/proxy/ClientProxy.java index 6f3446f1..34489800 100644 --- a/src/main/java/com/glodblock/github/proxy/ClientProxy.java +++ b/src/main/java/com/glodblock/github/proxy/ClientProxy.java @@ -1,18 +1,33 @@ package com.glodblock.github.proxy; +import static com.glodblock.github.common.Config.reStockTime; + +import net.minecraft.client.Minecraft; +import net.minecraft.item.ItemStack; + +import org.apache.commons.lang3.tuple.ImmutablePair; + +import com.glodblock.github.FluidCraft; import com.glodblock.github.loader.KeybindLoader; import com.glodblock.github.loader.ListenerLoader; import com.glodblock.github.loader.RenderLoader; import com.glodblock.github.nei.recipes.DefaultExtractorLoader; +import com.glodblock.github.network.CPacketValueConfig; import com.glodblock.github.util.ModAndClassUtil; +import com.glodblock.github.util.Util; 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 ClientProxy extends CommonProxy { + private static final Minecraft mc = Minecraft.getMinecraft(); + private static long refreshTick = System.currentTimeMillis(); + @Override public void preInit(FMLPreInitializationEvent event) { super.preInit(event); @@ -38,4 +53,16 @@ public class ClientProxy extends CommonProxy { new DefaultExtractorLoader().run(); } } + + @SubscribeEvent + public void tickEvent(TickEvent.PlayerTickEvent e) { + super.tickEvent(e); + if (refreshTick + reStockTime < System.currentTimeMillis()) { + // try to stock items + ImmutablePair result = Util.getUltraWirelessTerm(mc.thePlayer); + if (result == null || !Util.isRestock(result.getRight()) || mc.currentScreen != null) return; + FluidCraft.proxy.netHandler.sendToServer(new CPacketValueConfig(1, 0)); + refreshTick = System.currentTimeMillis(); + } + } } diff --git a/src/main/java/com/glodblock/github/proxy/CommonProxy.java b/src/main/java/com/glodblock/github/proxy/CommonProxy.java index f26d32e2..683f451b 100644 --- a/src/main/java/com/glodblock/github/proxy/CommonProxy.java +++ b/src/main/java/com/glodblock/github/proxy/CommonProxy.java @@ -1,6 +1,13 @@ 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; @@ -12,24 +19,104 @@ import com.glodblock.github.crossmod.extracells.EC2Replacer; import com.glodblock.github.crossmod.thaumcraft.AspectUtil; import com.glodblock.github.crossmod.thaumcraft.ThaumicEnergisticsCrafting; import com.glodblock.github.inventory.external.AEFluidInterfaceHandler; +import com.glodblock.github.inventory.item.WirelessMagnet; +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.getUltraWirelessTerm(player); + if (result == null) return; + final ItemStack wirelessTerm = result.getRight(); + WirelessMagnet.Mode mode = WirelessMagnet.getMode(wirelessTerm); + if (mode != WirelessMagnet.Mode.ME) return; + IGridNode gridNode = Util.getWirelessGrid(wirelessTerm); + if (gridNode == null || !Util.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() == WirelessMagnet.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() == WirelessMagnet.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.getUltraWirelessTerm(player); + if (result == null) return; + final ItemStack wirelessTerm = result.getRight(); + if (WirelessMagnet.getMode(wirelessTerm) == WirelessMagnet.Mode.Off) return; + IGridNode gridNode = Util.getWirelessGrid(wirelessTerm); + if (gridNode == null) return; + WirelessMagnetCardFilterInventory inv = new WirelessMagnetCardFilterInventory( + wirelessTerm, + result.getLeft(), + gridNode, + player); + WirelessMagnet.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 e6e46040..ce61cce2 100644 --- a/src/main/java/com/glodblock/github/util/NameConst.java +++ b/src/main/java/com/glodblock/github/util/NameConst.java @@ -57,7 +57,9 @@ public class NameConst { 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"; @@ -106,6 +108,10 @@ public class NameConst { public static final String TT_QUANTUM_BRIDGE_CARD_DESC = TT_QUANTUM_BRIDGE_CARD + ".desc"; public static final String TT_ITEM_FLUID_VOID_CELL = TT_KEY + ITEM_FLUID_VOID_CELL; + 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"; @@ -130,6 +136,13 @@ public class NameConst { 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 + "magnet"; + 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) { return I18n.format(t); diff --git a/src/main/java/com/glodblock/github/util/Util.java b/src/main/java/com/glodblock/github/util/Util.java index 6b3de0b2..094213f4 100644 --- a/src/main/java/com/glodblock/github/util/Util.java +++ b/src/main/java/com/glodblock/github/util/Util.java @@ -2,7 +2,9 @@ package com.glodblock.github.util; import static com.glodblock.github.common.item.ItemBaseWirelessTerminal.infinityBoosterCard; import static com.glodblock.github.common.item.ItemBaseWirelessTerminal.infinityEnergyCard; +import static com.glodblock.github.common.item.ItemBaseWirelessTerminal.restockItems; import static com.glodblock.github.util.Util.DimensionalCoordSide.hasEnergyCard; +import static net.minecraft.init.Items.glass_bottle; import java.io.IOException; import java.util.ArrayList; @@ -14,6 +16,7 @@ import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.init.Items; 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; @@ -105,6 +108,40 @@ public final class Util { return ticks; } + public static boolean rangeCheck(ItemStack is, EntityPlayer player, IGridNode grid) { + if (grid.getGrid() == null) return false; + return rangeCheck(is, player, grid.getGrid()); + } + + 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; + } + } + } + } + return canConnect; + } + + 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; + } + public static boolean hasInfinityBoosterCard(ItemStack is) { if (is.getItem() instanceof ItemBaseWirelessTerminal) { NBTTagCompound data = Platform.openNbtData(is); @@ -130,24 +167,7 @@ public final class Util { 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; - } - } - } - } - if (canConnect) { + if (rangeCheck(is, player, grid)) { IStorageGrid gridCache = grid.getCache(IStorageGrid.class); if (gridCache != null) { if (channel == StorageChannel.FLUIDS) { @@ -433,6 +453,18 @@ public final class Util { 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 final ItemStack water_bucket = new ItemStack(Items.water_bucket, 1); public static void fluidTankInfoWriteToNBT(FluidTankInfo[] infos, NBTTagCompound data) { diff --git a/src/main/resources/assets/ae2fc/lang/en_US.lang b/src/main/resources/assets/ae2fc/lang/en_US.lang index fe0fa11a..bbcfcd2d 100644 --- a/src/main/resources/assets/ae2fc/lang/en_US.lang +++ b/src/main/resources/assets/ae2fc/lang/en_US.lang @@ -163,6 +163,18 @@ 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.gui.part_fluid_pattern_terminal=Fluid Pattern Terminal ae2fc.gui.part_fluid_pattern_terminal_ex=Fluid Processing Pattern Terminal ae2fc.gui.part_level_terminal=Level Terminal @@ -187,6 +199,13 @@ 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=Magnet Filter +ae2fc.gui.magnet.nbt=Ignore NBT Data +ae2fc.gui.magnet.meta=Ignore Meta Data +ae2fc.gui.magnet.ore=Use Ore Dictionary +ae2fc.gui.magnet.whitelist=Whitelisting +ae2fc.gui.magnet.blacklist=BlackListing + ae2fc.gui.color.StateNone=00000000 ae2fc.gui.color.StateIdle=FF55FF55 ae2fc.gui.color.StateCraft=FFFFFF55 @@ -195,7 +214,8 @@ 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> Date: Wed, 9 Apr 2025 00:18:53 +0300 Subject: [PATCH 02/10] fix crash when terminal out of range --- src/main/java/com/glodblock/github/proxy/CommonProxy.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/glodblock/github/proxy/CommonProxy.java b/src/main/java/com/glodblock/github/proxy/CommonProxy.java index 683f451b..03284d37 100644 --- a/src/main/java/com/glodblock/github/proxy/CommonProxy.java +++ b/src/main/java/com/glodblock/github/proxy/CommonProxy.java @@ -107,7 +107,7 @@ public class CommonProxy { final ItemStack wirelessTerm = result.getRight(); if (WirelessMagnet.getMode(wirelessTerm) == WirelessMagnet.Mode.Off) return; IGridNode gridNode = Util.getWirelessGrid(wirelessTerm); - if (gridNode == null) return; + if (gridNode == null || !Util.rangeCheck(wirelessTerm, player, gridNode)) return; WirelessMagnetCardFilterInventory inv = new WirelessMagnetCardFilterInventory( wirelessTerm, result.getLeft(), From 765033762ae0f81d837488e1a55c4cec14b5ef53 Mon Sep 17 00:00:00 2001 From: lordIcocain Date: Wed, 9 Apr 2025 22:44:22 +0300 Subject: [PATCH 03/10] fix filters --- .../WirelessMagnetCardFilterInventory.java | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/glodblock/github/inventory/item/WirelessMagnetCardFilterInventory.java b/src/main/java/com/glodblock/github/inventory/item/WirelessMagnetCardFilterInventory.java index b07a7ef0..9b74cb03 100644 --- a/src/main/java/com/glodblock/github/inventory/item/WirelessMagnetCardFilterInventory.java +++ b/src/main/java/com/glodblock/github/inventory/item/WirelessMagnetCardFilterInventory.java @@ -31,9 +31,9 @@ import appeng.util.Platform; public class WirelessMagnetCardFilterInventory extends BaseWirelessInventory implements IWirelessMagnetFilter { - private boolean nbt; - private boolean mata; - private boolean ore; + private boolean ignoreNbt; + private boolean ignoreMeta; + private boolean useOreDict; private WirelessMagnet.ListMode listMode = WirelessMagnet.ListMode.WhiteList; protected AppEngInternalInventory filterList; @@ -48,18 +48,18 @@ public class WirelessMagnetCardFilterInventory extends BaseWirelessInventory imp 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"); + ignoreNbt = tag.getBoolean("nbt"); + ignoreMeta = tag.getBoolean("meta"); + useOreDict = tag.getBoolean("ore"); this.listMode = WirelessMagnet.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.setBoolean("nbt", ignoreNbt); + tmp.setBoolean("meta", ignoreMeta); + tmp.setBoolean("ore", useOreDict); tmp.setInteger("list", this.listMode.ordinal()); data.setTag(filterConfigKey, tmp); } @@ -71,17 +71,17 @@ public class WirelessMagnetCardFilterInventory extends BaseWirelessInventory imp @Override public boolean getNBTMode() { - return this.nbt; + return ignoreNbt; } @Override public boolean getMetaMode() { - return this.mata; + return ignoreMeta; } @Override public boolean getOreMode() { - return this.ore; + return useOreDict; } @Override @@ -91,17 +91,17 @@ public class WirelessMagnetCardFilterInventory extends BaseWirelessInventory imp @Override public void setNBTMode(boolean ignoreNBT) { - this.nbt = ignoreNBT; + ignoreNbt = ignoreNBT; } @Override public void setMetaMode(boolean ignoreMeta) { - this.mata = ignoreMeta; + this.ignoreMeta = ignoreMeta; } @Override public void setOreMode(boolean useOre) { - this.ore = useOre; + useOreDict = useOre; } @Override @@ -193,21 +193,21 @@ public class WirelessMagnetCardFilterInventory extends BaseWirelessInventory imp if (is == null && list.isEmpty()) return false; IAEItemStack ais = AEApi.instance().storage().createItemStack(is); for (IAEItemStack i : list) { - if (this.ore) { + if (useOreDict) { // use oredict return i.sameOre(ais); - } else if (!this.mata && !this.nbt) { + } else if (ignoreMeta && ignoreNbt) { // ignore meta & nbt - return Platform.isSameItem(i.getItemStack(), ais.getItemStack()); - } else if (!this.mata && this.nbt) { + return ais.getItem() == i.getItem(); + } else if (ignoreMeta) { // ignore meta only - return Platform.isSameItemPrecise(i.getItemStack(), ais.getItemStack()); - } else if (this.mata) { + return ais.getItemStack().getTagCompound().equals(i.getItemStack().getTagCompound()); + } else if (ignoreNbt) { // 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 ais.equals(i); } } return false; From bb912ec8a125fa06daf98fb709a7365446d3b14e Mon Sep 17 00:00:00 2001 From: lordIcocain Date: Fri, 11 Apr 2025 02:00:31 +0300 Subject: [PATCH 04/10] Fix filters Add oredictionary filter Fix inconsistent with WCT Gui improvements Filter caching GuiFCImgButton 3/4 size support --- .../github/client/gui/GuiFCImgButton.java | 102 +++++------- .../github/client/gui/GuiMagnetFilter.java | 71 ++++++-- .../gui/container/ContainerMagnetFilter.java | 16 +- .../inventory/item/BaseWirelessInventory.java | 18 +- .../inventory/item/IWirelessMagnetFilter.java | 8 + .../github/inventory/item/WirelessMagnet.java | 49 ++---- .../WirelessMagnetCardFilterInventory.java | 154 +++++++++++++----- .../network/CPacketFluidPatternTermBtns.java | 6 + .../glodblock/github/proxy/CommonProxy.java | 85 ++++------ .../com/glodblock/github/util/NameConst.java | 2 + .../java/com/glodblock/github/util/Util.java | 30 ++-- .../resources/assets/ae2fc/lang/en_US.lang | 1 + .../ae2fc/textures/gui/magnet_filter.png | Bin 16636 -> 16664 bytes .../assets/ae2fc/textures/gui/states3.png | Bin 1803 -> 1808 bytes 14 files changed, 310 insertions(+), 232 deletions(-) diff --git a/src/main/java/com/glodblock/github/client/gui/GuiFCImgButton.java b/src/main/java/com/glodblock/github/client/gui/GuiFCImgButton.java index 82e727a5..123bb50e 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiFCImgButton.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiFCImgButton.java @@ -22,6 +22,7 @@ public class GuiFCImgButton extends GuiButton implements ITooltip { private static Map appearances; private final String buttonSetting; private boolean halfSize = false; + private boolean threeFourths = false; private String fillVar; private String currentValue; private final boolean background; @@ -145,6 +146,14 @@ public class GuiFCImgButton extends GuiButton implements ITooltip { this.halfSize = halfSize; } + public boolean isThreeFourths() { + return threeFourths; + } + + public void setThreeFourths(boolean threeFourths) { + this.threeFourths = threeFourths; + } + public String getFillVar() { return this.fillVar; } @@ -165,12 +174,12 @@ public class GuiFCImgButton extends GuiButton implements ITooltip { @Override public int getWidth() { - return this.halfSize ? 8 : 16; + return this.halfSize ? 8 : threeFourths ? 12 : 16; } @Override public int getHeight() { - return this.halfSize ? 8 : 16; + return this.halfSize ? 8 : threeFourths ? 12 : 16; } @Override @@ -227,79 +236,44 @@ public class GuiFCImgButton extends GuiButton implements ITooltip { if (this.visible) { final int iconIndex = this.getIconIndex(); final int iconPage = this.getIconPage(); + this.width = getWidth(); + this.height = getHeight(); + float scaleFactor = halfSize ? 3 : threeFourths ? 4.5f : 6; - if (this.halfSize) { - this.width = 8; - this.height = 8; - - GL11.glPushMatrix(); - GL11.glTranslatef(this.xPosition, this.yPosition, 0.0F); - GL11.glScalef(0.5f / 16 * 3, 0.5f / 16 * 3, 0.5f / 16 * 3); - - if (this.enabled) { - GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); - } else { - GL11.glColor4f(0.5f, 0.5f, 0.5f, 1.0f); - } - - par1Minecraft.renderEngine.bindTexture(FluidCraft.resource("textures/gui/states" + iconPage + ".png")); - this.field_146123_n = par2 >= this.xPosition && par3 >= this.yPosition - && par2 < this.xPosition + this.width - && par3 < this.yPosition + this.height; - - final int uv_y = (int) Math.floor(iconIndex / 3.0); - final int uv_x = iconIndex - uv_y * 3; - if (this.background) { - this.drawTexturedModalRect( - 0, - 0, - Math.round(32F * 16F / 3F), - Math.round(32F * 16F / 3F), - Math.round(16F * 16F / 3F), - Math.round(16F * 16F / 3F)); - } - this.drawTexturedModalRect( - 0, - 0, - Math.round(uv_x * 16F * 16F / 3F), - Math.round(uv_y * 16F * 16F / 3F), - Math.round(16F * 16F / 3F), - Math.round(16F * 16F / 3F)); + GL11.glPushMatrix(); + GL11.glTranslatef(this.xPosition, this.yPosition, 0.0F); + GL11.glScalef(0.5f / 16 * scaleFactor, 0.5f / 16 * scaleFactor, 0.5f / 16 * scaleFactor); + if (this.enabled) { + GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); } else { - GL11.glPushMatrix(); - GL11.glTranslatef(this.xPosition, this.yPosition, 0.0F); - GL11.glScalef(0.5f / 16 * 6, 0.5f / 16 * 6, 0.5f / 16 * 6); - if (this.enabled) { - GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); - } else { - GL11.glColor4f(0.5f, 0.5f, 0.5f, 1.0f); - } + GL11.glColor4f(0.5f, 0.5f, 0.5f, 1.0f); + } - par1Minecraft.renderEngine.bindTexture(FluidCraft.resource("textures/gui/states" + iconPage + ".png")); - this.field_146123_n = par2 >= this.xPosition && par3 >= this.yPosition - && par2 < this.xPosition + this.width - && par3 < this.yPosition + this.height; + par1Minecraft.renderEngine.bindTexture(FluidCraft.resource("textures/gui/states" + iconPage + ".png")); + this.field_146123_n = par2 >= this.xPosition && par3 >= this.yPosition + && par2 < this.xPosition + this.width + && par3 < this.yPosition + this.height; - final int uv_y = (int) Math.floor(iconIndex / 3.0); - final int uv_x = iconIndex - uv_y * 3; - if (this.background) { - this.drawTexturedModalRect( - 0, - 0, - Math.round(32F * 16F / 3F), - Math.round(32F * 16F / 3F), - Math.round(16F * 16F / 3F), - Math.round(16F * 16F / 3F)); - } + final int uv_y = (int) Math.floor(iconIndex / 3.0); + final int uv_x = iconIndex - uv_y * 3; + if (this.background) { this.drawTexturedModalRect( 0, 0, - Math.round(uv_x * 16F * 16F / 3F), - Math.round(uv_y * 16F * 16F / 3F), + Math.round(32F * 16F / 3F), + Math.round(32F * 16F / 3F), Math.round(16F * 16F / 3F), Math.round(16F * 16F / 3F)); } + this.drawTexturedModalRect( + 0, + 0, + Math.round(uv_x * 16F * 16F / 3F), + Math.round(uv_y * 16F * 16F / 3F), + Math.round(16F * 16F / 3F), + Math.round(16F * 16F / 3F)); + this.mouseDragged(par1Minecraft, par2, par3); GL11.glPopMatrix(); } diff --git a/src/main/java/com/glodblock/github/client/gui/GuiMagnetFilter.java b/src/main/java/com/glodblock/github/client/gui/GuiMagnetFilter.java index 331a2a3f..4bca8b64 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiMagnetFilter.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiMagnetFilter.java @@ -5,6 +5,8 @@ import net.minecraft.client.gui.GuiButton; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.util.ResourceLocation; +import org.lwjgl.input.Keyboard; + import com.glodblock.github.FluidCraft; import com.glodblock.github.client.gui.container.ContainerMagnetFilter; import com.glodblock.github.client.gui.widget.FCGuiBaseButton; @@ -20,6 +22,7 @@ import appeng.api.storage.ITerminalHost; import appeng.client.gui.AEBaseMEGui; import appeng.client.gui.widgets.GuiImgButton; import appeng.client.gui.widgets.GuiTabButton; +import appeng.client.gui.widgets.MEGuiTextField; public class GuiMagnetFilter extends AEBaseMEGui { @@ -27,7 +30,8 @@ public class GuiMagnetFilter extends AEBaseMEGui { protected ContainerMagnetFilter cont; private static final ResourceLocation TEX_BG = FluidCraft.resource("textures/gui/magnet_filter.png"); - protected Component components[] = new Component[3]; + protected Component[] components = new Component[4]; + protected MEGuiTextField oreDict; protected GuiTabButton originalGuiBtn; protected GuiImgButton clearBtn; @@ -36,13 +40,14 @@ public class GuiMagnetFilter extends AEBaseMEGui { this.xSize = 195; this.ySize = 214; this.cont = (ContainerMagnetFilter) this.inventorySlots; + oreDict = new MEGuiTextField(149, 12, NameConst.i18n(NameConst.TT_MAGNET_CARD_OREDICT)); } private class Component { - private GuiFCImgButton enable; - private GuiFCImgButton disable; - private String action; + private final GuiFCImgButton enable; + private final GuiFCImgButton disable; + private final String action; private boolean var; public Component(int x, int y, boolean var, String action) { @@ -50,6 +55,8 @@ public class GuiMagnetFilter extends AEBaseMEGui { this.disable = new GuiFCImgButton(x, y, "DISABLE_12x", "DISABLE", false); this.var = var; this.action = action; + enable.setThreeFourths(true); + disable.setThreeFourths(true); buttonList.add(this.enable); buttonList.add(this.disable); } @@ -98,20 +105,29 @@ public class GuiMagnetFilter extends AEBaseMEGui { ? NameConst.GUI_MAGNET_CARD_WhiteList : NameConst.GUI_MAGNET_CARD_BlackList))); this.components[0] = new Component( - this.guiLeft + 156, + this.guiLeft + 157, this.guiTop + 18, this.cont.nbt, "WirelessTerminal.magnet.NBT"); this.components[1] = new Component( - this.guiLeft + 156, + this.guiLeft + 157, this.guiTop + 31, this.cont.meta, "WirelessTerminal.magnet.Meta"); this.components[2] = new Component( - this.guiLeft + 156, + this.guiLeft + 157, this.guiTop + 44, this.cont.ore, "WirelessTerminal.magnet.Ore"); + this.components[3] = new Component( + this.guiLeft + 157, + this.guiTop + 112, + this.cont.oreDict, + "WirelessTerminal.magnet.OreDictState"); + + oreDict.x = this.guiLeft + 7; + oreDict.y = this.guiTop + 112; + oreDict.setText(this.cont.oreDictFilter); this.buttonList.add( this.originalGuiBtn = new GuiTabButton( @@ -122,23 +138,27 @@ public class GuiMagnetFilter extends AEBaseMEGui { itemRender)); this.originalGuiBtn.setHideEdge(13); // GuiTabButton implementation // - this.clearBtn = new GuiImgButton(this.guiLeft + 8, this.guiTop + 48, Settings.ACTIONS, ActionItems.CLOSE); + this.clearBtn = new GuiImgButton(this.guiLeft + 7, this.guiTop + 48, Settings.ACTIONS, ActionItems.CLOSE); this.clearBtn.setHalfSize(true); this.buttonList.add(this.clearBtn); } + @Override + public void drawScreen(int mouseX, int mouseY, float btn) { + handleTooltip(mouseX, mouseY, oreDict); + super.drawScreen(mouseX, mouseY, btn); + } + @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.fontRendererObj.drawString(NameConst.i18n(NameConst.GUI_MAGNET_CARD), 8, 6, 0x404040); + this.fontRendererObj.drawString(NameConst.i18n(NameConst.GUI_MAGNET_CARD_NBT), 61, 22, 0x404040); + this.fontRendererObj.drawString(NameConst.i18n(NameConst.GUI_MAGNET_CARD_META), 61, 34, 0x404040); + this.fontRendererObj.drawString(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); + this.components[3].setVar(this.cont.oreDict); for (Component c : components) { c.draw(); } @@ -149,8 +169,25 @@ public class GuiMagnetFilter extends AEBaseMEGui { @Override public void drawBG(int offsetX, int offsetY, int mouseX, int mouseY) { - mc.getTextureManager().bindTexture(TEX_BG); - drawTexturedModalRect(offsetX, offsetY, 0, 0, 176, ySize); + bindTexture(TEX_BG); + drawTexturedModalRect(offsetX, offsetY, 0, 0, xSize, ySize); + oreDict.drawTextBox(); + } + + @Override + protected void keyTyped(char typedChar, int keyCode) { + if (oreDict.isFocused() && (Keyboard.KEY_NUMPADENTER == keyCode || Keyboard.KEY_RETURN == keyCode)) { + FluidCraft.proxy.netHandler.sendToServer( + new CPacketFluidPatternTermBtns("WirelessTerminal.magnet.OreDictFilter", oreDict.getText())); + } + + if (!oreDict.textboxKeyTyped(typedChar, keyCode)) super.keyTyped(typedChar, keyCode); + } + + @Override + protected void mouseClicked(int xCoord, int yCoord, int btn) { + oreDict.mouseClicked(xCoord, yCoord, btn); + super.mouseClicked(xCoord, yCoord, btn); } @Override diff --git a/src/main/java/com/glodblock/github/client/gui/container/ContainerMagnetFilter.java b/src/main/java/com/glodblock/github/client/gui/container/ContainerMagnetFilter.java index 09c9672d..7b801892 100644 --- a/src/main/java/com/glodblock/github/client/gui/container/ContainerMagnetFilter.java +++ b/src/main/java/com/glodblock/github/client/gui/container/ContainerMagnetFilter.java @@ -15,6 +15,7 @@ import appeng.api.storage.ITerminalHost; import appeng.container.guisync.GuiSync; import appeng.container.slot.AppEngSlot; import appeng.container.slot.IOptionalSlotHost; +import appeng.container.slot.OptionalSlotFake; import appeng.container.slot.SlotFake; import appeng.container.slot.SlotPatternOutputs; import appeng.util.Platform; @@ -32,13 +33,21 @@ public class ContainerMagnetFilter extends FCBaseContainer implements IOptionalS @GuiSync(104) public boolean ore; - protected SlotFake[] filterSlots; + + @GuiSync(105) + public boolean oreDict; + + @GuiSync(106) + public String oreDictFilter; + + protected OptionalSlotFake[] filterSlots; protected final IInventory filter; public ContainerMagnetFilter(InventoryPlayer ip, ITerminalHost monitorable) { super(ip, monitorable); this.filter = ((IItemTerminal) monitorable).getInventoryByName("config"); - this.filterSlots = new SlotFake[27]; + this.filterSlots = new OptionalSlotFake[27]; + oreDictFilter = ((IWirelessMagnetFilter) getHost()).getOreDictFilter(); for (int y = 0; y < 3; y++) { for (int x = 0; x < 9; x++) { this.addSlotToContainer( @@ -51,6 +60,7 @@ public class ContainerMagnetFilter extends FCBaseContainer implements IOptionalS 0, 0, 1)); + this.filterSlots[x + y * 9].setRenderDisabled(false); } } bindPlayerInventory(ip, 0, 126); @@ -84,6 +94,8 @@ public class ContainerMagnetFilter extends FCBaseContainer implements IOptionalS this.meta = host.getMetaMode(); this.nbt = host.getNBTMode(); this.ore = host.getOreMode(); + this.oreDict = host.getOreDictMode(); + this.oreDictFilter = host.getOreDictFilter(); } super.detectAndSendChanges(); } diff --git a/src/main/java/com/glodblock/github/inventory/item/BaseWirelessInventory.java b/src/main/java/com/glodblock/github/inventory/item/BaseWirelessInventory.java index 50c30c62..55b16174 100644 --- a/src/main/java/com/glodblock/github/inventory/item/BaseWirelessInventory.java +++ b/src/main/java/com/glodblock/github/inventory/item/BaseWirelessInventory.java @@ -26,6 +26,7 @@ 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.me.storage.NullInventory; import appeng.util.Platform; public abstract class BaseWirelessInventory extends MEMonitorHandler implements IWirelessTerminal, IWirelessExtendCard { @@ -55,6 +56,19 @@ public abstract class BaseWirelessInventory extends MEMonitorHandler implements this.readFromNBT(); } + @SuppressWarnings("unchecked") + public BaseWirelessInventory(final ItemStack is, final int slot, IGridNode gridNode, EntityPlayer player, + StorageChannel channel, boolean nullInventory) { + super(new NullInventory<>()); + 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(WirelessMagnet.Mode.values()[data.getInteger(modeKey)]); @@ -100,9 +114,7 @@ public abstract class BaseWirelessInventory extends MEMonitorHandler implements } @Override - public void saveChanges() { - - } + public void saveChanges() {} @Override public IGridNode getActionableNode() { diff --git a/src/main/java/com/glodblock/github/inventory/item/IWirelessMagnetFilter.java b/src/main/java/com/glodblock/github/inventory/item/IWirelessMagnetFilter.java index 65ace4c1..2cbee079 100644 --- a/src/main/java/com/glodblock/github/inventory/item/IWirelessMagnetFilter.java +++ b/src/main/java/com/glodblock/github/inventory/item/IWirelessMagnetFilter.java @@ -10,6 +10,10 @@ public interface IWirelessMagnetFilter extends IWirelessTerminal, IItemTerminal boolean getOreMode(); + boolean getOreDictMode(); + + String getOreDictFilter(); + void setListMode(WirelessMagnet.ListMode mode); void setNBTMode(boolean ignoreNBT); @@ -18,6 +22,10 @@ public interface IWirelessMagnetFilter extends IWirelessTerminal, IItemTerminal void setOreMode(boolean useOre); + void setOreDictMode(boolean useOreDict); + + void setOreDictFilter(String str); + default void clearConfig() {}; } diff --git a/src/main/java/com/glodblock/github/inventory/item/WirelessMagnet.java b/src/main/java/com/glodblock/github/inventory/item/WirelessMagnet.java index c144b97f..a1885075 100644 --- a/src/main/java/com/glodblock/github/inventory/item/WirelessMagnet.java +++ b/src/main/java/com/glodblock/github/inventory/item/WirelessMagnet.java @@ -3,8 +3,6 @@ package com.glodblock.github.inventory.item; import static com.glodblock.github.common.Config.magnetRange; -import java.util.ArrayList; -import java.util.Collections; import java.util.Iterator; import java.util.List; @@ -17,11 +15,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import com.glodblock.github.common.item.ItemWirelessUltraTerminal; -import com.glodblock.github.inventory.ItemBiggerAppEngInventory; -import appeng.api.storage.data.IAEItemStack; -import appeng.api.storage.data.IItemList; -import appeng.tile.inventory.AppEngInternalInventory; import appeng.util.Platform; public class WirelessMagnet { @@ -54,32 +48,13 @@ public class WirelessMagnet { } @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) { + public static void doMagnet(ItemStack wirelessTerm, World world, EntityPlayer player) { if (Platform.isClient() || wirelessTerm == null || getMode(wirelessTerm) == Mode.Off || player == null @@ -94,7 +69,6 @@ public class WirelessMagnet { (int) player.posY, (int) player.posZ, magnetRange).iterator(); - IItemList filteredList = inv.getAEFilteredItems(); while (iterator.hasNext()) { EntityItem itemToGet = (EntityItem) iterator.next(); if (itemToGet.func_145800_j() != null && itemToGet.func_145800_j() @@ -107,19 +81,16 @@ public class WirelessMagnet { 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)); + + 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 diff --git a/src/main/java/com/glodblock/github/inventory/item/WirelessMagnetCardFilterInventory.java b/src/main/java/com/glodblock/github/inventory/item/WirelessMagnetCardFilterInventory.java index 9b74cb03..c23a5667 100644 --- a/src/main/java/com/glodblock/github/inventory/item/WirelessMagnetCardFilterInventory.java +++ b/src/main/java/com/glodblock/github/inventory/item/WirelessMagnetCardFilterInventory.java @@ -4,7 +4,8 @@ package com.glodblock.github.inventory.item; import static com.glodblock.github.inventory.item.WirelessMagnet.filterConfigKey; import static com.glodblock.github.inventory.item.WirelessMagnet.filterKey; -import java.util.List; +import java.util.HashMap; +import java.util.function.Predicate; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; @@ -15,7 +16,6 @@ import net.minecraft.world.World; 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; @@ -23,24 +23,33 @@ 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; +import appeng.util.item.AEItemStack; +import appeng.util.item.OreHelper; +import appeng.util.prioitylist.OreFilteredList; public class WirelessMagnetCardFilterInventory extends BaseWirelessInventory implements IWirelessMagnetFilter { private boolean ignoreNbt; private boolean ignoreMeta; + private boolean useOre; private boolean useOreDict; + private String oreDictFilter; + protected Predicate filterPredicate = null; private WirelessMagnet.ListMode listMode = WirelessMagnet.ListMode.WhiteList; - protected AppEngInternalInventory filterList; + private final AppEngInternalInventory filterInventory; + private final NBTTagCompound settingCache; + private final NBTTagCompound filterCache; @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); + super(is, slot, gridNode, player, StorageChannel.ITEMS, true); + filterInventory = new ItemBiggerAppEngInventory(is, filterKey, 27); + settingCache = getSettingTag(is); + filterCache = getFilterTag(is); readFromNBT(); } @@ -50,7 +59,9 @@ public class WirelessMagnetCardFilterInventory extends BaseWirelessInventory imp NBTTagCompound tag = (NBTTagCompound) data.getTag(filterConfigKey); ignoreNbt = tag.getBoolean("nbt"); ignoreMeta = tag.getBoolean("meta"); - useOreDict = tag.getBoolean("ore"); + useOre = tag.getBoolean("ore"); + useOreDict = tag.getBoolean("oreDict"); + oreDictFilter = tag.getString("oreDictFilter"); this.listMode = WirelessMagnet.ListMode.values()[tag.getInteger("list")]; } @@ -59,11 +70,21 @@ public class WirelessMagnetCardFilterInventory extends BaseWirelessInventory imp NBTTagCompound tmp = new NBTTagCompound(); tmp.setBoolean("nbt", ignoreNbt); tmp.setBoolean("meta", ignoreMeta); - tmp.setBoolean("ore", useOreDict); + tmp.setBoolean("ore", useOre); + tmp.setBoolean("oreDict", useOreDict); + tmp.setString("oreDictFilter", oreDictFilter); tmp.setInteger("list", this.listMode.ordinal()); data.setTag(filterConfigKey, tmp); } + private NBTTagCompound getSettingTag(ItemStack is) { + return (NBTTagCompound) is.getTagCompound().getCompoundTag(filterConfigKey).copy(); + } + + private NBTTagCompound getFilterTag(ItemStack is) { + return (NBTTagCompound) is.getTagCompound().getCompoundTag(filterKey).copy(); + } + @Override public WirelessMagnet.ListMode getListMode() { return this.listMode; @@ -81,9 +102,19 @@ public class WirelessMagnetCardFilterInventory extends BaseWirelessInventory imp @Override public boolean getOreMode() { + return useOre; + } + + @Override + public boolean getOreDictMode() { return useOreDict; } + @Override + public String getOreDictFilter() { + return oreDictFilter; + } + @Override public void setListMode(WirelessMagnet.ListMode mode) { this.listMode = mode; @@ -101,7 +132,18 @@ public class WirelessMagnetCardFilterInventory extends BaseWirelessInventory imp @Override public void setOreMode(boolean useOre) { - useOreDict = useOre; + this.useOre = useOre; + } + + @Override + public void setOreDictMode(boolean useOreDict) { + this.useOreDict = useOreDict; + } + + @Override + public void setOreDictFilter(String str) { + oreDictFilter = str; + filterPredicate = null; } @Override @@ -129,7 +171,7 @@ public class WirelessMagnetCardFilterInventory extends BaseWirelessInventory imp @Override public IMEMonitor getItemInventory() { - return this; + return null; } @Override @@ -144,9 +186,7 @@ public class WirelessMagnetCardFilterInventory extends BaseWirelessInventory imp @Override public void onChangeInventory(IInventory inv, int slot, InvOperation mc, ItemStack removedStack, - ItemStack newStack) { - - } + ItemStack newStack) {} @Override public void saveSettings() { @@ -157,7 +197,7 @@ public class WirelessMagnetCardFilterInventory extends BaseWirelessInventory imp @Override public IInventory getInventoryByName(String name) { if (name.equals("config")) { - return this.filterList; + return filterInventory; } return null; } @@ -177,39 +217,67 @@ public class WirelessMagnetCardFilterInventory extends BaseWirelessInventory imp return true; } - public List getFilteredItems() { - return WirelessMagnet.getFilteredItems(this.target); - } - - public IItemList getAEFilteredItems() { - IItemList list = AEApi.instance().storage().createItemList(); - for (ItemStack is : this.getFilteredItems()) { - list.add(AEApi.instance().storage().createItemStack(is)); + public boolean isItemFiltered(ItemStack inputItemStack) { + if (useOreDict && !oreDictFilter.isEmpty()) { + if (filterPredicate == null) filterPredicate = OreFilteredList.makeFilter(oreDictFilter); + if (filterPredicate.test(AEItemStack.create(inputItemStack))) return true; } - 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 (useOreDict) { - // use oredict - return i.sameOre(ais); - } else if (ignoreMeta && ignoreNbt) { - // ignore meta & nbt - return ais.getItem() == i.getItem(); - } else if (ignoreMeta) { - // ignore meta only - return ais.getItemStack().getTagCompound().equals(i.getItemStack().getTagCompound()); - } else if (ignoreNbt) { - // ignore nbt only - return i.getItemDamage() == ais.getItemDamage(); - } else { - // ignore nothing/don't use oredict--must be exact match - return ais.equals(i); + for (int i = 0; i < filterInventory.getSizeInventory(); i++) { + ItemStack is = filterInventory.getStackInSlot(i); + if (is != null) { + if (useOre) { + // use oredict + if (OreHelper.INSTANCE + .sameOre(OreHelper.INSTANCE.isOre(is), OreHelper.INSTANCE.isOre(inputItemStack))) + return true; + } + if (ignoreMeta && ignoreNbt) { + // ignore meta & nbt + return is.getItem().equals(inputItemStack.getItem()); + } else if (ignoreMeta) { + // ignore meta only + return ItemStack.areItemStackTagsEqual(is, inputItemStack) + && is.getItem() == inputItemStack.getItem(); + } else if (ignoreNbt) { + // ignore nbt only + return is.getItem() == inputItemStack.getItem() + && is.getItemDamage() == inputItemStack.getItemDamage(); + } else { + // ignore nothing/don't use oredict--must be exact match + return is.isItemEqual(inputItemStack) && ItemStack.areItemStackTagsEqual(is, inputItemStack); + } } } return false; } + + public boolean isPassFilter(ItemStack is) { + return is != null && (listMode == WirelessMagnet.ListMode.WhiteList) == isItemFiltered(is); + } + + public boolean checkCache(ItemStack is) { + return settingCache.equals(getSettingTag(is)) && filterCache.equals(getFilterTag(is)); + } + + public static class FilterCache { + + private static final HashMap cache = new HashMap<>(); + + public static WirelessMagnetCardFilterInventory getFilter(ItemStack is, int slot, IGridNode gridNode, + EntityPlayer player) { + WirelessMagnetCardFilterInventory cachedInv = cache.get(player); + if (cachedInv != null && cachedInv.checkCache(is)) { + return cachedInv; + } else { + WirelessMagnetCardFilterInventory newInv = new WirelessMagnetCardFilterInventory( + is, + slot, + gridNode, + player); + cache.put(player, newInv); + return newInv; + } + } + } } diff --git a/src/main/java/com/glodblock/github/network/CPacketFluidPatternTermBtns.java b/src/main/java/com/glodblock/github/network/CPacketFluidPatternTermBtns.java index 8613aa45..98a49ad8 100644 --- a/src/main/java/com/glodblock/github/network/CPacketFluidPatternTermBtns.java +++ b/src/main/java/com/glodblock/github/network/CPacketFluidPatternTermBtns.java @@ -111,6 +111,12 @@ public class CPacketFluidPatternTermBtns implements IMessage { case "WirelessTerminal.magnet.Ore": ((IWirelessMagnetFilter) itemTerminal).setOreMode(Value.equals("1")); break; + case "WirelessTerminal.magnet.OreDictState": + ((IWirelessMagnetFilter) itemTerminal).setOreDictMode(Value.equals("1")); + break; + case "WirelessTerminal.magnet.OreDictFilter": + ((IWirelessMagnetFilter) itemTerminal).setOreDictFilter(Value); + break; case "WirelessTerminal.magnet.FilterMode": ((IWirelessMagnetFilter) itemTerminal).setListMode( Value.equals("1") ? WirelessMagnet.ListMode.WhiteList diff --git a/src/main/java/com/glodblock/github/proxy/CommonProxy.java b/src/main/java/com/glodblock/github/proxy/CommonProxy.java index 03284d37..cf6903af 100644 --- a/src/main/java/com/glodblock/github/proxy/CommonProxy.java +++ b/src/main/java/com/glodblock/github/proxy/CommonProxy.java @@ -21,6 +21,7 @@ import com.glodblock.github.crossmod.thaumcraft.ThaumicEnergisticsCrafting; import com.glodblock.github.inventory.external.AEFluidInterfaceHandler; import com.glodblock.github.inventory.item.WirelessMagnet; import com.glodblock.github.inventory.item.WirelessMagnetCardFilterInventory; +import com.glodblock.github.inventory.item.WirelessMagnetCardFilterInventory.FilterCache; import com.glodblock.github.loader.ItemAndBlockHolder; import com.glodblock.github.network.SPacketMEUpdateBuffer; import com.glodblock.github.network.wrapper.FCNetworkWrapper; @@ -31,8 +32,6 @@ 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; @@ -54,48 +53,38 @@ public class CommonProxy { @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(); + if (Platform.isServer() && e.entityPlayer != null) { + try { + EntityPlayer player = e.entityPlayer; + EntityItem itemEntity = e.item; + ItemStack stack = itemEntity.getEntityItem(); + World world = player.getEntityWorld(); - ImmutablePair result = Util.getUltraWirelessTerm(player); - if (result == null) return; - final ItemStack wirelessTerm = result.getRight(); - WirelessMagnet.Mode mode = WirelessMagnet.getMode(wirelessTerm); - if (mode != WirelessMagnet.Mode.ME) return; - IGridNode gridNode = Util.getWirelessGrid(wirelessTerm); - if (gridNode == null || !Util.rangeCheck(wirelessTerm, player, gridNode)) return; - WirelessMagnetCardFilterInventory inv = new WirelessMagnetCardFilterInventory( - wirelessTerm, - result.getLeft(), - gridNode, - player); + ImmutablePair result = Util.getUltraWirelessTerm(player); + if (result != null) { + final ItemStack wirelessTerm = result.getRight(); + WirelessMagnet.Mode mode = WirelessMagnet.getMode(wirelessTerm); + if (mode == WirelessMagnet.Mode.ME) { + IGridNode gridNode = Util.getWirelessGrid(wirelessTerm); + if (gridNode != null && Util.rangeCheck(wirelessTerm, player, gridNode)) { + WirelessMagnetCardFilterInventory inv = FilterCache + .getFilter(wirelessTerm, result.getLeft(), gridNode, player); - IItemList filteredList = inv.getAEFilteredItems(); - IAEItemStack ais = AEApi.instance().storage().createItemStack(stack); - if (inv.getListMode() == WirelessMagnet.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() == WirelessMagnet.ListMode.BlackList) { - if (!inv.isItemFiltered(stack, filteredList)) { - if (inv.doInject(ais, itemEntity, world)) { - stack = null; - itemEntity.setDead(); - e.setCanceled(true); + if (inv.isPassFilter(stack)) { + if (inv.doInject( + AEApi.instance().storage().createItemStack(stack), + itemEntity, + world)) { + itemEntity.setDead(); + e.setCanceled(true); + } + } + } } } + } catch (NullPointerException ex) { + ex.printStackTrace(); } - - } catch (NullPointerException ex) { - ex.printStackTrace(); } } @@ -103,18 +92,12 @@ public class CommonProxy { public void tickEvent(TickEvent.PlayerTickEvent e) { EntityPlayer player = e.player; ImmutablePair result = Util.getUltraWirelessTerm(player); - if (result == null) return; - final ItemStack wirelessTerm = result.getRight(); - if (WirelessMagnet.getMode(wirelessTerm) == WirelessMagnet.Mode.Off) return; - IGridNode gridNode = Util.getWirelessGrid(wirelessTerm); - if (gridNode == null || !Util.rangeCheck(wirelessTerm, player, gridNode)) return; - WirelessMagnetCardFilterInventory inv = new WirelessMagnetCardFilterInventory( - wirelessTerm, - result.getLeft(), - gridNode, - player); - WirelessMagnet.doMagnet(wirelessTerm, e.player.worldObj, e.player, inv); - + if (result != null) { + final ItemStack wirelessTerm = result.getRight(); + if (WirelessMagnet.getMode(wirelessTerm) != WirelessMagnet.Mode.Off) { + WirelessMagnet.doMagnet(wirelessTerm, e.player.worldObj, e.player); + } + } } public void preInit(FMLPreInitializationEvent event) { diff --git a/src/main/java/com/glodblock/github/util/NameConst.java b/src/main/java/com/glodblock/github/util/NameConst.java index ce61cce2..ca421ebf 100644 --- a/src/main/java/com/glodblock/github/util/NameConst.java +++ b/src/main/java/com/glodblock/github/util/NameConst.java @@ -112,6 +112,8 @@ public class NameConst { 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 TT_MAGNET_CARD_OREDICT = TT_KEY + "magnet_card.oreDictFilter"; + 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"; diff --git a/src/main/java/com/glodblock/github/util/Util.java b/src/main/java/com/glodblock/github/util/Util.java index 094213f4..0b183788 100644 --- a/src/main/java/com/glodblock/github/util/Util.java +++ b/src/main/java/com/glodblock/github/util/Util.java @@ -162,22 +162,26 @@ public final class Util { } 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; - if (rangeCheck(is, player, grid)) { - IStorageGrid gridCache = grid.getCache(IStorageGrid.class); - if (gridCache != null) { - if (channel == StorageChannel.FLUIDS) { - return gridCache.getFluidInventory(); - } else { - return gridCache.getItemInventory(); + if (Platform.isServer()) { + IGridNode gridNode = getWirelessGrid(is); + if (gridNode != null) { + IGrid grid = gridNode.getGrid(); + if (grid != null) { + if (rangeCheck(is, player, grid)) { + IStorageGrid gridCache = grid.getCache(IStorageGrid.class); + if (gridCache != null) { + if (channel == StorageChannel.FLUIDS) { + return gridCache.getFluidInventory(); + } else { + return gridCache.getItemInventory(); + } + } + } } } + return null; } - return null; + return new NullInventory<>(); } public static ItemStack getWirelessTerminal(EntityPlayer player, int x) { diff --git a/src/main/resources/assets/ae2fc/lang/en_US.lang b/src/main/resources/assets/ae2fc/lang/en_US.lang index bbcfcd2d..fbb59d5b 100644 --- a/src/main/resources/assets/ae2fc/lang/en_US.lang +++ b/src/main/resources/assets/ae2fc/lang/en_US.lang @@ -170,6 +170,7 @@ 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.magnet_card.oreDictFilter=Oredictionary filter ae2fc.tooltip.restock.on=Toggle Restock ae2fc.tooltip.restock.on.hint=Enable ae2fc.tooltip.restock.off=Toggle Restock diff --git a/src/main/resources/assets/ae2fc/textures/gui/magnet_filter.png b/src/main/resources/assets/ae2fc/textures/gui/magnet_filter.png index 7312b62cba9b2d064f899a226fe64d665c3be2b1..1efe6ad3aa47589d43e3a1419e8289211f4b0b8a 100644 GIT binary patch delta 1327 zcmey<$T*{kae~U^x7OOi44efXk;M!Qd+j}2pJu$rW}^MPxpId}ckjL1x0XZa!|~5&XV1TX>ha^pJBl;JB}D(KGWh%Z zFLy7P`|kbw?Z4aG+Y6tY*EbsX+-Lar=q$hPeinudK?V+Cx}thw?b}_u?{CGnzaPGQ z*>ZRPk3T;@zr0vD->!Do&u?#Uzg+(K%*@~R=YRhA`1s}W`Ec)|VoV)YgXDrTPu{tql=hWgHmR&N^jeJJwc~60~-f>erAzF_v*CG9z!R+^0 zZL_N&^Rv$Vi@C+IrLWh49mp#J($kZbFE~Csvvv-Ue!7E=D7Qnr2=YPN{>r1vW?2?L z3p;yrzPEJawfdQQERESIiYKftGwiXsxZ%+5^7sF?-h0i#81eipLytIb*pKyJt8 zSm`l2&0uiAif(+-XWU=^f8XD)Vrw4hGp;{v!cfr5k}x-u;n?-&`PntLTi)-lpKDp1 zeC}Vpf>1;0J)Q#pL@No5a>xRycS^EdgliFhMV>LyWg*!Z=9ZYbo%i_7Kbu1`sYpR|gQH}EWwG{iAZ@vh5ySoUIJ^Y35o|?%+{Tq@=jQATE&lfW zlG}n(a^e_Y6xYM!_*{u1M~pJJ>uZs^ICuO l_WWdIAPFeEeD=&=po)2&T2g@m0|OTWgQu&X%Q~loCIH$N*zf=V delta 1296 zcmbVKZAep57=F(--7Hv3kfM2IA1dT65c<(z6}OnAp%x;DX*u*qI8c{?No2b-Wd2d6 zVoD+Uqa*@t1HZs2cO)$mqzrZFg!S>q*g*PHYgX@>8U^zTT{zEqIq!4s`@YX}x*JKv zPMoQU3D)f58vx2Fx=1IhRJ+SZjBWa3HrY&$>1<*BVrY4~MXFV0y?*&bug&X(hDIbc#P$~gP1>j#ZZQk3bPzdl2`{(GC~M& z{@$`LpXJU?zq?}tgchzYppd~+sPmv;P=^crgm)aqP(vdy%R$03pon!4B_kjQXJ!zh ze>gekzpi(x?SaAyUki7YL@X8`3y_>^#QOZ*N@QDwFp`yHct;?kIFlhrYs&*TS&(0% z)B5)SUTqIyomU0$kij2pxr2&`ctbdxe}@XfS_Ay7ndq4_f>qnh9BRbWwg4F6Oey7i zDnK>bBL5`--}bAd=9+_nv4byK)piIb39UuQLThOK|M3m4{c%3nf5ccVtJOOnSVCBV z<;(KI^>I7GW{L`H!)}wUM%wINVAVSrtaEuEKU9Hy>;NADN}_;T*2RoUrh7?v{Y2lc z4+Q!Ds2LT=27-5p+T9(s`wg|*OdmIW99GsPx#1ZP1_K>z@;j|==^1poj532;bRa{vGq zB>(^xB>_oNB=7(L2Bk?vK~!i%)t6gn7Dp7v&*q{wiQ0-3E7alzf*@Low1W7SULb)c zv1u(utyZZItrUe8Ut0PglBz{QX%QvZNJC1iCK$m`ABtMA5P$4jsZcEiFI7}(G%*iJ zrsscl&t`VM+5Ogh-ui?2_M6!`yZ`^p+1Xk8zY|19+O}<*!EtbKQ0mIyojY>8dGn?m zpPe&@s;jGM$BrFwEbzteX>XI`#y8g&jrV}-73&jrz|EH~St1QSE?&M&e{b1B%cci( z;KCo$_SUrNw12j8mN&j>!z!XFeDS)lZcgyeFwu|Y{`eGRK$uJuWzkW%&70MPiLhJ{Y$hH|21zt_g`Z7+UFTf6w&%Y2T{yYUtU0zD-9BxXSQ_><429NIlI z_YAE0XoHMAu}E`@=uGXog7}Wke<*m3sQ0j?vQ2Jg!8;DN8CRBhcT^PgJ-xkjq`TX9QHkHv8O{Ps*dUG6M9@Wnd54VYWAWEB#Vgte z=e_q1SD{EGQfBo1x20eSMS1sNl(!j3Jg@V>jmJ`|>15VKLZiMG5N8Xt>$W-kPneCL z0e>C&Gq;QsEP+xOcUF8H+22LxI8nbbv3R%xiY~a)>-htgCwt*7j3&i2g zo_7&Q?1hXmR9;@5D4?>kQVQz5{6+>>ukv=g1bp#WX=PiY-xJt^qp%TdRmPs=^MB>Z zlotb-R!~tzFCeiS4xD&(7 zl!6^EqmMif)5b{3jGKVaIN$V{;20sHVq|25dU|?j-@biPkUB`Cg$ox-Ieq%Hq}W3s z(}YdJ07j*up+P=6Q1rC zOr(5IhyfJ_A(JOhj$dLeEiIDwt*xz6Y@v8wl!+{(c6?0qJ%Ln;Qbs`9qEn^B0=rfttZUb?}#DDwJ$ZH_aNM!+| zDpti8GY@ulKAGhvf3pyErx zHIYZWjSBRoj(ZNo27FVEHZ4)pL%}CrLEWAOG2n{Fao)Un1tkymwJ`E_I^`J%6__U8 zC6Pk7nW8s$OBSwpql!U;2IMHnzxF5b6+Wz%Nmb<_A`-%EhIwCf2Mm`BoBIxX&x z9z7EGSC%iw!i5X5=I8-dlXywAF~;Z{KKnCGXT^Qr_FA9)@#DuC=Umxaz$L#RkbT1K z;~Unk3w&{KXb68CI)qJ&7|!4MU9_#y1|agfePvw=C;(W6^W6AD6OaMEk5AcubM!z? zg1QJP)I0t2w-nH z&us9Du-}b3@w}~@W7~_RxR`lhwbw}dL@>s*aWE$;C zJiJdlOMeeO`RhJ*lq?dLJ_A&3Skes}5-~U>Vs~$y$Ns{_2jbmbFD$hQ;JW8cA)XiA zT<{2>&><1>y8f7}9C-C)BRZ<<(YOC2{Brm+>qm9_O*c!Gh`Jx^J@x_6!^4&fRzbch zq{qK(TU1iwGt_ag_5+-0K8q@(fQA;;(*}q(5`WQF)&bT6#&?4AULcl+9?&+zdYR>B zc+uLS)&aR#QOHcXFKl1m<^C!br7#S_KI6PFx&Ix*{t9?mxe&o?z{LO=gQ*)1da0BI zwKly1DIqF^C{zd(Hgr)56qnWqZACWG{&fp@H&FeC-@a{Y3)p4=R{`GXct6Y`lBk)u zhJR?U016c`u!&oD#Y(K>&wKaqapk+7Hc_!g0e%(uJO%L0?>QZ}?xN~)3gmfC{pn!h z<{}m49hC!*M@F#X^l8=c1^&tPEf2{4%ae}%`=1;VrIIHd5xmCB29$F6eSYkcUM;z9zJ{+STPV%O`^V|pC=@F(cS{a zwDW`xj{sSXq{nHnSS*Ist5=H+U44DMXb(b^Y8GTqVIw@h#W_z%uWRL-u~vY+>4umK zYZanF$n!*qe(%|{2lMC8M<$aIf`4X$KzsK*!7hNwU92X8dp3Lps?9H8Vq!wXdShcF z;_yKI2}O=VEC^AOIKZA6X9RV45g{W*)VO(&@xG`I3+3hI z7&5lbaMuF3(@)op8#k;galZD_IoapIsZ_F7#Z7sH*SP12(JAi>-teDxB4IYR64^L7 z)p;tFaJ?_y-Ra&to%2K-7JmWH5@zn0TM3GJ+g9R#D?manSTW}mXFX5M`SXDFpBA4c zhK7dn_Fi*y^RpKKmq-|>^y)igiJqPwM?jPXh;aM%ZQ-p|t5&hu3_G20*t&!1gb&)>^h{xpn0cVGWItg!Y9Hc}0(ZeQ+Cc)p9fDqvTdp@;*EH!xRC_Vw4N= z8>X$ajm0000 Date: Fri, 11 Apr 2025 02:11:14 +0300 Subject: [PATCH 05/10] caching by UUID instead of EntityPlayer --- .../inventory/item/WirelessMagnetCardFilterInventory.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/glodblock/github/inventory/item/WirelessMagnetCardFilterInventory.java b/src/main/java/com/glodblock/github/inventory/item/WirelessMagnetCardFilterInventory.java index c23a5667..badba86e 100644 --- a/src/main/java/com/glodblock/github/inventory/item/WirelessMagnetCardFilterInventory.java +++ b/src/main/java/com/glodblock/github/inventory/item/WirelessMagnetCardFilterInventory.java @@ -5,6 +5,7 @@ import static com.glodblock.github.inventory.item.WirelessMagnet.filterConfigKey import static com.glodblock.github.inventory.item.WirelessMagnet.filterKey; import java.util.HashMap; +import java.util.UUID; import java.util.function.Predicate; import net.minecraft.entity.item.EntityItem; @@ -262,11 +263,11 @@ public class WirelessMagnetCardFilterInventory extends BaseWirelessInventory imp public static class FilterCache { - private static final HashMap cache = new HashMap<>(); + private static final HashMap cache = new HashMap<>(); public static WirelessMagnetCardFilterInventory getFilter(ItemStack is, int slot, IGridNode gridNode, EntityPlayer player) { - WirelessMagnetCardFilterInventory cachedInv = cache.get(player); + WirelessMagnetCardFilterInventory cachedInv = cache.get(player.getUniqueID()); if (cachedInv != null && cachedInv.checkCache(is)) { return cachedInv; } else { @@ -275,7 +276,7 @@ public class WirelessMagnetCardFilterInventory extends BaseWirelessInventory imp slot, gridNode, player); - cache.put(player, newInv); + cache.put(player.getUniqueID(), newInv); return newInv; } } From 7190bf39f5334a2bc44a49fcdc8a13f34f86547e Mon Sep 17 00:00:00 2001 From: lordIcocain Date: Fri, 11 Apr 2025 17:49:33 +0300 Subject: [PATCH 06/10] fix restock crash on out of range --- .../common/item/ItemBaseWirelessTerminal.java | 3 -- .../github/network/CPacketValueConfig.java | 49 ++++++++++--------- 2 files changed, 26 insertions(+), 26 deletions(-) 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 32c18dc0..5d7b6500 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemBaseWirelessTerminal.java +++ b/src/main/java/com/glodblock/github/common/item/ItemBaseWirelessTerminal.java @@ -109,9 +109,6 @@ public class ItemBaseWirelessTerminal extends ToolWirelessTerminal implements II if (hasEnergyCard(stack)) { lines.add(" " + EnumChatFormatting.GOLD + getEnergyCard().getDisplayName()); } - if (hasEnergyCard(stack)) { - lines.add(" " + EnumChatFormatting.GOLD + getEnergyCard().getDisplayName()); - } } else { lines.add(NameConst.i18n(NameConst.TT_CTRL_FOR_MORE)); } diff --git a/src/main/java/com/glodblock/github/network/CPacketValueConfig.java b/src/main/java/com/glodblock/github/network/CPacketValueConfig.java index 6b2ff8e0..e3fd345a 100644 --- a/src/main/java/com/glodblock/github/network/CPacketValueConfig.java +++ b/src/main/java/com/glodblock/github/network/CPacketValueConfig.java @@ -56,13 +56,17 @@ public class CPacketValueConfig implements IMessage { ((ContainerFluidLevelEmitter) container).setLevel(message.amount, player); } else if (container instanceof ContainerPlayer) { ImmutablePair result = Util.getUltraWirelessTerm(player); - if (result == null) return null; - if (message.valueIndex == 1) { - ItemBaseWirelessTerminal - .toggleRestockItemsMode(result.getRight(), !Util.isRestock(result.getRight())); - return null; - } else if (Util.isRestock(result.getRight())) { - restockItems(result.getRight(), result.getLeft(), player); + if (result != null) { + final ItemStack wirelessTerm = result.getRight(); + IGridNode gridNode = Util.getWirelessGrid(wirelessTerm); + if (gridNode != null && Util.rangeCheck(wirelessTerm, player, gridNode)) { + if (message.valueIndex == 1) { + ItemBaseWirelessTerminal + .toggleRestockItemsMode(result.getRight(), !Util.isRestock(result.getRight())); + } else if (Util.isRestock(result.getRight())) { + restockItems(result.getRight(), gridNode, result.getLeft(), player); + } + } } } } @@ -70,30 +74,29 @@ public class CPacketValueConfig implements IMessage { } @SuppressWarnings("unchecked") - private void restockItems(ItemStack terminal, int slot, EntityPlayer player) { - IGridNode iGridNode = Util.getWirelessGrid(terminal); - if (iGridNode == null) return; + private void restockItems(ItemStack terminal, IGridNode gridNode, int slot, EntityPlayer player) { WirelessCraftingTerminalInventory inv = new WirelessCraftingTerminalInventory( terminal, slot, - iGridNode, + gridNode, 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; + if (is != null) { + int maxSize = is.getMaxStackSize(); + if (is.stackSize < maxSize) { + int fillSize = maxSize - is.stackSize; + IAEItemStack ias = AEApi.instance().storage().createItemStack(is); + ias.setStackSize(fillSize); - 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()); + IAEItemStack extractedItem = (IAEItemStack) inv + .extractItems(ias, Actionable.MODULATE, inv.getActionSource()); + if (extractedItem != null) { + player.inventory.addItemStackToInventory(extractedItem.getItemStack()); + } + } + } } } } From b9cd36f3cc9c2eb3d71476e238f9ef4c79a55157 Mon Sep 17 00:00:00 2001 From: lordIcocain Date: Fri, 11 Apr 2025 19:16:32 +0300 Subject: [PATCH 07/10] restock cleanup --- .../WirelessMagnetCardFilterInventory.java | 2 +- .../github/loader/KeybindLoader.java | 8 ------- .../github/network/CPacketValueConfig.java | 24 +++++++++++++------ .../glodblock/github/proxy/ClientProxy.java | 5 ++-- .../resources/assets/ae2fc/lang/en_US.lang | 2 ++ 5 files changed, 23 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/glodblock/github/inventory/item/WirelessMagnetCardFilterInventory.java b/src/main/java/com/glodblock/github/inventory/item/WirelessMagnetCardFilterInventory.java index badba86e..d911fe61 100644 --- a/src/main/java/com/glodblock/github/inventory/item/WirelessMagnetCardFilterInventory.java +++ b/src/main/java/com/glodblock/github/inventory/item/WirelessMagnetCardFilterInventory.java @@ -38,7 +38,7 @@ public class WirelessMagnetCardFilterInventory extends BaseWirelessInventory imp private boolean ignoreMeta; private boolean useOre; private boolean useOreDict; - private String oreDictFilter; + private String oreDictFilter = ""; protected Predicate filterPredicate = null; private WirelessMagnet.ListMode listMode = WirelessMagnet.ListMode.WhiteList; private final AppEngInternalInventory filterInventory; diff --git a/src/main/java/com/glodblock/github/loader/KeybindLoader.java b/src/main/java/com/glodblock/github/loader/KeybindLoader.java index 45f01a75..81654539 100644 --- a/src/main/java/com/glodblock/github/loader/KeybindLoader.java +++ b/src/main/java/com/glodblock/github/loader/KeybindLoader.java @@ -4,7 +4,6 @@ import net.minecraft.client.Minecraft; 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; @@ -12,7 +11,6 @@ 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; @@ -81,13 +79,7 @@ public class KeybindLoader implements Runnable { ImmutablePair term = Util.getUltraWirelessTerm(p); if (term != null) { - p.addChatMessage( - new ChatComponentText( - NameConst.i18n( - !Util.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/network/CPacketValueConfig.java b/src/main/java/com/glodblock/github/network/CPacketValueConfig.java index e3fd345a..ba3be5ce 100644 --- a/src/main/java/com/glodblock/github/network/CPacketValueConfig.java +++ b/src/main/java/com/glodblock/github/network/CPacketValueConfig.java @@ -4,12 +4,15 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ContainerPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.StatCollector; 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.NameConst; import com.glodblock.github.util.Util; import appeng.api.AEApi; @@ -58,13 +61,20 @@ public class CPacketValueConfig implements IMessage { ImmutablePair result = Util.getUltraWirelessTerm(player); if (result != null) { final ItemStack wirelessTerm = result.getRight(); - IGridNode gridNode = Util.getWirelessGrid(wirelessTerm); - if (gridNode != null && Util.rangeCheck(wirelessTerm, player, gridNode)) { - if (message.valueIndex == 1) { - ItemBaseWirelessTerminal - .toggleRestockItemsMode(result.getRight(), !Util.isRestock(result.getRight())); - } else if (Util.isRestock(result.getRight())) { - restockItems(result.getRight(), gridNode, result.getLeft(), player); + if (message.valueIndex == 1) { + ItemBaseWirelessTerminal + .toggleRestockItemsMode(wirelessTerm, !Util.isRestock(wirelessTerm)); + player.addChatMessage( + new ChatComponentText( + StatCollector.translateToLocal( + !Util.isRestock(wirelessTerm) + ? NameConst.TT_ULTRA_TERMINAL_RESTOCK_ON + : NameConst.TT_ULTRA_TERMINAL_RESTOCK_OFF))); + } else { + IGridNode gridNode = Util.getWirelessGrid(wirelessTerm); + if (gridNode != null && Util.isRestock(wirelessTerm) + && Util.rangeCheck(wirelessTerm, player, gridNode)) { + restockItems(wirelessTerm, gridNode, result.getLeft(), player); } } } diff --git a/src/main/java/com/glodblock/github/proxy/ClientProxy.java b/src/main/java/com/glodblock/github/proxy/ClientProxy.java index 34489800..13d15256 100644 --- a/src/main/java/com/glodblock/github/proxy/ClientProxy.java +++ b/src/main/java/com/glodblock/github/proxy/ClientProxy.java @@ -60,8 +60,9 @@ public class ClientProxy extends CommonProxy { if (refreshTick + reStockTime < System.currentTimeMillis()) { // try to stock items ImmutablePair result = Util.getUltraWirelessTerm(mc.thePlayer); - if (result == null || !Util.isRestock(result.getRight()) || mc.currentScreen != null) return; - FluidCraft.proxy.netHandler.sendToServer(new CPacketValueConfig(1, 0)); + if (result != null && mc.currentScreen == null && Util.isRestock(result.getRight())) { + FluidCraft.proxy.netHandler.sendToServer(new CPacketValueConfig(1, 0)); + } refreshTick = System.currentTimeMillis(); } } diff --git a/src/main/resources/assets/ae2fc/lang/en_US.lang b/src/main/resources/assets/ae2fc/lang/en_US.lang index fbb59d5b..19b2a862 100644 --- a/src/main/resources/assets/ae2fc/lang/en_US.lang +++ b/src/main/resources/assets/ae2fc/lang/en_US.lang @@ -117,6 +117,8 @@ ae2fc.tooltip.ultra_terminal.WIRELESS_FLUID_PATTERN_TERMINAL_EX=Mode: Processing 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.ultra_terminal.restock.on=Restock activate +ae2fc.tooltip.ultra_terminal.restock.off=Restock deactivated ae2fc.tooltip.infinity_fluid=§aInfinity§r ae2fc.tooltip.fluid_storage.void=Where nothing is everything, and everything is nothing From e4d1157d3c92076db7d462d3c94c7fe056e8924e Mon Sep 17 00:00:00 2001 From: lordIcocain Date: Tue, 20 May 2025 06:03:59 +0300 Subject: [PATCH 08/10] review --- .../github/client/gui/FCGuiBaseButton.java | 5 +- .../github/client/gui/GuiFCImgButton.java | 2 - .../github/client/gui/GuiMagnetFilter.java | 2 - .../gui/container/ContainerMagnetFilter.java | 1 - .../common/item/ItemBaseWirelessTerminal.java | 18 ----- .../item/ItemWirelessUltraTerminal.java | 69 ++++++++++++++++++- .../github/inventory/item/WirelessMagnet.java | 65 ++++++++--------- .../WirelessMagnetCardFilterInventory.java | 10 ++- .../github/network/CPacketValueConfig.java | 38 ---------- .../glodblock/github/proxy/ClientProxy.java | 28 -------- .../glodblock/github/proxy/CommonProxy.java | 13 ---- .../resources/assets/ae2fc/lang/en_US.lang | 2 +- 12 files changed, 114 insertions(+), 139 deletions(-) diff --git a/src/main/java/com/glodblock/github/client/gui/FCGuiBaseButton.java b/src/main/java/com/glodblock/github/client/gui/FCGuiBaseButton.java index 70ae9078..11dafef9 100644 --- a/src/main/java/com/glodblock/github/client/gui/FCGuiBaseButton.java +++ b/src/main/java/com/glodblock/github/client/gui/FCGuiBaseButton.java @@ -1,4 +1,5 @@ -package com.glodblock.github.client.gui.widget; + +package com.glodblock.github.client.gui; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; @@ -8,9 +9,9 @@ import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; +// copy from WirelessCraftingTerminal WCTGuiButton public class FCGuiBaseButton extends GuiButton { - // copy from wct button protected static final ResourceLocation buttonTextures = new ResourceLocation( "minecraft", "textures/gui/widgets.png"); diff --git a/src/main/java/com/glodblock/github/client/gui/GuiFCImgButton.java b/src/main/java/com/glodblock/github/client/gui/GuiFCImgButton.java index 123bb50e..c10e4d83 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiFCImgButton.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiFCImgButton.java @@ -71,10 +71,8 @@ public class GuiFCImgButton extends GuiButton implements ITooltip { 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/client/gui/GuiMagnetFilter.java b/src/main/java/com/glodblock/github/client/gui/GuiMagnetFilter.java index 4bca8b64..4621e1c6 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiMagnetFilter.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiMagnetFilter.java @@ -1,4 +1,3 @@ -/* Author: asdflj */ package com.glodblock.github.client.gui; import net.minecraft.client.gui.GuiButton; @@ -9,7 +8,6 @@ import org.lwjgl.input.Keyboard; import com.glodblock.github.FluidCraft; import com.glodblock.github.client.gui.container.ContainerMagnetFilter; -import com.glodblock.github.client.gui.widget.FCGuiBaseButton; import com.glodblock.github.common.item.ItemWirelessUltraTerminal; import com.glodblock.github.inventory.InventoryHandler; import com.glodblock.github.inventory.item.WirelessMagnet; diff --git a/src/main/java/com/glodblock/github/client/gui/container/ContainerMagnetFilter.java b/src/main/java/com/glodblock/github/client/gui/container/ContainerMagnetFilter.java index 7b801892..0f98e886 100644 --- a/src/main/java/com/glodblock/github/client/gui/container/ContainerMagnetFilter.java +++ b/src/main/java/com/glodblock/github/client/gui/container/ContainerMagnetFilter.java @@ -1,4 +1,3 @@ -/* Author: asdflj */ package com.glodblock.github.client.gui.container; import net.minecraft.entity.player.EntityPlayer; 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 5d7b6500..457b56c3 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemBaseWirelessTerminal.java +++ b/src/main/java/com/glodblock/github/common/item/ItemBaseWirelessTerminal.java @@ -38,7 +38,6 @@ public class ItemBaseWirelessTerminal extends ToolWirelessTerminal implements II public static String infinityBoosterCard = "infinityBoosterCard"; public static String infinityEnergyCard = "InfinityEnergyCard"; public static String restockItems = "restock"; - private static boolean effect = false; public ItemBaseWirelessTerminal(GuiType t) { super(); @@ -51,7 +50,6 @@ public class ItemBaseWirelessTerminal extends ToolWirelessTerminal implements II // terminal if (ForgeEventFactory.onItemUseStart(player, item, 1) > 0) { if (Platform.isClient()) { - setEffect(false); return item; } IWirelessTermRegistry term = AEApi.instance().registries().wireless(); @@ -135,22 +133,6 @@ public class ItemBaseWirelessTerminal extends ToolWirelessTerminal implements II return this.type; } - 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); - } - public static void toggleRestockItemsMode(ItemStack is, boolean state) { NBTTagCompound data = Platform.openNbtData(is); data.setBoolean(restockItems, state); 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 719d0497..aef5c242 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemWirelessUltraTerminal.java +++ b/src/main/java/com/glodblock/github/common/item/ItemWirelessUltraTerminal.java @@ -1,5 +1,6 @@ package com.glodblock.github.common.item; +import static com.glodblock.github.common.Config.reStockTime; import static net.minecraft.client.gui.GuiScreen.isShiftKeyDown; import java.util.ArrayList; @@ -7,8 +8,11 @@ import java.util.Arrays; import java.util.EnumSet; import java.util.List; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.StatCollector; @@ -25,6 +29,7 @@ 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.WirelessMagnet; import com.glodblock.github.inventory.item.WirelessMagnetCardFilterInventory; import com.glodblock.github.inventory.item.WirelessPatternTerminalExInventory; import com.glodblock.github.inventory.item.WirelessPatternTerminalInventory; @@ -36,11 +41,14 @@ import com.glodblock.github.util.NameConst; 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 appeng.core.features.AEFeature; import appeng.core.localization.PlayerMessages; import appeng.util.Platform; import baubles.api.BaubleType; +import baubles.api.BaublesApi; import baubles.api.IBauble; import cpw.mods.fml.common.Optional; import cpw.mods.fml.common.registry.GameRegistry; @@ -231,7 +239,21 @@ public class ItemWirelessUltraTerminal extends ItemBaseWirelessTerminal @Override public void onWornTick(ItemStack itemStack, EntityLivingBase entityLivingBase) { - + if (Platform.isServer() && entityLivingBase instanceof EntityPlayer player) { + IInventory handler = BaublesApi.getBaubles(player); + if (handler != null) { + for (int i = 0; i < handler.getSizeInventory(); ++i) { + if (handler.getStackInSlot(i) == itemStack) { + onUpdate( + itemStack, + null, + player, + Util.GuiHelper.encodeType(i, Util.GuiHelper.InvType.PLAYER_BAUBLES), + false); + } + } + } + } } @Override @@ -253,4 +275,49 @@ public class ItemWirelessUltraTerminal extends ItemBaseWirelessTerminal public boolean canUnequip(ItemStack itemStack, EntityLivingBase entityLivingBase) { return true; } + + private static final Minecraft mc = Minecraft.getMinecraft(); + private static long refreshTick = System.currentTimeMillis(); + + @Override + public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int slot, boolean p_77663_5_) { + if (Platform.isServer() && entityIn instanceof EntityPlayer player) { + if (WirelessMagnet.getMode(stack) != WirelessMagnet.Mode.Off) { + WirelessMagnet.doMagnet(stack, player.worldObj, player); + } + + if (refreshTick + reStockTime < System.currentTimeMillis()) { + // try to stock items + if (mc.currentScreen == null && Util.isRestock(stack)) { + IGridNode gridNode = Util.getWirelessGrid(stack); + if (gridNode != null && Util.isRestock(stack) && Util.rangeCheck(stack, player, gridNode)) { + restockItems(stack, gridNode, slot, player); + } + } + refreshTick = System.currentTimeMillis(); + } + } + } + + private void restockItems(ItemStack terminal, IGridNode gridNode, int slot, EntityPlayer player) { + WirelessCraftingTerminalInventory inv = new WirelessCraftingTerminalInventory(terminal, slot, gridNode, player); + + for (int i = 0; i < 9; i++) { + ItemStack is = player.inventory.mainInventory[i]; + if (is != null) { + int maxSize = is.getMaxStackSize(); + if (is.stackSize < maxSize) { + 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) { + player.inventory.addItemStackToInventory(extractedItem.getItemStack()); + } + } + } + } + } } diff --git a/src/main/java/com/glodblock/github/inventory/item/WirelessMagnet.java b/src/main/java/com/glodblock/github/inventory/item/WirelessMagnet.java index a1885075..1d871704 100644 --- a/src/main/java/com/glodblock/github/inventory/item/WirelessMagnet.java +++ b/src/main/java/com/glodblock/github/inventory/item/WirelessMagnet.java @@ -1,4 +1,3 @@ -/* Author: asdflj */ package com.glodblock.github.inventory.item; import static com.glodblock.github.common.Config.magnetRange; @@ -56,7 +55,6 @@ public class WirelessMagnet { public static void doMagnet(ItemStack wirelessTerm, World world, EntityPlayer player) { if (Platform.isClient() || wirelessTerm == null - || getMode(wirelessTerm) == Mode.Off || player == null || player.isSneaking() || !isConfigured(wirelessTerm)) @@ -69,28 +67,32 @@ public class WirelessMagnet { (int) player.posY, (int) player.posZ, magnetRange).iterator(); + while (iterator.hasNext()) { EntityItem itemToGet = (EntityItem) iterator.next(); - if (itemToGet.func_145800_j() != null && itemToGet.func_145800_j() - .equals(player.getCommandSenderName())) { /* don`t pick up items dropped by yourself */ - continue; - } - EntityPlayer closestPlayer = world.getClosestPlayerToEntity(itemToGet, magnetRange); - if (closestPlayer != null && closestPlayer != player) { - continue; - } + if (closestPlayer != null && closestPlayer == player) { + NBTTagCompound itemNBT = new NBTTagCompound(); + itemToGet.writeEntityToNBT(itemNBT); - 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)); + if (itemToGet.func_145800_j() == null + || !itemToGet.func_145800_j().equals(player.getCommandSenderName())) + itemToGet.delayBeforeCanPickup = 0; + if (itemToGet.delayBeforeCanPickup <= 0) { + itemNBT.setBoolean("attractable", true); + itemToGet.readEntityFromNBT(itemNBT); + } + + if (itemNBT.getBoolean("attractable")) { + 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 @@ -103,20 +105,21 @@ public class WirelessMagnet { magnetRange).iterator(); while (iterator.hasNext()) { EntityXPOrb xpToGet = (EntityXPOrb) iterator.next(); - if (xpToGet.isDead || xpToGet.isInvisible()) { - continue; + EntityPlayer closestPlayer = world.getClosestPlayerToEntity(xpToGet, magnetRange); + + if (!xpToGet.isDead && !xpToGet.isInvisible() && closestPlayer != null && closestPlayer == player) { + 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)); } - 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)); } } diff --git a/src/main/java/com/glodblock/github/inventory/item/WirelessMagnetCardFilterInventory.java b/src/main/java/com/glodblock/github/inventory/item/WirelessMagnetCardFilterInventory.java index d911fe61..49755be0 100644 --- a/src/main/java/com/glodblock/github/inventory/item/WirelessMagnetCardFilterInventory.java +++ b/src/main/java/com/glodblock/github/inventory/item/WirelessMagnetCardFilterInventory.java @@ -1,4 +1,3 @@ -/* Author: asdflj */ package com.glodblock.github.inventory.item; import static com.glodblock.github.inventory.item.WirelessMagnet.filterConfigKey; @@ -48,7 +47,14 @@ public class WirelessMagnetCardFilterInventory extends BaseWirelessInventory imp @SuppressWarnings("unchecked") public WirelessMagnetCardFilterInventory(ItemStack is, int slot, IGridNode gridNode, EntityPlayer player) { super(is, slot, gridNode, player, StorageChannel.ITEMS, true); - filterInventory = new ItemBiggerAppEngInventory(is, filterKey, 27); + filterInventory = new ItemBiggerAppEngInventory(is, filterKey, 27) { + + @Override + public void setInventorySlotContents(int slot, ItemStack newItemStack) { + if (newItemStack != null) newItemStack.stackSize = 1; + super.setInventorySlotContents(slot, newItemStack); + } + }; settingCache = getSettingTag(is); filterCache = getFilterTag(is); readFromNBT(); diff --git a/src/main/java/com/glodblock/github/network/CPacketValueConfig.java b/src/main/java/com/glodblock/github/network/CPacketValueConfig.java index ba3be5ce..7111ac19 100644 --- a/src/main/java/com/glodblock/github/network/CPacketValueConfig.java +++ b/src/main/java/com/glodblock/github/network/CPacketValueConfig.java @@ -11,14 +11,9 @@ 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.NameConst; 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; @@ -70,44 +65,11 @@ public class CPacketValueConfig implements IMessage { !Util.isRestock(wirelessTerm) ? NameConst.TT_ULTRA_TERMINAL_RESTOCK_ON : NameConst.TT_ULTRA_TERMINAL_RESTOCK_OFF))); - } else { - IGridNode gridNode = Util.getWirelessGrid(wirelessTerm); - if (gridNode != null && Util.isRestock(wirelessTerm) - && Util.rangeCheck(wirelessTerm, player, gridNode)) { - restockItems(wirelessTerm, gridNode, result.getLeft(), player); - } } } } } return null; } - - @SuppressWarnings("unchecked") - private void restockItems(ItemStack terminal, IGridNode gridNode, int slot, EntityPlayer player) { - WirelessCraftingTerminalInventory inv = new WirelessCraftingTerminalInventory( - terminal, - slot, - gridNode, - player); - - for (int i = 0; i < 9; i++) { - ItemStack is = player.inventory.mainInventory[i]; - if (is != null) { - int maxSize = is.getMaxStackSize(); - if (is.stackSize < maxSize) { - 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) { - player.inventory.addItemStackToInventory(extractedItem.getItemStack()); - } - } - } - } - } } } diff --git a/src/main/java/com/glodblock/github/proxy/ClientProxy.java b/src/main/java/com/glodblock/github/proxy/ClientProxy.java index 13d15256..6f3446f1 100644 --- a/src/main/java/com/glodblock/github/proxy/ClientProxy.java +++ b/src/main/java/com/glodblock/github/proxy/ClientProxy.java @@ -1,33 +1,18 @@ package com.glodblock.github.proxy; -import static com.glodblock.github.common.Config.reStockTime; - -import net.minecraft.client.Minecraft; -import net.minecraft.item.ItemStack; - -import org.apache.commons.lang3.tuple.ImmutablePair; - -import com.glodblock.github.FluidCraft; import com.glodblock.github.loader.KeybindLoader; import com.glodblock.github.loader.ListenerLoader; import com.glodblock.github.loader.RenderLoader; import com.glodblock.github.nei.recipes.DefaultExtractorLoader; -import com.glodblock.github.network.CPacketValueConfig; import com.glodblock.github.util.ModAndClassUtil; -import com.glodblock.github.util.Util; 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 ClientProxy extends CommonProxy { - private static final Minecraft mc = Minecraft.getMinecraft(); - private static long refreshTick = System.currentTimeMillis(); - @Override public void preInit(FMLPreInitializationEvent event) { super.preInit(event); @@ -53,17 +38,4 @@ public class ClientProxy extends CommonProxy { new DefaultExtractorLoader().run(); } } - - @SubscribeEvent - public void tickEvent(TickEvent.PlayerTickEvent e) { - super.tickEvent(e); - if (refreshTick + reStockTime < System.currentTimeMillis()) { - // try to stock items - ImmutablePair result = Util.getUltraWirelessTerm(mc.thePlayer); - if (result != null && mc.currentScreen == null && Util.isRestock(result.getRight())) { - FluidCraft.proxy.netHandler.sendToServer(new CPacketValueConfig(1, 0)); - } - refreshTick = System.currentTimeMillis(); - } - } } diff --git a/src/main/java/com/glodblock/github/proxy/CommonProxy.java b/src/main/java/com/glodblock/github/proxy/CommonProxy.java index cf6903af..38dc2b18 100644 --- a/src/main/java/com/glodblock/github/proxy/CommonProxy.java +++ b/src/main/java/com/glodblock/github/proxy/CommonProxy.java @@ -39,7 +39,6 @@ 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 { @@ -88,18 +87,6 @@ public class CommonProxy { } } - @SubscribeEvent - public void tickEvent(TickEvent.PlayerTickEvent e) { - EntityPlayer player = e.player; - ImmutablePair result = Util.getUltraWirelessTerm(player); - if (result != null) { - final ItemStack wirelessTerm = result.getRight(); - if (WirelessMagnet.getMode(wirelessTerm) != WirelessMagnet.Mode.Off) { - WirelessMagnet.doMagnet(wirelessTerm, e.player.worldObj, e.player); - } - } - } - public void preInit(FMLPreInitializationEvent event) { ModAndClassUtil.init(); ItemAndBlockHolder.init(); diff --git a/src/main/resources/assets/ae2fc/lang/en_US.lang b/src/main/resources/assets/ae2fc/lang/en_US.lang index 19b2a862..8a17a5ad 100644 --- a/src/main/resources/assets/ae2fc/lang/en_US.lang +++ b/src/main/resources/assets/ae2fc/lang/en_US.lang @@ -117,7 +117,7 @@ ae2fc.tooltip.ultra_terminal.WIRELESS_FLUID_PATTERN_TERMINAL_EX=Mode: Processing 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.ultra_terminal.restock.on=Restock activate +ae2fc.tooltip.ultra_terminal.restock.on=Restock activated ae2fc.tooltip.ultra_terminal.restock.off=Restock deactivated ae2fc.tooltip.infinity_fluid=§aInfinity§r ae2fc.tooltip.fluid_storage.void=Where nothing is everything, and everything is nothing From 6c922c3f021cf840e00727ecc70baffb56d5f281 Mon Sep 17 00:00:00 2001 From: lordIcocain Date: Tue, 20 May 2025 06:09:20 +0300 Subject: [PATCH 09/10] remove extra check --- .../com/glodblock/github/inventory/item/WirelessMagnet.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/com/glodblock/github/inventory/item/WirelessMagnet.java b/src/main/java/com/glodblock/github/inventory/item/WirelessMagnet.java index 1d871704..08ac0b09 100644 --- a/src/main/java/com/glodblock/github/inventory/item/WirelessMagnet.java +++ b/src/main/java/com/glodblock/github/inventory/item/WirelessMagnet.java @@ -54,11 +54,7 @@ public class WirelessMagnet { } public static void doMagnet(ItemStack wirelessTerm, World world, EntityPlayer player) { - if (Platform.isClient() || wirelessTerm == null - || player == null - || player.isSneaking() - || !isConfigured(wirelessTerm)) - return; + if (wirelessTerm == null || player == null || player.isSneaking() || !isConfigured(wirelessTerm)) return; Iterator iterator = getEntitiesInRange( EntityItem.class, From 226467ce131b0a4cee22b7d2ae9b2d97384ee691 Mon Sep 17 00:00:00 2001 From: lordIcocain Date: Tue, 20 May 2025 06:29:03 +0300 Subject: [PATCH 10/10] restore restock --- .../item/ItemWirelessUltraTerminal.java | 40 ------------------- .../github/network/CPacketValueConfig.java | 38 ++++++++++++++++++ .../glodblock/github/proxy/ClientProxy.java | 27 +++++++++++++ 3 files changed, 65 insertions(+), 40 deletions(-) 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 aef5c242..828a8b5b 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemWirelessUltraTerminal.java +++ b/src/main/java/com/glodblock/github/common/item/ItemWirelessUltraTerminal.java @@ -1,6 +1,5 @@ package com.glodblock.github.common.item; -import static com.glodblock.github.common.Config.reStockTime; import static net.minecraft.client.gui.GuiScreen.isShiftKeyDown; import java.util.ArrayList; @@ -8,7 +7,6 @@ import java.util.Arrays; import java.util.EnumSet; import java.util.List; -import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -41,9 +39,7 @@ import com.glodblock.github.util.NameConst; 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 appeng.core.features.AEFeature; import appeng.core.localization.PlayerMessages; import appeng.util.Platform; @@ -276,48 +272,12 @@ public class ItemWirelessUltraTerminal extends ItemBaseWirelessTerminal return true; } - private static final Minecraft mc = Minecraft.getMinecraft(); - private static long refreshTick = System.currentTimeMillis(); - @Override public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int slot, boolean p_77663_5_) { if (Platform.isServer() && entityIn instanceof EntityPlayer player) { if (WirelessMagnet.getMode(stack) != WirelessMagnet.Mode.Off) { WirelessMagnet.doMagnet(stack, player.worldObj, player); } - - if (refreshTick + reStockTime < System.currentTimeMillis()) { - // try to stock items - if (mc.currentScreen == null && Util.isRestock(stack)) { - IGridNode gridNode = Util.getWirelessGrid(stack); - if (gridNode != null && Util.isRestock(stack) && Util.rangeCheck(stack, player, gridNode)) { - restockItems(stack, gridNode, slot, player); - } - } - refreshTick = System.currentTimeMillis(); - } - } - } - - private void restockItems(ItemStack terminal, IGridNode gridNode, int slot, EntityPlayer player) { - WirelessCraftingTerminalInventory inv = new WirelessCraftingTerminalInventory(terminal, slot, gridNode, player); - - for (int i = 0; i < 9; i++) { - ItemStack is = player.inventory.mainInventory[i]; - if (is != null) { - int maxSize = is.getMaxStackSize(); - if (is.stackSize < maxSize) { - 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) { - player.inventory.addItemStackToInventory(extractedItem.getItemStack()); - } - } - } } } } diff --git a/src/main/java/com/glodblock/github/network/CPacketValueConfig.java b/src/main/java/com/glodblock/github/network/CPacketValueConfig.java index 7111ac19..ba3be5ce 100644 --- a/src/main/java/com/glodblock/github/network/CPacketValueConfig.java +++ b/src/main/java/com/glodblock/github/network/CPacketValueConfig.java @@ -11,9 +11,14 @@ 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.NameConst; 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; @@ -65,11 +70,44 @@ public class CPacketValueConfig implements IMessage { !Util.isRestock(wirelessTerm) ? NameConst.TT_ULTRA_TERMINAL_RESTOCK_ON : NameConst.TT_ULTRA_TERMINAL_RESTOCK_OFF))); + } else { + IGridNode gridNode = Util.getWirelessGrid(wirelessTerm); + if (gridNode != null && Util.isRestock(wirelessTerm) + && Util.rangeCheck(wirelessTerm, player, gridNode)) { + restockItems(wirelessTerm, gridNode, result.getLeft(), player); + } } } } } return null; } + + @SuppressWarnings("unchecked") + private void restockItems(ItemStack terminal, IGridNode gridNode, int slot, EntityPlayer player) { + WirelessCraftingTerminalInventory inv = new WirelessCraftingTerminalInventory( + terminal, + slot, + gridNode, + player); + + for (int i = 0; i < 9; i++) { + ItemStack is = player.inventory.mainInventory[i]; + if (is != null) { + int maxSize = is.getMaxStackSize(); + if (is.stackSize < maxSize) { + 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) { + player.inventory.addItemStackToInventory(extractedItem.getItemStack()); + } + } + } + } + } } } diff --git a/src/main/java/com/glodblock/github/proxy/ClientProxy.java b/src/main/java/com/glodblock/github/proxy/ClientProxy.java index 6f3446f1..71fdce5a 100644 --- a/src/main/java/com/glodblock/github/proxy/ClientProxy.java +++ b/src/main/java/com/glodblock/github/proxy/ClientProxy.java @@ -1,18 +1,33 @@ package com.glodblock.github.proxy; +import static com.glodblock.github.common.Config.reStockTime; + +import net.minecraft.client.Minecraft; +import net.minecraft.item.ItemStack; + +import org.apache.commons.lang3.tuple.ImmutablePair; + +import com.glodblock.github.FluidCraft; import com.glodblock.github.loader.KeybindLoader; import com.glodblock.github.loader.ListenerLoader; import com.glodblock.github.loader.RenderLoader; import com.glodblock.github.nei.recipes.DefaultExtractorLoader; +import com.glodblock.github.network.CPacketValueConfig; import com.glodblock.github.util.ModAndClassUtil; +import com.glodblock.github.util.Util; 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 ClientProxy extends CommonProxy { + private static final Minecraft mc = Minecraft.getMinecraft(); + private static long refreshTick = System.currentTimeMillis(); + @Override public void preInit(FMLPreInitializationEvent event) { super.preInit(event); @@ -38,4 +53,16 @@ public class ClientProxy extends CommonProxy { new DefaultExtractorLoader().run(); } } + + @SubscribeEvent + public void tickEvent(TickEvent.PlayerTickEvent e) { + if (refreshTick + reStockTime < System.currentTimeMillis()) { + // try to stock items + ImmutablePair result = Util.getUltraWirelessTerm(mc.thePlayer); + if (result != null && mc.currentScreen == null && Util.isRestock(result.getRight())) { + FluidCraft.proxy.netHandler.sendToServer(new CPacketValueConfig(1, 0)); + } + refreshTick = System.currentTimeMillis(); + } + } }