feat: power relay base tile impl

reference issue: #6
This commit is contained in:
Timo Ley 2023-01-28 22:27:55 +01:00
parent 8f69574500
commit e47d08a87e
5 changed files with 153 additions and 0 deletions

View File

@ -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));
}
}

View File

@ -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

View File

@ -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<ForgeDirection, AENetworkProxy> 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();
}
}
}

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 391 B