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 00000000..1756710d Binary files /dev/null and b/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockController.png differ 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 00000000..7cbc3d99 Binary files /dev/null and b/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerColumn.png differ diff --git a/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerColumnConflict.png b/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerColumnConflict.png new file mode 100644 index 00000000..6cf24dc0 Binary files /dev/null and b/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerColumnConflict.png differ 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 00000000..8b324a9a Binary files /dev/null and b/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerColumnLights.png differ 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 00000000..1b255cd9 Binary files /dev/null and b/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerColumnPowered.png differ 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 00000000..52ddea7b Binary files /dev/null and b/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerConflict.png differ 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 00000000..378f14a3 Binary files /dev/null and b/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerInsideA.png differ 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 00000000..1a984d43 Binary files /dev/null and b/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerInsideB.png differ 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 00000000..199dc88c Binary files /dev/null and b/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerLights.png differ 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 00000000..9bac90ae Binary files /dev/null and b/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockControllerPowered.png differ