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;
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

View file

@ -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<RitualComponent> components = RitualRegistry.getRitualForId(ritualId).getComponents();
Ritual ritual = RitualRegistry.getRitualForId(ritualId);
if(ritual == null) {
return false;
}
ArrayList<RitualComponent> 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;
}
}

View file

@ -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) {

View file

@ -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 {

View file

@ -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;