From e47d08a87e92e4c1542f1436ea5e04d3820f10c1 Mon Sep 17 00:00:00 2001 From: Timo Ley Date: Sat, 28 Jan 2023 22:27:55 +0100 Subject: [PATCH] feat: power relay base tile impl reference issue: #6 --- .../appeng/block/legacy/BlockPowerRelay.java | 18 +++ .../core/api/definitions/ApiBlocks.java | 3 + .../appeng/tile/legacy/TilePowerRelay.java | 131 ++++++++++++++++++ .../appliedenergistics2/lang/en_US.lang | 1 + .../textures/blocks/BlockPowerRelay.png | Bin 0 -> 391 bytes 5 files changed, 153 insertions(+) create mode 100644 src/main/java/appeng/block/legacy/BlockPowerRelay.java create mode 100644 src/main/java/appeng/tile/legacy/TilePowerRelay.java create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/BlockPowerRelay.png diff --git a/src/main/java/appeng/block/legacy/BlockPowerRelay.java b/src/main/java/appeng/block/legacy/BlockPowerRelay.java new file mode 100644 index 00000000..85cd0c76 --- /dev/null +++ b/src/main/java/appeng/block/legacy/BlockPowerRelay.java @@ -0,0 +1,18 @@ +package appeng.block.legacy; + +import java.util.EnumSet; + +import appeng.block.AEBaseTileBlock; +import appeng.core.features.AEFeature; +import appeng.tile.legacy.TilePowerRelay; +import net.minecraft.block.material.Material; + +public class BlockPowerRelay extends AEBaseTileBlock { + + public BlockPowerRelay() { + super(Material.iron); + this.setTileEntity(TilePowerRelay.class); + this.setFeature(EnumSet.of(AEFeature.Legacy)); + } + +} diff --git a/src/main/java/appeng/core/api/definitions/ApiBlocks.java b/src/main/java/appeng/core/api/definitions/ApiBlocks.java index 1ff4d121..b5cb6dc0 100644 --- a/src/main/java/appeng/core/api/definitions/ApiBlocks.java +++ b/src/main/java/appeng/core/api/definitions/ApiBlocks.java @@ -38,6 +38,7 @@ import appeng.block.legacy.BlockCraftTerminal; import appeng.block.legacy.BlockLegacyChest; import appeng.block.legacy.BlockLegacyController; import appeng.block.legacy.BlockPatternEncoder; +import appeng.block.legacy.BlockPowerRelay; import appeng.block.legacy.BlockStorageMonitor; import appeng.block.legacy.BlockTerminal; import appeng.block.legacy.BlockTransitionPlane; @@ -153,6 +154,7 @@ public final class ApiBlocks implements IBlocks { private final ITileDefinition assemblerHeatVent; private final ITileDefinition assemblerCraftingAccelerator; private final ITileDefinition legacyChest; + private final ITileDefinition powerRelay; public ApiBlocks(final DefinitionConstructor constructor) { final BlockLightDetector lightDetector = new BlockLightDetector(); @@ -341,6 +343,7 @@ public final class ApiBlocks implements IBlocks { this.assemblerCraftingAccelerator = constructor.registerTileDefinition(new BlockAssemblerCraftingAccelerator()); this.legacyChest = constructor.registerTileDefinition(new BlockLegacyChest()); + this.powerRelay = constructor.registerTileDefinition(new BlockPowerRelay()); } @Override diff --git a/src/main/java/appeng/tile/legacy/TilePowerRelay.java b/src/main/java/appeng/tile/legacy/TilePowerRelay.java new file mode 100644 index 00000000..0f9a5ea0 --- /dev/null +++ b/src/main/java/appeng/tile/legacy/TilePowerRelay.java @@ -0,0 +1,131 @@ +package appeng.tile.legacy; + +import java.util.EnumSet; +import java.util.HashMap; +import java.util.Map; + +import appeng.api.networking.GridFlags; +import appeng.api.networking.IGridNode; +import appeng.api.util.AECableType; +import appeng.api.util.DimensionalCoord; +import appeng.me.helpers.AENetworkProxy; +import appeng.me.helpers.IGridProxyable; +import appeng.tile.TileEvent; +import appeng.tile.events.TileEventType; +import appeng.tile.inventory.AppEngInternalInventory; +import appeng.tile.inventory.InvOperation; +import appeng.tile.powersink.AEBasePoweredTile; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +public class TilePowerRelay extends AEBasePoweredTile implements IGridProxyable { + public static final IInventory NULL_INVENTORY = new AppEngInternalInventory(null, 0); + public static final int[] ACCESSIBLE_SLOTS_BY_SIDE = {}; + private Map proxies = new HashMap<>(); + + public TilePowerRelay() { + for(ForgeDirection dir : ForgeDirection.values()) { + AENetworkProxy proxy = new AENetworkProxy(this, "proxy" + dir.name().toLowerCase(), this.getItemFromTile(this), true); + proxy.setFlags(GridFlags.CANNOT_CARRY); + if (dir == ForgeDirection.UNKNOWN) { + proxy.setValidSides(EnumSet.noneOf(ForgeDirection.class)); + } else { + proxy.setValidSides(EnumSet.of(dir)); + } + proxies.put(dir, proxy); + } + } + + @TileEvent(TileEventType.WORLD_NBT_READ) + public void readFromNBT_PowerRelay(final NBTTagCompound data) { + for(ForgeDirection dir : ForgeDirection.values()) { + proxies.get(dir).readFromNBT(data); + } + } + + @TileEvent(TileEventType.WORLD_NBT_WRITE) + public void writeToNBT_PowerRelay(final NBTTagCompound data) { + for(ForgeDirection dir : ForgeDirection.values()) { + proxies.get(dir).writeToNBT(data); + } + } + + @Override + public IInventory getInternalInventory() { + return NULL_INVENTORY; + } + + @Override + public void onChangeInventory(IInventory inv, int slot, InvOperation mc, ItemStack removed, ItemStack added) { + + } + + @Override + public int[] getAccessibleSlotsBySide(ForgeDirection whichSide) { + return ACCESSIBLE_SLOTS_BY_SIDE; + } + + @Override + public IGridNode getGridNode(ForgeDirection dir) { + return proxies.get(dir).getNode(); + } + + @Override + public AECableType getCableConnectionType(ForgeDirection dir) { + return AECableType.COVERED; + } + + @Override + public AENetworkProxy getProxy() { + return proxies.get(ForgeDirection.UNKNOWN); + } + + public AENetworkProxy getProxyForSide(ForgeDirection dir) { + return proxies.get(dir); + } + + @Override + public DimensionalCoord getLocation() { + return new DimensionalCoord(this); + } + + @Override + public void gridChanged() { + + } + + @Override + public void onChunkUnload() { + super.onChunkUnload(); + for(ForgeDirection dir : ForgeDirection.values()) { + proxies.get(dir).onChunkUnload(); + } + } + + @Override + public void onReady() { + super.onReady(); + for(ForgeDirection dir : ForgeDirection.values()) { + proxies.get(dir).onReady(); + } + } + + @Override + public void invalidate() { + super.invalidate(); + for(ForgeDirection dir : ForgeDirection.values()) { + proxies.get(dir).invalidate(); + } + } + + @Override + public void validate() { + super.validate(); + for(ForgeDirection dir : ForgeDirection.values()) { + proxies.get(dir).validate(); + } + } + +} diff --git a/src/main/resources/assets/appliedenergistics2/lang/en_US.lang b/src/main/resources/assets/appliedenergistics2/lang/en_US.lang index 1123a859..6980b079 100644 --- a/src/main/resources/assets/appliedenergistics2/lang/en_US.lang +++ b/src/main/resources/assets/appliedenergistics2/lang/en_US.lang @@ -60,6 +60,7 @@ tile.appliedenergistics2.BlockStorageMonitor.name=ME Storage Monitor tile.appliedenergistics2.BlockTerminal.name=ME Access Terminal tile.appliedenergistics2.BlockWirelessAccessPoint.name=Wireless Access Point tile.appliedenergistics2.BlockLegacyChest.name=ME Chest +tile.appliedenergistics2.BlockPowerRelay.name=ME Power Relay item.appliedenergistics2.ItemMaterial.ConversionMatrix.name=Conversion Matrix diff --git a/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockPowerRelay.png b/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockPowerRelay.png new file mode 100644 index 0000000000000000000000000000000000000000..23950c963d73efc570331a5d6f1cd14826d10e62 GIT binary patch literal 391 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8X6a5n0T@z_$#98Qbry z%m)femAFQf1m~xflqVLYG6W=M=9TFAxrQi|8S9zq85$UTDOw0rb=}j&F~q`u>g2n; zhYWaHHhUc9*5z=~UhyMxVSmn)LL>IzlGz7#T37|C3-Qkvx%vFGW$4|Fw~uVh7ykY^ z&voU#`(_s(3OETY%j~-MTkFCKxnu9FO6=LH^bXFt{lU~BFmWSm_QZRNY>Te8D7;U0 z3v2MsTj2cJhI<-knhN8$1ZL6c3CxwvHjFM+uRn{juG`qS^N>B;rl!<@jcQ~L2hFEV(#`njxgN@xNAf&z>@ literal 0 HcmV?d00001