Created the proper rendering for the crystal clusters while in hand

This commit is contained in:
WayofTime 2016-02-25 22:00:02 -05:00
parent 19fec96bfd
commit ea24e7edd8
15 changed files with 261 additions and 7 deletions

View file

@ -1,7 +1,9 @@
package WayofTime.bloodmagic.block; package WayofTime.bloodmagic.block;
import java.util.List; import java.util.List;
import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer; import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.block.properties.IProperty; import net.minecraft.block.properties.IProperty;
@ -11,6 +13,7 @@ import net.minecraft.block.state.BlockState;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs; import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
@ -23,17 +26,20 @@ import net.minecraftforge.fml.relauncher.SideOnly;
import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.BloodMagic;
import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.Constants;
import WayofTime.bloodmagic.api.soul.EnumDemonWillType; import WayofTime.bloodmagic.api.soul.EnumDemonWillType;
import WayofTime.bloodmagic.item.ItemComponent;
import WayofTime.bloodmagic.tile.TileAltar;
import WayofTime.bloodmagic.tile.TileDemonCrystal; import WayofTime.bloodmagic.tile.TileDemonCrystal;
public class BlockDemonCrystal extends BlockContainer public class BlockDemonCrystal extends BlockContainer
{ {
public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 6); public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 6);
public static final PropertyEnum<EnumDemonWillType> TYPE = PropertyEnum.<EnumDemonWillType>create("type", EnumDemonWillType.class); public static final PropertyEnum<EnumDemonWillType> TYPE = PropertyEnum.<EnumDemonWillType>create("type", EnumDemonWillType.class);
public static final PropertyEnum<EnumFacing> ATTACHED = PropertyEnum.<EnumFacing>create("attached", EnumFacing.class);
public BlockDemonCrystal() public BlockDemonCrystal()
{ {
super(Material.rock); super(Material.rock);
this.setDefaultState(this.blockState.getBaseState().withProperty(TYPE, EnumDemonWillType.DEFAULT)); this.setDefaultState(this.blockState.getBaseState().withProperty(TYPE, EnumDemonWillType.DEFAULT).withProperty(ATTACHED, EnumFacing.UP));
setUnlocalizedName(Constants.Mod.MODID + ".demonCrystal"); setUnlocalizedName(Constants.Mod.MODID + ".demonCrystal");
setRegistryName(Constants.BloodMagicBlock.DEMON_CRYSTAL.getRegName()); setRegistryName(Constants.BloodMagicBlock.DEMON_CRYSTAL.getRegName());
@ -43,11 +49,36 @@ public class BlockDemonCrystal extends BlockContainer
setHarvestLevel("pickaxe", 2); setHarvestLevel("pickaxe", 2);
} }
@Override
public boolean canPlaceBlockOnSide(World world, BlockPos pos, EnumFacing side)
{
BlockPos offsetPos = pos.offset(side.getOpposite());
IBlockState offsetState = world.getBlockState(offsetPos);
Block offsetBlock = offsetState.getBlock();
return offsetBlock.isSideSolid(world, offsetPos, side) && this.canPlaceBlockAt(world, pos);
}
@Override
public void onNeighborBlockChange(World world, BlockPos pos, IBlockState state, Block neighborBlock)
{
TileDemonCrystal tile = (TileDemonCrystal) world.getTileEntity(pos);
EnumFacing placement = tile.getPlacement();
BlockPos offsetPos = pos.offset(placement.getOpposite());
IBlockState offsetState = world.getBlockState(offsetPos);
Block offsetBlock = offsetState.getBlock();
if (!offsetBlock.isSideSolid(world, offsetPos, placement))
{
world.setBlockToAir(pos);
}
}
@Override @Override
public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos)
{ {
TileDemonCrystal tile = (TileDemonCrystal) world.getTileEntity(pos); TileDemonCrystal tile = (TileDemonCrystal) world.getTileEntity(pos);
return state.withProperty(AGE, tile.getCrystalCountForRender()); return state.withProperty(AGE, tile.getCrystalCountForRender()).withProperty(ATTACHED, tile.getPlacement());
} }
@Override @Override
@ -93,7 +124,6 @@ public class BlockDemonCrystal extends BlockContainer
@Override @Override
public IBlockState getStateFromMeta(int meta) public IBlockState getStateFromMeta(int meta)
{ {
System.out.println("Meta: " + meta + ", " + EnumDemonWillType.values()[meta]);
return this.getDefaultState().withProperty(TYPE, EnumDemonWillType.values()[meta]); return this.getDefaultState().withProperty(TYPE, EnumDemonWillType.values()[meta]);
} }
@ -109,7 +139,7 @@ public class BlockDemonCrystal extends BlockContainer
@Override @Override
protected BlockState createBlockState() protected BlockState createBlockState()
{ {
return new BlockState(this, new IProperty[] { TYPE, AGE }); return new BlockState(this, new IProperty[] { TYPE, AGE, ATTACHED });
} }
@Override @Override
@ -118,6 +148,49 @@ public class BlockDemonCrystal extends BlockContainer
return new TileDemonCrystal(); return new TileDemonCrystal();
} }
@Override
public void breakBlock(World world, BlockPos pos, IBlockState state)
{
TileDemonCrystal tile = (TileDemonCrystal) world.getTileEntity(pos);
EnumDemonWillType type = state.getValue(TYPE);
int number = tile.getCrystalCount();
spawnAsEntity(world, pos, getItemStackDropped(type, number));
world.removeTileEntity(pos);
}
private ItemStack getItemStackDropped(EnumDemonWillType type, int crystalNumber)
{
ItemStack stack = null;
switch (type)
{
case CORROSIVE:
stack = ItemComponent.getStack(ItemComponent.CRYSTAL_CORROSIVE);
break;
case DEFAULT:
stack = ItemComponent.getStack(ItemComponent.CRYSTAL_DEFAULT);
break;
case DESTRUCTIVE:
stack = ItemComponent.getStack(ItemComponent.CRYSTAL_DESTRUCTIVE);
break;
case STEADFAST:
stack = ItemComponent.getStack(ItemComponent.CRYSTAL_STEADFAST);
break;
case VENGEFUL:
stack = ItemComponent.getStack(ItemComponent.CRYSTAL_VENGEFUL);
break;
}
stack.stackSize = crystalNumber;
return stack;
}
@Override
public int quantityDropped(Random random)
{
return 0;
}
@Override @Override
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ)
{ {

View file

@ -3,6 +3,9 @@ package WayofTime.bloodmagic.block;
import net.minecraft.block.BlockContainer; import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.tileentity.TileEntity; 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 net.minecraft.world.World;
import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.BloodMagic;
import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.Constants;
@ -24,6 +27,12 @@ public class BlockDemonCrystallizer extends BlockContainer
// setBlockBounds(0.3F, 0F, 0.3F, 0.72F, 1F, 0.72F); // setBlockBounds(0.3F, 0F, 0.3F, 0.72F, 1F, 0.72F);
} }
@Override
public boolean isSideSolid(IBlockAccess world, BlockPos pos, EnumFacing side)
{
return side == EnumFacing.UP;
}
@Override @Override
public boolean isOpaqueCube() public boolean isOpaqueCube()
{ {

View file

@ -37,6 +37,11 @@ public class ItemComponent extends Item
public static final String REAGENT_SEVERANCE = "reagentSeverance"; public static final String REAGENT_SEVERANCE = "reagentSeverance";
public static final String REAGENT_TELEPOSITION = "reagentTeleposition"; public static final String REAGENT_TELEPOSITION = "reagentTeleposition";
public static final String REAGENT_TRANSPOSITION = "reagentTransposition"; public static final String REAGENT_TRANSPOSITION = "reagentTransposition";
public static final String CRYSTAL_DEFAULT = "crystalDefault";
public static final String CRYSTAL_CORROSIVE = "crystalCorrosive";
public static final String CRYSTAL_VENGEFUL = "crystalVengeful";
public static final String CRYSTAL_DESTRUCTIVE = "crystalDestructive";
public static final String CRYSTAL_STEADFAST = "crystalSteadfast";
public ItemComponent() public ItemComponent()
{ {
@ -71,6 +76,11 @@ public class ItemComponent extends Item
names.add(16, REAGENT_SEVERANCE); names.add(16, REAGENT_SEVERANCE);
names.add(17, REAGENT_TELEPOSITION); names.add(17, REAGENT_TELEPOSITION);
names.add(18, REAGENT_TRANSPOSITION); names.add(18, REAGENT_TRANSPOSITION);
names.add(19, CRYSTAL_DEFAULT);
names.add(20, CRYSTAL_CORROSIVE);
names.add(21, CRYSTAL_VENGEFUL);
names.add(22, CRYSTAL_DESTRUCTIVE);
names.add(23, CRYSTAL_STEADFAST);
} }
@Override @Override

View file

@ -1,9 +1,16 @@
package WayofTime.bloodmagic.item.block; package WayofTime.bloodmagic.item.block;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.BlockPos;
import net.minecraft.util.EnumFacing;
import net.minecraft.world.World;
import WayofTime.bloodmagic.api.soul.EnumDemonWillType; import WayofTime.bloodmagic.api.soul.EnumDemonWillType;
import WayofTime.bloodmagic.tile.TileDemonCrystal;
public class ItemBlockDemonCrystal extends ItemBlock public class ItemBlockDemonCrystal extends ItemBlock
{ {
@ -24,4 +31,21 @@ public class ItemBlockDemonCrystal extends ItemBlock
{ {
return meta; return meta;
} }
@Override
public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, IBlockState newState)
{
if (super.placeBlockAt(stack, player, world, pos, side, hitX, hitY, hitZ, newState))
{
TileEntity tile = world.getTileEntity(pos);
if (tile instanceof TileDemonCrystal)
{
((TileDemonCrystal) tile).setPlacement(side);
}
return true;
}
return false;
}
} }

View file

@ -1,6 +1,7 @@
package WayofTime.bloodmagic.registry; package WayofTime.bloodmagic.registry;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemBlock;
import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.fml.common.registry.GameRegistry;
@ -64,6 +65,7 @@ import WayofTime.bloodmagic.tile.routing.TileItemRoutingNode;
import WayofTime.bloodmagic.tile.routing.TileMasterRoutingNode; import WayofTime.bloodmagic.tile.routing.TileMasterRoutingNode;
import WayofTime.bloodmagic.tile.routing.TileOutputRoutingNode; import WayofTime.bloodmagic.tile.routing.TileOutputRoutingNode;
import WayofTime.bloodmagic.util.helper.InventoryRenderHelper; import WayofTime.bloodmagic.util.helper.InventoryRenderHelper;
import WayofTime.bloodmagic.util.helper.InventoryRenderHelperV2;
public class ModBlocks public class ModBlocks
{ {
@ -168,6 +170,7 @@ public class ModBlocks
public static void initRenders() public static void initRenders()
{ {
InventoryRenderHelper renderHelper = BloodMagic.proxy.getRenderHelper(); InventoryRenderHelper renderHelper = BloodMagic.proxy.getRenderHelper();
InventoryRenderHelperV2 renderHelperV2 = BloodMagic.proxy.getRenderHelperV2();
renderHelper.fluidRender(lifeEssence); renderHelper.fluidRender(lifeEssence);
for (int i = 0; i < BlockBloodRune.names.length; i++) for (int i = 0; i < BlockBloodRune.names.length; i++)
@ -212,8 +215,12 @@ public class ModBlocks
renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(pathBlock), 5); renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(pathBlock), 5);
renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(pathBlock), 6); renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(pathBlock), 6);
renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(pathBlock), 7); renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(pathBlock), 7);
renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(demonCrystal));
renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(demonPylon)); renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(demonPylon));
renderHelperV2.registerRender(InventoryRenderHelper.getItemFromBlock(demonCrystal), 0, "ItemBlockDemonCrystal", "default");
renderHelperV2.registerRender(InventoryRenderHelper.getItemFromBlock(demonCrystal), 1, "ItemBlockDemonCrystal", "corrosive");
renderHelperV2.registerRender(InventoryRenderHelper.getItemFromBlock(demonCrystal), 2, "ItemBlockDemonCrystal", "destructive");
renderHelperV2.registerRender(InventoryRenderHelper.getItemFromBlock(demonCrystal), 3, "ItemBlockDemonCrystal", "vengeful");
renderHelperV2.registerRender(InventoryRenderHelper.getItemFromBlock(demonCrystal), 4, "ItemBlockDemonCrystal", "steadfast");
renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(dimensionalPortal)); renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(dimensionalPortal));
} }

View file

@ -9,6 +9,7 @@ import net.minecraft.network.Packet;
import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.BlockPos; import net.minecraft.util.BlockPos;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.ITickable; import net.minecraft.util.ITickable;
import net.minecraft.util.MathHelper; import net.minecraft.util.MathHelper;
import net.minecraft.world.World; import net.minecraft.world.World;
@ -25,6 +26,9 @@ public class TileDemonCrystal extends TileEntity implements ITickable, IDemonWil
@Getter @Getter
@Setter @Setter
public int crystalCount = 1; public int crystalCount = 1;
@Getter
@Setter
public EnumFacing placement = EnumFacing.UP; //Side that this crystal is placed on.
public TileDemonCrystal() public TileDemonCrystal()
{ {
@ -43,8 +47,6 @@ public class TileDemonCrystal extends TileEntity implements ITickable, IDemonWil
{ {
crystalCount = Math.min(crystalCount + 1, 7); crystalCount = Math.min(crystalCount + 1, 7);
worldObj.markBlockForUpdate(pos); worldObj.markBlockForUpdate(pos);
System.out.println("" + crystalCount);
} }
} }
@ -60,6 +62,7 @@ public class TileDemonCrystal extends TileEntity implements ITickable, IDemonWil
holder.readFromNBT(tag, "Will"); holder.readFromNBT(tag, "Will");
crystalCount = tag.getInteger("crystalCount"); crystalCount = tag.getInteger("crystalCount");
placement = EnumFacing.getFront(tag.getInteger("placement"));
} }
@Override @Override
@ -69,6 +72,7 @@ public class TileDemonCrystal extends TileEntity implements ITickable, IDemonWil
holder.writeToNBT(tag, "Will"); holder.writeToNBT(tag, "Will");
tag.setInteger("crystalCount", crystalCount); tag.setInteger("crystalCount", crystalCount);
tag.setInteger("placement", placement.getIndex());
} }
// IDemonWillConduit // IDemonWillConduit

View file

@ -9,6 +9,40 @@
} }
}, },
"variants": { "variants": {
"attached": {
"down": {
"transform": {
"translation": [ 0, 0, -1 ],
"rotation": {"x": 180}
}
},
"up": {
},
"north": {
"transform": {
"translation": [ 0, 1, 0 ],
"rotation": {"x": -90}
}
},
"south": {
"transform": {
"translation": [ 0, -1, 0 ],
"rotation": {"x": 90}
}
},
"east": {
"transform": {
"translation": [ 0, 0, 1 ],
"rotation": {"z": -90}
}
},
"west": {
"transform": {
"translation": [ 0, 0, 1 ],
"rotation": {"z": 90}
}
}
},
"type": { "type": {
"default": { "default": {
"textures": { "textures": {
@ -89,6 +123,35 @@
"inventory": [{ "inventory": [{
"transform": { "transform": {
"translation": [0.44, -0.1, 0.44] "translation": [0.44, -0.1, 0.44]
},
"variants": {
"type": {
"default": {
"textures": {
"#crystal" : "bloodmagic:models/DefaultCrystal"
}
},
"corrosive": {
"textures": {
"#crystal" : "bloodmagic:models/CorrosiveCrystal"
}
},
"destructive": {
"textures": {
"#crystal" : "bloodmagic:models/DestructiveCrystal"
}
},
"vengeful": {
"textures": {
"#crystal" : "bloodmagic:models/VengefulCrystal"
}
},
"steadfast": {
"textures": {
"#crystal" : "bloodmagic:models/SteadfastCrystal"
}
}
}
} }
}] }]
} }

View file

@ -0,0 +1,39 @@
{
"forge_marker": 1,
"defaults": {
"model": "bloodmagic:crystal/Crystal1.obj",
"custom": { "flip-v": true },
"transform": {
"translation": [ 0, 0, 1]
}
},
"variants": {
"type": {
"default": {
"textures": {
"#crystal" : "bloodmagic:models/DefaultCrystal"
}
},
"corrosive": {
"textures": {
"#crystal" : "bloodmagic:models/CorrosiveCrystal"
}
},
"destructive": {
"textures": {
"#crystal" : "bloodmagic:models/DestructiveCrystal"
}
},
"vengeful": {
"textures": {
"#crystal" : "bloodmagic:models/VengefulCrystal"
}
},
"steadfast": {
"textures": {
"#crystal" : "bloodmagic:models/SteadfastCrystal"
}
}
}
}
}

View file

@ -100,6 +100,31 @@
"textures": { "textures": {
"layer0": "bloodmagic:items/ReagentTransposition" "layer0": "bloodmagic:items/ReagentTransposition"
} }
},
"crystaldefault": {
"textures": {
"layer0": "bloodmagic:items/DefaultCrystal"
}
},
"crystalcorrosive": {
"textures": {
"layer0": "bloodmagic:items/CorrosiveCrystal"
}
},
"crystalvengeful": {
"textures": {
"layer0": "bloodmagic:items/VengefulCrystal"
}
},
"crystaldestructive": {
"textures": {
"layer0": "bloodmagic:items/DestructiveCrystal"
}
},
"crystalsteadfast": {
"textures": {
"layer0": "bloodmagic:items/SteadfastCrystal"
}
} }
} }
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 761 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 740 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 765 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 751 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 796 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 765 B

After

Width:  |  Height:  |  Size: 749 B