diff --git a/src/main/java/WayofTime/bloodmagic/api/Constants.java b/src/main/java/WayofTime/bloodmagic/api/Constants.java index e9ab5c37..d3c947f1 100644 --- a/src/main/java/WayofTime/bloodmagic/api/Constants.java +++ b/src/main/java/WayofTime/bloodmagic/api/Constants.java @@ -21,6 +21,7 @@ public class Constants { public static final String CURRENT_RITUAL = "currentRitual"; public static final String IS_RUNNING = "isRunning"; public static final String RUNTIME = "runtime"; + public static final String DIRECTION = "direction"; public static final String REAGENT_TANKS = "reagentTanks"; public static final String CURRENT_INCENSE = "BM:CurrentIncense"; public static final String EMPTY = "Empty"; diff --git a/src/main/java/WayofTime/bloodmagic/api/ritual/RitualComponent.java b/src/main/java/WayofTime/bloodmagic/api/ritual/RitualComponent.java index e0328700..a6ebef06 100644 --- a/src/main/java/WayofTime/bloodmagic/api/ritual/RitualComponent.java +++ b/src/main/java/WayofTime/bloodmagic/api/ritual/RitualComponent.java @@ -37,4 +37,8 @@ public class RitualComponent { return this.getOffset().getZ(); } } + + public BlockPos getOffset(EnumFacing direction) { + return new BlockPos(getX(direction), offset.getY(), getZ(direction)); + } } 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 b1f11ba1..c4a74697 100644 --- a/src/main/java/WayofTime/bloodmagic/api/util/helper/RitualHelper.java +++ b/src/main/java/WayofTime/bloodmagic/api/util/helper/RitualHelper.java @@ -48,17 +48,30 @@ public class RitualHelper { * @param direction * @return The ID of the valid ritual */ - public static String getValidRitual(World world, BlockPos pos, EnumFacing direction) { + public static String getValidRitual(World world, BlockPos pos) { for(String key : RitualRegistry.getIds()) { - boolean test = checkValidRitual(world, pos, key, direction); - if(test) { - return key; + for(EnumFacing direction : EnumFacing.HORIZONTALS) { + boolean test = checkValidRitual(world, pos, key, direction); + if(test) { + return key; + } } } return ""; } + public static EnumFacing getDirectionOfRitual(World world, BlockPos pos, String key) { + for(EnumFacing direction : EnumFacing.HORIZONTALS) { + boolean test = checkValidRitual(world, pos, key, direction); + if(test) { + return direction; + } + } + + return null; + } + public static boolean checkValidRitual(World world, BlockPos pos, String ritualId, EnumFacing direction) { Ritual ritual = RitualRegistry.getRitualForId(ritualId); if(ritual == null) { @@ -71,7 +84,7 @@ public class RitualHelper { return false; for (RitualComponent component : components) { - BlockPos newPos = pos.add(component.getOffset()); + BlockPos newPos = pos.add(component.getOffset(direction)); IBlockState worldState = world.getBlockState(newPos); Block block = worldState.getBlock(); if (block instanceof BlockRitualStone) { diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockRitualController.java b/src/main/java/WayofTime/bloodmagic/block/BlockRitualController.java index 37122d6f..ae4d7765 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockRitualController.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockRitualController.java @@ -57,10 +57,13 @@ public class BlockRitualController extends BlockStringContainer { if (getMetaFromState(state) == 0 && tile instanceof TileMasterRitualStone) { if (player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.activationCrystal) { - String key = RitualHelper.getValidRitual(world, pos, null); + String key = RitualHelper.getValidRitual(world, pos); + EnumFacing direction = RitualHelper.getDirectionOfRitual(world, pos, key); //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)); + if (!key.isEmpty() && direction != null && RitualHelper.checkValidRitual(world, pos, key, direction)) { + if(((TileMasterRitualStone) tile).activateRitual(player.getHeldItem(), player, RitualRegistry.getRitualForId(key))) { + ((TileMasterRitualStone) tile).setDirection(direction); + } } } } else if (getMetaFromState(state) == 1 && tile instanceof TileImperfectRitualStone) { diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileMasterRitualStone.java b/src/main/java/WayofTime/bloodmagic/tile/TileMasterRitualStone.java index 94c0b30b..a6a14f1d 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileMasterRitualStone.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileMasterRitualStone.java @@ -39,7 +39,7 @@ public class TileMasterRitualStone extends TileEntity implements IMasterRitualSt private int cooldown; private Ritual currentRitual; @Setter - private EnumFacing direction; + private EnumFacing direction = EnumFacing.NORTH; @Override public void update() { @@ -57,6 +57,7 @@ public class TileMasterRitualStone extends TileEntity implements IMasterRitualSt currentRitual = RitualRegistry.getRitualForId(tag.getString(Constants.NBT.CURRENT_RITUAL)); active = tag.getBoolean(Constants.NBT.IS_RUNNING); activeTime = tag.getInteger(Constants.NBT.RUNTIME); + direction = EnumFacing.VALUES[tag.getInteger(Constants.NBT.DIRECTION)]; } @Override @@ -66,6 +67,7 @@ public class TileMasterRitualStone extends TileEntity implements IMasterRitualSt tag.setString(Constants.NBT.CURRENT_RITUAL, Strings.isNullOrEmpty(ritualId) ? "" : ritualId); tag.setBoolean(Constants.NBT.IS_RUNNING, isActive()); tag.setInteger(Constants.NBT.RUNTIME, getActiveTime()); + tag.setInteger(Constants.NBT.DIRECTION, direction.getIndex()); } @Override @@ -103,7 +105,7 @@ public class TileMasterRitualStone extends TileEntity implements IMasterRitualSt network.syphon(ritual.getActivationCost()); this.active = true; - this.owner = PlayerHelper.getUUIDFromPlayer(activator).toString(); + this.owner = crystalOwner; //Set the owner of the ritual to the crystal's owner this.currentRitual = ritual; return true; @@ -117,7 +119,7 @@ public class TileMasterRitualStone extends TileEntity implements IMasterRitualSt @Override public void performRitual(World world, BlockPos pos) { - if (getCurrentRitual() != null && RitualRegistry.ritualEnabled(getCurrentRitual()) && RitualHelper.checkValidRitual(getWorld(), getPos(), RitualRegistry.getIdForRitual(currentRitual), null)) { + if (getCurrentRitual() != null && RitualRegistry.ritualEnabled(getCurrentRitual()) && RitualHelper.checkValidRitual(getWorld(), getPos(), RitualRegistry.getIdForRitual(currentRitual), getDirection())) { RitualEvent.RitualRunEvent event = new RitualEvent.RitualRunEvent(this, getOwner(), getCurrentRitual()); if (MinecraftForge.EVENT_BUS.post(event) || event.getResult() == Event.Result.DENY)