From 24ddc0e574b616c9fa28511772fdc0ea83641665 Mon Sep 17 00:00:00 2001 From: shartte Date: Mon, 15 Aug 2016 10:28:45 +0200 Subject: [PATCH] Controller Model (#33) * Implemented the controller models (using the UVL model loader to make the lights be fullbright at night). --- .../block/networking/BlockController.java | 95 ++++++++++++++++-- .../client/render/model/UVLModelLoader.java | 1 + .../blockstates/tile.BlockController.json | 36 +++++++ .../controller_block_conflicted.uvl.json | 42 ++++++++ .../controller/controller_block_offline.json | 6 ++ .../controller_block_online.uvl.json | 42 ++++++++ .../controller_column_conflicted.uvl.json | 42 ++++++++ .../controller/controller_column_offline.json | 6 ++ .../controller_column_online.uvl.json | 42 ++++++++ .../block/controller/controller_inside_a.json | 6 ++ .../block/controller/controller_inside_b.json | 6 ++ .../models/item/tile.BlockController.json | 3 + .../textures/blocks/BlockController.png | Bin 0 -> 307 bytes .../textures/blocks/BlockControllerColumn.png | Bin 0 -> 268 bytes .../blocks/BlockControllerColumnConflict.png | Bin 0 -> 264 bytes .../blocks/BlockControllerColumnLights.png | Bin 0 -> 1265 bytes .../BlockControllerColumnLights.png.mcmeta | 19 ++++ .../blocks/BlockControllerColumnPowered.png | Bin 0 -> 254 bytes .../blocks/BlockControllerConflict.png | Bin 0 -> 275 bytes .../blocks/BlockControllerInsideA.png | Bin 0 -> 294 bytes .../blocks/BlockControllerInsideB.png | Bin 0 -> 298 bytes .../textures/blocks/BlockControllerLights.png | Bin 0 -> 1410 bytes .../blocks/BlockControllerLights.png.mcmeta | 19 ++++ .../blocks/BlockControllerPowered.png | Bin 0 -> 279 bytes 24 files changed, 359 insertions(+), 6 deletions(-) create mode 100644 src/main/resources/assets/appliedenergistics2/blockstates/tile.BlockController.json create mode 100644 src/main/resources/assets/appliedenergistics2/models/block/controller/controller_block_conflicted.uvl.json create mode 100644 src/main/resources/assets/appliedenergistics2/models/block/controller/controller_block_offline.json create mode 100644 src/main/resources/assets/appliedenergistics2/models/block/controller/controller_block_online.uvl.json create mode 100644 src/main/resources/assets/appliedenergistics2/models/block/controller/controller_column_conflicted.uvl.json create mode 100644 src/main/resources/assets/appliedenergistics2/models/block/controller/controller_column_offline.json create mode 100644 src/main/resources/assets/appliedenergistics2/models/block/controller/controller_column_online.uvl.json create mode 100644 src/main/resources/assets/appliedenergistics2/models/block/controller/controller_inside_a.json create mode 100644 src/main/resources/assets/appliedenergistics2/models/block/controller/controller_inside_b.json create mode 100644 src/main/resources/assets/appliedenergistics2/models/item/tile.BlockController.json create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/BlockController.png create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerColumn.png create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerColumnConflict.png create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerColumnLights.png create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerColumnLights.png.mcmeta create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerColumnPowered.png create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerConflict.png create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerInsideA.png create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerInsideB.png create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerLights.png create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerLights.png.mcmeta create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerPowered.png diff --git a/src/main/java/appeng/block/networking/BlockController.java b/src/main/java/appeng/block/networking/BlockController.java index d5468d46..6ff2c899 100644 --- a/src/main/java/appeng/block/networking/BlockController.java +++ b/src/main/java/appeng/block/networking/BlockController.java @@ -27,8 +27,10 @@ import net.minecraft.block.properties.IProperty; import net.minecraft.block.properties.PropertyEnum; import net.minecraft.block.state.IBlockState; import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; import net.minecraft.util.IStringSerializable; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import appeng.block.AEBaseTileBlock; @@ -39,7 +41,7 @@ import appeng.tile.networking.TileController; public class BlockController extends AEBaseTileBlock { - public static enum ControllerBlockState implements IStringSerializable + public enum ControllerBlockState implements IStringSerializable { offline, online, conflicted; @@ -49,26 +51,106 @@ public class BlockController extends AEBaseTileBlock return this.name(); } - }; + } - public static final PropertyEnum CONTROLLER_STATE = PropertyEnum.create( "state", ControllerBlockState.class ); + /** + * Controls the rendering of the controller block (connected texture style). + * inside_a and inside_b are alternating patterns for a controller that is enclosed by other controllers, + * and since they are always offline, they do not have the usual sub-states. + */ + public enum ControllerRenderType implements IStringSerializable + { + block, column, inside_a, inside_b; + + @Override + public String getName() + { + return this.name(); + } + + } + + public static final PropertyEnum CONTROLLER_STATE = PropertyEnum.create( "state", ControllerBlockState.class ); + + public static final PropertyEnum CONTROLLER_TYPE = PropertyEnum.create( "type", ControllerRenderType.class ); @Override protected IProperty[] getAEStates() { - return new IProperty[] { AE_BLOCK_FORWARD, AE_BLOCK_UP, CONTROLLER_STATE }; + return new IProperty[] { AE_BLOCK_FORWARD, AE_BLOCK_UP, CONTROLLER_STATE, CONTROLLER_TYPE }; + } + + /** + * This will compute the AE_BLOCK_FORWARD, AE_BLOCK_UP and CONTROLLER_TYPE block states based on adjacent + * controllers and the network state of this controller (offline, online, conflicted). This is used to + * get a rudimentary connected texture feel for the controller based on how it is placed. + */ + @Override + public IBlockState getActualState( IBlockState state, IBlockAccess world, BlockPos pos ) + { + + // Only used for columns, really + EnumFacing up = EnumFacing.UP; + EnumFacing forward = EnumFacing.NORTH; + ControllerRenderType type = ControllerRenderType.block; + + int x = pos.getX(); + int y = pos.getY(); + int z = pos.getZ(); + + // Detect whether controllers are on both sides of the x, y, and z axes + final boolean xx = this.getTileEntity( world, x - 1, y, z ) instanceof TileController && this.getTileEntity( world, x + 1, y, z ) instanceof TileController; + final boolean yy = this.getTileEntity( world, x, y - 1, z ) instanceof TileController && this.getTileEntity( world, x, y + 1, z ) instanceof TileController; + final boolean zz = this.getTileEntity( world, x, y, z - 1 ) instanceof TileController && this.getTileEntity( world, x, y, z + 1 ) instanceof TileController; + + if( xx && !yy && !zz ) + { + up = EnumFacing.EAST; + forward = EnumFacing.UP; + type = ControllerRenderType.column; + } + else if( !xx && yy && !zz ) + { + up = EnumFacing.UP; + forward = EnumFacing.NORTH; + type = ControllerRenderType.column; + } + else if( !xx && !yy && zz ) + { + up = EnumFacing.NORTH; + forward = EnumFacing.UP; + type = ControllerRenderType.column; + } + else if( ( xx ? 1 : 0 ) + ( yy ? 1 : 0 ) + ( zz ? 1 : 0 ) >= 2 ) + { + final int v = ( Math.abs( x ) + Math.abs( y ) + Math.abs( z ) ) % 2; + + // While i'd like this to be based on the blockstate randomization feature, this generates + // an alternating pattern based on world position, so this is not 100% doable with blockstates. + if( v == 0 ) + { + type = ControllerRenderType.inside_a; + } + else + { + type = ControllerRenderType.inside_b; + } + } + + return state.withProperty( AE_BLOCK_FORWARD, forward ).withProperty( AE_BLOCK_UP, up ).withProperty( CONTROLLER_TYPE, type ); } @Override public int getMetaFromState( final IBlockState state ) { - return ( (ControllerBlockState) state.getValue( CONTROLLER_STATE ) ).ordinal(); + return state.getValue( CONTROLLER_STATE ).ordinal(); } @Override public IBlockState getStateFromMeta( final int meta ) { - return this.getDefaultState().withProperty( CONTROLLER_STATE, ControllerBlockState.offline ); + ControllerBlockState state = ControllerBlockState.values()[meta]; + return this.getDefaultState().withProperty( CONTROLLER_STATE, state ); } @Override @@ -83,6 +165,7 @@ public class BlockController extends AEBaseTileBlock this.setTileEntity( TileController.class ); this.setHardness( 6 ); this.setFeature( EnumSet.of( AEFeature.Channels ) ); + this.setDefaultState( getDefaultState().withProperty( CONTROLLER_STATE, ControllerBlockState.offline ).withProperty( CONTROLLER_TYPE, ControllerRenderType.block ) ); } @Override diff --git a/src/main/java/appeng/client/render/model/UVLModelLoader.java b/src/main/java/appeng/client/render/model/UVLModelLoader.java index b24cec46..64efb974 100644 --- a/src/main/java/appeng/client/render/model/UVLModelLoader.java +++ b/src/main/java/appeng/client/render/model/UVLModelLoader.java @@ -309,6 +309,7 @@ public enum UVLModelLoader implements ICustomModelLoader }; trans.setParent( builder ); quad.pipe( trans ); + builder.setQuadOrientation( quad.getFace() ); return builder.build(); } else diff --git a/src/main/resources/assets/appliedenergistics2/blockstates/tile.BlockController.json b/src/main/resources/assets/appliedenergistics2/blockstates/tile.BlockController.json new file mode 100644 index 00000000..2076edcc --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/blockstates/tile.BlockController.json @@ -0,0 +1,36 @@ +{ + "multipart": [ + { + "when": { "type": "block", "state": "offline" }, + "apply": { "model": "appliedenergistics2:controller/controller_block_offline" } + }, + { + "when": { "type": "block", "state": "online" }, + "apply": { "model": "appliedenergistics2:controller/controller_block_online.uvl" } + }, + { + "when": { "type": "block", "state": "conflicted" }, + "apply": { "model": "appliedenergistics2:controller/controller_block_conflicted.uvl" } + }, + { + "when": { "type": "column", "state": "offline" }, + "apply": { "model": "appliedenergistics2:controller/controller_column_offline" } + }, + { + "when": { "type": "column", "state": "online" }, + "apply": { "model": "appliedenergistics2:controller/controller_column_online.uvl" } + }, + { + "when": { "type": "column", "state": "conflicted" }, + "apply": { "model": "appliedenergistics2:controller/controller_column_conflicted.uvl" } + }, + { + "when": { "type": "inside_a", "state": "offline|online|conflicted" }, + "apply": { "model": "appliedenergistics2:controller/controller_inside_a" } + }, + { + "when": { "type": "inside_b", "state": "offline|online|conflicted" }, + "apply": { "model": "appliedenergistics2:controller/controller_inside_b" } + } + ] +} diff --git a/src/main/resources/assets/appliedenergistics2/models/block/controller/controller_block_conflicted.uvl.json b/src/main/resources/assets/appliedenergistics2/models/block/controller/controller_block_conflicted.uvl.json new file mode 100644 index 00000000..ce79d3db --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/models/block/controller/controller_block_conflicted.uvl.json @@ -0,0 +1,42 @@ +{ + "parent": "block/block", + "display": { + "firstperson_righthand": { + "rotation": [ 0, 135, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + }, + "textures": { + "particle": "#block", + "block": "appliedenergistics2:blocks/BlockControllerPowered", + "lights": "appliedenergistics2:blocks/BlockControllerConflict" + }, + "elements": [ + { + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#lights", "uvlightmap": { "sky": 0.007, "block": 0.007 }}, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#lights", "uvlightmap": { "sky": 0.007, "block": 0.007 }}, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#lights", "uvlightmap": { "sky": 0.007, "block": 0.007 }}, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#lights", "uvlightmap": { "sky": 0.007, "block": 0.007 }}, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#lights", "uvlightmap": { "sky": 0.007, "block": 0.007 }}, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#lights", "uvlightmap": { "sky": 0.007, "block": 0.007 }} + } + }, + { + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#block"}, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#block"}, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#block"}, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#block"}, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#block"}, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#block"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/models/block/controller/controller_block_offline.json b/src/main/resources/assets/appliedenergistics2/models/block/controller/controller_block_offline.json new file mode 100644 index 00000000..ce19e30c --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/models/block/controller/controller_block_offline.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "appliedenergistics2:blocks/BlockController" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/models/block/controller/controller_block_online.uvl.json b/src/main/resources/assets/appliedenergistics2/models/block/controller/controller_block_online.uvl.json new file mode 100644 index 00000000..a2ee5b38 --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/models/block/controller/controller_block_online.uvl.json @@ -0,0 +1,42 @@ +{ + "parent": "block/block", + "display": { + "firstperson_righthand": { + "rotation": [ 0, 135, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + }, + "textures": { + "particle": "#block", + "block": "appliedenergistics2:blocks/BlockControllerPowered", + "lights": "appliedenergistics2:blocks/BlockControllerLights" + }, + "elements": [ + { + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#lights", "uvlightmap": { "sky": 0.007, "block": 0.007 }}, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#lights", "uvlightmap": { "sky": 0.007, "block": 0.007 }}, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#lights", "uvlightmap": { "sky": 0.007, "block": 0.007 }}, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#lights", "uvlightmap": { "sky": 0.007, "block": 0.007 }}, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#lights", "uvlightmap": { "sky": 0.007, "block": 0.007 }}, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#lights", "uvlightmap": { "sky": 0.007, "block": 0.007 }} + } + }, + { + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#block"}, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#block"}, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#block"}, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#block"}, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#block"}, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#block"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/models/block/controller/controller_column_conflicted.uvl.json b/src/main/resources/assets/appliedenergistics2/models/block/controller/controller_column_conflicted.uvl.json new file mode 100644 index 00000000..0dfbdfc0 --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/models/block/controller/controller_column_conflicted.uvl.json @@ -0,0 +1,42 @@ +{ + "parent": "block/block", + "display": { + "firstperson_righthand": { + "rotation": [ 0, 135, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + }, + "textures": { + "particle": "#block", + "block": "appliedenergistics2:blocks/BlockControllerColumnPowered", + "lights": "appliedenergistics2:blocks/BlockControllerColumnConflict" + }, + "elements": [ + { + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#lights", "uvlightmap": { "sky": 0.007, "block": 0.007 }}, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#lights", "uvlightmap": { "sky": 0.007, "block": 0.007 }}, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#lights", "uvlightmap": { "sky": 0.007, "block": 0.007 }}, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#lights", "uvlightmap": { "sky": 0.007, "block": 0.007 }}, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#lights", "uvlightmap": { "sky": 0.007, "block": 0.007 }}, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#lights", "uvlightmap": { "sky": 0.007, "block": 0.007 }} + } + }, + { + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#block"}, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#block"}, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#block"}, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#block"}, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#block"}, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#block"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/models/block/controller/controller_column_offline.json b/src/main/resources/assets/appliedenergistics2/models/block/controller/controller_column_offline.json new file mode 100644 index 00000000..accac3e4 --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/models/block/controller/controller_column_offline.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "appliedenergistics2:blocks/BlockControllerColumn" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/models/block/controller/controller_column_online.uvl.json b/src/main/resources/assets/appliedenergistics2/models/block/controller/controller_column_online.uvl.json new file mode 100644 index 00000000..36ddc370 --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/models/block/controller/controller_column_online.uvl.json @@ -0,0 +1,42 @@ +{ + "parent": "block/block", + "display": { + "firstperson_righthand": { + "rotation": [ 0, 135, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + }, + "textures": { + "particle": "#block", + "block": "appliedenergistics2:blocks/BlockControllerColumnPowered", + "lights": "appliedenergistics2:blocks/BlockControllerColumnLights" + }, + "elements": [ + { + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#lights", "uvlightmap": { "sky": 0.007, "block": 0.007 }}, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#lights", "uvlightmap": { "sky": 0.007, "block": 0.007 }}, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#lights", "uvlightmap": { "sky": 0.007, "block": 0.007 }}, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#lights", "uvlightmap": { "sky": 0.007, "block": 0.007 }}, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#lights", "uvlightmap": { "sky": 0.007, "block": 0.007 }}, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#lights", "uvlightmap": { "sky": 0.007, "block": 0.007 }} + } + }, + { + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#block"}, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#block"}, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#block"}, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#block"}, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#block"}, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#block"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/models/block/controller/controller_inside_a.json b/src/main/resources/assets/appliedenergistics2/models/block/controller/controller_inside_a.json new file mode 100644 index 00000000..db18e8b3 --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/models/block/controller/controller_inside_a.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "appliedenergistics2:blocks/BlockControllerInsideA" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/models/block/controller/controller_inside_b.json b/src/main/resources/assets/appliedenergistics2/models/block/controller/controller_inside_b.json new file mode 100644 index 00000000..f21a110a --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/models/block/controller/controller_inside_b.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "appliedenergistics2:blocks/BlockControllerInsideB" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/models/item/tile.BlockController.json b/src/main/resources/assets/appliedenergistics2/models/item/tile.BlockController.json new file mode 100644 index 00000000..f0c51ccd --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/models/item/tile.BlockController.json @@ -0,0 +1,3 @@ +{ + "parent": "appliedenergistics2:block/controller/controller_block_offline" +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockController.png b/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockController.png new file mode 100644 index 0000000000000000000000000000000000000000..1756710d858426dab7faed6978708c5c8a2c95a9 GIT binary patch literal 307 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85p>QK$!8;-MT+OL8%hgh?3y^w370~qEv=}#LT=BJwMkFg)(D3 zQ$0gN_s>q|Kvj!8T^vI!{Cg)~hJHf;_!cplSZxNXLld)q67w_J-;G3W|)`ExfkL8Bu*iPI$fnkv@}^HsKa z6F7N3ALr1yQ1w{f@r}e!&5k>tRyN2cotfR~oUoZ&N$%ut)eFHJq^+}3-^}^`(s-6e xM~wT1xlBc(5~4QK$!8;-MT+OL8%hgh?3y^w370~qEv=}#LT=BJwMkFg)(D3 zQ$0gN_s>q|KvmVAE{-7<{!9A~@*Ys&VYUuzOW-j}+PJ8P$%f-#>v=#15)X3-TP`~hgox^`2&K>PcOXQZZSp3p;cr~Yr(UWt6 zmsdlqrC3D{=a(Cgg9Y}wd{;g=OF=|H?8G#N4R1b*-PpmnJC8BTAX_L0=nMu=S3j3^ HP6!lvI6;>1s;*b z3=G_YAk0{w5B7``0W7B__Z~RKY_Vj+;mGFW3xMun@O1TaS?83{ F1OUqaT1o%_ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerColumnLights.png b/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerColumnLights.png new file mode 100644 index 0000000000000000000000000000000000000000..8b324a9a233b65248d526e1dc10feaf0ea3e3985 GIT binary patch literal 1265 zcmeAS@N?(olHy`uVBq!ia0vp^0ziC#gAF8d_OTz3Vk{1FcVbv~PUa<$!;&U>c zv7h@-A}f&3S>O>_%)r1c1j3A$?$-SQ3QCo@MwA5Sru2bz@N>EalY;kD)`=f`r-VJ2tHb$X;t#d$O-cjn5t^X9^2quUrrj|t^R~0_%_7JOsGbV;ah*)tasVlE+I4v67bp7*u$k)qG zd>_QflB6CvPsl@6!9A!m{v}Jdh(ZSVS1n9>Ck_~e5YuL4`<86 zE{kG02gmQ;$M{y3G#M(d+@Mh+cEryuh;h31GM4qvw}VZd-+!W<%5I+iT=1vgz5DW1 zkGa>+OFizbUu`4mpinmHsb*scQ<2KlA5;AjrgtCsJgs42Ze#iBrV~HhytF^~O=J1u zQ8PK(@#qu>iFF;u&lyEZ_NTm=;H55MJc+B@Dc$i+ii&8#&Lpo7uS;bo$-k$zscR)B zoo}VGOKWOvmF}N>{1+I$dejYrn!h$6lWjk;ds8!!osZx9;N#<8=Xt4_!om+8U;dvl Y=u&>_(k%aTz!HhU)78&qol`;+0O@uUWB>pF literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerColumnLights.png.mcmeta b/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerColumnLights.png.mcmeta new file mode 100644 index 00000000..9f04d7ff --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerColumnLights.png.mcmeta @@ -0,0 +1,19 @@ +{ + "animation": { + "frametime": 3, + "frames": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 0 + ] + } +} diff --git a/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerColumnPowered.png b/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerColumnPowered.png new file mode 100644 index 0000000000000000000000000000000000000000..1b255cd9a2b42dd1854347e907505c77a463560a GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=G_YAk0{w5}+Y^wg>5#^HekH@o=Q`7wQobF#^NabDcSA_cHdP0$<4rv0mNCVi vi{P^9yw}e%Z-K~!S9YR5CVdt?vV(C}y;b^}>_!lvI6;>1s;*b z3=G_YAk0{w5-+sh&_G|0W8=MZsGg|p3l-daWa8obRV0y0C9{Gdq z{nykzdNY_34qRNQbRl=w#QHBOQRjL4xZi0omWgWIX}-e3Q)VOd=XgY&K;Y)dm$Ro{ Q13Hbt)78&qol`;+0HRW0Qvd(} literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerInsideA.png b/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerInsideA.png new file mode 100644 index 0000000000000000000000000000000000000000..378f14a335d51432acb30effd2d172c2d6ef5973 GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85p>QK$!8;-MT+OL8%hgh?3y^w370~qEv=}#LT=BJwMkFg)(D3 zQ$0gN_s>q|Kvh#cT^vI!{97j-C4m|a+e&~8EJKc^MGXxi`|1Jm7~#& z6V#_3R`T$(^kKTO_O9gJs}+AbIopf=l}y-iBHQTM(T~c3Jr9m(pO~#QK$!8;-MT+OL8%hgh?3y^w370~qEv=}#LT=BJwMkFg)(D3 zQ$0gN_s>q|Kvgq6T^vI!{97koPV5WvB}fVn>rsTJzopr0F8TZDF6Tf literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerLights.png b/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerLights.png new file mode 100644 index 0000000000000000000000000000000000000000..199dc88cf19a8dad0d69c068ab8a216de4d6b7a8 GIT binary patch literal 1410 zcmeAS@N?(olHy`uVBq!ia0vp^0ziC#gAF8d_OTz3Vk{1FcVbv~PUa<$!;&U>c zv7h@-A}f&3S>O>_%)r1c1j3A$?$-SQ3QCo@MwA5Sru2b%QJ)5S3)!+Gf}!*w$5JglYW>o;ET75Tx|=C|lTqfq?e#&ru0d@tB= zjOqSi#;%H*6z01H0mf&|&nkUierb7sfB%11?z+E!@4pT;{_*tZzBp5DR{^FDt63uN z95qEmC-~m!&+Othxz0PgP^jVA1om8o**AoKxTqIpFr`m*maA#HzDx2pt0se#Ol}s_ z+-1T)-F%llpYvcxf-Coi)eaBkrYJ2aO!6)`B{A!i zr#VPNOJVj7`O6~W8SA9Y9;+~%Rph_rV75{9L#N-93oPff+HHQYtS>d*#vR09VsYyV zim}I2u&7V1wK{;yl{H29d-AMDOlM0Er_EtmVEM#R`h?mx z7Q2g`GP4duKApfm|H0P0V`Yw94Q%eSXE`i?>9Q|y@=Hr~3%!VoOmDOTcCaty$e43O zXpT{v`j!V@pH}Y8Vtb$8|2lMY5Q}2Nip8G57;_3_ym{pBjAc6xA07<0eO0XT5GaYr*MI ze4^QGf^QCI%_3n-lg7=b6#4BAX5a03+a$uk+h=Cl=y$oZX0h7kV!wiz4U1TBgf1xH z_Y%Bdu~F3`mB&Bh;ODQmfe~(VuRdn|ELz&~xaum8-22{oBVJm0gTe~DWM4fbkSCU literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerLights.png.mcmeta b/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerLights.png.mcmeta new file mode 100644 index 00000000..3a077b37 --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerLights.png.mcmeta @@ -0,0 +1,19 @@ +{ + "animation": { + "frametime": 3, + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ] + } +} diff --git a/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerPowered.png b/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerPowered.png new file mode 100644 index 0000000000000000000000000000000000000000..9bac90ae143de8504646aa9767f8f5f954f21cad GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=G_YAk0{w5 zvr6>)wx(;hSQH=4GA__n;CZc@Dw?3*BEquC{NUY!*4wOe<+Upwu>IZAutP1gv3Pbn zD@&tK^WuiH29;qYeV?^{e3twxQ|GoQ@w>w=royw45e@=DYjhkd8+|DHy V_6Y)e!+_3X@O1TaS?83{1OSvlVfz38 literal 0 HcmV?d00001