diff --git a/src/main/java/com/glodblock/github/client/UltraTerminalButtons.java b/src/main/java/com/glodblock/github/client/UltraTerminalButtons.java index f728d436..9cf32a83 100644 --- a/src/main/java/com/glodblock/github/client/UltraTerminalButtons.java +++ b/src/main/java/com/glodblock/github/client/UltraTerminalButtons.java @@ -7,10 +7,12 @@ import static com.glodblock.github.inventory.item.WirelessMagnet.modeKey; import java.util.List; import net.minecraft.client.gui.GuiButton; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import com.glodblock.github.FluidCraft; import com.glodblock.github.client.gui.GuiFCImgButton; +import com.glodblock.github.common.item.ItemWirelessUltraTerminal; import com.glodblock.github.inventory.item.WirelessMagnet; import com.glodblock.github.network.CPacketFluidPatternTermBtns; import com.glodblock.github.network.CPacketSwitchGuis; @@ -24,6 +26,8 @@ public class UltraTerminalButtons implements ICustomButtonDataObject { public static String restockItems = "restock"; + private ItemStack terminal; + private GuiFCImgButton CraftingTerminal; private GuiFCImgButton PatternTerminal; private GuiFCImgButton InterfaceTerminal; @@ -45,6 +49,10 @@ public class UltraTerminalButtons implements ICustomButtonDataObject { private int offset; + public UltraTerminalButtons(ItemStack terminal) { + this.terminal = terminal; + } + public void initCustomButtons(int guiLeft, int guiTop, int xSize, int ySize, int xOffset, int yOffset, List buttonList) { this.offset = yOffset; @@ -93,16 +101,21 @@ public class UltraTerminalButtons implements ICustomButtonDataObject { @Override public boolean actionPerformedCustomButtons(final GuiButton btn) { if (btn instanceof GuiFCImgButton) { + UltraTerminalModes mode = null; if (btn == this.CraftingTerminal) { - FluidCraft.proxy.netHandler.sendToServer(new CPacketSwitchGuis(UltraTerminalModes.CRAFTING, true)); + mode = UltraTerminalModes.CRAFTING; } else if (btn == this.PatternTerminal) { - FluidCraft.proxy.netHandler.sendToServer(new CPacketSwitchGuis(UltraTerminalModes.PATTERN, true)); + mode = UltraTerminalModes.PATTERN; } else if (btn == this.InterfaceTerminal) { - FluidCraft.proxy.netHandler.sendToServer(new CPacketSwitchGuis(UltraTerminalModes.INTERFACE, true)); + mode = UltraTerminalModes.INTERFACE; } else if (btn == this.LevelTerminal) { - FluidCraft.proxy.netHandler.sendToServer(new CPacketSwitchGuis(UltraTerminalModes.LEVEL, true)); + mode = UltraTerminalModes.LEVEL; } else if (btn == this.PatternTerminalEx) { - FluidCraft.proxy.netHandler.sendToServer(new CPacketSwitchGuis(UltraTerminalModes.PATTERN_EX, true)); + mode = UltraTerminalModes.PATTERN_EX; + } + if (mode != null) { + ItemWirelessUltraTerminal.setMode(this.terminal, mode); + FluidCraft.proxy.netHandler.sendToServer(new CPacketSwitchGuis(mode, true)); } if (btn == this.magnetOff || btn == this.magnetME || btn == this.magnetInv) { 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 37791e41..547c3e1f 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemWirelessUltraTerminal.java +++ b/src/main/java/com/glodblock/github/common/item/ItemWirelessUltraTerminal.java @@ -226,6 +226,6 @@ public class ItemWirelessUltraTerminal extends ItemBaseWirelessTerminal @Override public ICustomButtonDataObject getCustomDataObject(ICustomButtonProvider provider) { - return new UltraTerminalButtons(); + return new UltraTerminalButtons(((IGuiItemObject) provider).getItemStack()); } } diff --git a/src/main/java/com/glodblock/github/common/tile/TileCertusQuartzTank.java b/src/main/java/com/glodblock/github/common/tile/TileCertusQuartzTank.java index 5ddb08dc..fb4344aa 100644 --- a/src/main/java/com/glodblock/github/common/tile/TileCertusQuartzTank.java +++ b/src/main/java/com/glodblock/github/common/tile/TileCertusQuartzTank.java @@ -33,42 +33,57 @@ public class TileCertusQuartzTank extends TileEntity implements IFluidHandler { return tankFluid == null || tankFluid.amount == 0 ? 0 : tankFluid.getFluid().getLuminosity(tankFluid); } - public FluidStack drain(FluidStack fluid, boolean doDrain, boolean findMainTank) { - if (fluid == null || this.getFluid() == null || this.getFluid() != fluid.getFluid()) { + public FluidStack drain(Fluid fluid, int amount, boolean doDrain, boolean findMainTank) { + if (fluid != null && this.getFluid() != fluid) { return null; } if (findMainTank) { // Main tank is the highest tank in the column with desired fluid TileCertusQuartzTank mainTank = this; - TileCertusQuartzTank tankAbove; - while ((tankAbove = mainTank.getTankAbove()) != null) { - // We can't drain tank with different or null fluid - if (fluid.getFluid() != tankAbove.getFluid()) { - break; + if (this.tank.getFluid() != null) { + // Current tank has a fluid, searching for the highest tank with this fluid + TileCertusQuartzTank tankAbove; + while ((tankAbove = mainTank.getTankAbove()) != null) { + // We can't drain tank with different or null fluid + if (tankAbove.getFluid() == null || mainTank.getFluid() != tankAbove.getFluid()) { + break; + } + mainTank = tankAbove; + } + } else { + // Current tank doesn't have a fluid, searching for the first non-empty tank below + TileCertusQuartzTank tankBelow; + while ((tankBelow = mainTank.getTankBelow()) != null) { + // We can't drain tank with different fluid + if (fluid != null && tankBelow.getFluid() != fluid) { + break; + } + mainTank = tankBelow; + if (tankBelow.getFluid() != null) { + break; + } } - mainTank = tankAbove; } - return mainTank.drain(fluid, doDrain, false); + return mainTank.drain(fluid, amount, doDrain, false); } - FluidStack drainedFluid = this.tank.drain(fluid.amount, doDrain); + FluidStack drainedFluid = this.tank.drain(amount, doDrain); int drained = drainedFluid != null ? drainedFluid.amount : 0; if (drained > 0) { update(); } - if (drained < fluid.amount) { + if (drained < amount) { TileCertusQuartzTank tankBelow = this.getTankBelow(); if (tankBelow != null) { - FluidStack fluidToDrain = new FluidStack(fluid.getFluid(), fluid.amount - drained); - FluidStack externallyDrained = tankBelow.drain(fluidToDrain, doDrain, false); + FluidStack externallyDrained = tankBelow.drain(fluid, amount - drained, doDrain, false); if (externallyDrained != null) { - return new FluidStack(fluid.getFluid(), drained + externallyDrained.amount); + return new FluidStack(fluid, drained + externallyDrained.amount); } } } @@ -78,14 +93,14 @@ public class TileCertusQuartzTank extends TileEntity implements IFluidHandler { @Override public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) { - return drain(resource, doDrain, true); + if (resource == null) return null; + + return drain(resource.getFluid(), resource.amount, doDrain, true); } @Override public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) { - if (this.tank.getFluid() == null) return null; - - return drain(from, new FluidStack(this.tank.getFluid(), maxDrain), doDrain); + return drain(null, maxDrain, true, true); } public int fill(FluidStack fluid, boolean doFill, boolean findMainTank) { @@ -174,14 +189,14 @@ public class TileCertusQuartzTank extends TileEntity implements IFluidHandler { } final FluidStack tankFluidStack = this.tank.getFluid(); - final Fluid mainFluid = tankFluidStack != null ? tankFluidStack.getFluid() : null; + Fluid mainFluid = tankFluidStack != null ? tankFluidStack.getFluid() : null; int amount = tankFluidStack == null ? 0 : tankFluidStack.amount; int capacity = this.tank.getCapacity(); TileCertusQuartzTank tankAbove = this; while ((tankAbove = tankAbove.getTankAbove()) != null) { - if (tankAbove.getFluid() == null || mainFluid != tankAbove.getFluid()) { + if (tankAbove.getFluid() != null && mainFluid != tankAbove.getFluid()) { break; } @@ -192,7 +207,10 @@ public class TileCertusQuartzTank extends TileEntity implements IFluidHandler { TileCertusQuartzTank tankBelow = this; while ((tankBelow = tankBelow.getTankBelow()) != null) { - if (mainFluid == null || mainFluid != tankBelow.getFluid()) { + if (mainFluid == null && tankBelow.getFluid() != null) { + mainFluid = tankBelow.getFluid(); + } + if (mainFluid != tankBelow.getFluid()) { break; } diff --git a/src/main/java/com/glodblock/github/crossmod/waila/CertusQuartzTankWailaDataProvider.java b/src/main/java/com/glodblock/github/crossmod/waila/CertusQuartzTankWailaDataProvider.java index 22e418f4..667b0c28 100644 --- a/src/main/java/com/glodblock/github/crossmod/waila/CertusQuartzTankWailaDataProvider.java +++ b/src/main/java/com/glodblock/github/crossmod/waila/CertusQuartzTankWailaDataProvider.java @@ -20,9 +20,11 @@ public class CertusQuartzTankWailaDataProvider extends BaseWailaDataProvider { TileEntity tileEntity = accessor.getTileEntity(); if (tileEntity instanceof TileCertusQuartzTank quartzTank) { FluidTankInfo info = quartzTank.getTankInfo(true)[0]; - if (info.fluid != null) { - currentToolTip - .add(Tooltip.fluidFormat(info.fluid.getLocalizedName(), info.fluid.amount, info.capacity)); + if (info.fluid == null) { + currentToolTip.add(Tooltip.tankEmptyFormat(info.capacity)); + } else { + currentToolTip.add( + Tooltip.tankWithFluidFormat(info.fluid.getLocalizedName(), info.fluid.amount, info.capacity)); } } return currentToolTip; diff --git a/src/main/java/com/glodblock/github/crossmod/waila/Tooltip.java b/src/main/java/com/glodblock/github/crossmod/waila/Tooltip.java index ff03c47a..202af0f6 100644 --- a/src/main/java/com/glodblock/github/crossmod/waila/Tooltip.java +++ b/src/main/java/com/glodblock/github/crossmod/waila/Tooltip.java @@ -15,14 +15,18 @@ public class Tooltip { return String.format("%s: %s mB", name, NumberFormat.getInstance().format(amount)); } - public static String fluidFormat(String name, long amount, long capacity) { + public static String tankWithFluidFormat(String fluidName, long amount, long capacity) { return String.format( "%s: %s mB / %s mB", - name, + fluidName, NumberFormat.getInstance().format(amount), NumberFormat.getInstance().format(capacity)); } + public static String tankEmptyFormat(long capacity) { + return String.format("0 mB / %s mB", NumberFormat.getInstance().format(capacity)); + } + public static String partFluidBusFormat(int amount) { return String .format("%s: %s mB/t", I18n.format(NameConst.WAILA_SPEED), NumberFormat.getInstance().format(amount)); diff --git a/src/main/java/com/glodblock/github/loader/KeybindLoader.java b/src/main/java/com/glodblock/github/loader/KeybindLoader.java index ae30e7f4..0a2fba87 100644 --- a/src/main/java/com/glodblock/github/loader/KeybindLoader.java +++ b/src/main/java/com/glodblock/github/loader/KeybindLoader.java @@ -9,8 +9,10 @@ import org.apache.commons.lang3.tuple.ImmutablePair; import org.lwjgl.input.Keyboard; import com.glodblock.github.FluidCraft; +import com.glodblock.github.common.item.ItemWirelessUltraTerminal; import com.glodblock.github.network.CPacketSwitchGuis; import com.glodblock.github.network.CPacketValueConfig; +import com.glodblock.github.util.UltraTerminalModes; import com.glodblock.github.util.Util; import cpw.mods.fml.client.registry.ClientRegistry; @@ -24,13 +26,43 @@ import cpw.mods.fml.relauncher.SideOnly; public class KeybindLoader implements Runnable { public static KeyBinding openTerminal; + public static KeyBinding openCraftingTerminal; + public static KeyBinding openLevelTerminal; + public static KeyBinding openInterfaceTerminal; + public static KeyBinding openPatternTerminal; + public static KeyBinding openPatternExTerminal; public static KeyBinding restock; @Override public void run() { openTerminal = new KeyBinding(FluidCraft.MODID + ".key.OpenTerminal", Keyboard.CHAR_NONE, "itemGroup.ae2fc"); + openCraftingTerminal = new KeyBinding( + FluidCraft.MODID + ".key.OpenCraftingTerminal", + Keyboard.CHAR_NONE, + "itemGroup.ae2fc"); + openLevelTerminal = new KeyBinding( + FluidCraft.MODID + ".key.OpenLevelTerminal", + Keyboard.CHAR_NONE, + "itemGroup.ae2fc"); + openInterfaceTerminal = new KeyBinding( + FluidCraft.MODID + ".key.OpenInterfaceTerminal", + Keyboard.CHAR_NONE, + "itemGroup.ae2fc"); + openPatternTerminal = new KeyBinding( + FluidCraft.MODID + ".key.OpenPatternTerminal", + Keyboard.CHAR_NONE, + "itemGroup.ae2fc"); + openPatternExTerminal = new KeyBinding( + FluidCraft.MODID + ".key.OpenPatternExTerminal", + Keyboard.CHAR_NONE, + "itemGroup.ae2fc"); restock = new KeyBinding(FluidCraft.MODID + ".key.Restock", Keyboard.CHAR_NONE, "itemGroup.ae2fc"); ClientRegistry.registerKeyBinding(openTerminal); + ClientRegistry.registerKeyBinding(openCraftingTerminal); + ClientRegistry.registerKeyBinding(openLevelTerminal); + ClientRegistry.registerKeyBinding(openInterfaceTerminal); + ClientRegistry.registerKeyBinding(openPatternTerminal); + ClientRegistry.registerKeyBinding(openPatternExTerminal); ClientRegistry.registerKeyBinding(restock); FMLCommonHandler.instance().bus().register(this); } @@ -38,29 +70,40 @@ public class KeybindLoader implements Runnable { @SideOnly(Side.CLIENT) @SubscribeEvent public void onKeyInput(InputEvent.KeyInputEvent event) { - if (openTerminal.isPressed()) { - handleOpenTerminalKey(); - } else if (restock.isPressed()) { - handleRestockKey(); - } + handleKeybindings(); } @SideOnly(Side.CLIENT) @SubscribeEvent public void onMouseInput(InputEvent.MouseInputEvent event) { + handleKeybindings(); + } + + private void handleKeybindings() { if (openTerminal.isPressed()) { - handleOpenTerminalKey(); + handleOpenTerminalKey(null); + } else if (openCraftingTerminal.isPressed()) { + handleOpenTerminalKey(UltraTerminalModes.CRAFTING); + } else if (openLevelTerminal.isPressed()) { + handleOpenTerminalKey(UltraTerminalModes.LEVEL); + } else if (openInterfaceTerminal.isPressed()) { + handleOpenTerminalKey(UltraTerminalModes.INTERFACE); + } else if (openPatternTerminal.isPressed()) { + handleOpenTerminalKey(UltraTerminalModes.PATTERN); + } else if (openPatternExTerminal.isPressed()) { + handleOpenTerminalKey(UltraTerminalModes.PATTERN_EX); } else if (restock.isPressed()) { handleRestockKey(); } } - private void handleOpenTerminalKey() { + private void handleOpenTerminalKey(UltraTerminalModes mode) { if (Minecraft.getMinecraft().currentScreen != null) return; EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer; ImmutablePair temp = Util.getUltraWirelessTerm(player); if (temp == null) return; - FluidCraft.proxy.netHandler.sendToServer(new CPacketSwitchGuis(null, true)); + if (mode != null) ItemWirelessUltraTerminal.setMode(temp.getRight(), mode); + FluidCraft.proxy.netHandler.sendToServer(new CPacketSwitchGuis(mode, true)); } private void handleRestockKey() { diff --git a/src/main/resources/assets/ae2fc/lang/en_US.lang b/src/main/resources/assets/ae2fc/lang/en_US.lang index 1fa41968..ffaac9d1 100644 --- a/src/main/resources/assets/ae2fc/lang/en_US.lang +++ b/src/main/resources/assets/ae2fc/lang/en_US.lang @@ -219,6 +219,11 @@ ae2fc.gui.color.StateError=FFFF5555 error.unknown=Unknown ae2fc.key.OpenTerminal=Open Wireless Universal Terminal +ae2fc.key.OpenCraftingTerminal=Open Wireless Universal Crafting Terminal +ae2fc.key.OpenLevelTerminal=Open Wireless Universal Level Terminal +ae2fc.key.OpenInterfaceTerminal=Open Wireless Universal Interface Terminal +ae2fc.key.OpenPatternTerminal=Open Wireless Universal Pattern Terminal +ae2fc.key.OpenPatternExTerminal=Open Wireless Universal Processing Pattern Terminal ae2fc.key.Restock=Toggle Restock itemGroup.ae2fc=Fluid Craft For AE2