diff --git a/src/main/java/WayofTime/bloodmagic/api/ritual/PropertyRuneType.java b/src/main/java/WayofTime/bloodmagic/api/ritual/PropertyRuneType.java new file mode 100644 index 00000000..02bfb8a2 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/api/ritual/PropertyRuneType.java @@ -0,0 +1,48 @@ +package WayofTime.bloodmagic.api.ritual; + +import java.util.Collection; + +import net.minecraft.block.properties.PropertyEnum; + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.Collections2; +import com.google.common.collect.Lists; + +public class PropertyRuneType extends PropertyEnum +{ + protected PropertyRuneType(String name, Collection values) + { + super(name, EnumRuneType.class, values); + } + + /** + * Create a new PropertyRuneType with the given name + */ + public static PropertyRuneType create(String name) + { + /** + * Create a new PropertyRuneType with all directions that match the given Predicate + */ + return create(name, Predicates.alwaysTrue()); + } + + /** + * Create a new PropertyRuneType with all directions that match the given Predicate + */ + public static PropertyRuneType create(String name, Predicate filter) + { + /** + * Create a new PropertyRuneType for the given direction values + */ + return create(name, Collections2.filter(Lists.newArrayList(EnumRuneType.values()), filter)); + } + + /** + * Create a new PropertyRuneType for the given direction values + */ + public static PropertyRuneType create(String name, Collection values) + { + return new PropertyRuneType(name, values); + } +} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockRitualStone.java b/src/main/java/WayofTime/bloodmagic/block/BlockRitualStone.java new file mode 100644 index 00000000..39024568 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/block/BlockRitualStone.java @@ -0,0 +1,83 @@ +package WayofTime.bloodmagic.block; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.BlockState; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockPos; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import WayofTime.bloodmagic.BloodMagic; +import WayofTime.bloodmagic.api.ritual.EnumRuneType; +import WayofTime.bloodmagic.api.ritual.IRitualStone; +import WayofTime.bloodmagic.api.ritual.PropertyRuneType; + +public class BlockRitualStone extends Block implements IRitualStone { + + public static final String[] names = { "blank", "water", "fire", "earth", "air", "dusk", "dawn" }; + public static final PropertyRuneType TYPE = PropertyRuneType.create("TYPE"); + + public BlockRitualStone() { + super(Material.iron); + + setUnlocalizedName(BloodMagic.MODID + ".ritualStone."); + setCreativeTab(BloodMagic.tabBloodMagic); + setStepSound(soundTypeStone); + setHardness(2.0F); + setResistance(5.0F); + setHarvestLevel("pickaxe", 2); + } + + @Override + public IBlockState getStateFromMeta(int meta) { + return this.getDefaultState() + .withProperty(TYPE, EnumRuneType.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) { + return ((EnumRuneType) state.getValue(TYPE)).ordinal(); + } + + @Override + public int damageDropped(IBlockState state) { + return 0; + } + + @Override + protected BlockState createBlockState() { + return new BlockState(this, TYPE); + } + + @Override + public ItemStack getPickBlock(MovingObjectPosition target, World world, BlockPos pos, EntityPlayer player) { + return new ItemStack(this, 1, this.getMetaFromState(world + .getBlockState(pos))); + } + + @Override + @SideOnly(Side.CLIENT) + @SuppressWarnings("unchecked") + public void getSubBlocks(Item item, CreativeTabs creativeTabs, List list) { + for (int i = 0; i < names.length; i++) + list.add(new ItemStack(this, 1, i)); + } + + @Override + public boolean isRuneType(World world, BlockPos pos, int meta, EnumRuneType runeType) { + return this.getRitualStone(world, pos, meta).equals(runeType); + } + + private EnumRuneType getRitualStone(World world, BlockPos pos, int meta) { + IBlockState state = this.getStateFromMeta(meta); + return ((EnumRuneType) state.getValue(TYPE)); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockRitualStone.java b/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockRitualStone.java new file mode 100644 index 00000000..ce80ebea --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockRitualStone.java @@ -0,0 +1,24 @@ +package WayofTime.bloodmagic.item.block; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import WayofTime.bloodmagic.block.BlockRitualStone; + +public class ItemBlockRitualStone extends ItemBlock { + + public ItemBlockRitualStone(Block block) { + super(block); + setHasSubtypes(true); + } + + @Override + public String getUnlocalizedName(ItemStack stack) { + return super.getUnlocalizedName(stack) + BlockRitualStone.names[stack.getItemDamage()]; + } + + @Override + public int getMetadata(int meta) { + return meta; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java b/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java index 8837990e..4f5c3289 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java @@ -10,9 +10,11 @@ import WayofTime.bloodmagic.block.BlockAltar; import WayofTime.bloodmagic.block.BlockBloodRune; import WayofTime.bloodmagic.block.BlockLifeEssence; import WayofTime.bloodmagic.block.BlockRitualController; +import WayofTime.bloodmagic.block.BlockRitualStone; import WayofTime.bloodmagic.block.BlockTestSpellBlock; import WayofTime.bloodmagic.item.block.ItemBlockBloodRune; import WayofTime.bloodmagic.item.block.ItemBlockRitualController; +import WayofTime.bloodmagic.item.block.ItemBlockRitualStone; import WayofTime.bloodmagic.tile.TileAltar; import WayofTime.bloodmagic.tile.TileImperfectRitualStone; import WayofTime.bloodmagic.tile.TileMasterRitualStone; @@ -22,6 +24,7 @@ public class ModBlocks { public static Block altar; public static Block bloodRune; + public static Block ritualController; public static Block ritualStone; public static Block testSpellBlock; @@ -37,7 +40,8 @@ public class ModBlocks altar = registerBlock(new BlockAltar()); bloodRune = registerBlock(new BlockBloodRune(), ItemBlockBloodRune.class); - ritualStone = registerBlock(new BlockRitualController(), ItemBlockRitualController.class); + ritualController = registerBlock(new BlockRitualController(), ItemBlockRitualController.class); + ritualStone = registerBlock(new BlockRitualStone(), ItemBlockRitualStone.class); testSpellBlock = registerBlock(new BlockTestSpellBlock()); initTiles(); @@ -65,8 +69,15 @@ public class ModBlocks renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(bloodRune), 7); renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(bloodRune), 8); renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(bloodRune), 9); + renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(ritualController), 0); + renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(ritualController), 1); renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(ritualStone), 0); renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(ritualStone), 1); + renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(ritualStone), 2); + renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(ritualStone), 3); + renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(ritualStone), 4); + renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(ritualStone), 5); + renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(ritualStone), 6); } private static Block registerBlock(Block block, Class itemBlock, String name) { diff --git a/src/main/resources/assets/bloodmagic/blockstates/BlockRitualStone.json b/src/main/resources/assets/bloodmagic/blockstates/BlockRitualStone.json new file mode 100644 index 00000000..9eead647 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/BlockRitualStone.json @@ -0,0 +1,47 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { }, + "model": "cube_all", + "uvlock": true + }, + "variants": { + "type": { + "blank": { + "textures": { + "all": "bloodmagic:blocks/RitualStone" + } + }, + "water": { + "textures": { + "all": "bloodmagic:blocks/WaterRitualStone" + } + }, + "fire": { + "textures": { + "all": "bloodmagic:blocks/FireRitualStone" + } + }, + "earth": { + "textures": { + "all": "bloodmagic:blocks/EarthRitualStone" + } + }, + "air": { + "textures": { + "all": "bloodmagic:blocks/AirRitualStone" + } + }, + "dusk": { + "textures": { + "all": "bloodmagic:blocks/DuskRitualStone" + } + }, + "dawn": { + "textures": { + "all": "bloodmagic:blocks/LightRitualStone" + } + } + } + } +} diff --git a/src/main/resources/assets/bloodmagic/models/block/BlockRitualStone0.json b/src/main/resources/assets/bloodmagic/models/block/BlockRitualStone0.json new file mode 100644 index 00000000..1a936326 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/BlockRitualStone0.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "bloodmagic:blocks/RitualStone" + } +} diff --git a/src/main/resources/assets/bloodmagic/models/block/BlockRitualStone1.json b/src/main/resources/assets/bloodmagic/models/block/BlockRitualStone1.json new file mode 100644 index 00000000..fbe92e67 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/BlockRitualStone1.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "bloodmagic:blocks/WaterRitualStone" + } +} diff --git a/src/main/resources/assets/bloodmagic/models/block/BlockRitualStone2.json b/src/main/resources/assets/bloodmagic/models/block/BlockRitualStone2.json new file mode 100644 index 00000000..7a72cfb8 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/BlockRitualStone2.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "bloodmagic:blocks/FireRitualStone" + } +} diff --git a/src/main/resources/assets/bloodmagic/models/block/BlockRitualStone3.json b/src/main/resources/assets/bloodmagic/models/block/BlockRitualStone3.json new file mode 100644 index 00000000..d64c897e --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/BlockRitualStone3.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "bloodmagic:blocks/EarthRitualStone" + } +} diff --git a/src/main/resources/assets/bloodmagic/models/block/BlockRitualStone4.json b/src/main/resources/assets/bloodmagic/models/block/BlockRitualStone4.json new file mode 100644 index 00000000..113fbce0 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/BlockRitualStone4.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "bloodmagic:blocks/AirRitualStone" + } +} diff --git a/src/main/resources/assets/bloodmagic/models/block/BlockRitualStone5.json b/src/main/resources/assets/bloodmagic/models/block/BlockRitualStone5.json new file mode 100644 index 00000000..82a6751e --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/BlockRitualStone5.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "bloodmagic:blocks/DuskRitualStone" + } +} diff --git a/src/main/resources/assets/bloodmagic/models/block/BlockRitualStone6.json b/src/main/resources/assets/bloodmagic/models/block/BlockRitualStone6.json new file mode 100644 index 00000000..75200e70 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/BlockRitualStone6.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "bloodmagic:blocks/LightRitualStone" + } +} diff --git a/src/main/resources/assets/bloodmagic/models/item/BlockRitualStone0.json b/src/main/resources/assets/bloodmagic/models/item/BlockRitualStone0.json new file mode 100644 index 00000000..2b6b4a92 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/BlockRitualStone0.json @@ -0,0 +1,10 @@ +{ + "parent": "bloodmagic:block/BlockRitualStone0", + "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/BlockRitualStone1.json b/src/main/resources/assets/bloodmagic/models/item/BlockRitualStone1.json new file mode 100644 index 00000000..4badac0c --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/BlockRitualStone1.json @@ -0,0 +1,11 @@ +{ + "parent": "bloodmagic:block/BlockRitualStone1", + "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/BlockRitualStone2.json b/src/main/resources/assets/bloodmagic/models/item/BlockRitualStone2.json new file mode 100644 index 00000000..678f5582 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/BlockRitualStone2.json @@ -0,0 +1,11 @@ +{ + "parent": "bloodmagic:block/BlockRitualStone2", + "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/BlockRitualStone3.json b/src/main/resources/assets/bloodmagic/models/item/BlockRitualStone3.json new file mode 100644 index 00000000..72ebfc67 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/BlockRitualStone3.json @@ -0,0 +1,11 @@ +{ + "parent": "bloodmagic:block/BlockRitualStone3", + "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/BlockRitualStone4.json b/src/main/resources/assets/bloodmagic/models/item/BlockRitualStone4.json new file mode 100644 index 00000000..6920fffa --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/BlockRitualStone4.json @@ -0,0 +1,11 @@ +{ + "parent": "bloodmagic:block/BlockRitualStone4", + "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/BlockRitualStone5.json b/src/main/resources/assets/bloodmagic/models/item/BlockRitualStone5.json new file mode 100644 index 00000000..10db8434 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/BlockRitualStone5.json @@ -0,0 +1,11 @@ +{ + "parent": "bloodmagic:block/BlockRitualStone5", + "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/BlockRitualStone6.json b/src/main/resources/assets/bloodmagic/models/item/BlockRitualStone6.json new file mode 100644 index 00000000..e8ae0c87 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/BlockRitualStone6.json @@ -0,0 +1,11 @@ +{ + "parent": "bloodmagic:block/BlockRitualStone6", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} +