Now with fancy output blocks

This commit is contained in:
WayofTime 2016-01-15 19:36:44 -05:00
parent 07c138710c
commit 2c666a931e
7 changed files with 188 additions and 6 deletions

View file

@ -1,12 +1,19 @@
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;
@ -14,6 +21,13 @@ import WayofTime.bloodmagic.tile.routing.TileOutputRoutingNode;
public class BlockOutputRoutingNode 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 BlockOutputRoutingNode()
{
super(Material.rock);
@ -23,6 +37,63 @@ public class BlockOutputRoutingNode extends BlockContainer
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

View file

@ -143,6 +143,7 @@ public class ModBlocks
renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(spectralBlock));
renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(phantomBlock));
renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(soulForge));
renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(outputRoutingNode));
}
private static Block registerBlock(Block block, Class<? extends ItemBlock> itemBlock, String name)

View file

@ -53,6 +53,7 @@ public class TileRoutingNode extends TileInventory implements IRoutingNode, IIte
public void readFromNBT(NBTTagCompound tag)
{
super.readFromNBT(tag);
connectionList.clear();
NBTTagCompound masterTag = tag.getCompoundTag(Constants.NBT.ROUTING_MASTER);
masterPos = new BlockPos(masterTag.getInteger(Constants.NBT.X_COORD), masterTag.getInteger(Constants.NBT.Y_COORD), masterTag.getInteger(Constants.NBT.Z_COORD));
@ -75,13 +76,15 @@ public class TileRoutingNode extends TileInventory implements IRoutingNode, IIte
}
for (BlockPos testPos : connectionList)
{
this.removeConnection(testPos);
TileEntity tile = worldObj.getTileEntity(testPos);
if (tile instanceof IRoutingNode)
{
((IRoutingNode) tile).removeConnection(pos);
worldObj.markBlockForUpdate(testPos);
}
}
connectionList.clear();
}
@Override
@ -163,8 +166,9 @@ public class TileRoutingNode extends TileInventory implements IRoutingNode, IIte
{
if (connectionList.contains(pos1))
{
worldObj.markBlockForUpdate(this.pos);
connectionList.remove(pos1);
System.out.println("Position: " + pos + ", remaining: " + connectionList.size());
worldObj.markBlockForUpdate(pos);
}
}