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.
This commit is contained in:
WayofTime 2015-12-29 08:44:34 -05:00
parent 24058d7350
commit 971d4c4d1e
5 changed files with 86 additions and 53 deletions

View file

@ -1,12 +1,7 @@
package WayofTime.bloodmagic; package WayofTime.bloodmagic;
import WayofTime.bloodmagic.api.Constants; import java.io.File;
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 lombok.Getter; import lombok.Getter;
import net.minecraft.creativetab.CreativeTabs; import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item; 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.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import WayofTime.bloodmagic.api.Constants;
import java.io.File; 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") @Mod(modid = Constants.Mod.MODID, name = Constants.Mod.NAME, version = Constants.Mod.VERSION, dependencies = Constants.Mod.DEPEND, guiFactory = "WayofTime.bloodmagic.client.gui.ConfigGuiFactory")
@Getter @Getter

View file

@ -1,24 +1,23 @@
package WayofTime.bloodmagic.api.util.helper; package WayofTime.bloodmagic.api.util.helper;
import WayofTime.bloodmagic.BloodMagic; import java.io.File;
import WayofTime.bloodmagic.api.registry.ImperfectRitualRegistry; import java.net.URL;
import WayofTime.bloodmagic.api.registry.RitualRegistry; import java.util.ArrayList;
import WayofTime.bloodmagic.api.ritual.EnumRuneType; import java.util.Map;
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 net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
import net.minecraft.util.BlockPos; import net.minecraft.util.BlockPos;
import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.config.Configuration; import net.minecraftforge.common.config.Configuration;
import WayofTime.bloodmagic.BloodMagic;
import java.io.File; import WayofTime.bloodmagic.api.registry.ImperfectRitualRegistry;
import java.net.URL; import WayofTime.bloodmagic.api.registry.RitualRegistry;
import java.util.ArrayList; import WayofTime.bloodmagic.api.ritual.Ritual;
import java.util.Map; import WayofTime.bloodmagic.api.ritual.RitualComponent;
import WayofTime.bloodmagic.api.ritual.imperfect.ImperfectRitual;
import WayofTime.bloodmagic.block.BlockRitualStone;
public class RitualHelper { public class RitualHelper {
@ -40,19 +39,47 @@ public class RitualHelper {
return RitualRegistry.getIds().get(previousIndex); 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) { public static boolean checkValidRitual(World world, BlockPos pos, String ritualId, EnumFacing direction) {
ArrayList<RitualComponent> components = RitualRegistry.getRitualForId(ritualId).getComponents(); Ritual ritual = RitualRegistry.getRitualForId(ritualId);
if(ritual == null) {
return false;
}
ArrayList<RitualComponent> components = ritual.getComponents();
if (components == null) if (components == null)
return false; return false;
for (RitualComponent component : components) { for (RitualComponent component : components) {
IBlockState worldState = world.getBlockState(pos.add(component.getOffset())); BlockPos newPos = pos.add(component.getOffset());
if (worldState.getBlock() instanceof BlockRitualStone) { IBlockState worldState = world.getBlockState(newPos);
EnumRuneType worldType = EnumRuneType.values()[worldState.getBlock().getMetaFromState(worldState)]; Block block = worldState.getBlock();
if (block instanceof BlockRitualStone) {
if (component.getRuneType() != worldType) if(!((BlockRitualStone)block).isRuneType(world, newPos, component.getRuneType())) {
return false; return false;
}
}else {
return false;
} }
} }

View file

@ -1,5 +1,14 @@
package WayofTime.bloodmagic.block; 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.BloodMagic;
import WayofTime.bloodmagic.api.BlockStack; import WayofTime.bloodmagic.api.BlockStack;
import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.Constants;
@ -13,16 +22,6 @@ import WayofTime.bloodmagic.registry.ModBlocks;
import WayofTime.bloodmagic.registry.ModItems; import WayofTime.bloodmagic.registry.ModItems;
import WayofTime.bloodmagic.tile.TileImperfectRitualStone; import WayofTime.bloodmagic.tile.TileImperfectRitualStone;
import WayofTime.bloodmagic.tile.TileMasterRitualStone; 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 { public class BlockRitualController extends BlockStringContainer {
@ -58,8 +57,11 @@ public class BlockRitualController extends BlockStringContainer {
if (getMetaFromState(state) == 0 && tile instanceof TileMasterRitualStone) { if (getMetaFromState(state) == 0 && tile instanceof TileMasterRitualStone) {
if (player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.activationCrystal) { if (player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.activationCrystal) {
if (RitualHelper.checkValidRitual(world, pos, "ritualTest", null)) String key = RitualHelper.getValidRitual(world, pos, null);
((TileMasterRitualStone) tile).activateRitual(player.getHeldItem(), player, RitualRegistry.getRitualForId("ritualTest")); //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) { } else if (getMetaFromState(state) == 1 && tile instanceof TileImperfectRitualStone) {

View file

@ -1,13 +1,5 @@
package WayofTime.bloodmagic.item.sigil; 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.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@ -15,6 +7,13 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChatComponentText; import net.minecraft.util.ChatComponentText;
import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World; 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 { public class ItemSigilSeer extends ItemSigilBase implements IAltarReader {

View file

@ -82,8 +82,8 @@ public class TileMasterRitualStone extends TileEntity implements IMasterRitualSt
int crystalLevel = ((ItemActivationCrystal) activationCrystal.getItem()).getCrystalLevel(activationCrystal); int crystalLevel = ((ItemActivationCrystal) activationCrystal.getItem()).getCrystalLevel(activationCrystal);
if (RitualHelper.canCrystalActivate(ritual, crystalLevel)) { if (RitualHelper.canCrystalActivate(ritual, crystalLevel)) {
SoulNetwork network = NetworkHelper.getSoulNetwork(activator, getWorld()); SoulNetwork network = NetworkHelper.getSoulNetwork(crystalOwner, getWorld());
if (network.getCurrentEssence() < ritual.getActivationCost()) { if (network.getCurrentEssence() < ritual.getActivationCost()) {
ChatUtil.sendNoSpamUnloc(activator, "chat.BloodMagic.ritual.weak"); ChatUtil.sendNoSpamUnloc(activator, "chat.BloodMagic.ritual.weak");
return false; return false;