diff --git a/.gitignore b/.gitignore index 3facbeb5..85e34f08 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,4 @@ options.txt BloodMagic_Client.launch BloodMagic_Server.launch +usercache.json diff --git a/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java b/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java index 73a7b9ff..9af120bf 100644 --- a/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java +++ b/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java @@ -4,6 +4,7 @@ import WayofTime.bloodmagic.api.BlockStack; import WayofTime.bloodmagic.api.altar.*; import WayofTime.bloodmagic.block.BlockBloodRune; import WayofTime.bloodmagic.block.BlockBloodStoneBrick; +import WayofTime.bloodmagic.block.BlockCrystal; import WayofTime.bloodmagic.registry.ModBlocks; import net.minecraft.block.BlockBeacon; import net.minecraft.block.BlockGlowstone; @@ -131,9 +132,9 @@ public class BloodAltar { 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) -// if (blockStack.getBlock() instanceof BlockCrystal || (blockStack.getBlock() instanceof IAltarComponent && (((IAltarComponent) blockStack.getBlock()).getType(blockStack.getMeta()) == EnumAltarComponent.CRYSTAL))) -// return true; + if (altarComponent.getBlockStack().getBlock() == ModBlocks.crystal) + if (blockStack.getBlock() instanceof BlockCrystal || (blockStack.getBlock() instanceof IAltarComponent && (((IAltarComponent) blockStack.getBlock()).getType(blockStack.getMeta()) == EnumAltarComponent.CRYSTAL))) + return true; if (altarComponent.getBlockStack().getBlock() == Blocks.glowstone) if (blockStack.getBlock() instanceof BlockGlowstone || (blockStack.getBlock() instanceof IAltarComponent && (((IAltarComponent) blockStack.getBlock()).getType(blockStack.getMeta()) == EnumAltarComponent.GLOWSTONE))) diff --git a/src/main/java/WayofTime/bloodmagic/api/Constants.java b/src/main/java/WayofTime/bloodmagic/api/Constants.java index 7302a221..861b3ce8 100644 --- a/src/main/java/WayofTime/bloodmagic/api/Constants.java +++ b/src/main/java/WayofTime/bloodmagic/api/Constants.java @@ -48,6 +48,8 @@ public class Constants { public static final String ALTAR_ACCELERATION_UPGRADES = "accelerationUpgrades"; public static final String ALTAR_DEMON_BLOOD_DURATION = "demonBloodDuration"; public static final String ALTAR_COOLDOWN_AFTER_CRAFTING = "cooldownAfterCrafting"; + + public static final String ALTARMAKER_CURRENT_TIER = "currentTier"; } public static class Mod { diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockBloodLight.java b/src/main/java/WayofTime/bloodmagic/block/BlockBloodLight.java new file mode 100644 index 00000000..954bce5a --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/block/BlockBloodLight.java @@ -0,0 +1,84 @@ +package WayofTime.bloodmagic.block; + +import WayofTime.bloodmagic.BloodMagic; +import WayofTime.bloodmagic.api.Constants; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.util.*; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.util.List; +import java.util.Random; + +public class BlockBloodLight extends Block { + + public BlockBloodLight() { + super(Material.cloth); + + setUnlocalizedName(Constants.Mod.MODID + ".bloodLight"); + setCreativeTab(BloodMagic.tabBloodMagic); + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public EnumWorldBlockLayer getBlockLayer() + { + return EnumWorldBlockLayer.CUTOUT; + } + + @Override + public boolean isFullCube() + { + return false; + } + + @Override + public int getLightValue() { + return 15; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean addDestroyEffects(World world, BlockPos pos, net.minecraft.client.particle.EffectRenderer effectRenderer) { + if (world.getBlockState(pos).getBlock() == this) { + Random random = new Random(); + float f = 1.0F; + float f1 = f * 0.6F + 0.4F; + float f2 = f * f * 0.7F - 0.5F; + float f3 = f * f * 0.6F - 0.7F; + effectRenderer.spawnEffectParticle(EnumParticleTypes.REDSTONE.getParticleID(), pos.getX() + 0.5D + random.nextGaussian() / 8, pos.getY() + 0.5D, pos.getZ() + 0.5D + random.nextGaussian() / 8, f1, f2, f3); + } + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(World worldIn, BlockPos pos, IBlockState state, Random rand) { + if (rand.nextInt(3) != 0) { + float f = 1.0F; + float f1 = f * 0.6F + 0.4F; + float f2 = f * f * 0.7F - 0.5F; + float f3 = f * f * 0.6F - 0.7F; + worldIn.spawnParticle(EnumParticleTypes.REDSTONE, pos.getX() + 0.5D + rand.nextGaussian() / 8, pos.getY() + 0.5D, pos.getZ() + 0.5D + rand.nextGaussian() / 8, f1, f2, f3); + } + } + + @Override + public void addCollisionBoxesToList(World worldIn, BlockPos pos, IBlockState state, AxisAlignedBB mask, List list, Entity collidingEntity) { + this.setBlockBounds(0.35F, 0.35F, 0.35F, 0.65F, 0.65F, 0.65F); + } + + @Override + public int quantityDropped(Random par1Random) { + return 0; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockCrystal.java b/src/main/java/WayofTime/bloodmagic/block/BlockCrystal.java new file mode 100644 index 00000000..74e9e9dc --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/block/BlockCrystal.java @@ -0,0 +1,21 @@ +package WayofTime.bloodmagic.block; + +import WayofTime.bloodmagic.BloodMagic; +import WayofTime.bloodmagic.api.Constants; +import WayofTime.bloodmagic.block.base.BlockString; +import net.minecraft.block.material.Material; + +public class BlockCrystal extends BlockString { + public static final String[] names = {"normal", "brick"}; + + public BlockCrystal() { + super(Material.rock, names); + + setUnlocalizedName(Constants.Mod.MODID + ".crystal."); + setCreativeTab(BloodMagic.tabBloodMagic); + setStepSound(soundTypeStone); + setHardness(2.0F); + setResistance(5.0F); + setHarvestLevel("pickaxe", 2); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemAltarMaker.java b/src/main/java/WayofTime/bloodmagic/item/ItemAltarMaker.java new file mode 100644 index 00000000..24786f8d --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/ItemAltarMaker.java @@ -0,0 +1,130 @@ +package WayofTime.bloodmagic.item; + +import WayofTime.bloodmagic.BloodMagic; +import WayofTime.bloodmagic.altar.BloodAltar; +import WayofTime.bloodmagic.api.Constants; +import WayofTime.bloodmagic.api.altar.AltarComponent; +import WayofTime.bloodmagic.api.altar.EnumAltarTier; +import WayofTime.bloodmagic.api.altar.IAltarManipulator; +import WayofTime.bloodmagic.block.BlockAltar; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.BlockPos; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.util.List; + +public class ItemAltarMaker extends Item implements IAltarManipulator { + + private EnumAltarTier tierToBuild = EnumAltarTier.ONE; + + public ItemAltarMaker() { + super(); + setUnlocalizedName(Constants.Mod.MODID + ".altarMaker"); + setCreativeTab(BloodMagic.tabBloodMagic); + setMaxStackSize(1); + setFull3D(); + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer playerIn, List tooltip, boolean advanced) { + tooltip.add(StatCollector.translateToLocal("tooltip.BloodMagic.currentTier") + " " + ((stack.getTagCompound() != null ? stack.getTagCompound().getInteger(Constants.NBT.ALTARMAKER_CURRENT_TIER) : 0) + 1)); + } + + @Override + public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) { + if (!player.capabilities.isCreativeMode || world.isRemote) return itemStack; + + if (itemStack.getTagCompound() == null) { + NBTTagCompound tag = new NBTTagCompound(); + itemStack.setTagCompound(tag); + itemStack.getTagCompound().setInteger(Constants.NBT.ALTARMAKER_CURRENT_TIER, 0); + } + if (player.isSneaking()) { + if (itemStack.getTagCompound().getInteger(Constants.NBT.ALTARMAKER_CURRENT_TIER) >= EnumAltarTier.MAXTIERS - 1) { + itemStack.getTagCompound().setInteger(Constants.NBT.ALTARMAKER_CURRENT_TIER, 0); + setTierToBuild(EnumAltarTier.values()[itemStack.getTagCompound().getInteger(Constants.NBT.ALTARMAKER_CURRENT_TIER)]); + player.addChatComponentMessage(new ChatComponentTranslation(StatCollector.translateToLocal("misc.altarMaker.setTier"), itemStack.getTagCompound().getInteger(Constants.NBT.ALTARMAKER_CURRENT_TIER) + 1)); + return itemStack; + } + else { + itemStack.getTagCompound().setInteger(Constants.NBT.ALTARMAKER_CURRENT_TIER, itemStack.getTagCompound().getInteger(Constants.NBT.ALTARMAKER_CURRENT_TIER) + 1); + setTierToBuild(EnumAltarTier.values()[itemStack.getTagCompound().getInteger(Constants.NBT.ALTARMAKER_CURRENT_TIER)]); + player.addChatComponentMessage(new ChatComponentTranslation(StatCollector.translateToLocal("misc.altarMaker.setTier"), itemStack.getTagCompound().getInteger(Constants.NBT.ALTARMAKER_CURRENT_TIER) + 1)); + return itemStack; + } + } + + MovingObjectPosition mop = getMovingObjectPositionFromPlayer(world, player, false); + if (mop == null || mop.typeOfHit == MovingObjectPosition.MovingObjectType.MISS || mop.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY) return itemStack; + + if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK && world.getBlockState(mop.getBlockPos()).getBlock() instanceof BlockAltar) { + + player.addChatComponentMessage(new ChatComponentTranslation(StatCollector.translateToLocal("misc.altarMaker.building"), tierToBuild)); + buildAltar(world, mop.getBlockPos()); + + world.markBlockForUpdate(mop.getBlockPos()); + } + + return itemStack; + } + + public void setTierToBuild(EnumAltarTier tierToBuild) { + this.tierToBuild = tierToBuild; + } + + public void buildAltar(World world, BlockPos pos) { + + if (world.isRemote) return; + + if (tierToBuild == EnumAltarTier.ONE) { + return; + } + + for (AltarComponent altarComponent : tierToBuild.getAltarComponents()) { + BlockPos componentPos = pos.add(altarComponent.getOffset()); + IBlockState blockState = altarComponent.getBlockStack().getBlock().getStateFromMeta(altarComponent.getBlockStack().getMeta()); + + if (altarComponent.getBlockStack().getBlock().equals(Blocks.air)) + world.setBlockState(componentPos, Blocks.stonebrick.getStateFromMeta(0)); + else + world.setBlockState(componentPos, blockState); + + world.markBlockForUpdate(componentPos); + } + + world.markBlockForUpdate(pos); + } + + public String destroyAltar(EntityPlayer player) { + World world = player.worldObj; + if (world.isRemote) return ""; + + MovingObjectPosition mop = getMovingObjectPositionFromPlayer(world, player, false); + BlockPos pos = mop.getBlockPos(); + EnumAltarTier altarTier = BloodAltar.getAltarTier(world, pos); + + if (altarTier.equals(EnumAltarTier.ONE)) return "" + altarTier.toInt(); + else { + for (AltarComponent altarComponent : altarTier.getAltarComponents()) { + BlockPos componentPos = pos.add(altarComponent.getOffset()); + + world.setBlockToAir(componentPos); + world.markBlockForUpdate(componentPos); + } + } + + world.markBlockForUpdate(pos); + return "" + altarTier.toInt(); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockCrystal.java b/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockCrystal.java new file mode 100644 index 00000000..37cbb982 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockCrystal.java @@ -0,0 +1,24 @@ +package WayofTime.bloodmagic.item.block; + +import WayofTime.bloodmagic.block.BlockCrystal; +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +public class ItemBlockCrystal extends ItemBlock { + + public ItemBlockCrystal(Block block) { + super(block); + setHasSubtypes(true); + } + + @Override + public String getUnlocalizedName(ItemStack stack) { + return super.getUnlocalizedName(stack) + BlockCrystal.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/registry/ModBlocks.java b/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java index 4f3b897e..34c82028 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java @@ -20,6 +20,7 @@ public class ModBlocks { public static Block bloodRune; public static Block ritualController; public static Block ritualStone; + public static Block bloodLight; public static Block testSpellBlock; public static Block pedestal; public static Block teleposer; @@ -37,9 +38,11 @@ public class ModBlocks { bloodRune = registerBlock(new BlockBloodRune(), ItemBlockBloodRune.class); ritualController = registerBlock(new BlockRitualController(), ItemBlockRitualController.class); ritualStone = registerBlock(new BlockRitualStone(), ItemBlockRitualStone.class); + bloodLight = registerBlock(new BlockBloodLight()); testSpellBlock = registerBlock(new BlockTestSpellBlock()); pedestal = registerBlock(new BlockPedestal(), ItemBlockPedestal.class); teleposer = registerBlock(new BlockTeleposer()); + crystal = registerBlock(new BlockCrystal(), ItemBlockCrystal.class); bloodStoneBrick = registerBlock(new BlockBloodStoneBrick(), ItemBlockBloodStoneBrick.class); initTiles(); @@ -77,6 +80,9 @@ public class ModBlocks { renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(ritualStone), 6); renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(bloodStoneBrick), 0); renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(bloodStoneBrick), 1); + renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(crystal), 0); + renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(crystal), 1); + renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(bloodLight)); renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(pedestal), 0); renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(pedestal), 1); renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(teleposer)); diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModItems.java b/src/main/java/WayofTime/bloodmagic/registry/ModItems.java index 69d0706f..0013710a 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModItems.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModItems.java @@ -6,10 +6,7 @@ import WayofTime.bloodmagic.api.BloodMagicAPI; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.orb.BloodOrb; import WayofTime.bloodmagic.api.registry.OrbRegistry; -import WayofTime.bloodmagic.item.ItemActivationCrystal; -import WayofTime.bloodmagic.item.ItemBloodOrb; -import WayofTime.bloodmagic.item.ItemBucketEssence; -import WayofTime.bloodmagic.item.ItemSacrificialDagger; +import WayofTime.bloodmagic.item.*; import WayofTime.bloodmagic.item.armour.ItemLivingArmour; import WayofTime.bloodmagic.item.gear.ItemPackSacrifice; import WayofTime.bloodmagic.item.gear.ItemPackSelfSacrifice; @@ -47,6 +44,8 @@ public class ModItems { public static Item livingArmourLegs; public static Item livingArmourBoots; + public static Item altarMaker; + public static void init() { bloodOrb = registerItem(new ItemBloodOrb()); BloodMagicAPI.setOrbItem(bloodOrb); @@ -81,6 +80,8 @@ public class ModItems { livingArmourChest = registerItem(new ItemLivingArmour(1), "ItemLivingArmourChest"); livingArmourLegs = registerItem(new ItemLivingArmour(2), "ItemLivingArmourLegs"); livingArmourBoots = registerItem(new ItemLivingArmour(3), "ItemLivingArmourBoots"); + + altarMaker = registerItem(new ItemAltarMaker()); } public static void initRenders() { @@ -115,6 +116,8 @@ public class ModItems { renderHelper.itemRender(livingArmourChest); renderHelper.itemRender(livingArmourLegs); renderHelper.itemRender(livingArmourBoots); + + renderHelper.itemRender(altarMaker); } 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 e16be76e..2c1f7c9f 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileAltar.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileAltar.java @@ -28,7 +28,7 @@ public class TileAltar extends TileInventory implements IBloodAltar, ITickable, protected FluidStack fluidOutput = new FluidStack(BlockLifeEssence.getLifeEssence(), 0); protected FluidStack fluidInput = new FluidStack(BlockLifeEssence.getLifeEssence(), 0); private EnumAltarTier altarTier = EnumAltarTier.ONE; - private AltarUpgrade upgrade = new AltarUpgrade(); + private AltarUpgrade upgrade; private int capacity = FluidContainerRegistry.BUCKET_VOLUME * 10; private FluidStack fluid = new FluidStack(BloodMagicAPI.getLifeEssence(), 0); private int liquidRequired; //mB @@ -316,15 +316,40 @@ public class TileAltar extends TileInventory implements IBloodAltar, ITickable, EnumAltarTier tier = BloodAltar.getAltarTier(getWorld(), getPos()); this.altarTier = tier; - if (tier.equals(EnumAltarTier.ONE)) - upgrade = new AltarUpgrade(); - else - upgrade = BloodAltar.getUpgrades(getWorld(), pos, tier); + upgrade = BloodAltar.getUpgrades(getWorld(), pos, tier); - if (this.fluid.amount > this.capacity) - this.fluid.amount = this.capacity; + if (tier.equals(EnumAltarTier.ONE)) { + upgrade = null; + isUpgraded = false; + this.consumptionMultiplier = 0; + this.efficiencyMultiplier = 1; + this.sacrificeEfficiencyMultiplier = 0; + this.selfSacrificeEfficiencyMultiplier = 0; + this.capacityMultiplier = 1; + this.orbCapacityMultiplier = 1; + this.dislocationMultiplier = 1; + this.accelerationUpgrades = 0; + return; + } + else if (!tier.equals(EnumAltarTier.ONE) && upgrade != null) { + this.isUpgraded = true; + this.consumptionMultiplier = (float) (0.20 * upgrade.getSpeedCount()); + this.efficiencyMultiplier = (float) Math.pow(0.85, upgrade.getEfficiencyCount()); + this.sacrificeEfficiencyMultiplier = (float) (0.10 * upgrade.getSacrificeCount()); + this.selfSacrificeEfficiencyMultiplier = (float) (0.10 * upgrade.getSelfSacrificeCount()); + this.capacityMultiplier = (float) ((1 * Math.pow(1.10, upgrade.getBetterCapacityCount()) + 0.20 * upgrade.getCapacityCount())); + this.dislocationMultiplier = (float) (Math.pow(1.2, upgrade.getDisplacementCount())); + this.orbCapacityMultiplier = (float) (1 + 0.02 * upgrade.getOrbCapacityCount()); + this.capacity = (int) (FluidContainerRegistry.BUCKET_VOLUME * 10 * capacityMultiplier); + this.bufferCapacity = (int) (FluidContainerRegistry.BUCKET_VOLUME * 1 * capacityMultiplier); + this.accelerationUpgrades = upgrade.getAccelerationCount(); + } - getWorld().markBlockForUpdate(pos); + if (this.fluid.amount > this.capacity) this.fluid.amount = this.capacity; + if (this.fluidOutput.amount > this.bufferCapacity) this.fluidOutput.amount = this.bufferCapacity; + if (this.fluidInput.amount > this.bufferCapacity) this.fluidInput.amount = this.bufferCapacity; + + worldObj.markBlockForUpdate(pos); } public int fillMainTank(int amount) { diff --git a/src/main/java/WayofTime/bloodmagic/util/Utils.java b/src/main/java/WayofTime/bloodmagic/util/Utils.java index 10514c8a..2a0861a4 100644 --- a/src/main/java/WayofTime/bloodmagic/util/Utils.java +++ b/src/main/java/WayofTime/bloodmagic/util/Utils.java @@ -21,6 +21,7 @@ public class Utils { /** * Used for inserting an ItemStack with a stacksize of 1 to a tile's inventory at slot 0. + * Returns {@code true} if the ItemStack is inserted, {@code false} otherwise *

* EG: Block Altar * diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/EventHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/EventHandler.java index 371474b3..78b3e27d 100644 --- a/src/main/java/WayofTime/bloodmagic/util/handler/EventHandler.java +++ b/src/main/java/WayofTime/bloodmagic/util/handler/EventHandler.java @@ -1,15 +1,21 @@ package WayofTime.bloodmagic.util.handler; import WayofTime.bloodmagic.api.util.helper.PlayerHelper; +import WayofTime.bloodmagic.block.BlockAltar; +import WayofTime.bloodmagic.item.ItemAltarMaker; import WayofTime.bloodmagic.item.gear.ItemPackSacrifice; import WayofTime.bloodmagic.registry.ModBlocks; import WayofTime.bloodmagic.registry.ModItems; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.StatCollector; import net.minecraftforge.event.entity.living.LivingHurtEvent; import net.minecraftforge.event.entity.player.FillBucketEvent; +import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.fml.common.eventhandler.Event; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @@ -55,4 +61,12 @@ public class EventHandler { event.result = result; event.setResult(Event.Result.ALLOW); } + + @SubscribeEvent + public void harvestEvent(PlayerEvent.HarvestCheck event) { + if (event.block != null && event.block instanceof BlockAltar && event.entityPlayer != null && event.entityPlayer instanceof EntityPlayerMP && event.entityPlayer.getCurrentEquippedItem() != null && event.entityPlayer.getCurrentEquippedItem().getItem() instanceof ItemAltarMaker) { + ItemAltarMaker altarMaker = (ItemAltarMaker) event.entityPlayer.getCurrentEquippedItem().getItem(); + event.entityPlayer.addChatComponentMessage(new ChatComponentTranslation(StatCollector.translateToLocal("misc.altarMaker.destroy"), altarMaker.destroyAltar(event.entityPlayer))); + } + } } diff --git a/src/main/resources/assets/bloodmagic/blockstates/BlockBloodLight.json b/src/main/resources/assets/bloodmagic/blockstates/BlockBloodLight.json new file mode 100644 index 00000000..c67139da --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/BlockBloodLight.json @@ -0,0 +1,10 @@ +{ + "variants": { + "normal": { + "model": "bloodmagic:BlockBloodLight", + "textures": { + "all": "bloodmagic:blocks/BlockBloodLight" + } + } + } +} diff --git a/src/main/resources/assets/bloodmagic/blockstates/BlockCrystal.json b/src/main/resources/assets/bloodmagic/blockstates/BlockCrystal.json new file mode 100644 index 00000000..2119d373 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/BlockCrystal.json @@ -0,0 +1,22 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { }, + "model": "cube_all", + "uvlock": true + }, + "variants": { + "type": { + "normal": { + "textures": { + "all": "bloodmagic:blocks/ShardCluster" + } + }, + "brick": { + "textures": { + "all": "bloodmagic:blocks/ShardClusterBrick" + } + } + } + } +} diff --git a/src/main/resources/assets/bloodmagic/lang/en_US.lang b/src/main/resources/assets/bloodmagic/lang/en_US.lang index 23d24751..3d573bf5 100644 --- a/src/main/resources/assets/bloodmagic/lang/en_US.lang +++ b/src/main/resources/assets/bloodmagic/lang/en_US.lang @@ -66,6 +66,8 @@ item.BloodMagic.sigil.water.name=Water Sigil item.BloodMagic.sigil.lava.name=Lava Sigil item.BloodMagic.sigil.void.name=Void Sigil +item.BloodMagic.altarMaker.name=Altar Maker + # Blocks tile.BloodMagic.fluid.lifeEssence.name=Life Essence @@ -94,11 +96,15 @@ tile.BloodMagic.ritualStone.dawn.name=Ritual Stone of Dawn tile.BloodMagic.bloodstonebrick.normal.name=Bloodstone Brick tile.BloodMagic.bloodstonebrick.large.name=Large Bloodstone Brick +tile.BloodMagic.crystal.normal.name=Crystal Cluster +tile.BloodMagic.crystal.brick.name=Crystal Cluster Brick +tile.BloodMagic.bloodLight.name=Blood Light # Tooltips tooltip.BloodMagic.orb.desc=Stores raw Life Essence tooltip.BloodMagic.orb.owner=Added by: %s tooltip.BloodMagic.currentOwner=Owner: %s +tooltip.BloodMagic.currentTier=Current tier: tooltip.BloodMagic.sigil.air.desc=&oI feel lighter already... tooltip.BloodMagic.sigil.bloodLight.desc=&oI see a light! @@ -119,6 +125,11 @@ 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 +# Miscs +misc.altarMaker.setTier=Set Tier to: %d +misc.altarMaker.building=Building a: Tier %d Altar +misc.altarMaker.destroy=Destroyed a: Tier %d Altar + # JustEnoughItems jei.BloodMagic.recipe.altar=Blood Altar jei.BloodMagic.recipe.requiredLP=LP: %d diff --git a/src/main/resources/assets/bloodmagic/models/block/BlockBloodLight.json b/src/main/resources/assets/bloodmagic/models/block/BlockBloodLight.json new file mode 100644 index 00000000..5a2673b2 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/BlockBloodLight.json @@ -0,0 +1,15 @@ +{ + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 0, 0, 0 ], + "faces": { + "down": { "texture": "#down", "cullface": "down" }, + "up": { "texture": "#up", "cullface": "up" }, + "north": { "texture": "#north", "cullface": "north" }, + "south": { "texture": "#south", "cullface": "south" }, + "west": { "texture": "#west", "cullface": "west" }, + "east": { "texture": "#east", "cullface": "east" } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/BlockCrystal0.json b/src/main/resources/assets/bloodmagic/models/block/BlockCrystal0.json new file mode 100644 index 00000000..6e7787eb --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/BlockCrystal0.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "bloodmagic:blocks/ShardCluster" + } +} diff --git a/src/main/resources/assets/bloodmagic/models/block/BlockCrystal1.json b/src/main/resources/assets/bloodmagic/models/block/BlockCrystal1.json new file mode 100644 index 00000000..ad9dce6c --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/BlockCrystal1.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "bloodmagic:blocks/ShardClusterBrick" + } +} diff --git a/src/main/resources/assets/bloodmagic/models/item/BlockBloodLight.json b/src/main/resources/assets/bloodmagic/models/item/BlockBloodLight.json new file mode 100644 index 00000000..68fd1bc5 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/BlockBloodLight.json @@ -0,0 +1,10 @@ +{ + "parent": "bloodmagic:block/BlockBloodLight", + "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/BlockCrystal0.json b/src/main/resources/assets/bloodmagic/models/item/BlockCrystal0.json new file mode 100644 index 00000000..b5780718 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/BlockCrystal0.json @@ -0,0 +1,10 @@ +{ + "parent": "bloodmagic:block/BlockCrystal0", + "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/BlockCrystal1.json b/src/main/resources/assets/bloodmagic/models/item/BlockCrystal1.json new file mode 100644 index 00000000..c111c164 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/BlockCrystal1.json @@ -0,0 +1,10 @@ +{ + "parent": "bloodmagic:block/BlockCrystal1", + "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/ItemAltarMaker.json b/src/main/resources/assets/bloodmagic/models/item/ItemAltarMaker.json new file mode 100644 index 00000000..a97bee66 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/ItemAltarMaker.json @@ -0,0 +1,6 @@ +{ + "parent":"bloodmagic:item/ItemModelBase", + "textures": { + "layer0":"bloodmagic:items/AltarMaker" + } +} diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/BlockBloodLight.png b/src/main/resources/assets/bloodmagic/textures/blocks/BlockBloodLight.png index 67bede34..cb77176b 100644 Binary files a/src/main/resources/assets/bloodmagic/textures/blocks/BlockBloodLight.png and b/src/main/resources/assets/bloodmagic/textures/blocks/BlockBloodLight.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/items/AltarMaker.png b/src/main/resources/assets/bloodmagic/textures/items/AltarMaker.png new file mode 100644 index 00000000..431492cc Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/items/AltarMaker.png differ