From 620023d098396952e7f05d838cbf6135d94b0a2c Mon Sep 17 00:00:00 2001 From: WayofTime Date: Sat, 27 Feb 2016 16:36:56 -0500 Subject: [PATCH] Fully implemented discrete demon will, which means the demon crystals can be inserted into demon crucibles to create will. --- .settings/org.eclipse.jdt.core.prefs | 6 +- .../WayofTime/bloodmagic/api/Constants.java | 1 + .../api/soul/IDiscreteDemonWill.java | 29 +++++ .../bloodmagic/block/BlockDemonCrucible.java | 4 +- .../bloodmagic/block/BlockDemonCrystal.java | 33 ++---- .../bloodmagic/item/ItemComponent.java | 10 -- .../bloodmagic/item/ItemDemonCrystal.java | 102 ++++++++++++++++++ .../bloodmagic/registry/ModItems.java | 6 ++ .../bloodmagic/registry/ModRecipes.java | 9 +- .../bloodmagic/tile/TileDemonCrucible.java | 42 +++++++- .../bloodmagic/tile/TileDemonCrystal.java | 5 +- .../blockstates/item/ItemDemonCrystal.json | 36 +++++++ .../assets/bloodmagic/lang/en_US.lang | 13 +++ 13 files changed, 250 insertions(+), 46 deletions(-) create mode 100644 src/main/java/WayofTime/bloodmagic/api/soul/IDiscreteDemonWill.java create mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemDemonCrystal.java create mode 100644 src/main/resources/assets/bloodmagic/blockstates/item/ItemDemonCrystal.json diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index 29c63ff9..a0225fae 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -1,5 +1,5 @@ # -#Thu Feb 18 08:35:51 EST 2016 +#Sat Feb 27 07:00:18 EST 2016 org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert org.eclipse.jdt.core.formatter.brace_position_for_block=next_line org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert @@ -288,10 +288,10 @@ org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=next_line eclipse.preferences.version=1 -org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on +org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=next_line org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on org.eclipse.jdt.core.compiler.compliance=1.6 org.eclipse.jdt.core.formatter.blank_lines_after_package=1 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 diff --git a/src/main/java/WayofTime/bloodmagic/api/Constants.java b/src/main/java/WayofTime/bloodmagic/api/Constants.java index 58a52fc8..2683843b 100644 --- a/src/main/java/WayofTime/bloodmagic/api/Constants.java +++ b/src/main/java/WayofTime/bloodmagic/api/Constants.java @@ -160,6 +160,7 @@ public class Constants BOUND_SWORD("ItemBoundSword"), BUCKET_ESSENCE("ItemBucketEssence"), COMPONENT("ItemComponent"), + DEMON_CRYSTAL("ItemDemonCrystal"), DAGGER_OF_SACRIFICE("ItemDaggerOfSacrifice"), INSCRIPTION_TOOL("ItemInscriptionTool"), LAVA_CRYSTAL("ItemLavaCrystal"), diff --git a/src/main/java/WayofTime/bloodmagic/api/soul/IDiscreteDemonWill.java b/src/main/java/WayofTime/bloodmagic/api/soul/IDiscreteDemonWill.java new file mode 100644 index 00000000..62de0076 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/api/soul/IDiscreteDemonWill.java @@ -0,0 +1,29 @@ +package WayofTime.bloodmagic.api.soul; + +import net.minecraft.item.ItemStack; + +public interface IDiscreteDemonWill +{ + public double getWill(ItemStack soulStack); + + /** + * Drains the demonic will from the willStack. If all of the will is + * drained, the willStack will be removed. Will only drain in discrete + * amounts, determined by getDiscretization. + * + * @param willStack + * @param drainAmount + * @return The amount of will drained. + */ + public double drainWill(ItemStack willStack, double drainAmount); + + /** + * Gets the discrete number for this demonic will. + * + * @param willStack + * @return + */ + public double getDiscretization(ItemStack willStack); + + public EnumDemonWillType getType(ItemStack willStack); +} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrucible.java b/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrucible.java index 8d134a13..57f445ed 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrucible.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrucible.java @@ -11,8 +11,8 @@ import net.minecraft.util.EnumFacing; import net.minecraft.world.World; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.api.soul.IDemonWill; import WayofTime.bloodmagic.api.soul.IDemonWillGem; +import WayofTime.bloodmagic.api.soul.IDiscreteDemonWill; import WayofTime.bloodmagic.tile.TileDemonCrucible; import WayofTime.bloodmagic.util.Utils; @@ -74,7 +74,7 @@ public class BlockDemonCrucible extends BlockContainer if (playerItem != null) { - if (!(playerItem.getItem() instanceof IDemonWill) && !(playerItem.getItem() instanceof IDemonWillGem)) + if (!(playerItem.getItem() instanceof IDiscreteDemonWill) && !(playerItem.getItem() instanceof IDemonWillGem)) { return false; } diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystal.java b/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystal.java index 7c486248..6ed5e8ef 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystal.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystal.java @@ -13,7 +13,6 @@ 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.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -27,7 +26,7 @@ import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.soul.EnumDemonWillType; import WayofTime.bloodmagic.item.ItemComponent; -import WayofTime.bloodmagic.tile.TileAltar; +import WayofTime.bloodmagic.item.ItemDemonCrystal; import WayofTime.bloodmagic.tile.TileDemonCrystal; public class BlockDemonCrystal extends BlockContainer @@ -165,19 +164,19 @@ public class BlockDemonCrystal extends BlockContainer switch (type) { case CORROSIVE: - stack = ItemComponent.getStack(ItemComponent.CRYSTAL_CORROSIVE); + stack = ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_CORROSIVE); break; case DEFAULT: - stack = ItemComponent.getStack(ItemComponent.CRYSTAL_DEFAULT); + stack = ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_DEFAULT); break; case DESTRUCTIVE: - stack = ItemComponent.getStack(ItemComponent.CRYSTAL_DESTRUCTIVE); + stack = ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_DESTRUCTIVE); break; case STEADFAST: - stack = ItemComponent.getStack(ItemComponent.CRYSTAL_STEADFAST); + stack = ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_STEADFAST); break; case VENGEFUL: - stack = ItemComponent.getStack(ItemComponent.CRYSTAL_VENGEFUL); + stack = ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_VENGEFUL); break; } @@ -191,26 +190,6 @@ public class BlockDemonCrystal extends BlockContainer return 0; } - @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) - { - if (world.isRemote) - { - return true; - } - - TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TileDemonCrystal) - { - int crystals = ((TileDemonCrystal) tile).getCrystalCount(); - int next = Math.min(7, crystals + 1); - ((TileDemonCrystal) tile).setCrystalCount(next); - world.markBlockForUpdate(pos); - } - - return true; - } - // @Override // public java.util.List getDrops(net.minecraft.world.IBlockAccess world, BlockPos pos, IBlockState state, int fortune) // { diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemComponent.java b/src/main/java/WayofTime/bloodmagic/item/ItemComponent.java index 02f75615..569f46b3 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemComponent.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemComponent.java @@ -37,11 +37,6 @@ public class ItemComponent extends Item public static final String REAGENT_SEVERANCE = "reagentSeverance"; public static final String REAGENT_TELEPOSITION = "reagentTeleposition"; 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() { @@ -76,11 +71,6 @@ public class ItemComponent extends Item names.add(16, REAGENT_SEVERANCE); names.add(17, REAGENT_TELEPOSITION); 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 diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemDemonCrystal.java b/src/main/java/WayofTime/bloodmagic/item/ItemDemonCrystal.java new file mode 100644 index 00000000..e4c43e41 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/ItemDemonCrystal.java @@ -0,0 +1,102 @@ +package WayofTime.bloodmagic.item; + +import java.util.ArrayList; +import java.util.List; + +import lombok.Getter; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import WayofTime.bloodmagic.BloodMagic; +import WayofTime.bloodmagic.api.Constants; +import WayofTime.bloodmagic.api.soul.EnumDemonWillType; +import WayofTime.bloodmagic.api.soul.IDiscreteDemonWill; +import WayofTime.bloodmagic.registry.ModItems; + +public class ItemDemonCrystal extends Item implements IDiscreteDemonWill +{ + @Getter + private static ArrayList names = new ArrayList(); + + 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 ItemDemonCrystal() + { + super(); + + setUnlocalizedName(Constants.Mod.MODID + ".demonCrystal."); + setRegistryName(Constants.BloodMagicItem.DEMON_CRYSTAL.getRegName()); + setHasSubtypes(true); + setCreativeTab(BloodMagic.tabBloodMagic); + + buildItemList(); + } + + private void buildItemList() + { + names.add(0, CRYSTAL_DEFAULT); + names.add(1, CRYSTAL_CORROSIVE); + names.add(2, CRYSTAL_DESTRUCTIVE); + names.add(3, CRYSTAL_VENGEFUL); + names.add(4, CRYSTAL_STEADFAST); + } + + @Override + public String getUnlocalizedName(ItemStack stack) + { + return super.getUnlocalizedName(stack) + names.get(stack.getItemDamage()); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item id, CreativeTabs creativeTab, List list) + { + for (int i = 0; i < names.size(); i++) + list.add(new ItemStack(id, 1, i)); + } + + public static ItemStack getStack(String name) + { + return new ItemStack(ModItems.itemDemonCrystal, 1, names.indexOf(name)); + } + + @Override + public double getWill(ItemStack willStack) + { + return getDiscretization(willStack) * willStack.stackSize; + } + + @Override + public double drainWill(ItemStack willStack, double drainAmount) + { + double discretization = getDiscretization(willStack); + int drainedNumber = (int) Math.floor(Math.min(willStack.stackSize * discretization, drainAmount) / discretization); + + if (drainedNumber > 0) + { + willStack.stackSize -= drainedNumber; + return drainedNumber * discretization; + } + + return 0; + } + + @Override + public double getDiscretization(ItemStack willStack) + { + return 10; + } + + @Override + public EnumDemonWillType getType(ItemStack willStack) + { + return EnumDemonWillType.values()[MathHelper.clamp_int(willStack.getMetadata(), 0, EnumDemonWillType.values().length - 1)]; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModItems.java b/src/main/java/WayofTime/bloodmagic/registry/ModItems.java index 9490be67..b617dc30 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModItems.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModItems.java @@ -22,6 +22,7 @@ import WayofTime.bloodmagic.item.ItemBoundSword; import WayofTime.bloodmagic.item.ItemBucketEssence; import WayofTime.bloodmagic.item.ItemComponent; import WayofTime.bloodmagic.item.ItemDaggerOfSacrifice; +import WayofTime.bloodmagic.item.ItemDemonCrystal; import WayofTime.bloodmagic.item.ItemInscriptionTool; import WayofTime.bloodmagic.item.ItemLavaCrystal; import WayofTime.bloodmagic.item.ItemRitualDiviner; @@ -115,6 +116,7 @@ public class ModItems public static Item sigilTransposition; public static Item itemComponent; + public static Item itemDemonCrystal; public static Item telepositionFocus; public static Item bloodShard; @@ -207,6 +209,7 @@ public class ModItems sigilTransposition = registerItem(new ItemSigilTransposition()); itemComponent = registerItem(new ItemComponent()); + itemDemonCrystal = registerItem(new ItemDemonCrystal()); telepositionFocus = registerItem(new ItemTelepositionFocus()); bloodShard = registerItem(new ItemBloodShard()); @@ -309,6 +312,9 @@ public class ModItems for (int i = 0; i < ItemComponent.getNames().size(); i++) renderHelperV2.registerRender(itemComponent, i, ItemComponent.getNames().get(i)); + for (int i = 0; i < ItemDemonCrystal.getNames().size(); i++) + renderHelperV2.registerRender(itemDemonCrystal, i, ItemDemonCrystal.getNames().get(i)); + renderHelperV2.registerRender(telepositionFocus, 0, "weak"); renderHelperV2.registerRender(telepositionFocus, 1, "enhanced"); renderHelperV2.registerRender(telepositionFocus, 2, "reinforced"); diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java b/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java index 32569233..7127029d 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java @@ -25,6 +25,7 @@ import WayofTime.bloodmagic.compress.AdvancedCompressionHandler; import WayofTime.bloodmagic.compress.BaseCompressionHandler; import WayofTime.bloodmagic.compress.StorageBlockCraftingManager; import WayofTime.bloodmagic.item.ItemComponent; +import WayofTime.bloodmagic.item.ItemDemonCrystal; public class ModRecipes { @@ -185,7 +186,7 @@ public class ModRecipes TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(ModItems.soulGem), 1, 1, "dustRedstone", "ingotGold", "blockGlass", "dyeBlue"); TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(ModItems.soulGem, 1, 1), 60, 20, new ItemStack(ModItems.soulGem), "gemDiamond", "blockRedstone", "blockLapis"); TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(ModItems.soulGem, 1, 2), 240, 50, new ItemStack(ModItems.soulGem, 1, 1), "gemDiamond", "blockGold", new ItemStack(ModItems.slate, 1, 2)); - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(ModItems.soulGem, 1, 3), 1000, 100, new ItemStack(ModItems.soulGem, 1, 2), new ItemStack(ModItems.slate, 1, 3), new ItemStack(ModItems.bloodShard), Items.blaze_rod); + TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(ModItems.soulGem, 1, 3), 1000, 100, new ItemStack(ModItems.soulGem, 1, 2), new ItemStack(ModItems.slate, 1, 3), new ItemStack(ModItems.bloodShard), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_DEFAULT)); TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(ModItems.soulGem, 1, 4), 4000, 500, new ItemStack(ModItems.soulGem, 1, 3), Items.nether_star); TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(ModItems.sentientSword), 0, 0, new ItemStack(ModItems.soulGem), new ItemStack(Items.iron_sword)); TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(ModItems.sentientBow), 70, 0, new ItemStack(Items.bow), new ItemStack(ModItems.soulGem, 1, 1), Items.string, Items.string); @@ -217,5 +218,11 @@ public class ModRecipes TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(ModBlocks.outputRoutingNode), 400, 25, "dustGlowstone", "dustRedstone", "ingotIron", new ItemStack(ModBlocks.itemRoutingNode)); TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(ModBlocks.inputRoutingNode), 400, 25, "dustGlowstone", "dustRedstone", "ingotGold", new ItemStack(ModBlocks.itemRoutingNode)); TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(ModBlocks.masterRoutingNode), 400, 200, "blockIron", "gemDiamond", new ItemStack(ModItems.slate, 1, 2)); + + TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(ModBlocks.demonCrystal, 1, 0), 1200, 100, ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_DEFAULT), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_DEFAULT), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_DEFAULT), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_DEFAULT)); + TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(ModBlocks.demonCrystal, 1, 1), 1200, 100, ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_CORROSIVE), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_CORROSIVE), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_CORROSIVE), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_CORROSIVE)); + TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(ModBlocks.demonCrystal, 1, 2), 1200, 100, ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_DESTRUCTIVE), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_DESTRUCTIVE), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_DESTRUCTIVE), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_DESTRUCTIVE)); + TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(ModBlocks.demonCrystal, 1, 3), 1200, 100, ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_VENGEFUL), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_VENGEFUL), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_VENGEFUL), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_VENGEFUL)); + TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(ModBlocks.demonCrystal, 1, 4), 1200, 100, ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_STEADFAST), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_STEADFAST), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_STEADFAST), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_STEADFAST)); } } diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrucible.java b/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrucible.java index 71c6563c..328d6d00 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrucible.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrucible.java @@ -3,15 +3,18 @@ package WayofTime.bloodmagic.tile; import java.util.HashMap; import java.util.Map.Entry; +import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; import net.minecraft.util.ITickable; import WayofTime.bloodmagic.api.soul.EnumDemonWillType; import WayofTime.bloodmagic.api.soul.IDemonWillConduit; import WayofTime.bloodmagic.api.soul.IDemonWillGem; +import WayofTime.bloodmagic.api.soul.IDiscreteDemonWill; import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; -public class TileDemonCrucible extends TileInventory implements ITickable, IDemonWillConduit +public class TileDemonCrucible extends TileInventory implements ITickable, IDemonWillConduit, ISidedInventory { public HashMap willMap = new HashMap(); //TODO: Change to DemonWillHolder public final int maxWill = 100; @@ -83,6 +86,25 @@ public class TileDemonCrucible extends TileInventory implements ITickable, IDemo WorldDemonWillHandler.fillWillToMaximum(worldObj, pos, type, filled, maxWill, true); } } + } else if (stack.getItem() instanceof IDiscreteDemonWill) //TODO: Limit the speed of this process + { + IDiscreteDemonWill willItem = (IDiscreteDemonWill) stack.getItem(); + EnumDemonWillType type = willItem.getType(stack); + double currentAmount = WorldDemonWillHandler.getCurrentWill(worldObj, pos, type); + double needed = maxWill - currentAmount; + double discreteAmount = willItem.getDiscretization(stack); + if (needed >= discreteAmount) + { + double filled = willItem.drainWill(stack, discreteAmount); + if (filled > 0) + { + WorldDemonWillHandler.fillWillToMaximum(worldObj, pos, type, filled, maxWill, true); + if (stack.stackSize <= 0) + { + this.setInventorySlotContents(0, null); + } + } + } } } } @@ -218,4 +240,22 @@ public class TileDemonCrucible extends TileInventory implements ITickable, IDemo { return willMap.containsKey(type) ? willMap.get(type) : 0; } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] { 0 }; + } + + @Override + public boolean canInsertItem(int index, ItemStack stack, EnumFacing direction) + { + return stack != null ? stack.getItem() instanceof IDemonWillGem || stack.getItem() instanceof IDiscreteDemonWill : false; + } + + @Override + public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction) + { + return true; + } } \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrystal.java b/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrystal.java index e2750c15..bf2ec092 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrystal.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrystal.java @@ -25,6 +25,7 @@ public class TileDemonCrystal extends TileEntity implements ITickable, IDemonWil public final double drainRate = 1; public static final double sameWillConversionRate = 5; public static final double defaultWillConversionRate = 50; + public static final double timeDelayForWrongWill = 0.6; public double progressToNextCrystal = 0; public int internalCounter = 0; @@ -67,7 +68,7 @@ public class TileDemonCrystal extends TileEntity implements ITickable, IDemonWil value = WorldDemonWillHandler.getCurrentWill(worldObj, pos, EnumDemonWillType.DEFAULT); if (value > 0.5) { - double nextProgress = getCrystalGrowthPerSecond(value); + double nextProgress = getCrystalGrowthPerSecond(value) * timeDelayForWrongWill; progressToNextCrystal += WorldDemonWillHandler.drainWill(worldObj, getPos(), EnumDemonWillType.DEFAULT, nextProgress * defaultWillConversionRate, true) / defaultWillConversionRate; } } @@ -97,7 +98,7 @@ public class TileDemonCrystal extends TileEntity implements ITickable, IDemonWil public double getCrystalGrowthPerSecond(double will) { - return 1.0 / 80 * Math.sqrt(will / 200); + return 1.0 / 800 * Math.sqrt(will / 200); } public int getCrystalCountForRender() diff --git a/src/main/resources/assets/bloodmagic/blockstates/item/ItemDemonCrystal.json b/src/main/resources/assets/bloodmagic/blockstates/item/ItemDemonCrystal.json new file mode 100644 index 00000000..0d65d0c3 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/item/ItemDemonCrystal.json @@ -0,0 +1,36 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "builtin/generated", + "transform": "forge:default-item" + }, + "variants": { + "type": { + "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" + } + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/lang/en_US.lang b/src/main/resources/assets/bloodmagic/lang/en_US.lang index 1f277322..aefdf6e0 100644 --- a/src/main/resources/assets/bloodmagic/lang/en_US.lang +++ b/src/main/resources/assets/bloodmagic/lang/en_US.lang @@ -87,6 +87,12 @@ item.BloodMagic.baseComponent.reagentSeverance.name=Severance Reagent item.BloodMagic.baseComponent.reagentTeleposition.name=Teleposition Reagent item.BloodMagic.baseComponent.reagentTransposition.name=Transposition Reagent +item.BloodMagic.demonCrystal.crystalDefault.name=Demon Will Crystal +item.BloodMagic.demonCrystal.crystalCorrosive.name=Corrosive Will Crystal +item.BloodMagic.demonCrystal.crystalDestructive.name=Destructive Will Crystal +item.BloodMagic.demonCrystal.crystalVengeful.name=Vengeful Will Crystal +item.BloodMagic.demonCrystal.crystalSteadfast.name=Steadfast Will Crystal + item.BloodMagic.monsterSoul.base.name=Demonic Will item.BloodMagic.sigil.air.name=Air Sigil @@ -188,6 +194,7 @@ tile.BloodMagic.teleposer.name=Teleposer tile.BloodMagic.soulForge.name=Hellfire Forge tile.BloodMagic.demonCrucible.name=Demon Crucible tile.BloodMagic.demonPylon.name=Demon Pylon +tile.BloodMagic.demonCrystallizer.name=Demon Crystallizer tile.BloodMagic.masterRouting.name=Master Routing Node tile.BloodMagic.outputRouting.name=Output Routing Node @@ -206,6 +213,12 @@ tile.BloodMagic.path.obsidianTile.name=Tiled Obsidian Path tile.BloodMagic.dimensionalPortal.name=Dimensional Portal tile.BloodMagic.bloodTank.name=Blood Tank +tile.BloodMagic.demonCrystalDEFAULT.name=Demon Will Crystal Cluster +tile.BloodMagic.demonCrystalCORROSIVE.name=Corrosive Will Crystal Cluster +tile.BloodMagic.demonCrystalDESTRUCTIVE.name=Destructive Will Crystal Cluster +tile.BloodMagic.demonCrystalVENGEFUL.name=Vengeful Will Crystal Cluster +tile.BloodMagic.demonCrystalSTEADFAST.name=Steadfast Will Crystal Cluster + # Tooltips tooltip.BloodMagic.orb.desc=Stores raw Life Essence tooltip.BloodMagic.orb.owner=Added by: %s