item renamer (#288)

Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com>
This commit is contained in:
lordIcocainandMaya authored and GitHub committed 2025-05-06 22:47:25 +00:00
1 parent f72dde88e6
commit ddd046fa15
6 files changed
+217 -1

No files matched your search

@@ -0,0 +1,55 @@
package com.glodblock.github.client.gui;
import net.minecraft.entity.player.InventoryPlayer;
import org.lwjgl.input.Keyboard;
import com.glodblock.github.FluidCraft;
import com.glodblock.github.common.item.ItemWirelessUltraTerminal;
import com.glodblock.github.common.parts.PartFluidPatternTerminal;
import com.glodblock.github.common.parts.PartFluidPatternTerminalEx;
import com.glodblock.github.common.parts.PartFluidTerminal;
import com.glodblock.github.common.parts.PartLevelTerminal;
import com.glodblock.github.inventory.gui.GuiType;
import com.glodblock.github.inventory.item.IWirelessTerminal;
import com.glodblock.github.inventory.item.WirelessLevelTerminalInventory;
import com.glodblock.github.inventory.item.WirelessPatternTerminalInventory;
import com.glodblock.github.network.SPacketPatternItemRenamer;
import appeng.api.storage.ITerminalHost;
public class GuiPatternItemRenamer extends appeng.client.gui.implementations.GuiPatternItemRenamer {
private GuiType originalGui;
public GuiPatternItemRenamer(InventoryPlayer ip, ITerminalHost p) {
super(ip, p);
}
@Override
protected void setOriginGUI(Object target) {
if (target instanceof PartFluidPatternTerminal) {
this.originalGui = GuiType.FLUID_PATTERN_TERMINAL;
} else if (target instanceof PartFluidPatternTerminalEx) {
this.originalGui = GuiType.FLUID_PATTERN_TERMINAL_EX;
} else if (target instanceof PartFluidTerminal) {
this.originalGui = GuiType.FLUID_TERMINAL;
} else if (target instanceof PartLevelTerminal) {
originalGui = GuiType.LEVEL_TERMINAL;
} else if (target instanceof IWirelessTerminal terminal && terminal.isUniversal(target)) {
this.originalGui = ItemWirelessUltraTerminal.readMode(terminal.getItemStack());
} else if (target instanceof WirelessPatternTerminalInventory) {
this.originalGui = GuiType.FLUID_TERMINAL;
} else if (target instanceof WirelessLevelTerminalInventory) {
originalGui = GuiType.WIRELESS_LEVEL_TERMINAL;
}
}
@Override
protected void keyTyped(final char character, final int key) {
if (key == Keyboard.KEY_RETURN || key == Keyboard.KEY_NUMPADENTER) {
FluidCraft.proxy.netHandler
.sendToServer(new SPacketPatternItemRenamer(originalGui, getText(), getValueIndex()));
} else super.keyTyped(character, key);
}
}
@@ -416,6 +416,9 @@ public abstract class FCGuiMonitor<T extends IAEStack<T>> extends FCBaseMEGui
if (slot instanceof OptionalSlotFake || slot instanceof SlotFakeCraftingMatrix) {
if (slot.getHasStack()) {
InventoryAction action = InventoryAction.SET_PATTERN_VALUE;
if (isCtrlKeyDown()) {
action = InventoryAction.RENAME_PATTERN_ITEM;
}
IAEItemStack stack = AEItemStack.create(slot.getStack());
((AEBaseContainer) this.inventorySlots).setTargetStack(stack);
for (int i = 0; i < this.inventorySlots.inventorySlots.size(); i++) {
@@ -34,6 +34,7 @@ import com.glodblock.github.client.gui.GuiLevelMaintainer;
import com.glodblock.github.client.gui.GuiLevelTerminal;
import com.glodblock.github.client.gui.GuiLevelWireless;
import com.glodblock.github.client.gui.GuiOCPatternEditor;
import com.glodblock.github.client.gui.GuiPatternItemRenamer;
import com.glodblock.github.client.gui.GuiPatternMulti;
import com.glodblock.github.client.gui.GuiPatternValueAmount;
import com.glodblock.github.client.gui.GuiRenamer;
@@ -84,6 +85,7 @@ import com.google.common.collect.ImmutableList;
import appeng.api.storage.ITerminalHost;
import appeng.container.implementations.ContainerCraftAmount;
import appeng.container.implementations.ContainerCraftingStatus;
import appeng.container.implementations.ContainerPatternItemRenamer;
import appeng.container.implementations.ContainerPriority;
import appeng.helpers.IInterfaceHost;
import appeng.helpers.IPriorityHost;
@@ -527,6 +529,19 @@ public enum GuiType {
protected Object createClientGui(EntityPlayer player, ITerminalHost inv) {
return new GuiPatternMulti(player.inventory, inv);
}
}),
GUI_PATTERN_ITEM_RENAMER(new PartOrItemGuiFactory<>(ITerminalHost.class) {
@Override
protected Object createServerGui(EntityPlayer player, ITerminalHost inv) {
return new ContainerPatternItemRenamer(player.inventory, inv);
}
@Override
protected Object createClientGui(EntityPlayer player, ITerminalHost inv) {
return new GuiPatternItemRenamer(player.inventory, inv);
}
});
public static final List<GuiType> VALUES = ImmutableList.copyOf(values());
@@ -23,6 +23,7 @@ import com.glodblock.github.network.SPacketFluidUpdate;
import com.glodblock.github.network.SPacketLevelTerminalUpdate;
import com.glodblock.github.network.SPacketMEFluidInvUpdate;
import com.glodblock.github.network.SPacketMEItemInvUpdate;
import com.glodblock.github.network.SPacketPatternItemRenamer;
import com.glodblock.github.network.SPacketSetItemAmount;
import com.glodblock.github.network.SPacketStringUpdate;
import com.glodblock.github.network.SPacketSwitchBack;
@@ -81,6 +82,11 @@ public class ChannelLoader implements Runnable {
Side.SERVER);
netHandler
.registerMessage(new CPacketPatternMultiSet.Handler(), CPacketPatternMultiSet.class, id++, Side.SERVER);
netHandler.registerMessage(
new SPacketPatternItemRenamer.Handler(),
SPacketPatternItemRenamer.class,
id++,
Side.SERVER);
}
public static void sendPacketToAllPlayers(Packet packet, World world) {
@@ -24,6 +24,7 @@ import appeng.api.storage.data.IAEItemStack;
import appeng.container.AEBaseContainer;
import appeng.container.ContainerOpenContext;
import appeng.container.implementations.ContainerCraftAmount;
import appeng.container.implementations.ContainerPatternItemRenamer;
import appeng.helpers.InventoryAction;
import appeng.util.item.AEItemStack;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
@@ -187,7 +188,36 @@ public class CPacketInventoryAction implements IMessage {
cpm.detectAndSendChanges();
}
}
} else {
} else if (message.action == InventoryAction.RENAME_PATTERN_ITEM) {
final ContainerOpenContext context = baseContainer.getOpenContext();
if (context != null) {
final TileEntity te = context.getTile();
if (te != null) {
InventoryHandler.openGui(
sender,
te.getWorldObj(),
new BlockPos(te),
Objects.requireNonNull(baseContainer.getOpenContext().getSide()),
GuiType.GUI_PATTERN_ITEM_RENAMER);
} else if (target instanceof IWirelessTerminal wt) {
InventoryHandler.openGui(
sender,
sender.worldObj,
new BlockPos(
wt.getInventorySlot(),
Util.GuiHelper.encodeType(0, Util.GuiHelper.GuiType.ITEM),
0),
ForgeDirection.UNKNOWN,
GuiType.GUI_PATTERN_ITEM_RENAMER);
}
if (sender.openContainer instanceof ContainerPatternItemRenamer cpir) {
if (baseContainer.getTargetStack() != null) {
cpir.getPatternValue().putStack(baseContainer.getTargetStack().getItemStack());
}
cpir.detectAndSendChanges();
}
}
}else {
baseContainer.doAction(sender, message.action, message.slot, message.id);
}
}
@@ -0,0 +1,107 @@
package com.glodblock.github.network;
import java.util.Objects;
import javax.annotation.Nullable;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
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.IWirelessTerminal;
import com.glodblock.github.util.BlockPos;
import com.glodblock.github.util.Util;
import appeng.container.ContainerOpenContext;
import appeng.container.implementations.ContainerPatternItemRenamer;
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 SPacketPatternItemRenamer implements IMessage {
private GuiType guiType;
private String name = "";
private int valueIndex;
public SPacketPatternItemRenamer() {}
public SPacketPatternItemRenamer(GuiType guiType, String text, int valIndex) {
this.guiType = guiType;
name = text;
valueIndex = valIndex;
}
@Override
public void toBytes(ByteBuf buf) {
buf.writeByte(guiType != null ? guiType.ordinal() : 0);
buf.writeInt(valueIndex);
buf.writeInt(name.length());
for (int i = 0; i < name.length(); i++) {
buf.writeChar(name.charAt(i));
}
}
@Override
public void fromBytes(ByteBuf buf) {
guiType = GuiType.getByOrdinal(buf.readByte());
valueIndex = buf.readInt();
int leName = buf.readInt();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < leName; i++) {
sb.append(buf.readChar());
}
name = sb.toString();
}
public static class Handler implements IMessageHandler<SPacketPatternItemRenamer, IMessage> {
@Nullable
@Override
public IMessage onMessage(SPacketPatternItemRenamer message, MessageContext ctx) {
EntityPlayerMP player = ctx.getServerHandler().playerEntity;
if (player.openContainer instanceof ContainerPatternItemRenamer cpv) {
ContainerOpenContext context = cpv.getOpenContext();
if (context == null) {
return null;
}
TileEntity te = context.getTile();
if (te != null) {
InventoryHandler.openGui(
player,
player.worldObj,
new BlockPos(te),
Objects.requireNonNull(context.getSide()),
message.guiType);
} else if (cpv.getTarget() instanceof IWirelessTerminal iwt) {
InventoryHandler.openGui(
player,
player.worldObj,
new BlockPos(
iwt.getInventorySlot(),
Util.GuiHelper.encodeType(0, Util.GuiHelper.GuiType.ITEM),
0),
Objects.requireNonNull(context.getSide()),
message.guiType);
}
if (player.openContainer instanceof FCContainerEncodeTerminal) {
Slot slot = player.openContainer.getSlot(message.valueIndex);
if (slot != null && slot.getHasStack()) {
ItemStack nextStack = slot.getStack().copy();
nextStack.setRepairCost(2);
nextStack.setStackDisplayName(message.name);
slot.putStack(nextStack);
}
}
}
return null;
}
}
}