Merge branch 'master' into stack-type-api

This commit is contained in:
Kogepan229 committed 2025-12-19 19:13:41 +09:00
commit 8c2c21360a
7 files changed
+125 -40

No files matched your search

@@ -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<GuiButton> 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) {
@@ -226,6 +226,6 @@ public class ItemWirelessUltraTerminal extends ItemBaseWirelessTerminal
@Override
public ICustomButtonDataObject getCustomDataObject(ICustomButtonProvider provider) {
return new UltraTerminalButtons();
return new UltraTerminalButtons(((IGuiItemObject) provider).getItemStack());
}
}
@@ -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;
}
@@ -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;
@@ -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));
@@ -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<Integer, ItemStack> 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() {
@@ -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