From 971d4c4d1ee1ec31d9ea4d92e2b1521ff0ab4d96 Mon Sep 17 00:00:00 2001 From: WayofTime Date: Tue, 29 Dec 2015 08:44:34 -0500 Subject: [PATCH] Fixed the ritual system so that it would properly validate the ritual from the list. Used the activation crystal's owner's LP to activate the ritual. Removed some unnecessary imports. --- .../java/WayofTime/bloodmagic/BloodMagic.java | 23 +++--- .../api/util/helper/RitualHelper.java | 71 +++++++++++++------ .../block/BlockRitualController.java | 26 +++---- .../bloodmagic/item/sigil/ItemSigilSeer.java | 15 ++-- .../tile/TileMasterRitualStone.java | 4 +- 5 files changed, 86 insertions(+), 53 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/BloodMagic.java b/src/main/java/WayofTime/bloodmagic/BloodMagic.java index 7cf5d469..df9ef93a 100644 --- a/src/main/java/WayofTime/bloodmagic/BloodMagic.java +++ b/src/main/java/WayofTime/bloodmagic/BloodMagic.java @@ -1,12 +1,7 @@ package WayofTime.bloodmagic; -import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.api.util.helper.LogHelper; -import WayofTime.bloodmagic.network.BloodMagicPacketHandler; -import WayofTime.bloodmagic.proxy.CommonProxy; -import WayofTime.bloodmagic.registry.*; -import WayofTime.bloodmagic.util.handler.EventHandler; -import WayofTime.bloodmagic.util.helper.InventoryRenderHelper; +import java.io.File; + import lombok.Getter; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; @@ -16,8 +11,18 @@ import net.minecraftforge.fml.common.SidedProxy; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; - -import java.io.File; +import WayofTime.bloodmagic.api.Constants; +import WayofTime.bloodmagic.api.util.helper.LogHelper; +import WayofTime.bloodmagic.network.BloodMagicPacketHandler; +import WayofTime.bloodmagic.proxy.CommonProxy; +import WayofTime.bloodmagic.registry.ModBlocks; +import WayofTime.bloodmagic.registry.ModCompatibility; +import WayofTime.bloodmagic.registry.ModEntities; +import WayofTime.bloodmagic.registry.ModItems; +import WayofTime.bloodmagic.registry.ModPotions; +import WayofTime.bloodmagic.registry.ModRecipes; +import WayofTime.bloodmagic.registry.ModRituals; +import WayofTime.bloodmagic.util.handler.EventHandler; @Mod(modid = Constants.Mod.MODID, name = Constants.Mod.NAME, version = Constants.Mod.VERSION, dependencies = Constants.Mod.DEPEND, guiFactory = "WayofTime.bloodmagic.client.gui.ConfigGuiFactory") @Getter diff --git a/src/main/java/WayofTime/bloodmagic/api/util/helper/RitualHelper.java b/src/main/java/WayofTime/bloodmagic/api/util/helper/RitualHelper.java index a162e884..b1f11ba1 100644 --- a/src/main/java/WayofTime/bloodmagic/api/util/helper/RitualHelper.java +++ b/src/main/java/WayofTime/bloodmagic/api/util/helper/RitualHelper.java @@ -1,24 +1,23 @@ package WayofTime.bloodmagic.api.util.helper; -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.api.registry.ImperfectRitualRegistry; -import WayofTime.bloodmagic.api.registry.RitualRegistry; -import WayofTime.bloodmagic.api.ritual.EnumRuneType; -import WayofTime.bloodmagic.api.ritual.Ritual; -import WayofTime.bloodmagic.api.ritual.RitualComponent; -import WayofTime.bloodmagic.api.ritual.imperfect.ImperfectRitual; -import WayofTime.bloodmagic.block.BlockRitualStone; +import java.io.File; +import java.net.URL; +import java.util.ArrayList; +import java.util.Map; + import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.world.World; import net.minecraftforge.common.config.Configuration; - -import java.io.File; -import java.net.URL; -import java.util.ArrayList; -import java.util.Map; +import WayofTime.bloodmagic.BloodMagic; +import WayofTime.bloodmagic.api.registry.ImperfectRitualRegistry; +import WayofTime.bloodmagic.api.registry.RitualRegistry; +import WayofTime.bloodmagic.api.ritual.Ritual; +import WayofTime.bloodmagic.api.ritual.RitualComponent; +import WayofTime.bloodmagic.api.ritual.imperfect.ImperfectRitual; +import WayofTime.bloodmagic.block.BlockRitualStone; public class RitualHelper { @@ -40,19 +39,47 @@ public class RitualHelper { return RitualRegistry.getIds().get(previousIndex); } + /** + * Checks the RitualRegistry to see if the configuration of the ritual stones in the world is valid + * for the given EnumFacing. + * + * @param world + * @param pos + * @param direction + * @return The ID of the valid ritual + */ + public static String getValidRitual(World world, BlockPos pos, EnumFacing direction) { + for(String key : RitualRegistry.getIds()) { + boolean test = checkValidRitual(world, pos, key, direction); + if(test) { + return key; + } + } + + return ""; + } + public static boolean checkValidRitual(World world, BlockPos pos, String ritualId, EnumFacing direction) { - ArrayList components = RitualRegistry.getRitualForId(ritualId).getComponents(); - + Ritual ritual = RitualRegistry.getRitualForId(ritualId); + if(ritual == null) { + return false; + } + + ArrayList components = ritual.getComponents(); + if (components == null) return false; - + for (RitualComponent component : components) { - IBlockState worldState = world.getBlockState(pos.add(component.getOffset())); - if (worldState.getBlock() instanceof BlockRitualStone) { - EnumRuneType worldType = EnumRuneType.values()[worldState.getBlock().getMetaFromState(worldState)]; - - if (component.getRuneType() != worldType) - return false; + BlockPos newPos = pos.add(component.getOffset()); + IBlockState worldState = world.getBlockState(newPos); + Block block = worldState.getBlock(); + if (block instanceof BlockRitualStone) { + if(!((BlockRitualStone)block).isRuneType(world, newPos, component.getRuneType())) { + return false; + } + }else { + return false; } } diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockRitualController.java b/src/main/java/WayofTime/bloodmagic/block/BlockRitualController.java index cff89543..37122d6f 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockRitualController.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockRitualController.java @@ -1,5 +1,14 @@ package WayofTime.bloodmagic.block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockPos; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.Explosion; +import net.minecraft.world.World; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.BlockStack; import WayofTime.bloodmagic.api.Constants; @@ -13,16 +22,6 @@ import WayofTime.bloodmagic.registry.ModBlocks; import WayofTime.bloodmagic.registry.ModItems; import WayofTime.bloodmagic.tile.TileImperfectRitualStone; import WayofTime.bloodmagic.tile.TileMasterRitualStone; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.BlockState; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.Explosion; -import net.minecraft.world.World; public class BlockRitualController extends BlockStringContainer { @@ -58,8 +57,11 @@ public class BlockRitualController extends BlockStringContainer { if (getMetaFromState(state) == 0 && tile instanceof TileMasterRitualStone) { if (player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.activationCrystal) { - if (RitualHelper.checkValidRitual(world, pos, "ritualTest", null)) - ((TileMasterRitualStone) tile).activateRitual(player.getHeldItem(), player, RitualRegistry.getRitualForId("ritualTest")); + String key = RitualHelper.getValidRitual(world, pos, null); + //TODO: Give a message stating that this ritual is not a valid ritual. + if (!key.isEmpty() && RitualHelper.checkValidRitual(world, pos, key, null)) { + ((TileMasterRitualStone) tile).activateRitual(player.getHeldItem(), player, RitualRegistry.getRitualForId(key)); + } } } else if (getMetaFromState(state) == 1 && tile instanceof TileImperfectRitualStone) { diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSeer.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSeer.java index bf39a8d9..77908d7d 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSeer.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSeer.java @@ -1,13 +1,5 @@ package WayofTime.bloodmagic.item.sigil; -import WayofTime.bloodmagic.api.altar.IBloodAltar; -import WayofTime.bloodmagic.api.iface.IAltarReader; -import WayofTime.bloodmagic.api.util.helper.BindableHelper; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; -import WayofTime.bloodmagic.api.util.helper.PlayerHelper; -import WayofTime.bloodmagic.tile.TileInventory; -import WayofTime.bloodmagic.util.ChatUtil; -import WayofTime.bloodmagic.util.helper.TextHelper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; @@ -15,6 +7,13 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ChatComponentText; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; +import WayofTime.bloodmagic.api.altar.IBloodAltar; +import WayofTime.bloodmagic.api.iface.IAltarReader; +import WayofTime.bloodmagic.api.util.helper.BindableHelper; +import WayofTime.bloodmagic.api.util.helper.NetworkHelper; +import WayofTime.bloodmagic.api.util.helper.PlayerHelper; +import WayofTime.bloodmagic.util.ChatUtil; +import WayofTime.bloodmagic.util.helper.TextHelper; public class ItemSigilSeer extends ItemSigilBase implements IAltarReader { diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileMasterRitualStone.java b/src/main/java/WayofTime/bloodmagic/tile/TileMasterRitualStone.java index e6ec3de7..94c0b30b 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileMasterRitualStone.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileMasterRitualStone.java @@ -82,8 +82,8 @@ public class TileMasterRitualStone extends TileEntity implements IMasterRitualSt int crystalLevel = ((ItemActivationCrystal) activationCrystal.getItem()).getCrystalLevel(activationCrystal); if (RitualHelper.canCrystalActivate(ritual, crystalLevel)) { - SoulNetwork network = NetworkHelper.getSoulNetwork(activator, getWorld()); - + SoulNetwork network = NetworkHelper.getSoulNetwork(crystalOwner, getWorld()); + if (network.getCurrentEssence() < ritual.getActivationCost()) { ChatUtil.sendNoSpamUnloc(activator, "chat.BloodMagic.ritual.weak"); return false;