From 81984b3ad72efa86e555222b4c1bf4c71ac5ef06 Mon Sep 17 00:00:00 2001 From: Sebastian Hartte Date: Sat, 27 Aug 2016 18:12:54 +0200 Subject: [PATCH] Implemented ME chest item + block model. --- .../java/appeng/block/storage/BlockChest.java | 37 +++++++++++ .../appeng/block/storage/ChestRendering.java | 23 +++++++ .../appeng/block/storage/DriveSlotState.java | 44 +++++++++++-- .../appeng/block/storage/DriveSlotsState.java | 17 +---- .../core/api/definitions/ApiBlocks.java | 7 +- .../blockstates/chest.json | 60 ++++++++++++++++++ .../models/block/chest/base.json | 12 ++++ .../models/block/chest/cell_state_empty.json | 14 ++++ .../models/block/chest/cell_state_full.json | 23 +++++++ .../block/chest/cell_state_offline.json | 14 ++++ .../models/block/chest/cell_state_online.json | 23 +++++++ .../block/chest/cell_state_types_full.json | 23 +++++++ .../models/block/chest/lights_off.json | 14 ++++ .../models/block/chest/lights_on.json | 31 +++++++++ .../models/item/chest.json | 11 ++++ .../textures/blocks/chest/bottom.png | Bin 0 -> 398 bytes .../blocks/chest/cell_state_backdrop.png | Bin 0 -> 145 bytes .../blocks/chest/cell_state_empty.png | Bin 0 -> 140 bytes .../textures/blocks/chest/cell_state_full.png | Bin 0 -> 134 bytes .../blocks/chest/cell_state_offline.png | Bin 0 -> 147 bytes .../blocks/chest/cell_state_online.png | Bin 0 -> 136 bytes .../blocks/chest/cell_state_types_full.png | Bin 0 -> 132 bytes .../textures/blocks/chest/front.png | Bin 0 -> 375 bytes .../textures/blocks/chest/front_item.png | Bin 0 -> 323 bytes .../textures/blocks/chest/lights_off.png | Bin 0 -> 212 bytes .../blocks/chest/lights_on_bright.png | Bin 0 -> 245 bytes .../textures/blocks/chest/lights_on_dark.png | Bin 0 -> 232 bytes .../blocks/chest/lights_on_medium.png | Bin 0 -> 223 bytes .../textures/blocks/chest/side.png | Bin 0 -> 342 bytes .../textures/blocks/chest/top.png | Bin 0 -> 325 bytes .../textures/blocks/chest/top_item.png | Bin 0 -> 278 bytes 31 files changed, 330 insertions(+), 23 deletions(-) create mode 100644 src/main/java/appeng/block/storage/ChestRendering.java create mode 100644 src/main/resources/assets/appliedenergistics2/blockstates/chest.json create mode 100644 src/main/resources/assets/appliedenergistics2/models/block/chest/base.json create mode 100644 src/main/resources/assets/appliedenergistics2/models/block/chest/cell_state_empty.json create mode 100644 src/main/resources/assets/appliedenergistics2/models/block/chest/cell_state_full.json create mode 100644 src/main/resources/assets/appliedenergistics2/models/block/chest/cell_state_offline.json create mode 100644 src/main/resources/assets/appliedenergistics2/models/block/chest/cell_state_online.json create mode 100644 src/main/resources/assets/appliedenergistics2/models/block/chest/cell_state_types_full.json create mode 100644 src/main/resources/assets/appliedenergistics2/models/block/chest/lights_off.json create mode 100644 src/main/resources/assets/appliedenergistics2/models/block/chest/lights_on.json create mode 100644 src/main/resources/assets/appliedenergistics2/models/item/chest.json create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/chest/bottom.png create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/chest/cell_state_backdrop.png create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/chest/cell_state_empty.png create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/chest/cell_state_full.png create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/chest/cell_state_offline.png create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/chest/cell_state_online.png create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/chest/cell_state_types_full.png create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/chest/front.png create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/chest/front_item.png create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/chest/lights_off.png create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/chest/lights_on_bright.png create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/chest/lights_on_dark.png create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/chest/lights_on_medium.png create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/chest/side.png create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/chest/top.png create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/chest/top_item.png diff --git a/src/main/java/appeng/block/storage/BlockChest.java b/src/main/java/appeng/block/storage/BlockChest.java index 62e1bd80..dac20eaf 100644 --- a/src/main/java/appeng/block/storage/BlockChest.java +++ b/src/main/java/appeng/block/storage/BlockChest.java @@ -22,12 +22,16 @@ package appeng.block.storage; import javax.annotation.Nullable; import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import appeng.api.AEApi; @@ -43,10 +47,19 @@ import appeng.util.Platform; public class BlockChest extends AEBaseTileBlock { + private final static PropertyEnum SLOT_STATE = PropertyEnum.create( "slot_state", DriveSlotState.class ); + public BlockChest() { super( Material.IRON ); this.setTileEntity( TileChest.class ); + this.setDefaultState( getDefaultState().withProperty( SLOT_STATE, DriveSlotState.EMPTY ) ); + } + + @Override + protected IProperty[] getAEStates() + { + return new IProperty[] { SLOT_STATE }; } @Override @@ -55,6 +68,30 @@ public class BlockChest extends AEBaseTileBlock return BlockRenderLayer.CUTOUT; } + @Override + public IBlockState getActualState( IBlockState state, IBlockAccess worldIn, BlockPos pos ) + { + DriveSlotState slotState = DriveSlotState.EMPTY; + + TileChest te = getTileEntity( worldIn, pos ); + + if( te != null ) + { + if( te.getCellCount() >= 1 ) + { + slotState = DriveSlotState.fromCellStatus( te.getCellStatus( 0 ) ); + } + // Power-state has to be checked separately + if( !te.isPowered() && slotState != DriveSlotState.EMPTY ) + { + slotState = DriveSlotState.OFFLINE; + } + } + + return super.getActualState( state, worldIn, pos ) + .withProperty( SLOT_STATE, slotState ); + } + @Override public boolean onActivated( final World w, final BlockPos pos, final EntityPlayer p, final EnumHand hand, final @Nullable ItemStack heldItem, final EnumFacing side, final float hitX, final float hitY, final float hitZ ) { diff --git a/src/main/java/appeng/block/storage/ChestRendering.java b/src/main/java/appeng/block/storage/ChestRendering.java new file mode 100644 index 00000000..25584722 --- /dev/null +++ b/src/main/java/appeng/block/storage/ChestRendering.java @@ -0,0 +1,23 @@ +package appeng.block.storage; + + +import appeng.api.util.AEColor; +import appeng.bootstrap.BlockRenderingCustomizer; +import appeng.bootstrap.IBlockRendering; +import appeng.bootstrap.IItemRendering; +import appeng.client.render.ColorableTileBlockColor; +import appeng.client.render.StaticItemColor; + + +public class ChestRendering extends BlockRenderingCustomizer +{ + + @Override + public void customize( IBlockRendering rendering, IItemRendering itemRendering ) + { + // I checked, the ME chest doesn't keep its color in item form + itemRendering.color( new StaticItemColor( AEColor.Transparent ) ); + rendering.blockColor( new ColorableTileBlockColor() ); + } + +} diff --git a/src/main/java/appeng/block/storage/DriveSlotState.java b/src/main/java/appeng/block/storage/DriveSlotState.java index 9c01f92f..3b8d2521 100644 --- a/src/main/java/appeng/block/storage/DriveSlotState.java +++ b/src/main/java/appeng/block/storage/DriveSlotState.java @@ -19,25 +19,57 @@ package appeng.block.storage; +import net.minecraft.util.IStringSerializable; + + /** * Describes the different states a single slot of a BlockDrive can be in in terms of rendering. */ -public enum DriveSlotState +public enum DriveSlotState implements IStringSerializable { // No cell in slot - EMPTY, + EMPTY( "empty" ), // Cell in slot, but unpowered - OFFLINE, + OFFLINE( "offline" ), // Online and free space - ONLINE, + ONLINE( "online" ), // Types full, space left - TYPES_FULL, + TYPES_FULL( "types_full" ), // Completely full - FULL + FULL( "full" ); + + private final String name; + + DriveSlotState( String name ) + { + this.name = name; + } + + @Override + public String getName() + { + return name; + } + + public static DriveSlotState fromCellStatus( int cellStatus ) + { + switch( cellStatus ) + { + default: + case 0: + return DriveSlotState.EMPTY; + case 1: + return DriveSlotState.ONLINE; + case 2: + return DriveSlotState.TYPES_FULL; + case 3: + return DriveSlotState.FULL; + } + } } diff --git a/src/main/java/appeng/block/storage/DriveSlotsState.java b/src/main/java/appeng/block/storage/DriveSlotsState.java index d97305b6..0919d128 100644 --- a/src/main/java/appeng/block/storage/DriveSlotsState.java +++ b/src/main/java/appeng/block/storage/DriveSlotsState.java @@ -70,22 +70,7 @@ public class DriveSlotsState } else { - switch( chestOrDrive.getCellStatus( i ) ) - { - default: - case 0: - slots[i] = DriveSlotState.EMPTY; - break; - case 1: - slots[i] = DriveSlotState.ONLINE; - break; - case 2: - slots[i] = DriveSlotState.TYPES_FULL; - break; - case 3: - slots[i] = DriveSlotState.FULL; - break; - } + slots[i] = DriveSlotState.fromCellStatus( chestOrDrive.getCellStatus( i ) ); } } return new DriveSlotsState( slots ); diff --git a/src/main/java/appeng/core/api/definitions/ApiBlocks.java b/src/main/java/appeng/core/api/definitions/ApiBlocks.java index de6699ec..be86cf65 100644 --- a/src/main/java/appeng/core/api/definitions/ApiBlocks.java +++ b/src/main/java/appeng/core/api/definitions/ApiBlocks.java @@ -75,6 +75,7 @@ import appeng.block.storage.BlockDrive; import appeng.block.storage.BlockIOPort; import appeng.block.storage.BlockSkyChest; import appeng.block.storage.BlockSkyChest.SkyChestType; +import appeng.block.storage.ChestRendering; import appeng.block.storage.DriveRendering; import appeng.block.storage.SkyChestRenderingCustomizer; import appeng.bootstrap.BlockRenderingCustomizer; @@ -288,7 +289,11 @@ public final class ApiBlocks implements IBlocks .useCustomItemModel() .rendering( new DriveRendering() ) .build(); - this.chest = registry.block( "chest", BlockChest::new ).features( AEFeature.StorageCells, AEFeature.MEChest ).build(); + this.chest = registry.block( "chest", BlockChest::new ) + .features( AEFeature.StorageCells, AEFeature.MEChest ) + .useCustomItemModel() + .rendering( new ChestRendering() ) + .build(); this.iface = registry.block( "interface", BlockInterface::new ).build(); this.cellWorkbench = registry.block( "cell_workbench", BlockCellWorkbench::new ).features( AEFeature.StorageCells ).build(); this.iOPort = registry.block( "ioport", BlockIOPort::new ).features( AEFeature.StorageCells, AEFeature.IOPort ).build(); diff --git a/src/main/resources/assets/appliedenergistics2/blockstates/chest.json b/src/main/resources/assets/appliedenergistics2/blockstates/chest.json new file mode 100644 index 00000000..aaf60d70 --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/blockstates/chest.json @@ -0,0 +1,60 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "appliedenergistics2:chest/base" + }, + "variants": { + "slot_state": { + "empty": { + "submodel": { + "lights": { + "model": "appliedenergistics2:chest/lights_off" + }, + "state": { + "model": "appliedenergistics2:chest/cell_state_empty" + } + } + }, + "offline": { + "submodel": { + "lights": { + "model": "appliedenergistics2:chest/lights_off" + }, + "state": { + "model": "appliedenergistics2:chest/cell_state_offline" + } + } + }, + "online": { + "submodel": { + "lights": { + "model": "appliedenergistics2:chest/lights_on" + }, + "state": { + "model": "appliedenergistics2:chest/cell_state_online" + } + } + }, + "types_full": { + "submodel": { + "lights": { + "model": "appliedenergistics2:chest/lights_on" + }, + "state": { + "model": "appliedenergistics2:chest/cell_state_types_full" + } + } + }, + "full": { + "submodel": { + "lights": { + "model": "appliedenergistics2:chest/lights_on" + }, + "state": { + "model": "appliedenergistics2:chest/cell_state_full" + } + } + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/models/block/chest/base.json b/src/main/resources/assets/appliedenergistics2/models/block/chest/base.json new file mode 100644 index 00000000..2caad1c2 --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/models/block/chest/base.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "appliedenergistics2:blocks/chest/side", + "up": "appliedenergistics2:blocks/chest/top", + "down": "appliedenergistics2:blocks/chest/bottom", + "north": "appliedenergistics2:blocks/chest/front", + "east": "appliedenergistics2:blocks/chest/side", + "south": "appliedenergistics2:blocks/chest/side", + "west": "appliedenergistics2:blocks/chest/side" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/models/block/chest/cell_state_empty.json b/src/main/resources/assets/appliedenergistics2/models/block/chest/cell_state_empty.json new file mode 100644 index 00000000..8e44b7dc --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/models/block/chest/cell_state_empty.json @@ -0,0 +1,14 @@ +{ + "textures": { + "state": "appliedenergistics2:blocks/chest/cell_state_empty" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"texture": "#state"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/models/block/chest/cell_state_full.json b/src/main/resources/assets/appliedenergistics2/models/block/chest/cell_state_full.json new file mode 100644 index 00000000..5f2d8a05 --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/models/block/chest/cell_state_full.json @@ -0,0 +1,23 @@ +{ + "uvlMarker": true, + "textures": { + "backdrop": "appliedenergistics2:blocks/chest/cell_state_backdrop", + "state": "appliedenergistics2:blocks/chest/cell_state_full" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"texture": "#backdrop" } + } + }, + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"texture": "#state", "uvlightmap": { "block": 0.007, "sky": 0.007 }} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/models/block/chest/cell_state_offline.json b/src/main/resources/assets/appliedenergistics2/models/block/chest/cell_state_offline.json new file mode 100644 index 00000000..7a697043 --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/models/block/chest/cell_state_offline.json @@ -0,0 +1,14 @@ +{ + "textures": { + "state": "appliedenergistics2:blocks/chest/cell_state_offline" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"texture": "#state"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/models/block/chest/cell_state_online.json b/src/main/resources/assets/appliedenergistics2/models/block/chest/cell_state_online.json new file mode 100644 index 00000000..23f57823 --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/models/block/chest/cell_state_online.json @@ -0,0 +1,23 @@ +{ + "uvlMarker": true, + "textures": { + "backdrop": "appliedenergistics2:blocks/chest/cell_state_backdrop", + "state": "appliedenergistics2:blocks/chest/cell_state_online" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"texture": "#backdrop" } + } + }, + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"texture": "#state", "uvlightmap": { "block": 0.007, "sky": 0.007 }} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/models/block/chest/cell_state_types_full.json b/src/main/resources/assets/appliedenergistics2/models/block/chest/cell_state_types_full.json new file mode 100644 index 00000000..f438c274 --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/models/block/chest/cell_state_types_full.json @@ -0,0 +1,23 @@ +{ + "uvlMarker": true, + "textures": { + "backdrop": "appliedenergistics2:blocks/chest/cell_state_backdrop", + "state": "appliedenergistics2:blocks/chest/cell_state_types_full" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"texture": "#backdrop" } + } + }, + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"texture": "#state", "uvlightmap": { "block": 0.007, "sky": 0.007 }} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/models/block/chest/lights_off.json b/src/main/resources/assets/appliedenergistics2/models/block/chest/lights_off.json new file mode 100644 index 00000000..ed2c7dd5 --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/models/block/chest/lights_off.json @@ -0,0 +1,14 @@ +{ + "textures": { + "lights": "appliedenergistics2:blocks/chest/lights_off" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "up": { "texture": "#lights", "tintindex": 0 } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/models/block/chest/lights_on.json b/src/main/resources/assets/appliedenergistics2/models/block/chest/lights_on.json new file mode 100644 index 00000000..8f88855a --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/models/block/chest/lights_on.json @@ -0,0 +1,31 @@ +{ + "uvlMarker": true, + "textures": { + "lights_bright": "appliedenergistics2:blocks/chest/lights_on_bright", + "lights_medium": "appliedenergistics2:blocks/chest/lights_on_medium", + "lights_dark": "appliedenergistics2:blocks/chest/lights_on_dark" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "up": {"texture": "#lights_bright", "tintindex": 0, "uvlightmap": { "block": 0.007, "sky": 0.007 }} + } + }, + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "up": {"texture": "#lights_medium", "tintindex": 1, "uvlightmap": { "block": 0.007, "sky": 0.007 }} + } + }, + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "up": {"texture": "#lights_dark", "tintindex": 2, "uvlightmap": { "block": 0.007, "sky": 0.007 }} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/models/item/chest.json b/src/main/resources/assets/appliedenergistics2/models/item/chest.json new file mode 100644 index 00000000..f7828b1e --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/models/item/chest.json @@ -0,0 +1,11 @@ +{ + "parent": "block/cube", + "textures": { + "up": "appliedenergistics2:blocks/chest/top_item", + "down": "appliedenergistics2:blocks/chest/bottom", + "north": "appliedenergistics2:blocks/chest/front_item", + "east": "appliedenergistics2:blocks/chest/side", + "south": "appliedenergistics2:blocks/chest/side", + "west": "appliedenergistics2:blocks/chest/side" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/textures/blocks/chest/bottom.png b/src/main/resources/assets/appliedenergistics2/textures/blocks/chest/bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..6a87e174a2e43b44724edcf21803e1d38696666f GIT binary patch literal 398 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFeN`=0SqpttBVD!s|NqYv?RyDS&zR)x?!qm9{m20zhqJ&VvY3H^ zZy5+Pw%=Kq4-~Zbba4#fxSpIK5)u>yL}>wqjLhzB6HE*W(gPX|=190G@VK{laL$ra z(VVkO#<0ZlpiXI0#(XKsC2?}191KoVwPdSO8NLFIQY~?fC`m~yNwrEYN(E93Mh1q) zx(3F&hDIR<7FNc_R)!Y32Bua92G?9q?nlv(o1c=IRteW&U=m_vY-IpMCb|Y@Kn-87 za<2z!kOJ8doS#-wo>-L15RjOeSEA?V8lq5UtY@lcXkhTAXdzG)gQu&X%Q~loCIDqY BYh3^U literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/appliedenergistics2/textures/blocks/chest/cell_state_backdrop.png b/src/main/resources/assets/appliedenergistics2/textures/blocks/chest/cell_state_backdrop.png new file mode 100644 index 0000000000000000000000000000000000000000..e4f5021bb38870ce1d036e155469356896a8b350 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xj6Gc(Ln>}1{rUgjo>{e_v(d>Q>%azs2G-dRPEFO`xNO~r q4+U<&Dj8?z-e7o~5tqQgVZh*O%&mC;vEfmmb_P#ZKbLh*2~7a_959Ul literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/appliedenergistics2/textures/blocks/chest/cell_state_empty.png b/src/main/resources/assets/appliedenergistics2/textures/blocks/chest/cell_state_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..cd3a27a73ce5204f9a63dc9e5f006f35aaec4587 GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5X^gLZ0Ln>}1{rUgjo>{e_v(d>Q>%azs2G-dM%F4>uuCV%) k^faI6?pa*f$f$6D;qg^2X`>|~DnOkKp00i_>zopr0E`AJXaE2J literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/appliedenergistics2/textures/blocks/chest/cell_state_full.png b/src/main/resources/assets/appliedenergistics2/textures/blocks/chest/cell_state_full.png new file mode 100644 index 0000000000000000000000000000000000000000..cf4564d9e0447455ba9f54f2b8c8b442c89a3360 GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XG(24#Ln>}1{rUgjo>{e_v(d>Q>%a;|6SIbiAMI1w{`^00 e;lw1UaDX9!gH6_Q>J>hq9tKZWKbLh*2~7ZiiYUDR literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/appliedenergistics2/textures/blocks/chest/cell_state_offline.png b/src/main/resources/assets/appliedenergistics2/textures/blocks/chest/cell_state_offline.png new file mode 100644 index 0000000000000000000000000000000000000000..49a22b6591a75734c32e1883422bc01b5d0c786d GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XOg&v3Ln>}1{rUgjo>{e_v(d>Q>%azs2G-dRPEFO`xNO~r s4+U<&DixKKnlzXt+&?ohJ2WsdxOa0aZ+)*22Q+}e)78&qol`;+04FamT>t<8 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/appliedenergistics2/textures/blocks/chest/cell_state_online.png b/src/main/resources/assets/appliedenergistics2/textures/blocks/chest/cell_state_online.png new file mode 100644 index 0000000000000000000000000000000000000000..f57be58e16c3d1072629e71c6ee90b3a73ecd0d3 GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xv^-rLLn>}1{rUgjo>{e_v(d>Q>%a=eEv5|<8$a5+vi(W_ gao)m-Nl@VcLm~&8EQeL}1fVVkPgg&ebxsLQ0ORT@eE}1{rUgjo>{e_v(d>Q>%a;|6SD+U<-p82g(mt2 c3@j21VN=FVdQ&MBb@0PsB~fdBvi literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/appliedenergistics2/textures/blocks/chest/front.png b/src/main/resources/assets/appliedenergistics2/textures/blocks/chest/front.png new file mode 100644 index 0000000000000000000000000000000000000000..4e4e034e91ce4da6ec71acac5fd054d4bae3aab0 GIT binary patch literal 375 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+8Ob}|R5I_~M>7-HeSbdoP$ zlYv0%PF87cMJ_4Rrdc}#eR&Tp@_c_~cK`@`AcK4=YdeNGM6 zar6On(%lDiQ*d(eEu6$r*Mf)$g0@;Ucb+Yl`Ue|-LvwBNrT2Y_>a|-}Yat@1wLF>m zMikd??DhvEL#NvZH^##O5)n9q3Q%wtD1}B0OeZ5PS_h87*@(Gfwc+>&KUf$hYo94) z!c3@8yL%u8lYZZLt4}kQxKOSqDLn*X7$(!R`SMNBtXI+t@R~A^nU%DJU$4LqUQ#;x zCuu;=CypfkcsgH_1rHDDl=7uo=1C*`iSgE3fUW2#>I8wKf|E_-+LF>J?S*#%1_1D0 VT0NPf0zCi#002ovPDHLkV1g<1f@lB$ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/appliedenergistics2/textures/blocks/chest/lights_off.png b/src/main/resources/assets/appliedenergistics2/textures/blocks/chest/lights_off.png new file mode 100644 index 0000000000000000000000000000000000000000..9a6c4e8c550d414bd95013248dca872d9de9cfca GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(C|2ScQ4*Y=R#Ki=l*&+$n3-3imzP?iV4`PW{o-pTP(_HRi(`m| z|I*WjTn8Kk4j=gaf4TV%LA9KP-aJ`6#c9vNUsqnPy7$HIjY02Z*=2>B4x9Lu%{X?F z@3O_sL@9M^pT{ZfnR6hLAD3VIyzJ|jvy}`JekPoHXK8&NXg-6dtDnm{r-UW|L6=MP literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/appliedenergistics2/textures/blocks/chest/lights_on_bright.png b/src/main/resources/assets/appliedenergistics2/textures/blocks/chest/lights_on_bright.png new file mode 100644 index 0000000000000000000000000000000000000000..7bc5a1597b56c5337235718db30550e8c0615123 GIT binary patch literal 245 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL9r6oh?3y^w370~qEv>0#LT=By}Z;C1rt33 z>la@$fhsaQT^vI!{FnB|avd<>Xs*6-??0E`8%2{vFK=!lvI6;>1s;*b z3=Dh+L6~vJ#O${~L9r6oh?3y^w370~qEv>0#LT=By}Z;C1rt33>la@$fhsaQT^vI! z{Fing+&C^|f^RyfzjmS#A@xD;ph>u`=pG+V@X>&A9d3!RcO}l085>89ZJ6T-G@yGywqi Cc1q9y literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/appliedenergistics2/textures/blocks/chest/lights_on_medium.png b/src/main/resources/assets/appliedenergistics2/textures/blocks/chest/lights_on_medium.png new file mode 100644 index 0000000000000000000000000000000000000000..d8789f24b1f5bd8c568cc58b37d9a7020e19625c GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=Dh+L6~vJ#O${~L9r6oh?3y^w370~qEv>0#LT=By}Z;C1rt33>la@$fhyuXT^vI! z{MYt+b1@ilI9LBS*5=dW3jA}$Pn-1lWLI3I&BNRE=pE21 N22WQ%mvv4FO#m!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+8Ob}|R5TIT8E7-Hd{T(H^r z*ZYjM{KpmSICkHXTJ&LKVzTYk{|U@eQc@=lNoj5RFBy}=v%yQKd22``TfifxT+^Tb zc@*lK{v@R>a5I`VU9f$}f$P_&>+qB{uI~L;udlDa$-stZgQrmQ!Ho{0%yZ_>J$WdB z*hScl=1e-0P++y-2EznnhX{6`(~X8ryc3%fEH}(|jEI$7 fbP0l+XkK_K$ON literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/appliedenergistics2/textures/blocks/chest/top.png b/src/main/resources/assets/appliedenergistics2/textures/blocks/chest/top.png new file mode 100644 index 0000000000000000000000000000000000000000..a05c4062607933b6ca6a0c52102e5660fe1a8820 GIT binary patch literal 325 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+8Ob}|R5n(FD|7-Hdnbnf{&(}A%2~##EP{$E+|24v3ZECXujsj}dTw%b<=yqxedm5} z>pY~?62Nk7(~rEnHTHJgTdvsD8f{>SS)ypUU};;F;dUYB+=Xh5QWuWz8?uMU2nXTP2Yu@@c30+Aj=yj`9|FQAFH4Yw=13w>syMA_Zw|&6xz{+=TmfQn6 OkipZ{&t;ucLK6UO0dwjA literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/appliedenergistics2/textures/blocks/chest/top_item.png b/src/main/resources/assets/appliedenergistics2/textures/blocks/chest/top_item.png new file mode 100644 index 0000000000000000000000000000000000000000..b7c66998f891d37a4fc071dad3fd0e1e12f06459 GIT binary patch literal 278 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xc6hothE&{2x)L_|`GbUH24=A|H8zzG&)?gdOzfY(f8&RO z;)-AHMgr_+>!VM7dVjy3qq~1PcmE~-`TKvexf&ZAZ7?u2WculFb>X|z3X?VWZnCOK z&YUr$fiG1-ib2$PVP&^M!mt1D-6EHj3qbY*#Z_NrTzFXo+6-phgV@zqo9O|!}))||H~^J ZV95Dt`Rf#OQU%Zt44$rjF6*2UngD8*Xl(!h literal 0 HcmV?d00001