From 76dceb35340ca2ad866c1ce654a7361146a46cb8 Mon Sep 17 00:00:00 2001 From: WayofTime Date: Fri, 15 Jan 2016 21:53:55 -0500 Subject: [PATCH] Tinkered with the beam a bit. Added WIP models for the routing nodes. Added basic item routing node. --- .../block/BlockInputRoutingNode.java | 22 ++--- .../block/BlockItemRoutingNode.java | 42 ++++++++ .../block/BlockOutputRoutingNode.java | 81 +--------------- .../bloodmagic/block/BlockRoutingNode.java | 97 +++++++++++++++++++ .../bloodmagic/registry/ModBlocks.java | 7 ++ .../tile/routing/TileItemRoutingNode.java | 9 ++ .../blockstates/BlockInputRoutingNode.json | 48 ++++++++- .../blockstates/BlockItemRoutingNode.json | 45 +++++++++ .../models/item/BlockInputRoutingNode.json | 14 +++ .../models/item/BlockItemRoutingNode.json | 15 +++ .../bloodmagic/shaders/beam-broken.frag | 2 +- 11 files changed, 283 insertions(+), 99 deletions(-) create mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockItemRoutingNode.java create mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockRoutingNode.java create mode 100644 src/main/java/WayofTime/bloodmagic/tile/routing/TileItemRoutingNode.java create mode 100644 src/main/resources/assets/bloodmagic/blockstates/BlockItemRoutingNode.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/BlockInputRoutingNode.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/BlockItemRoutingNode.json diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockInputRoutingNode.java b/src/main/java/WayofTime/bloodmagic/block/BlockInputRoutingNode.java index 27aedde0..7219c53a 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockInputRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockInputRoutingNode.java @@ -1,7 +1,5 @@ package WayofTime.bloodmagic.block; -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; @@ -10,19 +8,15 @@ import net.minecraft.util.EnumFacing; import net.minecraft.world.World; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.tile.routing.TileInputRoutingNode; +import WayofTime.bloodmagic.tile.routing.TileOutputRoutingNode; -public class BlockInputRoutingNode extends BlockContainer +public class BlockInputRoutingNode extends BlockRoutingNode { public BlockInputRoutingNode() { - super(Material.rock); + super(); setUnlocalizedName(Constants.Mod.MODID + ".inputRouting"); - setCreativeTab(BloodMagic.tabBloodMagic); - setHardness(2.0F); - setResistance(5.0F); - setHarvestLevel("pickaxe", 2); } @Override @@ -34,7 +28,7 @@ public class BlockInputRoutingNode extends BlockContainer @Override public TileEntity createNewTileEntity(World worldIn, int meta) { - return new TileInputRoutingNode(); + return new TileOutputRoutingNode(); } @Override @@ -42,10 +36,10 @@ public class BlockInputRoutingNode extends BlockContainer public void breakBlock(World world, BlockPos pos, IBlockState state) { TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TileInputRoutingNode) + if (tile instanceof TileOutputRoutingNode) { - ((TileInputRoutingNode) tile).removeAllConnections(); - ((TileInputRoutingNode) tile).dropItems(); + ((TileOutputRoutingNode) tile).removeAllConnections(); + ((TileOutputRoutingNode) tile).dropItems(); } super.breakBlock(world, pos, state); } @@ -53,7 +47,7 @@ public class BlockInputRoutingNode extends BlockContainer @Override public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) { - if (world.getTileEntity(pos) instanceof TileInputRoutingNode) + if (world.getTileEntity(pos) instanceof TileOutputRoutingNode) { player.openGui(BloodMagic.instance, Constants.Gui.ROUTING_NODE_GUI, world, pos.getX(), pos.getY(), pos.getZ()); } diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockItemRoutingNode.java b/src/main/java/WayofTime/bloodmagic/block/BlockItemRoutingNode.java new file mode 100644 index 00000000..63e5c808 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/block/BlockItemRoutingNode.java @@ -0,0 +1,42 @@ +package WayofTime.bloodmagic.block; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockPos; +import net.minecraft.world.World; +import WayofTime.bloodmagic.api.Constants; +import WayofTime.bloodmagic.tile.routing.TileItemRoutingNode; +import WayofTime.bloodmagic.tile.routing.TileRoutingNode; + +public class BlockItemRoutingNode extends BlockRoutingNode +{ + public BlockItemRoutingNode() + { + super(); + + setUnlocalizedName(Constants.Mod.MODID + ".itemRouting"); + } + + @Override + public int getRenderType() + { + return 3; + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileItemRoutingNode(); + } + + @Override + public void breakBlock(World world, BlockPos pos, IBlockState state) + { + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileRoutingNode) + { + ((TileRoutingNode) tile).removeAllConnections(); + } + super.breakBlock(world, pos, state); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockOutputRoutingNode.java b/src/main/java/WayofTime/bloodmagic/block/BlockOutputRoutingNode.java index a4289630..89baa139 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockOutputRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockOutputRoutingNode.java @@ -1,99 +1,22 @@ package WayofTime.bloodmagic.block; -import net.minecraft.block.Block; -import net.minecraft.block.BlockContainer; -import net.minecraft.block.BlockFenceGate; -import net.minecraft.block.material.Material; -import net.minecraft.block.properties.IProperty; -import net.minecraft.block.properties.PropertyBool; -import net.minecraft.block.state.BlockState; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; -import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.tile.routing.TileOutputRoutingNode; -public class BlockOutputRoutingNode extends BlockContainer +public class BlockOutputRoutingNode extends BlockRoutingNode { - public static final PropertyBool UP = PropertyBool.create("up"); - public static final PropertyBool DOWN = PropertyBool.create("down"); - public static final PropertyBool NORTH = PropertyBool.create("north"); - public static final PropertyBool EAST = PropertyBool.create("east"); - public static final PropertyBool SOUTH = PropertyBool.create("south"); - public static final PropertyBool WEST = PropertyBool.create("west"); - public BlockOutputRoutingNode() { - super(Material.rock); + super(); setUnlocalizedName(Constants.Mod.MODID + ".outputRouting"); - setCreativeTab(BloodMagic.tabBloodMagic); - setHardness(2.0F); - setResistance(5.0F); - setHarvestLevel("pickaxe", 2); - - this.setDefaultState(this.blockState.getBaseState().withProperty(DOWN, Boolean.valueOf(false)).withProperty(UP, Boolean.valueOf(false)).withProperty(NORTH, Boolean.valueOf(false)).withProperty(EAST, Boolean.valueOf(false)).withProperty(SOUTH, Boolean.valueOf(false)).withProperty(WEST, Boolean.valueOf(false))); - } - - @Override - public boolean isOpaqueCube() - { - return false; - } - - @Override - public boolean isFullCube() - { - return false; - } - - @Override - public boolean isVisuallyOpaque() - { - return false; - } - - @Override - public IBlockState getStateFromMeta(int meta) - { - return this.getDefaultState(); - } - - /** - * Convert the BlockState into the correct metadata value - */ - @Override - public int getMetaFromState(IBlockState state) - { - return 0; - } - - @Override - public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) - { - return state.withProperty(UP, Boolean.valueOf(this.shouldConnect(worldIn, pos.up()))).withProperty(DOWN, Boolean.valueOf(this.shouldConnect(worldIn, pos.down()))).withProperty(NORTH, Boolean.valueOf(this.shouldConnect(worldIn, pos.north()))).withProperty(EAST, Boolean.valueOf(this.shouldConnect(worldIn, pos.east()))).withProperty(SOUTH, Boolean.valueOf(this.shouldConnect(worldIn, pos.south()))).withProperty(WEST, Boolean.valueOf(this.shouldConnect(worldIn, pos.west()))); - } - - @Override - protected BlockState createBlockState() - { - return new BlockState(this, new IProperty[] { UP, DOWN, NORTH, EAST, WEST, SOUTH }); - } - - public boolean shouldConnect(IBlockAccess world, BlockPos pos) - { - Block block = world.getBlockState(pos).getBlock(); - if (block instanceof BlockOutputRoutingNode) - { - return false; - } - return block == Blocks.barrier ? false : (block != this && !(block instanceof BlockFenceGate) ? (block.getMaterial().isOpaque() && block.isFullCube() ? block.getMaterial() != Material.gourd : false) : true); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockRoutingNode.java b/src/main/java/WayofTime/bloodmagic/block/BlockRoutingNode.java new file mode 100644 index 00000000..8b40e51f --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/block/BlockRoutingNode.java @@ -0,0 +1,97 @@ +package WayofTime.bloodmagic.block; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.BlockFenceGate; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.BlockState; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.BlockPos; +import net.minecraft.world.IBlockAccess; +import WayofTime.bloodmagic.BloodMagic; + +public abstract class BlockRoutingNode extends BlockContainer +{ + public static final PropertyBool UP = PropertyBool.create("up"); + public static final PropertyBool DOWN = PropertyBool.create("down"); + public static final PropertyBool NORTH = PropertyBool.create("north"); + public static final PropertyBool EAST = PropertyBool.create("east"); + public static final PropertyBool SOUTH = PropertyBool.create("south"); + public static final PropertyBool WEST = PropertyBool.create("west"); + + public BlockRoutingNode() + { + super(Material.rock); + + setCreativeTab(BloodMagic.tabBloodMagic); + setHardness(2.0F); + setResistance(5.0F); + setHarvestLevel("pickaxe", 2); + + this.setDefaultState(this.blockState.getBaseState().withProperty(DOWN, Boolean.valueOf(false)).withProperty(UP, Boolean.valueOf(false)).withProperty(NORTH, Boolean.valueOf(false)).withProperty(EAST, Boolean.valueOf(false)).withProperty(SOUTH, Boolean.valueOf(false)).withProperty(WEST, Boolean.valueOf(false))); + } + + @Override + public boolean isOpaqueCube() + { + return false; + } + + @Override + public boolean isFullCube() + { + return false; + } + + @Override + public boolean isVisuallyOpaque() + { + return false; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState(); + } + + /** + * Convert the BlockState into the correct metadata value + */ + @Override + public int getMetaFromState(IBlockState state) + { + return 0; + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return state.withProperty(UP, Boolean.valueOf(this.shouldConnect(worldIn, pos.up()))).withProperty(DOWN, Boolean.valueOf(this.shouldConnect(worldIn, pos.down()))).withProperty(NORTH, Boolean.valueOf(this.shouldConnect(worldIn, pos.north()))).withProperty(EAST, Boolean.valueOf(this.shouldConnect(worldIn, pos.east()))).withProperty(SOUTH, Boolean.valueOf(this.shouldConnect(worldIn, pos.south()))).withProperty(WEST, Boolean.valueOf(this.shouldConnect(worldIn, pos.west()))); + } + + @Override + protected BlockState createBlockState() + { + return new BlockState(this, new IProperty[] { UP, DOWN, NORTH, EAST, WEST, SOUTH }); + } + + public boolean shouldConnect(IBlockAccess world, BlockPos pos) + { + Block block = world.getBlockState(pos).getBlock(); + if (block instanceof BlockRoutingNode) + { + return false; + } + return block == Blocks.barrier ? false : (block != this && !(block instanceof BlockFenceGate) ? (block.getMaterial().isOpaque() && block.isFullCube() ? block.getMaterial() != Material.gourd : false) : true); + } + + @Override + public int getRenderType() + { + return 3; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java b/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java index f1840567..45a904cc 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java @@ -14,6 +14,7 @@ import WayofTime.bloodmagic.block.BlockBloodRune; import WayofTime.bloodmagic.block.BlockBloodStoneBrick; import WayofTime.bloodmagic.block.BlockCrystal; import WayofTime.bloodmagic.block.BlockInputRoutingNode; +import WayofTime.bloodmagic.block.BlockItemRoutingNode; import WayofTime.bloodmagic.block.BlockLifeEssence; import WayofTime.bloodmagic.block.BlockMasterRoutingNode; import WayofTime.bloodmagic.block.BlockOutputRoutingNode; @@ -41,6 +42,7 @@ import WayofTime.bloodmagic.tile.TileSoulForge; import WayofTime.bloodmagic.tile.TileSpectralBlock; import WayofTime.bloodmagic.tile.TileTeleposer; import WayofTime.bloodmagic.tile.routing.TileInputRoutingNode; +import WayofTime.bloodmagic.tile.routing.TileItemRoutingNode; import WayofTime.bloodmagic.tile.routing.TileMasterRoutingNode; import WayofTime.bloodmagic.tile.routing.TileOutputRoutingNode; import WayofTime.bloodmagic.util.helper.InventoryRenderHelper; @@ -68,6 +70,7 @@ public class ModBlocks public static Block masterRoutingNode; public static Block inputRoutingNode; public static Block outputRoutingNode; + public static Block itemRoutingNode; public static void init() { @@ -91,6 +94,7 @@ public class ModBlocks masterRoutingNode = registerBlock(new BlockMasterRoutingNode()); inputRoutingNode = registerBlock(new BlockInputRoutingNode()); outputRoutingNode = registerBlock(new BlockOutputRoutingNode()); + itemRoutingNode = registerBlock(new BlockItemRoutingNode()); initTiles(); } @@ -109,6 +113,7 @@ public class ModBlocks GameRegistry.registerTileEntity(TileMasterRoutingNode.class, Constants.Mod.MODID + ":" + TileMasterRoutingNode.class.getSimpleName()); GameRegistry.registerTileEntity(TileInputRoutingNode.class, Constants.Mod.MODID + ":" + TileInputRoutingNode.class.getSimpleName()); GameRegistry.registerTileEntity(TileOutputRoutingNode.class, Constants.Mod.MODID + ":" + TileOutputRoutingNode.class.getSimpleName()); + GameRegistry.registerTileEntity(TileItemRoutingNode.class, Constants.Mod.MODID + ":" + TileItemRoutingNode.class.getSimpleName()); } public static void initRenders() @@ -144,6 +149,8 @@ public class ModBlocks renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(phantomBlock)); renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(soulForge)); renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(outputRoutingNode)); + renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(inputRoutingNode)); + renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(itemRoutingNode)); } private static Block registerBlock(Block block, Class itemBlock, String name) diff --git a/src/main/java/WayofTime/bloodmagic/tile/routing/TileItemRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/routing/TileItemRoutingNode.java new file mode 100644 index 00000000..01ef2372 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/tile/routing/TileItemRoutingNode.java @@ -0,0 +1,9 @@ +package WayofTime.bloodmagic.tile.routing; + +public class TileItemRoutingNode extends TileRoutingNode +{ + public TileItemRoutingNode() + { + super(0, "itemNode"); + } +} diff --git a/src/main/resources/assets/bloodmagic/blockstates/BlockInputRoutingNode.json b/src/main/resources/assets/bloodmagic/blockstates/BlockInputRoutingNode.json index 917817b1..765f7abd 100644 --- a/src/main/resources/assets/bloodmagic/blockstates/BlockInputRoutingNode.json +++ b/src/main/resources/assets/bloodmagic/blockstates/BlockInputRoutingNode.json @@ -1,7 +1,45 @@ { - "variants": { - "normal": { "model": "bloodmagic:BlockInputRoutingNode" } - } + "forge_marker": 1, + "defaults": { + "model": "bloodmagic:routing/OutputRoutingNodeCore", + "rotation": [ + { + "y": 45 + }, + { + "x": 45 + } + ], + "textures": { + "core": "blocks/gold_block", + "attachment": "minecraft:blocks/stone" + }, + "uvlock": true // This and all other properties of "defaults" will be inherited by simple submodels. They will NOT be inherited by named submodels. + }, + "variants": { + "north": { + "true": {"submodel": "bloodmagic:routing/RoutingNodeBase"}, // Simple submodel declaration. You can also specify multiple submodels for a variant. + "false": {} + }, + "south": { + "true": {"submodel": "bloodmagic:routing/RoutingNodeBase", "y": 180}, + "false": {} + }, + "east": { + "true": {"submodel": "bloodmagic:routing/RoutingNodeBase", "y": 90}, // Submodel will be rotated. + "false": {} + }, + "west": { + "true": {"submodel": "bloodmagic:routing/RoutingNodeBase", "y": 270}, + "false": {} + }, + "down": { + "true": {"submodel": "bloodmagic:routing/RoutingNodeBase", "x": 90}, + "false": {} + }, + "up": { + "true": {"submodel": "bloodmagic:routing/RoutingNodeBase", "x": -90}, + "false": {} + } // Must have this in here or the blockstates loader will not know of all the properties and values, and it will create the wrong vanilla state strings. + } } - - diff --git a/src/main/resources/assets/bloodmagic/blockstates/BlockItemRoutingNode.json b/src/main/resources/assets/bloodmagic/blockstates/BlockItemRoutingNode.json new file mode 100644 index 00000000..91a27c19 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/BlockItemRoutingNode.json @@ -0,0 +1,45 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "bloodmagic:routing/OutputRoutingNodeCore", + "rotation": [ + { + "y": 45 + }, + { + "x": 45 + } + ], + "textures": { + "core": "blocks/cobblestone", + "attachment": "minecraft:blocks/stone" + }, + "uvlock": true // This and all other properties of "defaults" will be inherited by simple submodels. They will NOT be inherited by named submodels. + }, + "variants": { + "north": { + "true": {"submodel": "bloodmagic:routing/RoutingNodeBase"}, // Simple submodel declaration. You can also specify multiple submodels for a variant. + "false": {} + }, + "south": { + "true": {"submodel": "bloodmagic:routing/RoutingNodeBase", "y": 180}, + "false": {} + }, + "east": { + "true": {"submodel": "bloodmagic:routing/RoutingNodeBase", "y": 90}, // Submodel will be rotated. + "false": {} + }, + "west": { + "true": {"submodel": "bloodmagic:routing/RoutingNodeBase", "y": 270}, + "false": {} + }, + "down": { + "true": {"submodel": "bloodmagic:routing/RoutingNodeBase", "x": 90}, + "false": {} + }, + "up": { + "true": {"submodel": "bloodmagic:routing/RoutingNodeBase", "x": -90}, + "false": {} + } // Must have this in here or the blockstates loader will not know of all the properties and values, and it will create the wrong vanilla state strings. + } +} diff --git a/src/main/resources/assets/bloodmagic/models/item/BlockInputRoutingNode.json b/src/main/resources/assets/bloodmagic/models/item/BlockInputRoutingNode.json new file mode 100644 index 00000000..575ef478 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/BlockInputRoutingNode.json @@ -0,0 +1,14 @@ +{ + "parent": "bloodmagic:block/routing/OutputRoutingNodeCore", + "textures": { + "core": "blocks/gold_block", + "attachment": "minecraft:blocks/stone" + }, + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} diff --git a/src/main/resources/assets/bloodmagic/models/item/BlockItemRoutingNode.json b/src/main/resources/assets/bloodmagic/models/item/BlockItemRoutingNode.json new file mode 100644 index 00000000..ab8dcb8f --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/BlockItemRoutingNode.json @@ -0,0 +1,15 @@ +{ + "parent": "bloodmagic:block/routing/OutputRoutingNodeCore", + "textures": { + "core": "blocks/cobblestone", + "attachment": "minecraft:blocks/stone" + }, + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} + diff --git a/src/main/resources/assets/bloodmagic/shaders/beam-broken.frag b/src/main/resources/assets/bloodmagic/shaders/beam-broken.frag index 6fdac1f1..63693c95 100644 --- a/src/main/resources/assets/bloodmagic/shaders/beam-broken.frag +++ b/src/main/resources/assets/bloodmagic/shaders/beam-broken.frag @@ -6,5 +6,5 @@ vec4 color = texture2D(bgl_RenderedTexture, texcoord); float r = sin(texcoord.x * 6 - 1.5 + sin(texcoord.y - time / 3.0)) * 1.1; //(sin((texcoord.x - texcoord.y) * 4 - time) + 1) / 2; - gl_FragColor = vec4(color.r * gl_Color.r, color.g * gl_Color.g, max(color.b * gl_Color.b, r), color.a * gl_Color.a); + gl_FragColor = vec4(min(1 - r, color.r * gl_Color.r), min(1 - r, color.g * gl_Color.g), color.b * gl_Color.b, color.a * gl_Color.a); }