interface

This commit is contained in:
lc_1337 committed 2025-10-30 13:41:43 +02:00
1 parent 20e69fa2c3
commit 53d22de11a
20 files changed
+315 -547

No files matched your search

@@ -0,0 +1,93 @@
package com.glodblock.github.client;
import java.util.List;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.renderer.entity.RenderItem;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.StatCollector;
import org.lwjgl.input.Mouse;
import com.glodblock.github.FluidCraft;
import com.glodblock.github.loader.ItemAndBlockHolder;
import com.glodblock.github.network.CPacketCustomButtonUpdate;
import com.glodblock.github.network.CPacketSwitchGuis;
import appeng.api.config.Settings;
import appeng.api.config.SidelessMode;
import appeng.client.gui.widgets.GuiImgButton;
import appeng.client.gui.widgets.GuiTabButton;
import appeng.core.sync.network.NetworkHandler;
import appeng.core.sync.packets.PacketConfigButton;
import appeng.helpers.ICustomButtonDataObject;
import io.netty.buffer.ByteBuf;
public class FluidInterfaceButtons implements ICustomButtonDataObject {
private GuiImgButton sidelessMode;
private GuiTabButton switcher;
private final boolean fullBlock;
public SidelessMode sidelessSate;
public FluidInterfaceButtons(final boolean fullBlock) {
this.fullBlock = fullBlock;
}
public void initCustomButtons(int guiLeft, int guiTop, int xSize, int ySize, int xOffset, int yOffset,
List<GuiButton> buttonList) {
if (fullBlock) {
this.sidelessMode = new GuiImgButton(
guiLeft - 18,
guiTop + yOffset,
Settings.SIDELESS_MODE,
SidelessMode.SIDELESS);
buttonList.add(this.sidelessMode);
}
this.switcher = new GuiTabButton(
guiLeft + 132,
guiTop,
!fullBlock ? ItemAndBlockHolder.FLUID_INTERFACE.stack() : ItemAndBlockHolder.INTERFACE.stack(),
StatCollector.translateToLocal("ae2fc.tooltip.switch_fluid_interface"),
RenderItem.getInstance());
buttonList.add(this.switcher);
FluidCraft.proxy.netHandler.sendToServer(new CPacketCustomButtonUpdate());
}
@Override
public boolean actionPerformedCustomButtons(final GuiButton btn) {
if (btn == this.switcher) {
FluidCraft.proxy.netHandler.sendToServer(new CPacketSwitchGuis());
return true;
} else if (fullBlock && btn == this.sidelessMode) {
final boolean backwards = Mouse.isButtonDown(1);
NetworkHandler.instance.sendToServer(new PacketConfigButton(this.sidelessMode.getSetting(), backwards));
FluidCraft.proxy.netHandler.sendToServer(new CPacketCustomButtonUpdate());
return true;
}
return false;
}
@Override
public void readData(NBTTagCompound tag) {}
@Override
public void writeData(NBTTagCompound tag) {}
@Override
public void readByte(ByteBuf buf) {
this.sidelessMode.set(SidelessMode.values()[buf.readInt()]);
}
@Override
public void writeByte(ByteBuf buf) {
buf.writeInt(this.sidelessSate.ordinal());
}
public void setSidelessMode(SidelessMode sm) {
this.sidelessSate = sm;
}
}
@@ -1,4 +1,4 @@
package com.glodblock.github.inventory;
package com.glodblock.github.client;
import static appeng.util.Platform.nextEnum;
import static com.glodblock.github.common.item.ItemWirelessUltraTerminal.MODE;
@@ -1,280 +0,0 @@
package com.glodblock.github.client.gui;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.util.StatCollector;
import org.lwjgl.input.Keyboard;
import org.lwjgl.input.Mouse;
import com.glodblock.github.client.gui.container.ContainerDualInterface;
import com.glodblock.github.common.parts.PartFluidInterface;
import com.glodblock.github.common.tile.TileFluidInterface;
import com.glodblock.github.inventory.InventoryHandler;
import com.glodblock.github.inventory.gui.GuiType;
import com.glodblock.github.loader.ItemAndBlockHolder;
import com.glodblock.github.util.ModAndClassUtil;
import com.glodblock.github.util.NameConst;
import appeng.api.config.AdvancedBlockingMode;
import appeng.api.config.FuzzyMode;
import appeng.api.config.InsertionMode;
import appeng.api.config.LockCraftingMode;
import appeng.api.config.Settings;
import appeng.api.config.SidelessMode;
import appeng.api.config.Upgrades;
import appeng.api.config.YesNo;
import appeng.client.gui.implementations.GuiUpgradeable;
import appeng.client.gui.widgets.GuiImgButton;
import appeng.client.gui.widgets.GuiSimpleImgButton;
import appeng.client.gui.widgets.GuiTabButton;
import appeng.client.gui.widgets.GuiToggleButton;
import appeng.container.implementations.ContainerInterface;
import appeng.core.AELog;
import appeng.core.localization.ButtonToolTips;
import appeng.core.localization.GuiText;
import appeng.core.sync.network.NetworkHandler;
import appeng.core.sync.packets.PacketConfigButton;
import appeng.core.sync.packets.PacketValueConfig;
import appeng.helpers.IInterfaceHost;
public class GuiDualInterface extends GuiUpgradeable {
private GuiTabButton priority;
private GuiTabButton switcher;
private GuiImgButton BlockMode;
private GuiImgButton SmartBlockMode;
private GuiImgButton fuzzyMode;
private GuiToggleButton interfaceMode;
private GuiImgButton insertionMode;
private GuiImgButton sidelessMode;
private GuiSimpleImgButton doublePatterns;
private GuiToggleButton patternOptimization;
private GuiImgButton advancedBlockingMode;
private GuiImgButton lockCraftingMode;
private final IInterfaceHost host;
public GuiDualInterface(InventoryPlayer inventoryPlayer, IInterfaceHost te) {
super(new ContainerDualInterface(inventoryPlayer, te));
this.host = te;
this.ySize = 211;
}
@Override
protected void addButtons() {
this.priority = new GuiTabButton(
this.guiLeft + 154,
this.guiTop,
2 + 4 * 16,
GuiText.Priority.getLocal(),
itemRender);
this.buttonList.add(this.priority);
this.switcher = new GuiTabButton(
this.guiLeft + 132,
this.guiTop,
host instanceof PartFluidInterface ? ItemAndBlockHolder.FLUID_INTERFACE.stack()
: ItemAndBlockHolder.INTERFACE.stack(),
StatCollector.translateToLocal("ae2fc.tooltip.switch_fluid_interface"),
itemRender);
this.buttonList.add(this.switcher);
int offset = 8;
this.BlockMode = new GuiImgButton(this.guiLeft - 18, this.guiTop + offset, Settings.BLOCK, YesNo.NO);
this.buttonList.add(this.BlockMode);
this.SmartBlockMode = new GuiImgButton(this.guiLeft - 36, this.guiTop + offset, Settings.SMART_BLOCK, YesNo.NO);
this.buttonList.add(this.SmartBlockMode);
offset += 18;
this.interfaceMode = new GuiToggleButton(
this.guiLeft - 18,
this.guiTop + offset,
84,
85,
GuiText.InterfaceTerminal.getLocal(),
GuiText.InterfaceTerminalHint.getLocal());
this.buttonList.add(this.interfaceMode);
offset += 18;
this.insertionMode = new GuiImgButton(
this.guiLeft - 18,
this.guiTop + offset,
Settings.INSERTION_MODE,
InsertionMode.DEFAULT);
this.buttonList.add(this.insertionMode);
offset += 18;
this.doublePatterns = new GuiSimpleImgButton(this.guiLeft - 18, this.guiTop + offset, 71, "");
this.doublePatterns.enabled = false;
this.buttonList.add(this.doublePatterns);
offset += 18;
this.patternOptimization = new GuiToggleButton(
this.guiLeft - 18,
this.guiTop + offset,
178,
194,
GuiText.PatternOptimization.getLocal(),
GuiText.PatternOptimizationHint.getLocal());
this.buttonList.add(this.patternOptimization);
offset += 18;
this.advancedBlockingMode = new GuiImgButton(
this.guiLeft - 18,
this.guiTop + offset,
Settings.ADVANCED_BLOCKING_MODE,
AdvancedBlockingMode.DEFAULT);
this.buttonList.add(this.advancedBlockingMode);
this.advancedBlockingMode.visible = this.bc.getInstalledUpgrades(Upgrades.ADVANCED_BLOCKING) > 0;
offset += 18;
if (isTile()) {
this.sidelessMode = new GuiImgButton(
this.guiLeft - 18,
this.guiTop + offset,
Settings.SIDELESS_MODE,
SidelessMode.SIDELESS);
this.buttonList.add(this.sidelessMode);
offset += 18;
}
this.lockCraftingMode = new GuiImgButton(
this.guiLeft - 18,
this.guiTop + offset,
Settings.LOCK_CRAFTING_MODE,
LockCraftingMode.NONE);
this.lockCraftingMode.visible = this.bc.getInstalledUpgrades(Upgrades.LOCK_CRAFTING) > 0;
this.buttonList.add(lockCraftingMode);
offset += 18;
this.fuzzyMode = new GuiImgButton(
this.guiLeft - 18,
this.guiTop + offset,
Settings.FUZZY_MODE,
FuzzyMode.IGNORE_ALL);
this.fuzzyMode.visible = this.bc.getInstalledUpgrades(Upgrades.FUZZY) > 0;
this.buttonList.add(fuzzyMode);
}
@Override
public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
if (this.BlockMode != null) {
this.BlockMode.set(((ContainerInterface) this.cvb).getBlockingMode());
}
if (this.SmartBlockMode != null) {
this.SmartBlockMode.set(((ContainerInterface) this.cvb).getSmartBlockingMode());
}
if (this.interfaceMode != null) {
this.interfaceMode.setState(((ContainerInterface) this.cvb).getInterfaceTerminalMode() == YesNo.YES);
}
if (this.insertionMode != null) {
this.insertionMode.set(((ContainerInterface) this.cvb).getInsertionMode());
}
if (this.doublePatterns != null) {
this.doublePatterns.enabled = ((ContainerInterface) this.cvb).isAllowedToMultiplyPatterns;
if (this.doublePatterns.enabled) this.doublePatterns.setTooltip(
ButtonToolTips.DoublePatterns.getLocal() + "\n" + ButtonToolTips.DoublePatternsHint.getLocal());
else this.doublePatterns.setTooltip(
ButtonToolTips.DoublePatterns.getLocal() + "\n" + ButtonToolTips.OptimizePatternsNoReq.getLocal());
}
if (this.patternOptimization != null) {
this.patternOptimization.setState(((ContainerInterface) this.cvb).getPatternOptimization() == YesNo.YES);
}
if (this.sidelessMode != null) {
this.sidelessMode.set(((ContainerDualInterface) this.cvb).getSidelessMode());
}
if (this.advancedBlockingMode != null) {
this.advancedBlockingMode.set(((ContainerDualInterface) this.cvb).getAdvancedBlockingMode());
}
if (this.lockCraftingMode != null) {
this.lockCraftingMode.set(((ContainerInterface) this.cvb).getLockCraftingMode());
}
if (this.fuzzyMode != null) {
this.fuzzyMode.set(((ContainerInterface) this.cvb).getFuzzyMode());
}
this.fontRendererObj.drawString(
getGuiDisplayName(StatCollector.translateToLocal(NameConst.GUI_FLUID_INTERFACE)),
8,
6,
4210752);
}
@Override
protected String getBackground() {
if (!ModAndClassUtil.isBigInterface) return "guis/interface.png";
return switch (((ContainerInterface) this.cvb).getPatternCapacityCardsInstalled()) {
case -1 -> "guis/interfacenonenoconfig.png";
case 1 -> "guis/interface2.png";
case 2 -> "guis/interface3.png";
case 3 -> "guis/interface4.png";
default -> "guis/interface.png";
};
}
@Override
protected void actionPerformed(final GuiButton btn) {
super.actionPerformed(btn);
final boolean backwards = Mouse.isButtonDown(1);
if (btn == this.priority) {
// InventoryHandler.switchGui(GuiType.PRIORITY);
} else if (btn == this.switcher) {
InventoryHandler.switchGui(GuiType.DUAL_INTERFACE_FLUID);
} else if (btn == this.interfaceMode) {
NetworkHandler.instance.sendToServer(new PacketConfigButton(Settings.INTERFACE_TERMINAL, backwards));
} else if (btn == this.BlockMode) {
NetworkHandler.instance.sendToServer(new PacketConfigButton(this.BlockMode.getSetting(), backwards));
} else if (btn == this.SmartBlockMode) {
NetworkHandler.instance.sendToServer(new PacketConfigButton(this.SmartBlockMode.getSetting(), backwards));
} else if (btn == this.insertionMode) {
NetworkHandler.instance.sendToServer(new PacketConfigButton(this.insertionMode.getSetting(), backwards));
} else if (btn == this.doublePatterns) {
try {
int val = Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) ? 1 : 0;
if (backwards) val |= 0b10;
NetworkHandler.instance
.sendToServer(new PacketValueConfig("Interface.DoublePatterns", String.valueOf(val)));
} catch (final Throwable e) {
AELog.debug(e);
}
} else if (btn == this.patternOptimization) {
NetworkHandler.instance.sendToServer(new PacketConfigButton(Settings.PATTERN_OPTIMIZATION, backwards));
} else if (btn == this.sidelessMode) {
NetworkHandler.instance.sendToServer(new PacketConfigButton(this.sidelessMode.getSetting(), backwards));
} else if (btn == this.advancedBlockingMode) {
NetworkHandler.instance
.sendToServer(new PacketConfigButton(this.advancedBlockingMode.getSetting(), backwards));
} else if (btn == this.lockCraftingMode) {
NetworkHandler.instance.sendToServer(new PacketConfigButton(this.lockCraftingMode.getSetting(), backwards));
} else if (btn == this.fuzzyMode) {
NetworkHandler.instance.sendToServer(new PacketConfigButton(this.fuzzyMode.getSetting(), backwards));
}
}
private boolean isTile() {
return this.host instanceof TileFluidInterface;
}
@Override
protected void handleButtonVisibility() {
super.handleButtonVisibility();
if (this.advancedBlockingMode != null) {
this.advancedBlockingMode.setVisibility(this.bc.getInstalledUpgrades(Upgrades.ADVANCED_BLOCKING) > 0);
}
if (this.lockCraftingMode != null) {
this.lockCraftingMode.setVisibility(this.bc.getInstalledUpgrades(Upgrades.LOCK_CRAFTING) > 0);
}
if (this.fuzzyMode != null) {
this.fuzzyMode.setVisibility(this.bc.getInstalledUpgrades(Upgrades.FUZZY) > 0);
}
}
}
@@ -1,13 +1,11 @@
package com.glodblock.github.client.gui;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.StatCollector;
import net.minecraftforge.common.util.ForgeDirection;
import org.lwjgl.opengl.GL11;
@@ -17,27 +15,22 @@ import com.glodblock.github.client.gui.container.ContainerFluidInterface;
import com.glodblock.github.common.parts.PartFluidInterface;
import com.glodblock.github.inventory.IAEFluidTank;
import com.glodblock.github.inventory.IDualHost;
import com.glodblock.github.inventory.InventoryHandler;
import com.glodblock.github.inventory.gui.GuiType;
import com.glodblock.github.inventory.gui.MouseRegionManager;
import com.glodblock.github.inventory.gui.TankMouseHandler;
import com.glodblock.github.loader.ItemAndBlockHolder;
import com.glodblock.github.util.NameConst;
import com.glodblock.github.util.RenderUtil;
import appeng.api.storage.data.IAEFluidStack;
import appeng.client.gui.AEBaseGui;
import appeng.client.gui.widgets.GuiTabButton;
import appeng.client.gui.GuiSub;
import appeng.core.localization.GuiText;
public class GuiFluidInterface extends AEBaseGui {
public class GuiFluidInterface extends GuiSub {
private static final ResourceLocation TEX_BG = FluidCraft.resource("textures/gui/interface_fluid.png");
private static final int TANK_X = 35, TANK_X_OFF = 18, TANK_Y = 53;
private static final int TANK_WIDTH = 16, TANK_HEIGHT = 68;
private final ContainerFluidInterface cont;
private GuiTabButton switcher;
private final MouseRegionManager mouseRegions = new MouseRegionManager(this);
public GuiFluidInterface(InventoryPlayer ipl, IDualHost tile) {
@@ -65,18 +58,6 @@ public class GuiFluidInterface extends AEBaseGui {
} catch (final Exception ignore) {}
}
@Override
public void initGui() {
super.initGui();
this.switcher = new GuiTabButton(
this.guiLeft + 154,
this.guiTop,
isPart() ? ItemAndBlockHolder.FLUID_INTERFACE.stack() : ItemAndBlockHolder.INTERFACE.stack(),
StatCollector.translateToLocal("ae2fc.tooltip.switch_fluid_interface"),
itemRender);
this.buttonList.add(this.switcher);
}
@Override
public void drawFG(int offsetX, int offsetY, int mouseX, int mouseY) {
fontRendererObj.drawString(getGuiDisplayName(I18n.format(NameConst.GUI_FLUID_INTERFACE)), 8, 6, 0x404040);
@@ -112,14 +93,6 @@ public class GuiFluidInterface extends AEBaseGui {
drawTexturedModalRect(offsetX, offsetY, 0, 0, 176, ySize);
}
@Override
protected void actionPerformed(final GuiButton btn) {
super.actionPerformed(btn);
if (btn == this.switcher) {
InventoryHandler.switchGui(GuiType.DUAL_INTERFACE);
}
}
public void update(int id, IAEFluidStack stack) {
if (id >= 100) {
cont.getTile().setConfig(id - 100, stack);
@@ -1,54 +0,0 @@
package com.glodblock.github.client.gui.container;
import net.minecraft.entity.player.InventoryPlayer;
import com.glodblock.github.common.tile.TileFluidInterface;
import com.glodblock.github.inventory.gui.GuiType;
import com.glodblock.github.loader.ItemAndBlockHolder;
import com.glodblock.github.util.FluidPrimaryGui;
import appeng.api.config.Settings;
import appeng.api.config.SidelessMode;
import appeng.api.parts.IPart;
import appeng.api.util.IConfigManager;
import appeng.container.ContainerOpenContext;
import appeng.container.PrimaryGui;
import appeng.container.guisync.GuiSync;
import appeng.container.implementations.ContainerInterface;
import appeng.helpers.IInterfaceHost;
public class ContainerDualInterface extends ContainerInterface {
@GuiSync(11)
public SidelessMode sidelessMode;
private final boolean isTile;
public ContainerDualInterface(InventoryPlayer ip, IInterfaceHost te) {
super(ip, te);
this.sidelessMode = SidelessMode.SIDELESS;
this.isTile = te instanceof TileFluidInterface;
}
public SidelessMode getSidelessMode() {
return this.sidelessMode;
}
@Override
protected void loadSettingsFromHost(IConfigManager cm) {
super.loadSettingsFromHost(cm);
this.sidelessMode = this.isTile ? (SidelessMode) cm.getSetting(Settings.SIDELESS_MODE) : SidelessMode.SIDELESS;
}
@Override
public PrimaryGui getPrimaryGui() {
ContainerOpenContext context = getOpenContext();
return new FluidPrimaryGui(
GuiType.DUAL_INTERFACE_FLUID,
getTarget() instanceof IPart ? ItemAndBlockHolder.FLUID_INTERFACE.stack()
: ItemAndBlockHolder.INTERFACE.stack(),
context.getTile(),
context.getSide());
}
}
@@ -15,11 +15,11 @@ import com.glodblock.github.inventory.slot.OptionalFluidSlotFakeTypeOnly;
import com.glodblock.github.network.SPacketFluidUpdate;
import appeng.api.storage.data.IAEFluidStack;
import appeng.container.AEBaseContainer;
import appeng.container.ContainerSubGui;
import appeng.container.slot.IOptionalSlotHost;
import appeng.util.item.AEFluidStack;
public class ContainerFluidInterface extends AEBaseContainer implements IOptionalSlotHost {
public class ContainerFluidInterface extends ContainerSubGui implements IOptionalSlotHost {
private final IDualHost tile;
@@ -11,14 +11,12 @@ import net.minecraftforge.common.util.ForgeDirection;
import com.glodblock.github.client.render.RenderBlockFluidInterface;
import com.glodblock.github.common.tabs.FluidCraftingTabs;
import com.glodblock.github.common.tile.TileFluidInterface;
import com.glodblock.github.inventory.InventoryHandler;
import com.glodblock.github.inventory.gui.GuiType;
import com.glodblock.github.util.BlockPos;
import com.glodblock.github.util.NameConst;
import appeng.api.util.IOrientable;
import appeng.block.AEBaseItemBlock;
import appeng.core.features.AEFeature;
import appeng.core.sync.GuiBridge;
import appeng.tile.misc.TileInterface;
import appeng.util.Platform;
import cpw.mods.fml.common.registry.GameRegistry;
@@ -50,12 +48,7 @@ public class BlockFluidInterface extends FCBaseBlock {
final TileInterface tg = this.getTileEntity(world, x, y, z);
if (tg != null) {
if (Platform.isServer()) {
InventoryHandler.openGui(
player,
world,
new BlockPos(x, y, z),
ForgeDirection.getOrientation(facing),
GuiType.DUAL_INTERFACE);
Platform.openGUI(player, tg, ForgeDirection.getOrientation(facing), GuiBridge.GUI_INTERFACE);
}
return true;
}
@@ -2,7 +2,6 @@ package com.glodblock.github.common.item;
import javax.annotation.Nullable;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
@@ -46,7 +45,9 @@ public class ItemPartFluidInterface extends FCBaseItem implements IPartItem {
}
@Override
public void registerIcons(IIconRegister _iconRegister) {}
protected String getIconString() {
return NameConst.RES_KEY + "fluid_interface";
}
@Override
@SideOnly(Side.CLIENT)
@@ -19,9 +19,9 @@ import net.minecraftforge.common.util.ForgeDirection;
import org.apache.commons.lang3.tuple.ImmutablePair;
import com.glodblock.github.FluidCraft;
import com.glodblock.github.client.UltraTerminalButtons;
import com.glodblock.github.common.tabs.FluidCraftingTabs;
import com.glodblock.github.inventory.InventoryHandler;
import com.glodblock.github.inventory.UltraTerminalButtons;
import com.glodblock.github.inventory.gui.GuiType;
import com.glodblock.github.inventory.item.WirelessLevelTerminalInventory;
import com.glodblock.github.inventory.item.WirelessMagnet;
@@ -1,26 +1,22 @@
package com.glodblock.github.common.parts;
import java.io.IOException;
import java.util.Objects;
import java.util.List;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.Vec3;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTankInfo;
import com.glodblock.github.client.textures.FCPartsTexture;
import com.glodblock.github.client.FluidInterfaceButtons;
import com.glodblock.github.common.item.ItemFluidPacket;
import com.glodblock.github.inventory.AEFluidInventory;
import com.glodblock.github.inventory.IAEFluidTank;
import com.glodblock.github.inventory.IDualHost;
import com.glodblock.github.inventory.InventoryHandler;
import com.glodblock.github.inventory.gui.GuiType;
import com.glodblock.github.util.BlockPos;
import com.glodblock.github.loader.ItemAndBlockHolder;
import com.glodblock.github.util.DualityFluidInterface;
import com.glodblock.github.util.Util;
@@ -31,86 +27,27 @@ import appeng.api.networking.events.MENetworkEventSubscribe;
import appeng.api.networking.events.MENetworkPowerStatusChange;
import appeng.api.networking.ticking.TickRateModulation;
import appeng.api.networking.ticking.TickingRequest;
import appeng.api.parts.IPartRenderHelper;
import appeng.api.storage.data.IAEFluidStack;
import appeng.client.texture.CableBusTextures;
import appeng.helpers.ICustomButtonDataObject;
import appeng.helpers.ICustomButtonProvider;
import appeng.parts.misc.PartInterface;
import appeng.tile.inventory.AppEngInternalAEInventory;
import appeng.util.Platform;
import cpw.mods.fml.common.network.ByteBufUtils;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import io.netty.buffer.ByteBuf;
public class PartFluidInterface extends PartInterface implements IDualHost {
public class PartFluidInterface extends PartInterface implements IDualHost, ICustomButtonProvider {
private final AppEngInternalAEInventory config = new AppEngInternalAEInventory(this, 6);
private final DualityFluidInterface fluidDuality = new DualityFluidInterface(this.getProxy(), this);
private ICustomButtonDataObject customButtonDataObject;
public PartFluidInterface(ItemStack is) {
super(is);
}
@Override
@SideOnly(Side.CLIENT)
public void renderStatic(final int x, final int y, final int z, final IPartRenderHelper rh,
final RenderBlocks renderer) {
this.setRenderCache(rh.useSimplifiedRendering(x, y, z, this, this.getRenderCache()));
rh.setTexture(
CableBusTextures.PartMonitorSides.getIcon(),
CableBusTextures.PartMonitorSides.getIcon(),
CableBusTextures.PartMonitorBack.getIcon(),
FCPartsTexture.BlockInterface_Face.getIcon(),
CableBusTextures.PartMonitorSides.getIcon(),
CableBusTextures.PartMonitorSides.getIcon());
rh.setBounds(2, 2, 14, 14, 14, 16);
rh.renderBlock(x, y, z, renderer);
rh.setTexture(
CableBusTextures.PartMonitorSides.getIcon(),
CableBusTextures.PartMonitorSides.getIcon(),
CableBusTextures.PartMonitorBack.getIcon(),
FCPartsTexture.BlockInterface_Face.getIcon(),
CableBusTextures.PartMonitorSides.getIcon(),
CableBusTextures.PartMonitorSides.getIcon());
rh.setBounds(5, 5, 12, 11, 11, 13);
rh.renderBlock(x, y, z, renderer);
rh.setTexture(
CableBusTextures.PartMonitorSidesStatus.getIcon(),
CableBusTextures.PartMonitorSidesStatus.getIcon(),
CableBusTextures.PartMonitorBack.getIcon(),
FCPartsTexture.BlockInterface_Face.getIcon(),
CableBusTextures.PartMonitorSidesStatus.getIcon(),
CableBusTextures.PartMonitorSidesStatus.getIcon());
rh.setBounds(5, 5, 13, 11, 11, 14);
rh.renderBlock(x, y, z, renderer);
this.renderLights(x, y, z, rh, renderer);
}
@Override
@SideOnly(Side.CLIENT)
public void renderInventory(final IPartRenderHelper rh, final RenderBlocks renderer) {
rh.setTexture(
CableBusTextures.PartMonitorSides.getIcon(),
CableBusTextures.PartMonitorSides.getIcon(),
CableBusTextures.PartMonitorBack.getIcon(),
FCPartsTexture.BlockInterface_Face.getIcon(),
CableBusTextures.PartMonitorSides.getIcon(),
CableBusTextures.PartMonitorSides.getIcon());
rh.setBounds(2, 2, 14, 14, 14, 16);
rh.renderInventoryBox(renderer);
rh.setBounds(5, 5, 12, 11, 11, 13);
rh.renderInventoryBox(renderer);
rh.setBounds(5, 5, 13, 11, 11, 14);
rh.renderInventoryBox(renderer);
this.customButtonDataObject = new FluidInterfaceButtons(false);
}
@MENetworkEventSubscribe
@@ -222,22 +159,6 @@ public class PartFluidInterface extends PartInterface implements IDualHost {
return fluidDuality.getTankInfo(from);
}
@Override
public boolean onPartActivate(final EntityPlayer player, final Vec3 pos) {
if (player.isSneaking()) {
return false;
}
if (Platform.isServer()) {
InventoryHandler.openGui(
player,
this.getHost().getTile().getWorldObj(),
new BlockPos(this.getHost().getTile()),
Objects.requireNonNull(this.getSide()),
GuiType.DUAL_INTERFACE);
}
return true;
}
@Override
public void onFluidInventoryChanged(IAEFluidTank inv, int slot) {
saveChanges();
@@ -283,4 +204,38 @@ public class PartFluidInterface extends PartInterface implements IDualHost {
return fluid;
}
}
@Override
public ItemStack getPrimaryGuiIcon() {
return ItemAndBlockHolder.FLUID_INTERFACE.stack();
}
@Override
public void writeCustomButtonData() {}
@Override
public void readCustomButtonData() {}
@Override
public void initCustomButtons(int guiLeft, int guiTop, int xSize, int ySize, int xOffset, int yOffset,
List<GuiButton> buttonList) {
if (customButtonDataObject != null)
customButtonDataObject.initCustomButtons(guiLeft, guiTop, xSize, ySize, xOffset, yOffset, buttonList);
}
@SideOnly(Side.CLIENT)
@Override
public boolean actionPerformedCustomButtons(final GuiButton btn) {
return customButtonDataObject != null && customButtonDataObject.actionPerformedCustomButtons(btn);
}
@Override
public ICustomButtonDataObject getDataObject() {
return customButtonDataObject;
}
@Override
public void setDataObject(ICustomButtonDataObject dataObject) {
customButtonDataObject = dataObject;
}
}
@@ -1,25 +1,23 @@
package com.glodblock.github.common.parts;
import java.util.Objects;
import java.util.List;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.IIcon;
import net.minecraft.util.Vec3;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTankInfo;
import com.glodblock.github.client.FluidInterfaceButtons;
import com.glodblock.github.common.item.ItemFluidPacket;
import com.glodblock.github.inventory.AEFluidInventory;
import com.glodblock.github.inventory.IAEFluidTank;
import com.glodblock.github.inventory.IDualHost;
import com.glodblock.github.inventory.InventoryHandler;
import com.glodblock.github.inventory.gui.GuiType;
import com.glodblock.github.loader.ItemAndBlockHolder;
import com.glodblock.github.util.BlockPos;
import com.glodblock.github.util.DualityFluidInterface;
import com.glodblock.github.util.Util;
@@ -30,20 +28,25 @@ import appeng.api.networking.ticking.TickingRequest;
import appeng.api.storage.data.IAEFluidStack;
import appeng.api.util.IConfigManager;
import appeng.helpers.DualityInterface;
import appeng.helpers.ICustomButtonDataObject;
import appeng.helpers.ICustomButtonProvider;
import appeng.parts.p2p.PartP2PInterface;
import appeng.parts.p2p.PartP2PTunnel;
import appeng.tile.inventory.AppEngInternalAEInventory;
import appeng.util.Platform;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class PartFluidP2PInterface extends PartP2PInterface implements IDualHost {
public class PartFluidP2PInterface extends PartP2PInterface implements IDualHost, ICustomButtonProvider {
private final DualityFluidInterface dualityFluid = new DualityFluidInterface(this.getProxy(), this);
private final AppEngInternalAEInventory config = new AppEngInternalAEInventory(this, 6);
private ICustomButtonDataObject customButtonDataObject;
public PartFluidP2PInterface(ItemStack is) {
super(is);
this.customButtonDataObject = new FluidInterfaceButtons(false);
}
@Override
@@ -62,28 +65,6 @@ public class PartFluidP2PInterface extends PartP2PInterface implements IDualHost
return newTunnel;
}
@Override
public boolean onPartActivate(final EntityPlayer p, final Vec3 pos) {
if (super.onPartActivate(p, pos)) {
return true;
}
if (p.isSneaking()) {
return false;
}
if (Platform.isServer()) {
InventoryHandler.openGui(
p,
this.getHost().getTile().getWorldObj(),
new BlockPos(this.getHost().getTile()),
Objects.requireNonNull(this.getSide()),
GuiType.DUAL_INTERFACE);
}
return true;
}
@Override
protected void copySettings(final PartP2PTunnel<?> from) {
if (from instanceof PartFluidP2PInterface fromInterface) {
@@ -186,4 +167,38 @@ public class PartFluidP2PInterface extends PartP2PInterface implements IDualHost
dualityFluid.getInternalFluid().setFluidInSlot(id, fluid);
}
}
@Override
public ItemStack getPrimaryGuiIcon() {
return ItemAndBlockHolder.FLUID_INTERFACE.stack();
}
@Override
public void writeCustomButtonData() {}
@Override
public void readCustomButtonData() {}
@Override
public void initCustomButtons(int guiLeft, int guiTop, int xSize, int ySize, int xOffset, int yOffset,
List<GuiButton> buttonList) {
if (customButtonDataObject != null)
customButtonDataObject.initCustomButtons(guiLeft, guiTop, xSize, ySize, xOffset, yOffset, buttonList);
}
@SideOnly(Side.CLIENT)
@Override
public boolean actionPerformedCustomButtons(final GuiButton btn) {
return customButtonDataObject != null && customButtonDataObject.actionPerformedCustomButtons(btn);
}
@Override
public ICustomButtonDataObject getDataObject() {
return customButtonDataObject;
}
@Override
public void setDataObject(ICustomButtonDataObject dataObject) {
customButtonDataObject = dataObject;
}
}
@@ -5,6 +5,7 @@ import java.util.List;
import javax.annotation.Nullable;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
@@ -13,6 +14,7 @@ import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTankInfo;
import com.glodblock.github.client.FluidInterfaceButtons;
import com.glodblock.github.common.item.ItemFluidPacket;
import com.glodblock.github.inventory.AEFluidInventory;
import com.glodblock.github.inventory.IAEFluidTank;
@@ -32,17 +34,23 @@ import appeng.api.networking.ticking.TickRateModulation;
import appeng.api.networking.ticking.TickingRequest;
import appeng.api.storage.data.IAEFluidStack;
import appeng.api.util.IConfigManager;
import appeng.helpers.ICustomButtonDataObject;
import appeng.helpers.ICustomButtonProvider;
import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType;
import appeng.tile.inventory.AppEngInternalAEInventory;
import appeng.tile.misc.TileInterface;
import cpw.mods.fml.common.network.ByteBufUtils;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import io.netty.buffer.ByteBuf;
public class TileFluidInterface extends TileInterface implements IDualHost {
public class TileFluidInterface extends TileInterface implements IDualHost, ICustomButtonProvider {
private final IConfigManager dualityConfigManager = getInterfaceDuality().getConfigManager();
private ICustomButtonDataObject customButtonDataObject;
private final DualityFluidInterface fluidDuality = new DualityFluidInterface(this.getProxy(), this) {
@Override
@@ -59,6 +67,7 @@ public class TileFluidInterface extends TileInterface implements IDualHost {
public TileFluidInterface() {
super.getInterfaceDuality().getConfigManager().registerSetting(Settings.SIDELESS_MODE, SidelessMode.SIDELESS);
this.customButtonDataObject = new FluidInterfaceButtons(true);
}
@MENetworkEventSubscribe
@@ -226,4 +235,38 @@ public class TileFluidInterface extends TileInterface implements IDualHost {
this.fluidDuality.addDrops(drops);
super.getDrops(w, x, y, z, drops);
}
@Override
public ItemStack getPrimaryGuiIcon() {
return ItemAndBlockHolder.INTERFACE.stack();
}
@Override
public void writeCustomButtonData() {}
@Override
public void readCustomButtonData() {}
@Override
public void initCustomButtons(int guiLeft, int guiTop, int xSize, int ySize, int xOffset, int yOffset,
List<GuiButton> buttonList) {
if (customButtonDataObject != null)
customButtonDataObject.initCustomButtons(guiLeft, guiTop, xSize, ySize, xOffset, yOffset, buttonList);
}
@SideOnly(Side.CLIENT)
@Override
public boolean actionPerformedCustomButtons(final GuiButton btn) {
return customButtonDataObject != null && customButtonDataObject.actionPerformedCustomButtons(btn);
}
@Override
public ICustomButtonDataObject getDataObject() {
return customButtonDataObject;
}
@Override
public void setDataObject(ICustomButtonDataObject dataObject) {
customButtonDataObject = dataObject;
}
}
@@ -8,7 +8,6 @@ import net.minecraftforge.common.util.ForgeDirection;
import com.glodblock.github.FluidCraft;
import com.glodblock.github.inventory.gui.GuiType;
import com.glodblock.github.network.CPacketSwitchGuis;
import com.glodblock.github.util.BlockPos;
import appeng.core.sync.GuiBridge;
@@ -19,10 +18,6 @@ import cpw.mods.fml.relauncher.SideOnly;
public class InventoryHandler implements IGuiHandler {
public static void switchGui(Object guiType) {
FluidCraft.proxy.netHandler.sendToServer(new CPacketSwitchGuis());
}
public static void openGui(EntityPlayer player, World world, BlockPos pos, ForgeDirection face, Object guiType) {
if (Platform.isClient()) {
return;
@@ -6,7 +6,6 @@ import javax.annotation.Nullable;
import net.minecraft.entity.player.EntityPlayer;
import com.glodblock.github.client.gui.GuiDualInterface;
import com.glodblock.github.client.gui.GuiFluidAutoFiller;
import com.glodblock.github.client.gui.GuiFluidInterface;
import com.glodblock.github.client.gui.GuiFluidPacketDecoder;
@@ -20,7 +19,6 @@ 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.GuiSuperStockReplenisher;
import com.glodblock.github.client.gui.container.ContainerDualInterface;
import com.glodblock.github.client.gui.container.ContainerFluidAutoFiller;
import com.glodblock.github.client.gui.container.ContainerFluidInterface;
import com.glodblock.github.client.gui.container.ContainerFluidPacketDecoder;
@@ -47,7 +45,6 @@ import com.google.common.collect.ImmutableList;
import appeng.api.storage.ITerminalHost;
import appeng.container.implementations.ContainerLevelEmitter;
import appeng.helpers.IInterfaceHost;
import appeng.helpers.ILevelEmitter;
public enum GuiType {
@@ -104,19 +101,6 @@ public enum GuiType {
}
}),
DUAL_INTERFACE(new TileOrPartGuiFactory<>(IInterfaceHost.class) {
@Override
protected Object createServerGui(EntityPlayer player, IInterfaceHost inv) {
return new ContainerDualInterface(player.inventory, inv);
}
@Override
protected Object createClientGui(EntityPlayer player, IInterfaceHost inv) {
return new GuiDualInterface(player.inventory, inv);
}
}),
DUAL_INTERFACE_FLUID(new TileOrPartGuiFactory<>(IDualHost.class) {
@Override
@@ -1,7 +1,7 @@
package com.glodblock.github.inventory.item;
import static appeng.util.Platform.nextEnum;
import static com.glodblock.github.inventory.UltraTerminalButtons.restockItems;
import static com.glodblock.github.client.UltraTerminalButtons.restockItems;
import static com.glodblock.github.inventory.item.WirelessMagnet.modeKey;
import java.util.Objects;
@@ -5,6 +5,7 @@ import net.minecraft.network.Packet;
import net.minecraft.world.World;
import com.glodblock.github.FluidCraft;
import com.glodblock.github.network.CPacketCustomButtonUpdate;
import com.glodblock.github.network.CPacketDumpTank;
import com.glodblock.github.network.CPacketFluidPatternTermBtns;
import com.glodblock.github.network.CPacketLevelMaintainer;
@@ -65,6 +66,11 @@ public class ChannelLoader implements Runnable {
SPacketCustomButtonUpdate.class,
id++,
Side.CLIENT);
netHandler.registerMessage(
new CPacketCustomButtonUpdate.Handler(),
CPacketCustomButtonUpdate.class,
id++,
Side.SERVER);
}
public static void sendPacketToAllPlayers(Packet packet, World world) {
@@ -0,0 +1,45 @@
package com.glodblock.github.network;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.inventory.Container;
import com.glodblock.github.FluidCraft;
import com.glodblock.github.client.FluidInterfaceButtons;
import com.glodblock.github.common.tile.TileFluidInterface;
import appeng.api.config.Settings;
import appeng.api.config.SidelessMode;
import appeng.container.AEBaseContainer;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import io.netty.buffer.ByteBuf;
public class CPacketCustomButtonUpdate implements IMessage {
public CPacketCustomButtonUpdate() {}
@Override
public void fromBytes(ByteBuf buf) {}
@Override
public void toBytes(ByteBuf buf) {}
public static class Handler implements IMessageHandler<CPacketCustomButtonUpdate, IMessage> {
@Override
public IMessage onMessage(CPacketCustomButtonUpdate message, MessageContext ctx) {
final Container c = ctx.getServerHandler().playerEntity.openContainer;
final EntityPlayerMP player = ctx.getServerHandler().playerEntity;
if (c instanceof AEBaseContainer abc && abc.getTarget() instanceof TileFluidInterface tfi) {
if (tfi.getDataObject() instanceof FluidInterfaceButtons fib) {
fib.setSidelessMode((SidelessMode) tfi.getConfigManager().getSetting(Settings.SIDELESS_MODE));
FluidCraft.proxy.netHandler.sendTo(new SPacketCustomButtonUpdate(fib), player);
}
}
return null;
}
}
}
@@ -5,9 +5,9 @@ import net.minecraft.inventory.Container;
import net.minecraftforge.common.util.ForgeDirection;
import com.glodblock.github.FluidCraft;
import com.glodblock.github.client.UltraTerminalButtons;
import com.glodblock.github.client.gui.container.ContainerMagnetFilter;
import com.glodblock.github.inventory.InventoryHandler;
import com.glodblock.github.inventory.UltraTerminalButtons;
import com.glodblock.github.inventory.gui.GuiType;
import com.glodblock.github.inventory.item.IWirelessMagnetFilter;
import com.glodblock.github.util.BlockPos;
@@ -13,18 +13,21 @@ import org.apache.commons.lang3.tuple.ImmutablePair;
import com.glodblock.github.FluidCraft;
import com.glodblock.github.common.item.ItemWirelessUltraTerminal;
import com.glodblock.github.common.parts.PartFluidInterface;
import com.glodblock.github.common.parts.PartFluidP2PInterface;
import com.glodblock.github.common.tile.TileFluidInterface;
import com.glodblock.github.common.tile.TileSuperStockReplenisher;
import com.glodblock.github.inventory.InventoryHandler;
import com.glodblock.github.inventory.gui.GuiType;
import com.glodblock.github.inventory.item.IWirelessTerminal;
import com.glodblock.github.util.BlockPos;
import com.glodblock.github.util.UltraTerminalModes;
import com.glodblock.github.util.Util;
import appeng.container.AEBaseContainer;
import appeng.container.ContainerOpenContext;
import appeng.core.sync.GuiBridge;
import appeng.container.IContainerSubGui;
import appeng.container.PrimaryGui;
import appeng.helpers.ICustomButtonProvider;
import appeng.util.Platform;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
@@ -87,33 +90,29 @@ public class CPacketSwitchGuis implements IMessage {
}
}
} else {
// open new terminal //TODO in world stuff
if (cont instanceof AEBaseContainer aeBaseContainer) {
final PrimaryGui pGui = aeBaseContainer.getPrimaryGui();
ContainerOpenContext context = aeBaseContainer.getOpenContext();
if (context == null) return null;
TileEntity te = context.getTile();
Object guiType = GuiType.GUI_SUPER_STOCK_REPLENISHER;
if (te != null) {
if (guiType instanceof GuiType gt) {
InventoryHandler.openGui(
player,
player.worldObj,
new BlockPos(te),
Objects.requireNonNull(context.getSide()),
gt);
} else if (guiType instanceof GuiBridge gb) Platform.openGUI(player, te, context.getSide(), gb);
} else if (aeBaseContainer.getTarget() instanceof IWirelessTerminal wt) {
if (guiType instanceof GuiType gt) {
InventoryHandler.openGui(
player,
player.worldObj,
new BlockPos(
wt.getInventorySlot(),
Util.GuiHelper.encodeType(0, Util.GuiHelper.GuiType.ITEM),
0),
Objects.requireNonNull(context.getSide()),
gt);
} else if (guiType instanceof GuiBridge gb) Platform.openGUI(player, null, null, gb);
Object target = aeBaseContainer.getTarget();
GuiType guiType;
if (te instanceof TileSuperStockReplenisher) guiType = GuiType.GUI_SUPER_STOCK_REPLENISHER;
else if (te instanceof TileFluidInterface || target instanceof PartFluidInterface
|| target instanceof PartFluidP2PInterface)
guiType = GuiType.DUAL_INTERFACE_FLUID;
else return null;
InventoryHandler.openGui(
player,
player.worldObj,
new BlockPos(te),
Objects.requireNonNull(context.getSide()),
guiType);
if (player.openContainer instanceof IContainerSubGui sg) {
sg.setPrimaryGui(pGui);
}
}
}
@@ -1,8 +1,8 @@
package com.glodblock.github.util;
import static com.glodblock.github.client.UltraTerminalButtons.restockItems;
import static com.glodblock.github.common.item.ItemBaseWirelessTerminal.infinityBoosterCard;
import static com.glodblock.github.common.item.ItemBaseWirelessTerminal.infinityEnergyCard;
import static com.glodblock.github.inventory.UltraTerminalButtons.restockItems;
import static com.glodblock.github.util.Util.DimensionalCoordSide.hasEnergyCard;
import static net.minecraft.init.Items.glass_bottle;