Added directionality to rituals.

This commit is contained in:
WayofTime 2015-12-29 09:10:03 -05:00
parent 971d4c4d1e
commit 0e1173ef5d
5 changed files with 34 additions and 11 deletions

View file

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

View file

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

View file

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

View file

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

View file

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