From 9247e66f13d3301d6674ca061bb4f847e5cd207e Mon Sep 17 00:00:00 2001 From: Arcaratus Date: Mon, 11 May 2015 21:38:16 -0400 Subject: [PATCH] Added in Unbinding Ritual recipes (UnbindingRegistry.registerRecipe(outputItemStack, inputItemStack)) and automatic reversion of registered Binding Recipes. Renamed Binding Ritual class, updated ritual blacklist. Blood Magic, now with 8% more lightning! --- .../AlchemicalWizardry.java | 17 ++++- .../BloodMagicConfiguration.java | 39 +++++++++++- .../api/bindingRegistry/UnbindingRecipe.java | 35 +++++++++++ .../bindingRegistry/UnbindingRegistry.java | 62 +++++++++++++++++++ ...oulBound.java => RitualEffectBinding.java} | 2 +- .../common/rituals/RitualEffectUnbinding.java | 43 ++++++++----- .../container/ContainerTeleposer.java | 1 - 7 files changed, 177 insertions(+), 22 deletions(-) create mode 100644 src/main/java/WayofTime/alchemicalWizardry/api/bindingRegistry/UnbindingRecipe.java create mode 100644 src/main/java/WayofTime/alchemicalWizardry/api/bindingRegistry/UnbindingRegistry.java rename src/main/java/WayofTime/alchemicalWizardry/common/rituals/{RitualEffectSoulBound.java => RitualEffectBinding.java} (99%) diff --git a/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java b/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java index 6d93dbc8..f5dbf8df 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java +++ b/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java @@ -11,6 +11,7 @@ import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; +import WayofTime.alchemicalWizardry.api.bindingRegistry.UnbindingRegistry; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.init.Blocks; import net.minecraft.init.Items; @@ -166,7 +167,7 @@ import WayofTime.alchemicalWizardry.common.rituals.RitualEffectLifeConduit; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectMagnetic; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectOmegaStalling; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectOmegaTest; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSoulBound; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectBinding; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSpawnWard; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSphereCreator; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSummonMeteor; @@ -376,6 +377,13 @@ public class AlchemicalWizardry public static boolean ritualDisabledSpawnWard; public static boolean ritualDisabledVeilOfEvil; public static boolean ritualDisabledFullStomach; + public static boolean ritualDisabledConvocation; + public static boolean ritualDisabledSymmetry; + public static boolean ritualDisabledStalling; + public static boolean ritualDisabledCrafting; + public static boolean ritualDisabledPhantomHands; + public static boolean ritualDisabledSphereIsland; + public static boolean isThaumcraftLoaded; public static boolean isForestryLoaded; @@ -1391,7 +1399,7 @@ public class AlchemicalWizardry Rituals.registerRitual("AW003GreenGrove", 1, 1000, new RitualEffectGrowth(), "Ritual of the Green Grove", new AlchemyCircleRenderer(new ResourceLocation("alchemicalwizardry:textures/models/AlchemyArrays/GreenGroveArray.png"), 244, 164, 96, 255, 0, 1.0, 1.6, 0, 1.5, false)); Rituals.registerRitual("AW004Interdiction", 1, 1000, new RitualEffectInterdiction(), "Interdiction Ritual", new AlchemyCircleRenderer(new ResourceLocation("alchemicalwizardry:textures/models/AlchemyArrays/InterdictionArray.png"), 27, 227, 206, 255, 0, 0.501, 0.8, 0, 1.5, false)); Rituals.registerRitual("AW005Containment", 1, 2000, new RitualEffectContainment(), "Ritual of Containment", new AlchemyCircleRenderer(new ResourceLocation("alchemicalwizardry:textures/models/SimpleTransCircle.png"), 186, 21, 21, 255, 0, 2.5, 2.5, 0, 2.5, false)); - Rituals.registerRitual("AW006Binding", 1, 5000, new RitualEffectSoulBound(), "Ritual of Binding", new AlchemyCircleRenderer(new ResourceLocation("alchemicalwizardry:textures/models/TransCircleBinding.png"), 193, 7, 7, 255, 0, 0.501, 1.0, 0, 2.5, true)); + Rituals.registerRitual("AW006Binding", 1, 5000, new RitualEffectBinding(), "Ritual of Binding", new AlchemyCircleRenderer(new ResourceLocation("alchemicalwizardry:textures/models/TransCircleBinding.png"), 193, 7, 7, 255, 0, 0.501, 1.0, 0, 2.5, true)); Rituals.registerRitual("AW007Unbinding", 1, 30000, new RitualEffectUnbinding(), "Ritual of Unbinding", new AlchemyCircleRenderer(new ResourceLocation("alchemicalwizardry:textures/models/SimpleTransCircle.png"), 193, 7, 7, 255, 0, 0.5, 0.8, 0, 2.5, false)); Rituals.registerRitual("AW008HighJump", 1, 1000, new RitualEffectJumping(), "Ritual of the High Jump", new AlchemyCircleRenderer(new ResourceLocation("alchemicalwizardry:textures/models/SimpleTransCircle.png"), 10, 183, 173, 255, 0, 0.501, 1.501, 0, 1.5, false)); Rituals.registerRitual("AW009Magnetism", 1, 5000, new RitualEffectMagnetic(), "Ritual of Magnetism", new AlchemyCircleRenderer(new ResourceLocation("alchemicalwizardry:textures/models/AlchemyArrays/MagnetismArray.png"), 126, 39, 0, 255, 0, 0.501, 2.0, 0, 1.5, false)); @@ -1422,7 +1430,7 @@ public class AlchemicalWizardry Rituals.registerRitual("AW034Crafting", 1, 15000, new RitualEffectCrafting(), "Rhythm of the Beating Anvil"); - Rituals.registerRitual("AW035", 1, 10000, new RitualEffectItemRouting(), "Orchestra of the Phantom Hands"); + Rituals.registerRitual("AW035PhantomHands", 1, 10000, new RitualEffectItemRouting(), "Orchestra of the Phantom Hands"); Rituals.registerRitual("AW036SphereIsland", 2, 10000, new RitualEffectSphereCreator(), "Birth of the Bastion"); //Rituals.registerRitual(1,100,new RitualEffectApiaryOverclock(),"Apiary Overclock")); @@ -1435,6 +1443,9 @@ public class AlchemicalWizardry BindingRegistry.registerRecipe(new ItemStack(ModItems.boundShovel), new ItemStack(Items.diamond_shovel)); BindingRegistry.registerRecipe(new ItemStack(ModItems.energySword), new ItemStack(Items.diamond_sword)); BindingRegistry.registerRecipe(new ItemStack(ModItems.energyBlaster), new ItemStack(ModItems.apprenticeBloodOrb)); + BindingRegistry.registerRecipe(new ItemStack(Items.baked_potato), new ItemStack(Items.potato)); // <---Shhhhhh.... + + UnbindingRegistry.addAllUnbindingRecipesFromBinding(); } public static void initHarvestRegistry() diff --git a/src/main/java/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java b/src/main/java/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java index 589771a1..b8f7d5b7 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java +++ b/src/main/java/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java @@ -10,12 +10,10 @@ import net.minecraft.entity.EntityList; import net.minecraft.entity.EntityLivingBase; import net.minecraftforge.common.config.Configuration; import WayofTime.alchemicalWizardry.api.rituals.Rituals; -import WayofTime.alchemicalWizardry.api.sacrifice.PlayerSacrificeHandler; import WayofTime.alchemicalWizardry.client.renderer.ColourThreshold; import WayofTime.alchemicalWizardry.client.renderer.RenderHelper; import WayofTime.alchemicalWizardry.common.demonVillage.DemonVillagePath; import WayofTime.alchemicalWizardry.common.demonVillage.tileEntity.TEDemonPortal; -import WayofTime.alchemicalWizardry.common.items.ItemIncense; import WayofTime.alchemicalWizardry.common.items.armour.BoundArmour; import WayofTime.alchemicalWizardry.common.summoning.meteor.MeteorParadigm; import cpw.mods.fml.common.FMLCommonHandler; @@ -47,7 +45,6 @@ public class BloodMagicConfiguration colorList.add(new ColourThreshold(Integer.valueOf(ct[0].trim()), ct[1].trim())); } - config = new Configuration(configFile); try @@ -142,6 +139,12 @@ public class BloodMagicConfiguration AlchemicalWizardry.ritualDisabledSpawnWard = config.get("Ritual Blacklist", "Ward of Sacrosanctity", false).getBoolean(false); AlchemicalWizardry.ritualDisabledVeilOfEvil = config.get("Ritual Blacklist", "Veil of Evil", false).getBoolean(false); AlchemicalWizardry.ritualDisabledFullStomach = config.get("Ritual Blacklist", "Requiem of the Satiated Stomach", false).getBoolean(false); + AlchemicalWizardry.ritualDisabledConvocation = config.get("Ritual Blacklist", "Convocation of the Damned", false).getBoolean(false); + AlchemicalWizardry.ritualDisabledSymmetry = config.get("Ritual Blacklist", "Symmetry of the Omega", false).getBoolean(false); + AlchemicalWizardry.ritualDisabledStalling = config.get("Ritual Blacklist", "Duet of the Fused Souls", false).getBoolean(false); + AlchemicalWizardry.ritualDisabledCrafting = config.get("Ritual Blacklist", "Rhythm of the Beating Anvil", false).getBoolean(false); + AlchemicalWizardry.ritualDisabledPhantomHands = config.get("Ritual Blacklist", "Orchestra of the Phantom Hands", false).getBoolean(false); + AlchemicalWizardry.ritualDisabledSphereIsland = config.get("Ritual Blacklist", "Birth of the Bastion", false).getBoolean(false); teleposerBlacklist = config.get("Teleposer Blacklist", "Blacklist", blacklist, "Stops specified blocks from being teleposed. Put entries on new lines. Valid syntax is: \nmodid:blockname:meta").getStringList(); @@ -372,5 +375,35 @@ public class BloodMagicConfiguration Rituals.ritualMap.remove("AW030FullStomach"); Rituals.keyList.remove("AW030FullStomach"); } + if (AlchemicalWizardry.ritualDisabledConvocation) + { + Rituals.ritualMap.remove("AW031Convocation"); + Rituals.keyList.remove("AW031Convocation"); + } + if (AlchemicalWizardry.ritualDisabledSymmetry) + { + Rituals.ritualMap.remove("AW032Symmetry"); + Rituals.keyList.remove("AW032Symmetry"); + } + if (AlchemicalWizardry.ritualDisabledStalling) + { + Rituals.ritualMap.remove("AW033Stalling"); + Rituals.keyList.remove("AW033Stalling"); + } + if (AlchemicalWizardry.ritualDisabledCrafting) + { + Rituals.ritualMap.remove("AW034Crafting"); + Rituals.keyList.remove("AW034Crafting"); + } + if (AlchemicalWizardry.ritualDisabledPhantomHands) + { + Rituals.ritualMap.remove("AW035PhantomHands"); + Rituals.keyList.remove("AW035PhantomHands"); + } + if (AlchemicalWizardry.ritualDisabledSphereIsland) + { + Rituals.ritualMap.remove("AW036SphereIsland"); + Rituals.keyList.remove("AW036SphereIsland"); + } } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/bindingRegistry/UnbindingRecipe.java b/src/main/java/WayofTime/alchemicalWizardry/api/bindingRegistry/UnbindingRecipe.java new file mode 100644 index 00000000..46c6fc23 --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/api/bindingRegistry/UnbindingRecipe.java @@ -0,0 +1,35 @@ +package WayofTime.alchemicalWizardry.api.bindingRegistry; + +import net.minecraft.item.ItemStack; + +public class UnbindingRecipe +{ + public ItemStack requiredItem; + public ItemStack outputItem; + + public UnbindingRecipe(ItemStack outputItem, ItemStack requiredItem) + { + this.requiredItem = requiredItem; + this.outputItem = outputItem; + } + + public boolean doesRequiredItemMatch(ItemStack testStack) + { + if (testStack == null || this.requiredItem == null) + { + return false; + } + + return this.requiredItem.isItemEqual(testStack); + } + + public ItemStack getResult(ItemStack inputItem) + { + return this.getResult(); + } + + public ItemStack getResult() + { + return this.outputItem; + } +} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/bindingRegistry/UnbindingRegistry.java b/src/main/java/WayofTime/alchemicalWizardry/api/bindingRegistry/UnbindingRegistry.java new file mode 100644 index 00000000..3ae2eaf2 --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/api/bindingRegistry/UnbindingRegistry.java @@ -0,0 +1,62 @@ +package WayofTime.alchemicalWizardry.api.bindingRegistry; + +import net.minecraft.item.ItemStack; + +import java.util.LinkedList; +import java.util.List; + +public class UnbindingRegistry +{ + public static List unbindingRecipes = new LinkedList(); + + public static void addAllUnbindingRecipesFromBinding() + { + for (BindingRecipe bindingRecipe : BindingRegistry.bindingRecipes) + { + unbindingRecipes.add(new UnbindingRecipe(bindingRecipe.requiredItem, bindingRecipe.outputItem)); + } + } + + public static void registerRecipe(ItemStack output, ItemStack input) + { + unbindingRecipes.add(new UnbindingRecipe(output, input)); + } + + public static boolean isRequiredItemValid(ItemStack testItem) + { + for (UnbindingRecipe recipe : unbindingRecipes) + { + if (recipe.doesRequiredItemMatch(testItem)) + { + return true; + } + } + + return false; + } + + public static int getIndexForItem(ItemStack testItem) + { + int i = 0; + for (UnbindingRecipe recipe : unbindingRecipes) + { + if (recipe.doesRequiredItemMatch(testItem)) + { + return i; + } + i++; + } + + return -1; + } + + public static ItemStack getOutputForIndex(int index) + { + if (unbindingRecipes.size() <= index) + { + return null; + } + + return unbindingRecipes.get(index).getResult(); + } +} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSoulBound.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectBinding.java similarity index 99% rename from src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSoulBound.java rename to src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectBinding.java index 2b407074..1cd6bfb6 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSoulBound.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectBinding.java @@ -19,7 +19,7 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -public class RitualEffectSoulBound extends RitualEffect +public class RitualEffectBinding extends RitualEffect { @Override public void performEffect(IMasterRitualStone ritualStone) diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectUnbinding.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectUnbinding.java index 0366e089..750cfd1a 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectUnbinding.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectUnbinding.java @@ -3,6 +3,7 @@ package WayofTime.alchemicalWizardry.common.rituals; import WayofTime.alchemicalWizardry.ModBlocks; import WayofTime.alchemicalWizardry.ModItems; import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; +import WayofTime.alchemicalWizardry.api.bindingRegistry.UnbindingRegistry; import WayofTime.alchemicalWizardry.api.items.interfaces.IBindable; import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; @@ -95,15 +96,15 @@ public class RitualEffectUnbinding extends RitualEffect { ritualStone.setVar1(-1); } + else if (UnbindingRegistry.isRequiredItemValid(itemStack)) + { + ritualStone.setVar1(UnbindingRegistry.getIndexForItem(itemStack) + 9); + } - if (ritualStone.getVar1() > 0) + if (ritualStone.getVar1() > 0 && ritualStone.getVar1() <= 8) { item.setDead(); - world.addWeatherEffect(new EntityLightningBolt(world, x, y + 1, z - 5)); - world.addWeatherEffect(new EntityLightningBolt(world, x, y + 1, z + 5)); - world.addWeatherEffect(new EntityLightningBolt(world, x - 5, y + 1, z)); - world.addWeatherEffect(new EntityLightningBolt(world, x + 5, y + 1, z)); - NBTTagCompound itemTag = itemStack.getTagCompound(); + doLightning(world, x, y, z); ItemStack[] inv = ((BoundArmour) itemStack.getItem()).getInternalInventory(itemStack); if (inv != null) @@ -112,6 +113,7 @@ public class RitualEffectUnbinding extends RitualEffect { if (internalItem != null) { + doLightning(world, x, y, z); EntityItem newItem = new EntityItem(world, x + 0.5, y + 1, z + 0.5, internalItem.copy()); world.spawnEntityInWorld(newItem); } @@ -126,11 +128,7 @@ public class RitualEffectUnbinding extends RitualEffect } else if (ritualStone.getVar1() == -1) { item.setDead(); - world.addWeatherEffect(new EntityLightningBolt(world, x, y + 1, z - 5)); - world.addWeatherEffect(new EntityLightningBolt(world, x, y + 1, z + 5)); - world.addWeatherEffect(new EntityLightningBolt(world, x - 5, y + 1, z)); - world.addWeatherEffect(new EntityLightningBolt(world, x + 5, y + 1, z)); - NBTTagCompound itemTag = itemStack.getTagCompound(); + doLightning(world, x, y, z); ItemStack[] inv = ((SigilOfHolding) itemStack.getItem()).getInternalInventory(itemStack); if (inv != null) @@ -151,12 +149,21 @@ public class RitualEffectUnbinding extends RitualEffect drain = true; break; } - + else if (ritualStone.getVar1() >= 9) + { + item.setDead(); + doLightning(world, x, y, z); + ItemStack spawnedItem = UnbindingRegistry.getOutputForIndex(ritualStone.getVar1() - 9); + EntityItem newItem = new EntityItem(world, x + 0.5, y + 1, z + 0.5, spawnedItem.copy()); + world.spawnEntityInWorld(newItem); + ritualStone.setActive(false); + drain = true; + break; + } } - if (drain) - { + if (drain) { SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh()); } } @@ -167,6 +174,14 @@ public class RitualEffectUnbinding extends RitualEffect } } + private void doLightning(World world, int x, int y, int z) + { + world.addWeatherEffect(new EntityLightningBolt(world, x, y + 1, z - 5)); + world.addWeatherEffect(new EntityLightningBolt(world, x, y + 1, z + 5)); + world.addWeatherEffect(new EntityLightningBolt(world, x - 5, y + 1, z)); + world.addWeatherEffect(new EntityLightningBolt(world, x + 5, y + 1, z)); + } + @Override public int getCostPerRefresh() { diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/container/ContainerTeleposer.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/container/ContainerTeleposer.java index eeb19933..6797655f 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/container/ContainerTeleposer.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/container/ContainerTeleposer.java @@ -52,7 +52,6 @@ public class ContainerTeleposer extends Container { ItemStack stackInSlot = slotObject.getStack(); stack = stackInSlot.copy(); - System.out.println("Slots: " + slots); if (stack.getItem() instanceof TelepositionFocus) {