From 86fcd4808b582a92e679982a956b8d3c33ccdac9 Mon Sep 17 00:00:00 2001 From: Arcaratus Date: Sat, 7 Nov 2015 21:37:12 -0500 Subject: [PATCH] Finished Water, Lava, and Void sigils Also added in bloodstone --- .../bloodmagic/altar/BloodAltar.java | 12 +- .../bloodmagic/api/altar/EnumAltarTier.java | 8 +- .../bloodmagic/block/BlockBloodRune.java | 2 +- .../block/BlockBloodStoneBrick.java | 69 ++++++++ .../bloodmagic/block/BlockRitualStone.java | 3 +- .../bloodmagic/block/BlockSocket.java | 69 ++++++++ .../bloodmagic/block/BlockSoulForge.java | 34 ++++ .../item/block/ItemBlockBloodStoneBrick.java | 24 +++ .../bloodmagic/item/sigil/ItemSigilAir.java | 1 - .../bloodmagic/item/sigil/ItemSigilLava.java | 133 ++++++++++++++++ .../bloodmagic/item/sigil/ItemSigilVoid.java | 108 +++++++++++++ .../bloodmagic/item/sigil/ItemSigilWater.java | 150 ++++++++++++++++++ .../bloodmagic/registry/ModBlocks.java | 14 +- .../bloodmagic/registry/ModItems.java | 12 +- .../WayofTime/bloodmagic/tile/TileAltar.java | 3 +- .../blockstates/BlockBloodStoneBrick.json | 22 +++ .../assets/bloodmagic/lang/en_US.lang | 9 ++ .../models/block/BlockBloodStoneBrick0.json | 6 + .../models/block/BlockBloodStoneBrick1.json | 6 + .../models/item/BlockBloodStoneBrick0.json | 10 ++ .../models/item/BlockBloodStoneBrick1.json | 10 ++ .../bloodmagic/models/item/ItemSigilLava.json | 6 + .../bloodmagic/models/item/ItemSigilVoid.json | 6 + .../models/item/ItemSigilWater.json | 6 + 24 files changed, 698 insertions(+), 25 deletions(-) create mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockBloodStoneBrick.java create mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockSocket.java create mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockSoulForge.java create mode 100644 src/main/java/WayofTime/bloodmagic/item/block/ItemBlockBloodStoneBrick.java create mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java create mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilVoid.java create mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java create mode 100644 src/main/resources/assets/bloodmagic/blockstates/BlockBloodStoneBrick.json create mode 100644 src/main/resources/assets/bloodmagic/models/block/BlockBloodStoneBrick0.json create mode 100644 src/main/resources/assets/bloodmagic/models/block/BlockBloodStoneBrick1.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/BlockBloodStoneBrick0.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/BlockBloodStoneBrick1.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemSigilLava.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemSigilVoid.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemSigilWater.json diff --git a/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java b/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java index 8f1e290b..4f73ae58 100644 --- a/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java +++ b/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java @@ -3,6 +3,7 @@ package WayofTime.bloodmagic.altar; import WayofTime.bloodmagic.api.BlockStack; import WayofTime.bloodmagic.api.altar.*; import WayofTime.bloodmagic.block.BlockBloodRune; +import WayofTime.bloodmagic.block.BlockBloodStoneBrick; import WayofTime.bloodmagic.registry.ModBlocks; import net.minecraft.block.BlockBeacon; import net.minecraft.block.BlockGlowstone; @@ -19,7 +20,6 @@ public class BloodAltar { if (checkAltarIsValid(world, pos, i)) { return EnumAltarTier.values()[i]; } - } return EnumAltarTier.ONE; @@ -47,10 +47,8 @@ public class BloodAltar { return false; } - public static AltarUpgrade getUpgrades(World world, BlockPos pos, EnumAltarTier altarTier) - { - if (world.isRemote) - { + public static AltarUpgrade getUpgrades(World world, BlockPos pos, EnumAltarTier altarTier) { + if (world.isRemote) { return null; } @@ -119,8 +117,8 @@ public class BloodAltar { } private static boolean checkSpecials(AltarComponent altarComponent, BlockStack blockStack) { - if (altarComponent.getBlockStack().getBlock() == ModBlocks.bloodStone) -// if (blockStack.getBlock() instanceof BlockBloodStone || (blockStack.getBlock() instanceof IAltarComponent && (((IAltarComponent) blockStack.getBlock()).getType(blockStack.getMeta()) == EnumAltarComponent.BLOODSTONE))) + if (altarComponent.getBlockStack().getBlock() == ModBlocks.bloodStoneBrick) + if (blockStack.getBlock() instanceof BlockBloodStoneBrick || (blockStack.getBlock() instanceof IAltarComponent && (((IAltarComponent) blockStack.getBlock()).getType(blockStack.getMeta()) == EnumAltarComponent.BLOODSTONE))) return true; if (altarComponent.getBlockStack().getBlock() == ModBlocks.crystal) diff --git a/src/main/java/WayofTime/bloodmagic/api/altar/EnumAltarTier.java b/src/main/java/WayofTime/bloodmagic/api/altar/EnumAltarTier.java index c0b94026..7bf5f55e 100644 --- a/src/main/java/WayofTime/bloodmagic/api/altar/EnumAltarTier.java +++ b/src/main/java/WayofTime/bloodmagic/api/altar/EnumAltarTier.java @@ -76,10 +76,10 @@ public enum EnumAltarTier { altarComponents.add(new AltarComponent(new BlockPos(-5, i, 5))); } - altarComponents.add(new AltarComponent(new BlockPos(5, 2, 5), new BlockStack(ModBlocks.bloodStone, 1))); - altarComponents.add(new AltarComponent(new BlockPos(5, 2, -5), new BlockStack(ModBlocks.bloodStone, 1))); - altarComponents.add(new AltarComponent(new BlockPos(-5, 2, -5), new BlockStack(ModBlocks.bloodStone, 1))); - altarComponents.add(new AltarComponent(new BlockPos(-5, 2, 5), new BlockStack(ModBlocks.bloodStone, 1))); + altarComponents.add(new AltarComponent(new BlockPos(5, 2, 5), new BlockStack(ModBlocks.bloodStoneBrick, 1))); + altarComponents.add(new AltarComponent(new BlockPos(5, 2, -5), new BlockStack(ModBlocks.bloodStoneBrick, 1))); + altarComponents.add(new AltarComponent(new BlockPos(-5, 2, -5), new BlockStack(ModBlocks.bloodStoneBrick, 1))); + altarComponents.add(new AltarComponent(new BlockPos(-5, 2, 5), new BlockStack(ModBlocks.bloodStoneBrick, 1))); } }, FIVE() { diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockBloodRune.java b/src/main/java/WayofTime/bloodmagic/block/BlockBloodRune.java index 824ed16d..c064d85e 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockBloodRune.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockBloodRune.java @@ -24,7 +24,7 @@ public class BlockBloodRune extends Block { public static final PropertyInteger META = PropertyInteger.create("META", 0, names.length - 1); public BlockBloodRune() { - super(Material.iron); + super(Material.rock); setUnlocalizedName(BloodMagic.MODID + ".rune."); setCreativeTab(BloodMagic.tabBloodMagic); diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockBloodStoneBrick.java b/src/main/java/WayofTime/bloodmagic/block/BlockBloodStoneBrick.java new file mode 100644 index 00000000..d327ad57 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/block/BlockBloodStoneBrick.java @@ -0,0 +1,69 @@ +package WayofTime.bloodmagic.block; + +import WayofTime.bloodmagic.BloodMagic; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyInteger; +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 java.util.List; + +public class BlockBloodStoneBrick extends Block { + + public static final String[] names = { "normal", "large" }; + public static final PropertyInteger META = PropertyInteger.create("META", 0, names.length - 1); + + public BlockBloodStoneBrick() { + super(Material.rock); + + setUnlocalizedName(BloodMagic.MODID + ".bloodstonebrick."); + setCreativeTab(BloodMagic.tabBloodMagic); + setHardness(2.0F); + setResistance(5.0F); + setStepSound(soundTypeStone); + setHarvestLevel("pickaxe", 2); + } + + @Override + public IBlockState getStateFromMeta(int meta) { + return this.getDefaultState().withProperty(META, meta); + } + + @Override + public int getMetaFromState(IBlockState state) { + return (Integer) state.getValue(META); + } + + @Override + public int damageDropped(IBlockState state) { + return getMetaFromState(state); + } + + @Override + protected BlockState createBlockState() { + return new BlockState(this, META); + } + + @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)); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockRitualStone.java b/src/main/java/WayofTime/bloodmagic/block/BlockRitualStone.java index 39024568..dbc7f84e 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockRitualStone.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockRitualStone.java @@ -38,8 +38,7 @@ public class BlockRitualStone extends Block implements IRitualStone { @Override public IBlockState getStateFromMeta(int meta) { - return this.getDefaultState() - .withProperty(TYPE, EnumRuneType.byMetadata(meta)); + return this.getDefaultState().withProperty(TYPE, EnumRuneType.byMetadata(meta)); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockSocket.java b/src/main/java/WayofTime/bloodmagic/block/BlockSocket.java new file mode 100644 index 00000000..988ab596 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/block/BlockSocket.java @@ -0,0 +1,69 @@ +package WayofTime.bloodmagic.block; + +import WayofTime.bloodmagic.BloodMagic; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyInteger; +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 java.util.List; + +public class BlockSocket extends Block { + + public static final String[] names = { "empty", "filled" }; + public static final PropertyInteger META = PropertyInteger.create("META", 0, names.length - 1); + + public BlockSocket() { + super(Material.iron); + + setUnlocalizedName(BloodMagic.MODID + ".socket."); + setHardness(2.0F); + setResistance(5.0F); + setStepSound(soundTypeMetal); + setHarvestLevel("pickaxe", 2); + setCreativeTab(BloodMagic.tabBloodMagic); + } + + @Override + public IBlockState getStateFromMeta(int meta) { + return this.getDefaultState().withProperty(META, meta); + } + + @Override + public int getMetaFromState(IBlockState state) { + return (Integer) state.getValue(META); + } + + @Override + public int damageDropped(IBlockState state) { + return getMetaFromState(state); + } + + @Override + protected BlockState createBlockState() { + return new BlockState(this, META); + } + + @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)); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockSoulForge.java b/src/main/java/WayofTime/bloodmagic/block/BlockSoulForge.java new file mode 100644 index 00000000..f5f21b4e --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/block/BlockSoulForge.java @@ -0,0 +1,34 @@ +package WayofTime.bloodmagic.block; + +import WayofTime.bloodmagic.BloodMagic; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.BlockPos; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; + +public class BlockSoulForge extends Block { + + public BlockSoulForge() { + super(Material.iron); + + setUnlocalizedName(BloodMagic.MODID + ".soulforge."); + setHardness(2.0F); + setResistance(5.0F); + setStepSound(soundTypeMetal); + setHarvestLevel("pickaxe", 2); + setCreativeTab(BloodMagic.tabBloodMagic); + } + + @Override + public boolean onBlockActivated(World world, BlockPos blockPos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) { + if (world.isRemote) + return false; + + + + return false; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockBloodStoneBrick.java b/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockBloodStoneBrick.java new file mode 100644 index 00000000..019cc333 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockBloodStoneBrick.java @@ -0,0 +1,24 @@ +package WayofTime.bloodmagic.item.block; + +import WayofTime.bloodmagic.block.BlockBloodStoneBrick; +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +public class ItemBlockBloodStoneBrick extends ItemBlock { + + public ItemBlockBloodStoneBrick(Block block) { + super(block); + setHasSubtypes(true); + } + + @Override + public String getUnlocalizedName(ItemStack stack) { + return super.getUnlocalizedName(stack) + BlockBloodStoneBrick.names[stack.getItemDamage()]; + } + + @Override + public int getMetadata(int meta) { + return meta; + } +} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java index 88cf745e..b6f2f985 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java @@ -1,6 +1,5 @@ package WayofTime.bloodmagic.item.sigil; -import WayofTime.bloodmagic.registry.ModPotions; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.Vec3; diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java new file mode 100644 index 00000000..84db5553 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java @@ -0,0 +1,133 @@ +package WayofTime.bloodmagic.item.sigil; + +import WayofTime.bloodmagic.api.iface.ISigil; +import WayofTime.bloodmagic.api.util.helper.BindableHelper; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockPos; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidHandler; + +public class ItemSigilLava extends ItemSigilBase implements ISigil { + + public ItemSigilLava() { + super("lava", 1000); + } + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + if (!world.isRemote && !isUnusable(stack)) { + MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(world, player, true); + + if (movingobjectposition != null) { + ItemStack ret = net.minecraftforge.event.ForgeEventFactory.onBucketUse(player, world, stack, movingobjectposition); + if (ret != null) return ret; + + if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { + BlockPos blockpos = movingobjectposition.getBlockPos(); + + if (!world.isBlockModifiable(player, blockpos)) { + return stack; + } + + if (!player.canPlayerEdit(blockpos.offset(movingobjectposition.sideHit), movingobjectposition.sideHit, stack)) { + return stack; + } + + + BlockPos blockpos1 = blockpos.offset(movingobjectposition.sideHit); + + if (!player.canPlayerEdit(blockpos1, movingobjectposition.sideHit, stack)) { + return stack; + } + + if (this.canPlaceLava(world, blockpos1) && syphonBatteries(stack, player, getEnergyUsed())) { + this.tryPlaceLava(world, blockpos1); + } + } + } + else { + return stack; + } + + if (!player.capabilities.isCreativeMode) + this.setUnusable(stack, !syphonBatteries(stack, player, getEnergyUsed())); + } + + return stack; + } + + @Override + public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, BlockPos blockPos, EnumFacing side, float hitX, float hitY, float hitZ) { + if (world.isRemote || !BindableHelper.checkAndSetItemOwner(stack, player) || player.isSneaking() || isUnusable(stack)) { + return false; + } + if (!world.canMineBlockBody(player, blockPos)) { + return false; + } + + TileEntity tile = world.getTileEntity(blockPos); + if (tile instanceof IFluidHandler) { + FluidStack fluid = new FluidStack(FluidRegistry.LAVA, 1000); + int amount = ((IFluidHandler) tile).fill(side, fluid, false); + + if (amount > 0 && syphonBatteries(stack, player, getEnergyUsed())) { + ((IFluidHandler) tile).fill(side, fluid, true); + } + + return false; + } +// else if (tile instanceof TESocket) { +// return false; +// } + + { + int x = blockPos.getX(); + int y = blockPos.getY(); + int z = blockPos.getZ(); + + if (side.getIndex() == 0) --y; + if (side.getIndex() == 1) ++y; + if (side.getIndex() == 2) --z; + if (side.getIndex() == 3) ++z; + if (side.getIndex() == 4) --x; + if (side.getIndex() == 5) ++x; + + if (!player.canPlayerEdit(new BlockPos(x, y, z), side, stack)) { + return false; + } + + if (this.canPlaceLava(world, new BlockPos(x, y, z)) && syphonBatteries(stack, player, getEnergyUsed())) { + return this.tryPlaceLava(world, new BlockPos(x, y, z)); + } + } + + return false; + } + + public boolean canPlaceLava(World world, BlockPos blockPos) { + if (!world.isAirBlock(blockPos) && world.getBlockState(blockPos).getBlock().getMaterial().isSolid()) { + return false; + } + else if ((world.getBlockState(blockPos).getBlock() == Blocks.lava || world.getBlockState(blockPos).getBlock() == Blocks.flowing_lava) && world.getBlockState(blockPos).getBlock().getMetaFromState(world.getBlockState(blockPos)) == 0) { + return false; + } + else { + world.setBlockState(blockPos, Blocks.lava.getBlockState().getBaseState()); + return true; + } + } + + public boolean tryPlaceLava(World worldIn, BlockPos pos) { + Material material = worldIn.getBlockState(pos).getBlock().getMaterial(); + + return worldIn.isAirBlock(pos) && !material.isSolid(); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilVoid.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilVoid.java new file mode 100644 index 00000000..987113cc --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilVoid.java @@ -0,0 +1,108 @@ +package WayofTime.bloodmagic.item.sigil; + +import WayofTime.bloodmagic.api.util.helper.BindableHelper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockPos; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidBlock; +import net.minecraftforge.fluids.IFluidHandler; + +public class ItemSigilVoid extends ItemSigilBase { + + public ItemSigilVoid() { + super("void", 50); + } + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + if (!world.isRemote && !isUnusable(stack)) { + MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(world, player, true); + + if (movingobjectposition != null) { + ItemStack ret = net.minecraftforge.event.ForgeEventFactory.onBucketUse(player, world, stack, movingobjectposition); + if (ret != null) return ret; + + if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { + BlockPos blockpos = movingobjectposition.getBlockPos(); + + if (!world.isBlockModifiable(player, blockpos)) { + return stack; + } + + if (!player.canPlayerEdit(blockpos.offset(movingobjectposition.sideHit), movingobjectposition.sideHit, stack)) { + return stack; + } + + if (!player.canPlayerEdit(blockpos, movingobjectposition.sideHit, stack)) { + return stack; + } + + if (world.getBlockState(blockpos).getBlock().getMaterial().isLiquid() && syphonBatteries(stack, player, getEnergyUsed())) { + world.setBlockToAir(blockpos); + return stack; + } + } + } + else { + return stack; + } + + if (!player.capabilities.isCreativeMode) + this.setUnusable(stack, !syphonBatteries(stack, player, getEnergyUsed())); + } + + return stack; + } + + @Override + public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, BlockPos blockPos, EnumFacing side, float hitX, float hitY, float hitZ) { + if (world.isRemote || !BindableHelper.checkAndSetItemOwner(stack, player) || player.isSneaking() || isUnusable(stack)) { + return false; + } + + if (!world.canMineBlockBody(player, blockPos)) { + return false; + } + + TileEntity tile = world.getTileEntity(blockPos); + if (tile instanceof IFluidHandler) { + FluidStack amount = ((IFluidHandler) tile).drain(side, 1000, false); + + if (amount != null && amount.amount > 0 && syphonBatteries(stack, player, getEnergyUsed())) { + ((IFluidHandler) tile).drain(side, 1000, true); + return true; + } + + return false; + } + + { + int x = blockPos.getX(); + int y = blockPos.getY(); + int z = blockPos.getZ(); + + if (side.getIndex() == 0) --y; + if (side.getIndex() == 1) ++y; + if (side.getIndex() == 2) --z; + if (side.getIndex() == 3) ++z; + if (side.getIndex() == 4) --x; + if (side.getIndex() == 5) ++x; + + if (!player.canPlayerEdit(new BlockPos(x, y, z), side, stack)) { + return false; + } + + if (world.getBlockState(new BlockPos(x, y, z)).getBlock() instanceof IFluidBlock && syphonBatteries(stack, player, getEnergyUsed())) { + world.setBlockToAir(new BlockPos(x, y, z)); + return true; + } + } + + return false; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java new file mode 100644 index 00000000..f1454427 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java @@ -0,0 +1,150 @@ +package WayofTime.bloodmagic.item.sigil; + +import WayofTime.bloodmagic.api.iface.ISigil; +import WayofTime.bloodmagic.api.util.helper.BindableHelper; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockPos; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidHandler; + +public class ItemSigilWater extends ItemSigilBase implements ISigil { + + public ItemSigilWater() { + super("water", 100); + } + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + if (!world.isRemote && !isUnusable(stack)) { + MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(world, player, true); + + if (movingobjectposition != null) { + ItemStack ret = net.minecraftforge.event.ForgeEventFactory.onBucketUse(player, world, stack, movingobjectposition); + if (ret != null) return ret; + + if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { + BlockPos blockpos = movingobjectposition.getBlockPos(); + + if (!world.isBlockModifiable(player, blockpos)) { + return stack; + } + + if (!player.canPlayerEdit(blockpos.offset(movingobjectposition.sideHit), movingobjectposition.sideHit, stack)) { + return stack; + } + + BlockPos blockpos1 = blockpos.offset(movingobjectposition.sideHit); + + if (!player.canPlayerEdit(blockpos1, movingobjectposition.sideHit, stack)) { + return stack; + } + + if (this.canPlaceWater(world, blockpos1) && syphonBatteries(stack, player, getEnergyUsed())) { + this.tryPlaceWater(world, blockpos1); + } + } + } + else { + return stack; + } + + if (!player.capabilities.isCreativeMode) + this.setUnusable(stack, !syphonBatteries(stack, player, getEnergyUsed())); + } + + return stack; + } + + @Override + public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, BlockPos blockPos, EnumFacing side, float hitX, float hitY, float hitZ) { + if (world.isRemote || !BindableHelper.checkAndSetItemOwner(stack, player) || player.isSneaking() || isUnusable(stack)) { + return false; + } + + if (!world.canMineBlockBody(player, blockPos)) { + return false; + } + + TileEntity tile = world.getTileEntity(blockPos); + if (tile instanceof IFluidHandler) { + FluidStack fluid = new FluidStack(FluidRegistry.WATER, 1000); + int amount = ((IFluidHandler) tile).fill(side, fluid, false); + + if (amount > 0 && syphonBatteries(stack, player, getEnergyUsed())) { + ((IFluidHandler) tile).fill(side, fluid, true); + } + + return false; + } +// else if (tile instanceof TESocket) { +// return false; +// } + + { + int x = blockPos.getX(); + int y = blockPos.getY(); + int z = blockPos.getZ(); + + if (side.getIndex() == 0) --y; + if (side.getIndex() == 1) ++y; + if (side.getIndex() == 2) --z; + if (side.getIndex() == 3) ++z; + if (side.getIndex() == 4) --x; + if (side.getIndex() == 5) ++x; + + if (!player.canPlayerEdit(new BlockPos(x, y, z), side, stack)) { + return false; + } + + if (this.canPlaceWater(world, new BlockPos(x, y, z)) && syphonBatteries(stack, player, getEnergyUsed())) { + return this.tryPlaceWater(world, new BlockPos(x, y, z)); + } + } + + return false; + } + + public boolean canPlaceWater(World world, BlockPos blockPos) { + return (world.isAirBlock(blockPos) && !world.getBlockState(blockPos).getBlock().getMaterial().isSolid()) && !((world.getBlockState(blockPos).getBlock() == Blocks.water || world.getBlockState(blockPos).getBlock() == Blocks.flowing_water) && world.getBlockState(blockPos).getBlock().getMetaFromState(world.getBlockState(blockPos)) == 0); + } + + public boolean tryPlaceWater(World worldIn, BlockPos pos) { + + Material material = worldIn.getBlockState(pos).getBlock().getMaterial(); + boolean flag = !material.isSolid(); + + if (!worldIn.isAirBlock(pos) && !flag) { + return false; + } + else { + if (worldIn.provider.doesWaterVaporize()) { + int i = pos.getX(); + int j = pos.getY(); + int k = pos.getZ(); + worldIn.playSoundEffect((double) ((float) i + 0.5F), (double) ((float) j + 0.5F), (double) ((float) k + 0.5F), "random.fizz", 0.5F, 2.6F + (worldIn.rand.nextFloat() - worldIn.rand.nextFloat()) * 0.8F); + + for (int l = 0; l < 8; ++l) { + worldIn.spawnParticle(EnumParticleTypes.SMOKE_LARGE, (double) i + Math.random(), (double) j + Math.random(), (double) k + Math.random(), 0.0D, 0.0D, 0.0D, 0); + } + } + else { + if (!worldIn.isRemote && flag && !material.isLiquid()) { + worldIn.destroyBlock(pos, true); + } + + worldIn.setBlockState(pos, Blocks.water.getDefaultState(), 3); + } + + return true; + } + } +} diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java b/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java index 4f5c3289..cf6ca9bb 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java @@ -1,17 +1,13 @@ package WayofTime.bloodmagic.registry; +import WayofTime.bloodmagic.block.*; +import WayofTime.bloodmagic.item.block.ItemBlockBloodStoneBrick; import net.minecraft.block.Block; import net.minecraft.item.ItemBlock; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fml.common.registry.GameRegistry; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.ConfigHandler; -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; @@ -31,7 +27,7 @@ public class ModBlocks public static Block lifeEssence; public static Block crystal; - public static Block bloodStone; + public static Block bloodStoneBrick; public static void init() { @@ -44,6 +40,8 @@ public class ModBlocks ritualStone = registerBlock(new BlockRitualStone(), ItemBlockRitualStone.class); testSpellBlock = registerBlock(new BlockTestSpellBlock()); + bloodStoneBrick = registerBlock(new BlockBloodStoneBrick(), ItemBlockBloodStoneBrick.class); + initTiles(); } @@ -78,6 +76,8 @@ public class ModBlocks renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(ritualStone), 4); renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(ritualStone), 5); renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(ritualStone), 6); + renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(bloodStoneBrick), 0); + renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(bloodStoneBrick), 1); } private static Block registerBlock(Block block, Class itemBlock, String name) { diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModItems.java b/src/main/java/WayofTime/bloodmagic/registry/ModItems.java index db9c62b1..0b8cc297 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModItems.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModItems.java @@ -9,8 +9,7 @@ import WayofTime.bloodmagic.item.ItemActivationCrystal; import WayofTime.bloodmagic.item.ItemBloodOrb; import WayofTime.bloodmagic.item.ItemBucketEssence; import WayofTime.bloodmagic.item.ItemSacrificialDagger; -import WayofTime.bloodmagic.item.sigil.ItemSigilAir; -import WayofTime.bloodmagic.item.sigil.ItemSigilDivination; +import WayofTime.bloodmagic.item.sigil.*; import WayofTime.bloodmagic.util.helper.InventoryRenderHelper; import net.minecraft.item.Item; import net.minecraftforge.fml.common.registry.GameRegistry; @@ -33,6 +32,9 @@ public class ModItems { public static Item sigilDivination; public static Item sigilAir; + public static Item sigilWater; + public static Item sigilLava; + public static Item sigilVoid; public static void init() { bloodOrb = registerItem(new ItemBloodOrb()); @@ -58,6 +60,9 @@ public class ModItems { sigilDivination = registerItem(new ItemSigilDivination()); sigilAir = registerItem(new ItemSigilAir()); + sigilWater = registerItem(new ItemSigilWater()); + sigilLava = registerItem(new ItemSigilLava()); + sigilVoid = registerItem(new ItemSigilVoid()); } public static void initRenders() { @@ -82,6 +87,9 @@ public class ModItems { renderHelper.itemRender(sigilDivination); renderHelper.itemRender(sigilAir); + renderHelper.itemRender(sigilWater); + renderHelper.itemRender(sigilLava); + renderHelper.itemRender(sigilVoid); } private static Item registerItem(Item item, String name) { diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileAltar.java b/src/main/java/WayofTime/bloodmagic/tile/TileAltar.java index b1ee68d9..079118dd 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileAltar.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileAltar.java @@ -21,7 +21,7 @@ import net.minecraftforge.fluids.*; public class TileAltar extends TileInventory implements IBloodAltar, IUpdatePlayerListBox, IFluidTank, IFluidHandler { - private EnumAltarTier altarTier = EnumAltarTier.ONE; + private EnumAltarTier altarTier; private AltarUpgrade upgrade = new AltarUpgrade(); private int capacity = FluidContainerRegistry.BUCKET_VOLUME * 10; @@ -298,6 +298,7 @@ public class TileAltar extends TileInventory implements IBloodAltar, IUpdatePlay // TODO - Write checking for tier stuff EnumAltarTier tier = BloodAltar.getAltarTier(getWorld(), getPos()); + this.altarTier = tier; if (tier.equals(EnumAltarTier.ONE)) upgrade = new AltarUpgrade(); diff --git a/src/main/resources/assets/bloodmagic/blockstates/BlockBloodStoneBrick.json b/src/main/resources/assets/bloodmagic/blockstates/BlockBloodStoneBrick.json new file mode 100644 index 00000000..594d90c7 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/BlockBloodStoneBrick.json @@ -0,0 +1,22 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { }, + "model": "cube_all", + "uvlock": true + }, + "variants": { + "meta": { + "0": { + "textures": { + "all": "bloodmagic:blocks/BloodStoneBrick" + } + }, + "1": { + "textures": { + "all": "bloodmagic:blocks/LargeBloodStoneBrick" + } + } + } + } +} diff --git a/src/main/resources/assets/bloodmagic/lang/en_US.lang b/src/main/resources/assets/bloodmagic/lang/en_US.lang index 312dde23..eb9e121d 100644 --- a/src/main/resources/assets/bloodmagic/lang/en_US.lang +++ b/src/main/resources/assets/bloodmagic/lang/en_US.lang @@ -55,6 +55,9 @@ item.BloodMagic.sigil.air.name=Air Sigil item.BloodMagic.sigil.bloodLight.name=Sigil of the Blood Lamp item.BloodMagic.sigil.compression.name=Sigil of Compression item.BloodMagic.sigil.divination.name=Divination Sigil +item.BloodMagic.sigil.water.name=Water Sigil +item.BloodMagic.sigil.lava.name=Lava Sigil +item.BloodMagic.sigil.void.name=Void Sigil # Blocks tile.BloodMagic.fluid.lifeEssence.name=Life Essence @@ -74,6 +77,9 @@ tile.BloodMagic.rune.augCapacity.name=Rune of Augmented Capacity tile.BloodMagic.rune.orb.name=Rune of the Orb tile.BloodMagic.rune.acceleration.name=Acceleration Rune +tile.BloodMagic.bloodstonebrick.normal.name=Bloodstone Brick +tile.BloodMagic.bloodstonebrick.large.name=Large Bloodstone Brick + # Tooltips tooltip.BloodMagic.orb.desc=Stores raw Life Essence tooltip.BloodMagic.orb.owner=Added by: %s @@ -85,6 +91,9 @@ tooltip.BloodMagic.sigil.divination.desc=&oPeer into the soul tooltip.BloodMagic.sigil.divination.currentAltarTier=Current Tier: %d tooltip.BloodMagic.sigil.divination.currentEssence=Current Essence: %d LP tooltip.BloodMagic.sigil.divination.currentAltarCapacity=Current Capacity: %d LP +tooltip.BloodMagic.sigil.water.desc=Infinite water, anyone? +tooltip.BloodMagic.sigil.lava.desc=HOT! DO NOT EAT +tooltip.BloodMagic.sigil.void.desc=Better than a Swiffer®! tooltip.BloodMagic.activationCrystal.weak=Activates low-level rituals tooltip.BloodMagic.activationCrystal.awakened=Activates more powerful rituals tooltip.BloodMagic.activationCrystal.creative=Creative Only - Activates any ritual \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/BlockBloodStoneBrick0.json b/src/main/resources/assets/bloodmagic/models/block/BlockBloodStoneBrick0.json new file mode 100644 index 00000000..081b0b64 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/BlockBloodStoneBrick0.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "bloodmagic:blocks/BloodStoneBrick" + } +} diff --git a/src/main/resources/assets/bloodmagic/models/block/BlockBloodStoneBrick1.json b/src/main/resources/assets/bloodmagic/models/block/BlockBloodStoneBrick1.json new file mode 100644 index 00000000..362bbd0b --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/BlockBloodStoneBrick1.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "bloodmagic:blocks/LargeBloodStoneBrick" + } +} diff --git a/src/main/resources/assets/bloodmagic/models/item/BlockBloodStoneBrick0.json b/src/main/resources/assets/bloodmagic/models/item/BlockBloodStoneBrick0.json new file mode 100644 index 00000000..4b300767 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/BlockBloodStoneBrick0.json @@ -0,0 +1,10 @@ +{ + "parent": "bloodmagic:block/BlockBloodStoneBrick0", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/item/BlockBloodStoneBrick1.json b/src/main/resources/assets/bloodmagic/models/item/BlockBloodStoneBrick1.json new file mode 100644 index 00000000..50350c00 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/BlockBloodStoneBrick1.json @@ -0,0 +1,10 @@ +{ + "parent": "bloodmagic:block/BlockBloodStoneBrick1", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/item/ItemSigilLava.json b/src/main/resources/assets/bloodmagic/models/item/ItemSigilLava.json new file mode 100644 index 00000000..47e917b0 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/ItemSigilLava.json @@ -0,0 +1,6 @@ +{ + "parent":"bloodmagic:item/ItemModelBase", + "textures": { + "layer0":"bloodmagic:items/LavaSigil" + } +} diff --git a/src/main/resources/assets/bloodmagic/models/item/ItemSigilVoid.json b/src/main/resources/assets/bloodmagic/models/item/ItemSigilVoid.json new file mode 100644 index 00000000..b5abefdc --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/ItemSigilVoid.json @@ -0,0 +1,6 @@ +{ + "parent":"bloodmagic:item/ItemModelBase", + "textures": { + "layer0":"bloodmagic:items/VoidSigil" + } +} diff --git a/src/main/resources/assets/bloodmagic/models/item/ItemSigilWater.json b/src/main/resources/assets/bloodmagic/models/item/ItemSigilWater.json new file mode 100644 index 00000000..7fdeb012 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/ItemSigilWater.json @@ -0,0 +1,6 @@ +{ + "parent":"bloodmagic:item/ItemModelBase", + "textures": { + "layer0":"bloodmagic:items/WaterSigil" + } +}