Consolidated ContainerHelpers.

This commit is contained in:
Sebastian Hartte
2020-06-14 21:36:37 +02:00
parent d43e8d19dd
commit 0232e83196
44 changed files with 92 additions and 327 deletions
@@ -182,7 +182,7 @@ public final class ContainerLocator {
buf.writeByte(side.ordinal());
break;
case BLOCK:
buf.writeByte(22);
buf.writeByte(2);
buf.writeInt(dimensionId);
buf.writeBlockPos(blockPos);
break;
@@ -1,33 +0,0 @@
package appeng.container.helper;
import appeng.api.config.SecurityPermissions;
import appeng.api.networking.IGrid;
import appeng.api.networking.IGridNode;
import appeng.api.networking.energy.IEnergyGrid;
import appeng.api.networking.security.IActionHost;
import appeng.api.networking.security.ISecurityGrid;
import appeng.util.Platform;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.util.text.TranslationTextComponent;
abstract class AbstractContainerHelper {
private final SecurityPermissions requiredPermission;
public AbstractContainerHelper(SecurityPermissions requiredPermission) {
this.requiredPermission = requiredPermission;
}
protected boolean checkPermission(PlayerEntity player, Object accessInterface) {
if (requiredPermission != null)
{
return Platform.checkPermissions(player, accessInterface, requiredPermission, true);
}
return true;
}
}
@@ -1,107 +0,0 @@
package appeng.container.helper;
import appeng.api.config.SecurityPermissions;
import appeng.api.parts.IPart;
import appeng.api.parts.IPartHost;
import appeng.container.AEBaseContainer;
import appeng.container.ContainerLocator;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.inventory.container.INamedContainerProvider;
import net.minecraft.inventory.container.SimpleNamedContainerProvider;
import net.minecraft.network.PacketBuffer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.ITextComponent;
import net.minecraftforge.fml.network.NetworkHooks;
/**
* Helper for containers that can be opened for {@link appeng.api.parts.IPart parts} that are attached
* to a {@link appeng.api.parts.IPartHost part host}.
*
* @param <C>
* @param <P> The type of part this container is for.
*/
public final class PartContainerHelper<C extends AEBaseContainer, P extends IPart> extends AbstractContainerHelper {
private final Class<P> partClass;
private final ContainerFactory<P, C> factory;
public PartContainerHelper(ContainerFactory<P, C> factory, Class<P> partClass) {
this(factory, partClass, null);
}
public PartContainerHelper(ContainerFactory<P, C> factory, Class<P> partClass, SecurityPermissions requiredPermission) {
super(requiredPermission);
this.partClass = partClass;
this.factory = factory;
}
/**
* Opens a container that is based around a single tile entity.
* The tile entity's position is encoded in the packet buffer.
*/
public C fromNetwork(int windowId, PlayerInventory inv, PacketBuffer packetBuf) {
BlockPos pos = packetBuf.readBlockPos();
TileEntity te = inv.player.world.getTileEntity(pos);
if (partClass.isInstance(te)) {
return factory.create(windowId, inv, partClass.cast(te));
}
return null;
}
public boolean open(PlayerEntity player, ContainerLocator locator) {
if (!(player instanceof ServerPlayerEntity)) {
// Cannot open containers on the client or for non-players
// FIXME logging?
return false;
}
if (!locator.hasBlockPos() || !locator.hasSide()) {
return false; // No block was clicked or the side is unknown
// FIXME: If no side is provided, should be try with INTERNAL???
}
TileEntity tileEntity = player.world.getTileEntity(locator.getBlockPos());
if (!(tileEntity instanceof IPartHost)) {
// FIXME logging?
return false; // Wrong tile entity at block position
}
IPartHost partHost = (IPartHost) tileEntity;
IPart part = partHost.getPart(locator.getSide());
if (!(partClass.isInstance(part))) {
// FIXME logging?
return false;
}
P actualPart = partClass.cast(tileEntity);
if (!checkPermission(player, actualPart)) {
return false;
}
// Use block name at position
// FIXME: this is not right, we'd need to check the part's item stack, or custom naming interface impl
ITextComponent title = player.world.getBlockState(locator.getBlockPos()).getBlock().getNameTextComponent();
INamedContainerProvider container = new SimpleNamedContainerProvider(
(wnd, p, pl) -> {
C c = factory.create(wnd, p, actualPart);
// Set the original locator on the opened server-side container for it to more
// easily remember how to re-open after being closed.
c.setLocator(locator);
return c;
}, title
);
NetworkHooks.openGui((ServerPlayerEntity) player, container, locator.getBlockPos());
return true;
}
@FunctionalInterface
public interface ContainerFactory<T, C> {
C create(int windowId, PlayerInventory playerInv, T part);
}
}
@@ -1,91 +0,0 @@
package appeng.container.helper;
import appeng.api.config.SecurityPermissions;
import appeng.container.AEBaseContainer;
import appeng.container.ContainerLocator;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.inventory.container.INamedContainerProvider;
import net.minecraft.inventory.container.SimpleNamedContainerProvider;
import net.minecraft.network.PacketBuffer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.ITextComponent;
import net.minecraftforge.fml.network.NetworkHooks;
public final class TileContainerHelper<C extends AEBaseContainer, T extends TileEntity> extends AbstractContainerHelper {
private final Class<T> tileEntityClass;
private final ContainerFactory<T, C> factory;
private final SecurityPermissions requiredPermission;
public TileContainerHelper(ContainerFactory<T, C> factory, Class<T> tileEntityClass) {
this(factory, tileEntityClass, null);
}
public TileContainerHelper(ContainerFactory<T, C> factory, Class<T> tileEntityClass, SecurityPermissions requiredPermission) {
super(requiredPermission);
this.tileEntityClass = tileEntityClass;
this.factory = factory;
this.requiredPermission = requiredPermission;
}
/**
* Opens a container that is based around a single tile entity.
* The tile entity's position is encoded in the packet buffer.
*/
public C fromNetwork(int windowId, PlayerInventory inv, PacketBuffer packetBuf) {
BlockPos pos = packetBuf.readBlockPos();
TileEntity te = inv.player.world.getTileEntity(pos);
if (tileEntityClass.isInstance(te)) {
return factory.create(windowId, inv, tileEntityClass.cast(te));
}
return null;
}
public boolean open(PlayerEntity player, ContainerLocator locator) {
if (!(player instanceof ServerPlayerEntity)) {
// Cannot open containers on the client or for non-players
return false;
}
if (!locator.hasBlockPos()) {
return false; // No block was clicked
}
TileEntity tileEntity = player.world.getTileEntity(locator.getBlockPos());
if (!tileEntityClass.isInstance(tileEntity)) {
return false; // Wrong tile entity at block position
}
T te = tileEntityClass.cast(tileEntity);
if (!checkPermission(player, te)) {
return false;
}
// Use block name at position
ITextComponent title = player.world.getBlockState(locator.getBlockPos()).getBlock().getNameTextComponent();
INamedContainerProvider container = new SimpleNamedContainerProvider(
(wnd, p, pl) -> {
C c = factory.create(wnd, p, te);
// Set the original locator on the opened server-side container for it to more
// easily remember how to re-open after being closed.
c.setLocator(locator);
return c;
}, title
);
NetworkHooks.openGui((ServerPlayerEntity) player, container, locator.getBlockPos());
return true;
}
@FunctionalInterface
public interface ContainerFactory<T, C> {
C create(int windowId, PlayerInventory playerInv, T tileEntity);
}
}
@@ -22,7 +22,7 @@ package appeng.container.implementations;
import java.util.Iterator;
import appeng.container.ContainerLocator;
import appeng.container.helper.TileContainerHelper;
import appeng.container.implementations.ContainerHelper;
import appeng.util.EnumCycler;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.ServerPlayerEntity;
@@ -60,8 +60,8 @@ public class ContainerCellWorkbench extends ContainerUpgradeable
public static ContainerType<ContainerCellWorkbench> TYPE;
private static final TileContainerHelper<ContainerCellWorkbench, TileCellWorkbench> helper
= new TileContainerHelper<>(ContainerCellWorkbench::new, TileCellWorkbench.class);
private static final ContainerHelper<ContainerCellWorkbench, TileCellWorkbench> helper
= new ContainerHelper<>(ContainerCellWorkbench::new, TileCellWorkbench.class);
private final TileCellWorkbench workBench;
@GuiSync( 2 )
@@ -21,7 +21,7 @@ package appeng.container.implementations;
import appeng.api.config.SecurityPermissions;
import appeng.container.ContainerLocator;
import appeng.container.helper.TileContainerHelper;
import appeng.container.implementations.ContainerHelper;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
@@ -37,8 +37,8 @@ public class ContainerChest extends AEBaseContainer
public static ContainerType<ContainerChest> TYPE;
private static final TileContainerHelper<ContainerChest, TileChest> helper
= new TileContainerHelper<>(ContainerChest::new, TileChest.class, SecurityPermissions.BUILD);
private static final ContainerHelper<ContainerChest, TileChest> helper
= new ContainerHelper<>(ContainerChest::new, TileChest.class, SecurityPermissions.BUILD);
public ContainerChest( int id, final PlayerInventory ip, final TileChest chest )
{
@@ -24,7 +24,7 @@ import appeng.api.config.Settings;
import appeng.container.AEBaseContainer;
import appeng.container.ContainerLocator;
import appeng.container.guisync.GuiSync;
import appeng.container.helper.TileContainerHelper;
import appeng.container.implementations.ContainerHelper;
import appeng.container.interfaces.IProgressProvider;
import appeng.container.slot.SlotOutput;
import appeng.container.slot.SlotRestrictedInput;
@@ -42,8 +42,8 @@ public class ContainerCondenser extends AEBaseContainer implements IProgressProv
public static ContainerType<ContainerCondenser> TYPE;
private static final TileContainerHelper<ContainerCondenser, TileCondenser> helper
= new TileContainerHelper<>(ContainerCondenser::new, TileCondenser.class);
private static final ContainerHelper<ContainerCondenser, TileCondenser> helper
= new ContainerHelper<>(ContainerCondenser::new, TileCondenser.class);
private final TileCondenser condenser;
@GuiSync( 0 )
@@ -22,7 +22,6 @@ package appeng.container.implementations;
import javax.annotation.Nonnull;
import appeng.container.ContainerLocator;
import appeng.container.helper.ContainerHelper;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.ContainerType;
@@ -39,7 +39,6 @@ import appeng.container.AEBaseContainer;
import appeng.container.ContainerLocator;
import appeng.container.ContainerOpener;
import appeng.container.guisync.GuiSync;
import appeng.container.helper.ContainerHelper;
import appeng.core.AELog;
import appeng.core.sync.network.NetworkHandler;
import appeng.core.sync.packets.PacketMEInventoryUpdate;
@@ -24,7 +24,7 @@ import java.io.IOException;
import appeng.api.AEApi;
import appeng.api.config.SecurityPermissions;
import appeng.container.ContainerLocator;
import appeng.container.helper.TileContainerHelper;
import appeng.container.implementations.ContainerHelper;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
@@ -41,7 +41,6 @@ import appeng.api.storage.data.IAEItemStack;
import appeng.api.storage.data.IItemList;
import appeng.container.AEBaseContainer;
import appeng.container.guisync.GuiSync;
import appeng.core.AELog;
import appeng.core.sync.network.NetworkHandler;
import appeng.core.sync.packets.PacketMEInventoryUpdate;
import appeng.core.sync.packets.PacketValueConfig;
@@ -61,8 +60,8 @@ public class ContainerCraftingCPU extends AEBaseContainer implements IMEMonitorH
public static ContainerType<ContainerCraftingCPU> TYPE;
private static final TileContainerHelper<ContainerCraftingCPU, TileCraftingTile> helper
= new TileContainerHelper<>(ContainerCraftingCPU::new, TileCraftingTile.class, SecurityPermissions.CRAFT);
private static final ContainerHelper<ContainerCraftingCPU, TileCraftingTile> helper
= new ContainerHelper<>(ContainerCraftingCPU::new, TileCraftingTile.class, SecurityPermissions.CRAFT);
private final IItemList<IAEItemStack> list = AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ).createList();
private IGrid network;
@@ -25,7 +25,6 @@ import java.util.List;
import appeng.api.config.SecurityPermissions;
import appeng.container.ContainerLocator;
import appeng.container.helper.ContainerHelper;
import com.google.common.collect.ImmutableSet;
import net.minecraft.entity.player.PlayerEntity;
@@ -21,7 +21,6 @@ package appeng.container.implementations;
import appeng.api.config.SecurityPermissions;
import appeng.container.ContainerLocator;
import appeng.container.helper.ContainerHelper;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.IInventory;
@@ -20,7 +20,7 @@ package appeng.container.implementations;
import appeng.container.ContainerLocator;
import appeng.container.helper.TileContainerHelper;
import appeng.container.implementations.ContainerHelper;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
@@ -36,8 +36,8 @@ public class ContainerDrive extends AEBaseContainer
public static ContainerType<ContainerDrive> TYPE;
private static final TileContainerHelper<ContainerDrive, TileDrive> helper
= new TileContainerHelper<>(ContainerDrive::new, TileDrive.class);
private static final ContainerHelper<ContainerDrive, TileDrive> helper
= new ContainerHelper<>(ContainerDrive::new, TileDrive.class);
public static ContainerDrive fromNetwork(int windowId, PlayerInventory inv, PacketBuffer buf) {
return helper.fromNetwork(windowId, inv, buf);
@@ -20,7 +20,7 @@ package appeng.container.implementations;
import appeng.container.ContainerLocator;
import appeng.container.helper.PartContainerHelper;
import appeng.container.implementations.ContainerHelper;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.ContainerType;
@@ -45,8 +45,8 @@ public class ContainerFormationPlane extends ContainerUpgradeable
public static ContainerType<ContainerFormationPlane> TYPE;
private static final PartContainerHelper<ContainerFormationPlane, PartFormationPlane> helper
= new PartContainerHelper<>(ContainerFormationPlane::new, PartFormationPlane.class, SecurityPermissions.BUILD);
private static final ContainerHelper<ContainerFormationPlane, PartFormationPlane> helper
= new ContainerHelper<>(ContainerFormationPlane::new, PartFormationPlane.class, SecurityPermissions.BUILD);
public static ContainerFormationPlane fromNetwork(int windowId, PlayerInventory inv, PacketBuffer buf) {
return helper.fromNetwork(windowId, inv, buf);
@@ -20,7 +20,7 @@ package appeng.container.implementations;
import appeng.container.ContainerLocator;
import appeng.container.helper.TileContainerHelper;
import appeng.container.implementations.ContainerHelper;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.ContainerType;
@@ -38,8 +38,8 @@ public class ContainerGrinder extends AEBaseContainer
public static ContainerType<ContainerGrinder> TYPE;
private static final TileContainerHelper<ContainerGrinder, TileGrinder> helper
= new TileContainerHelper<>(ContainerGrinder::new, TileGrinder.class);
private static final ContainerHelper<ContainerGrinder, TileGrinder> helper
= new ContainerHelper<>(ContainerGrinder::new, TileGrinder.class);
public static ContainerGrinder fromNetwork(int windowId, PlayerInventory inv, PacketBuffer buf) {
return helper.fromNetwork(windowId, inv, buf);
@@ -1,4 +1,4 @@
package appeng.container.helper;
package appeng.container.implementations;
import appeng.api.AEApi;
import appeng.api.config.SecurityPermissions;
@@ -12,6 +12,7 @@ import appeng.container.ContainerLocator;
import appeng.core.AELog;
import appeng.helpers.ICustomNameObject;
import appeng.helpers.WirelessTerminalGuiObject;
import appeng.util.Platform;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.entity.player.ServerPlayerEntity;
@@ -23,7 +24,6 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;
import net.minecraft.world.IWorld;
import net.minecraft.world.World;
import net.minecraftforge.fml.network.NetworkHooks;
@@ -33,18 +33,20 @@ import net.minecraftforge.fml.network.NetworkHooks;
*
* @param <C>
*/
public final class ContainerHelper<C extends AEBaseContainer, I> extends AbstractContainerHelper {
public final class ContainerHelper<C extends AEBaseContainer, I> {
private final Class<I> interfaceClass;
private final ContainerFactory<C, I> factory;
private final SecurityPermissions requiredPermission;
public ContainerHelper(ContainerFactory<C, I> factory, Class<I> interfaceClass) {
this(factory, interfaceClass, null);
}
public ContainerHelper(ContainerFactory<C, I> factory, Class<I> interfaceClass, SecurityPermissions requiredPermission) {
super(requiredPermission);
this.requiredPermission = requiredPermission;
this.interfaceClass = interfaceClass;
this.factory = factory;
}
@@ -119,9 +121,8 @@ public final class ContainerHelper<C extends AEBaseContainer, I> extends Abstrac
return getHostFromPlayerInventory(player, locator);
}
if (!locator.hasBlockPos() || !locator.hasSide()) {
return null; // No block was clicked or the side is unknown
// FIXME: If no side is provided, should be try with INTERNAL???
if (!locator.hasBlockPos()) {
return null; // No block was clicked
}
TileEntity tileEntity = player.world.getTileEntity(locator.getBlockPos());
@@ -129,7 +130,13 @@ public final class ContainerHelper<C extends AEBaseContainer, I> extends Abstrac
// The tile entity itself can host a terminal (i.e. Chest!)
if (interfaceClass.isInstance(tileEntity)) {
return interfaceClass.cast(tileEntity);
} else if (tileEntity instanceof IPartHost) {
}
if (!locator.hasSide()) {
return null;
}
if (tileEntity instanceof IPartHost) {
// But it could also be a part attached to the tile entity
IPartHost partHost = (IPartHost) tileEntity;
IPart part = partHost.getPart(locator.getSide());
@@ -187,4 +194,15 @@ public final class ContainerHelper<C extends AEBaseContainer, I> extends Abstrac
C create(int windowId, PlayerInventory playerInv, I accessObj);
}
private boolean checkPermission(PlayerEntity player, Object accessInterface) {
if (requiredPermission != null)
{
return Platform.checkPermissions(player, accessInterface, requiredPermission, true);
}
return true;
}
}
@@ -20,7 +20,7 @@ package appeng.container.implementations;
import appeng.container.ContainerLocator;
import appeng.container.helper.TileContainerHelper;
import appeng.container.implementations.ContainerHelper;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.ContainerType;
@@ -44,8 +44,8 @@ public class ContainerIOPort extends ContainerUpgradeable
public static ContainerType<ContainerIOPort> TYPE;
private static final TileContainerHelper<ContainerIOPort, TileIOPort> helper
= new TileContainerHelper<>(ContainerIOPort::new, TileIOPort.class, SecurityPermissions.BUILD);
private static final ContainerHelper<ContainerIOPort, TileIOPort> helper
= new ContainerHelper<>(ContainerIOPort::new, TileIOPort.class, SecurityPermissions.BUILD);
public static ContainerIOPort fromNetwork(int windowId, PlayerInventory inv, PacketBuffer buf) {
return helper.fromNetwork(windowId, inv, buf);
@@ -23,7 +23,7 @@ import appeng.api.AEApi;
import appeng.api.definitions.IItemDefinition;
import appeng.container.ContainerLocator;
import appeng.container.guisync.GuiSync;
import appeng.container.helper.TileContainerHelper;
import appeng.container.implementations.ContainerHelper;
import appeng.container.interfaces.IProgressProvider;
import appeng.container.slot.SlotOutput;
import appeng.container.slot.SlotRestrictedInput;
@@ -50,8 +50,8 @@ public class ContainerInscriber extends ContainerUpgradeable implements IProgres
public static ContainerType<ContainerInscriber> TYPE;
private static final TileContainerHelper<ContainerInscriber, TileInscriber> helper
= new TileContainerHelper<>(ContainerInscriber::new, TileInscriber.class);
private static final ContainerHelper<ContainerInscriber, TileInscriber> helper
= new ContainerHelper<>(ContainerInscriber::new, TileInscriber.class);
public static ContainerInscriber fromNetwork(int windowId, PlayerInventory inv, PacketBuffer buf) {
return helper.fromNetwork(windowId, inv, buf);
@@ -20,7 +20,6 @@ package appeng.container.implementations;
import appeng.container.ContainerLocator;
import appeng.container.helper.ContainerHelper;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
@@ -26,8 +26,6 @@ import java.util.Map.Entry;
import appeng.api.config.SecurityPermissions;
import appeng.container.ContainerLocator;
import appeng.container.helper.PartContainerHelper;
import appeng.container.helper.TileContainerHelper;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
@@ -68,8 +66,8 @@ public final class ContainerInterfaceTerminal extends AEBaseContainer
public static ContainerType<ContainerInterfaceTerminal> TYPE;
private static final PartContainerHelper<ContainerInterfaceTerminal, PartInterfaceTerminal> helper
= new PartContainerHelper<>(ContainerInterfaceTerminal::new, PartInterfaceTerminal.class, SecurityPermissions.BUILD);
private static final ContainerHelper<ContainerInterfaceTerminal, PartInterfaceTerminal> helper
= new ContainerHelper<>(ContainerInterfaceTerminal::new, PartInterfaceTerminal.class, SecurityPermissions.BUILD);
public static ContainerInterfaceTerminal fromNetwork(int windowId, PlayerInventory inv, PacketBuffer buf) {
return helper.fromNetwork(windowId, inv, buf);
@@ -20,8 +20,6 @@ package appeng.container.implementations;
import appeng.container.ContainerLocator;
import appeng.container.helper.PartContainerHelper;
import appeng.container.helper.TileContainerHelper;
import net.minecraft.client.gui.widget.TextFieldWidget;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
@@ -49,8 +47,8 @@ public class ContainerLevelEmitter extends ContainerUpgradeable
public static ContainerType<ContainerLevelEmitter> TYPE;
private static final PartContainerHelper<ContainerLevelEmitter, PartLevelEmitter> helper
= new PartContainerHelper<>(ContainerLevelEmitter::new, PartLevelEmitter.class, SecurityPermissions.BUILD);
private static final ContainerHelper<ContainerLevelEmitter, PartLevelEmitter> helper
= new ContainerHelper<>(ContainerLevelEmitter::new, PartLevelEmitter.class, SecurityPermissions.BUILD);
public static ContainerLevelEmitter fromNetwork(int windowId, PlayerInventory inv, PacketBuffer buf) {
return helper.fromNetwork(windowId, inv, buf);
@@ -25,7 +25,7 @@ import appeng.api.config.Settings;
import appeng.api.networking.crafting.ICraftingPatternDetails;
import appeng.container.ContainerLocator;
import appeng.container.guisync.GuiSync;
import appeng.container.helper.TileContainerHelper;
import appeng.container.implementations.ContainerHelper;
import appeng.container.interfaces.IProgressProvider;
import appeng.container.slot.SlotMACPattern;
import appeng.container.slot.SlotOutput;
@@ -47,8 +47,8 @@ public class ContainerMAC extends ContainerUpgradeable implements IProgressProvi
public static ContainerType<ContainerMAC> TYPE;
private static final TileContainerHelper<ContainerMAC, TileMolecularAssembler> helper
= new TileContainerHelper<>(ContainerMAC::new, TileMolecularAssembler.class);
private static final ContainerHelper<ContainerMAC, TileMolecularAssembler> helper
= new ContainerHelper<>(ContainerMAC::new, TileMolecularAssembler.class);
public static ContainerMAC fromNetwork(int windowId, PlayerInventory inv, PacketBuffer buf) {
return helper.fromNetwork(windowId, inv, buf);
@@ -26,7 +26,6 @@ import javax.annotation.Nonnull;
import appeng.api.implementations.guiobjects.IGuiItemObject;
import appeng.container.ContainerLocator;
import appeng.container.helper.ContainerHelper;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
@@ -20,7 +20,6 @@ package appeng.container.implementations;
import appeng.container.ContainerLocator;
import appeng.container.helper.ContainerHelper;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.ContainerType;
@@ -22,7 +22,6 @@ package appeng.container.implementations;
import java.io.IOException;
import appeng.container.ContainerLocator;
import appeng.container.helper.ContainerHelper;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
@@ -23,7 +23,6 @@ import appeng.api.implementations.guiobjects.INetworkTool;
import appeng.container.AEBaseContainer;
import appeng.container.ContainerLocator;
import appeng.container.guisync.GuiSync;
import appeng.container.helper.ContainerHelper;
import appeng.container.slot.SlotRestrictedInput;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
@@ -31,7 +31,6 @@ import appeng.api.storage.data.IItemList;
import appeng.container.ContainerLocator;
import appeng.container.ContainerNull;
import appeng.container.guisync.GuiSync;
import appeng.container.helper.ContainerHelper;
import appeng.container.slot.*;
import appeng.core.sync.packets.PacketPatternSlot;
import appeng.helpers.IContainerCraftingPacket;
@@ -20,7 +20,6 @@ package appeng.container.implementations;
import appeng.container.ContainerLocator;
import appeng.container.helper.ContainerHelper;
import net.minecraft.client.gui.widget.TextFieldWidget;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
@@ -21,7 +21,7 @@ package appeng.container.implementations;
import appeng.api.config.SecurityPermissions;
import appeng.container.ContainerLocator;
import appeng.container.helper.TileContainerHelper;
import appeng.container.implementations.ContainerHelper;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
@@ -37,8 +37,8 @@ public class ContainerQNB extends AEBaseContainer
public static ContainerType<ContainerQNB> TYPE;
private static final TileContainerHelper<ContainerQNB, TileQuantumBridge> helper
= new TileContainerHelper<>(ContainerQNB::new, TileQuantumBridge.class, SecurityPermissions.BUILD);
private static final ContainerHelper<ContainerQNB, TileQuantumBridge> helper
= new ContainerHelper<>(ContainerQNB::new, TileQuantumBridge.class, SecurityPermissions.BUILD);
public static ContainerQNB fromNetwork(int windowId, PlayerInventory inv, PacketBuffer buf) {
return helper.fromNetwork(windowId, inv, buf);
@@ -22,7 +22,6 @@ package appeng.container.implementations;
import javax.annotation.Nonnull;
import appeng.container.ContainerLocator;
import appeng.container.helper.ContainerHelper;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.ContainerType;
@@ -20,7 +20,6 @@ package appeng.container.implementations;
import appeng.container.ContainerLocator;
import appeng.container.helper.ContainerHelper;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.ContainerType;
@@ -20,7 +20,7 @@ package appeng.container.implementations;
import appeng.container.ContainerLocator;
import appeng.container.helper.TileContainerHelper;
import appeng.container.implementations.ContainerHelper;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
@@ -36,8 +36,8 @@ public class ContainerSkyChest extends AEBaseContainer
public static ContainerType<ContainerSkyChest> TYPE;
private static final TileContainerHelper<ContainerSkyChest, TileSkyChest> helper
= new TileContainerHelper<>(ContainerSkyChest::new, TileSkyChest.class);
private static final ContainerHelper<ContainerSkyChest, TileSkyChest> helper
= new ContainerHelper<>(ContainerSkyChest::new, TileSkyChest.class);
private final TileSkyChest chest;
@@ -20,7 +20,7 @@ package appeng.container.implementations;
import appeng.container.ContainerLocator;
import appeng.container.helper.TileContainerHelper;
import appeng.container.implementations.ContainerHelper;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
@@ -45,8 +45,8 @@ public class ContainerSpatialIOPort extends AEBaseContainer
public static ContainerType<ContainerSpatialIOPort> TYPE;
private static final TileContainerHelper<ContainerSpatialIOPort, TileSpatialIOPort> helper
= new TileContainerHelper<>(ContainerSpatialIOPort::new, TileSpatialIOPort.class, SecurityPermissions.BUILD);
private static final ContainerHelper<ContainerSpatialIOPort, TileSpatialIOPort> helper
= new ContainerHelper<>(ContainerSpatialIOPort::new, TileSpatialIOPort.class, SecurityPermissions.BUILD);
@GuiSync( 0 )
public long currentPower;
@@ -22,8 +22,6 @@ package appeng.container.implementations;
import java.util.Iterator;
import appeng.container.ContainerLocator;
import appeng.container.helper.PartContainerHelper;
import appeng.container.helper.TileContainerHelper;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.ContainerType;
@@ -57,8 +55,8 @@ public class ContainerStorageBus extends ContainerUpgradeable
public static ContainerType<ContainerStorageBus> TYPE;
private static final PartContainerHelper<ContainerStorageBus, PartStorageBus> helper
= new PartContainerHelper<>(ContainerStorageBus::new, PartStorageBus.class, SecurityPermissions.BUILD);
private static final ContainerHelper<ContainerStorageBus, PartStorageBus> helper
= new ContainerHelper<>(ContainerStorageBus::new, PartStorageBus.class, SecurityPermissions.BUILD);
public static ContainerStorageBus fromNetwork(int windowId, PlayerInventory inv, PacketBuffer buf) {
return helper.fromNetwork(windowId, inv, buf);
@@ -20,7 +20,6 @@ package appeng.container.implementations;
import appeng.container.ContainerLocator;
import appeng.container.helper.ContainerHelper;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.IInventory;
@@ -20,7 +20,7 @@ package appeng.container.implementations;
import appeng.container.ContainerLocator;
import appeng.container.helper.TileContainerHelper;
import appeng.container.implementations.ContainerHelper;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
@@ -39,8 +39,8 @@ public class ContainerVibrationChamber extends AEBaseContainer implements IProgr
public static ContainerType<ContainerVibrationChamber> TYPE;
private static final TileContainerHelper<ContainerVibrationChamber, TileVibrationChamber> helper
= new TileContainerHelper<>(ContainerVibrationChamber::new, TileVibrationChamber.class);
private static final ContainerHelper<ContainerVibrationChamber, TileVibrationChamber> helper
= new ContainerHelper<>(ContainerVibrationChamber::new, TileVibrationChamber.class);
public static ContainerVibrationChamber fromNetwork(int windowId, PlayerInventory inv, PacketBuffer buf) {
return helper.fromNetwork(windowId, inv, buf);
@@ -21,7 +21,7 @@ package appeng.container.implementations;
import appeng.api.config.SecurityPermissions;
import appeng.container.ContainerLocator;
import appeng.container.helper.TileContainerHelper;
import appeng.container.implementations.ContainerHelper;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
@@ -39,8 +39,8 @@ public class ContainerWireless extends AEBaseContainer
public static ContainerType<ContainerWireless> TYPE;
private static final TileContainerHelper<ContainerWireless, TileWireless> helper
= new TileContainerHelper<>(ContainerWireless::new, TileWireless.class, SecurityPermissions.BUILD);
private static final ContainerHelper<ContainerWireless, TileWireless> helper
= new ContainerHelper<>(ContainerWireless::new, TileWireless.class, SecurityPermissions.BUILD);
public static ContainerWireless fromNetwork(int windowId, PlayerInventory inv, PacketBuffer buf) {
return helper.fromNetwork(windowId, inv, buf);
@@ -20,7 +20,6 @@ package appeng.container.implementations;
import appeng.container.ContainerLocator;
import appeng.container.helper.ContainerHelper;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;