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 d5468d462..6ff2c899b 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 b24cec46a..64efb9744 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 000000000..2076edcce --- /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 000000000..ce79d3db0 --- /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 000000000..ce19e30cb --- /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 000000000..a2ee5b384 --- /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 000000000..0dfbdfc0c --- /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 000000000..accac3e47 --- /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 000000000..36ddc3700 --- /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 000000000..db18e8b3a --- /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 000000000..f21a110ab --- /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 000000000..f0c51ccd6 --- /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!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z`&C3 z=u0%cYGu9Q?ujFrl5C4zy0fx*+&&t;uc GLK6TO4Qk8) literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerColumn.png b/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerColumn.png new file mode 100644 index 0000000000000000000000000000000000000000..7cbc3d99e23d0530061ccaa17cf8f3983f66f29c GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z`&C3 z=*8o|0J?9FfecyctjR6FmMZjFyp1Wb$=Kb7^F&EBT9nv(@M${i&7Z^5;OBk z^!!{y6v~YCO!W*6-9I~-Gcd3uc)B=-WH>LKwQ;SCy8!FV*?txV!cu1(5>!l5E(A&$ z&0ykvs`$8tdEd64sFL$#`fSE-56{kixz6_ge}8#-`Of?Qf4uLgQQvQS-~Gw%5QfGZ zp3|1I1aY3281g9GsxelN>3lR(+cwsFy4*^Sr8Uzjn8!%oo_R}pT;`zWABu(2Xl2eUrhX=w!NuKv(X?%F#Q~}#*4a>Hx#G(8KkL* zinX3=x^dD&>p{`cDG%N!dHmCTvXX&m<76Fw&Lu(8| zkC^Wi4e{Y@dDvx9Ea%|(-TN5d%918S<&_&WO2m%%xdky!*Ivf5{`q#W$@BY9lvCNw z)1M3e^t*Rop6W68`gy6xz4fbYL>&~$COy?`3}Gr#nfha@U&8e61D~fgEX-{zKizcV zhntu72ft}7Up#6iM>`&!;vliE!}vL)NXh<`Hxs?Ha3)HZdk#H91BRCZ}it*z4ilaK#C7yPM5-7u*6YXdUb_9MGDH51wS_`MH4KK^x{ jmzpUo{NVBB{~3cW<)<#q@;}GGz`)??>gTe~DWM4f>2?!j 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 000000000..9f04d7ff8 --- /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!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^xl_H+M9WMyDr z;4JWnEM{Qf76f6&`jq&I3=9lXC9V-A!TD(=<%vb93;~Imc_n&&t|1C##(JiDhKBB+ zoy-{+7^*y7978Pp=k{@PH5l+X+XnJ)WPW$*GDoAp?OGAJo7bK_6ct?j-7YFy|9tt! zH!pZ(OM)3MPTJQPd;Ki)7KluEWheS$(r3{lI~ZrxTcxkbex$^}z`)??>gTe~DWM4f Dy3JNk literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerConflict.png b/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerConflict.png new file mode 100644 index 0000000000000000000000000000000000000000..52ddea7b5de33ab6daafb30e6b4ac5cf4a8c912a GIT binary patch literal 275 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^xl_H+M9WMyDr z;4JWnEM{Qf76f6&`jq&I3=9lXC9V-A!TD(=<%vb93;~Imc_n&&t|1C##(JiDhKBB+ zoy-{+82UY3978Ppm-ZR*wHWZQRPwPNHLdwtcj$MKMCPKew>;)(wB7KwIcIdN!j-e{ ze4U(S^ZQ+M-OmLHw=gW~S8T1GAmz%MB71%L?MF;!zqTH|!Rb&uqm^$$sg2MNH}xV7 zrssO?kw4hpe@)$^H-jnRz{Q117jkz^tpAb{b)L76`<(`3nW)B{<|`~bWi~>8jz`o9 Y1a6*uIeY3g1_lNOPgg&ebxsLQ0HRW0Qvd(} 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!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z`&C3 z=Bqq2se#k4`DESnD)xXXaMuUYV#fO}&A2XZkXAhukFxc1Bv=;5=X% z!(#WKN#$rX;{^4ohm}11EPa@6ti3CF_iDwTPR{nCermm1+yph4Ke$n%D|F-;QKl3T`eRsz(CI$uu22WQ%mvv4FO#r6pX;%OM literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerInsideB.png b/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerInsideB.png new file mode 100644 index 0000000000000000000000000000000000000000..1a984d43c9d4d01688525cb40e740f259312ec9e GIT binary patch literal 298 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z`&C3 z=ER@X<##53tU6L8Y;5xM^QO)RO3yRqG#5?OIJV%C yvBggJcPDLlYfq~^JKe+kpj^0i+qX;Wr6+yKag>oxc+0@Rz~JfX=d#Wzp$Pzudv7TK 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!ia0y~yU=UznU^u|R1`;{@*pGpMfw4Hq-HBn{IhmIX3=Ayk zj=qiz3>*8o|0J?9FfecyctjR6FmMZjFyp1Wb$=Kb7^F&EBT9nv(@M${i&7Z^5;OBk z^!!{y6v~YCO!W*6-9I~-Gcd4x^mK6y$#7me%W$2HI}dBA`TC6)d_{h+wfQYN&?ppt zxN+Tr1K$fa9AmnFn6ay(CWZNKL4fgD^Rr6dmtR`m-{1e=mAmfm-}|pajek7-xi8LC z+f{(6!)lhuJ4a0s(FwkH`ZK$@O|J9KE);5bHi11?VfGE7A1>-e8BFO@o#kqpuJ4k( z&8o>DC6k-QGJX`VYS0UxhYBu3X{AGPD#wW(4>F<`qx#GHPv6{ zhj%Hk2$Y&=-f0ff&{CMaL;kXec*Z(uv&Sk7XBGKxIhbu!{m|+6O~8l2YHsvb^UZr*6gHi2oPwt^fC#cK&#t{n!2XzjyZQMI1R4US$OBU|$*# z;$T*2zf4o_LX3INF;9kB&T?BCbCSFt2+uvSkaJEbU*!kRxYubp;!7AZ3bw4|EScr^ zMA~%byyB+EO`^I7)-knK2Xr+Y>(o7{nOxz-y^k;Z(DR4Srz&wUy2$!+eP1Bb#dSjM z-Eotntg~LXoweX}C_d3_Ho-TCvu2U7rAg!FQ;Pg{2ea??yloO;;O#RrZS=d`S+iK} zazraq#ok+h12n+T5#;SwD-Gwmh!7$|Lu_x88`C tRvvl&OWkJQ_y2K$w8-N<{r>+MCm%0mUD{H(l7WGN!PC{xWt~$(699D4R)GKj 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 000000000..3a077b37e --- /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!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^xl_H+M9WMyDr z;4JWnEM{Qf76f6&`jq&I3=9lXC9V-A!TD(=<%vb93;~Imc_n&&t|1C##(JiDhKBB+ zoy-{+7$$qVIEGmGPo3Pzc|bvcd3UF@MGNz;O}Q-|J@1{l-OsAC&AYVxn$?t`Q_H5F zn9aKP`_b< zJJd28i)Xj9vNZZMFK#$%P#IRz_gU-5XUV@Zb#99izdP(=Dm)t*;UEyScE@(EDKDn0 dE)PG>?ObAEpCGU|jDdlH!PC{xWt~$(69AM!Vfz38 literal 0 HcmV?d00001