BloodMagic/src/main/java/WayofTime/bloodmagic/block/BlockRitualController.java

121 lines
4.7 KiB
Java
Raw Normal View History

package WayofTime.bloodmagic.block;
2015-10-30 21:20:23 -07:00
2016-03-18 13:16:38 -04:00
import java.util.ArrayList;
import java.util.List;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.Explosion;
import net.minecraft.world.World;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
import WayofTime.bloodmagic.BloodMagic;
import WayofTime.bloodmagic.api.BlockStack;
import WayofTime.bloodmagic.api.Constants;
import WayofTime.bloodmagic.api.registry.ImperfectRitualRegistry;
import WayofTime.bloodmagic.api.registry.RitualRegistry;
import WayofTime.bloodmagic.api.ritual.Ritual;
import WayofTime.bloodmagic.api.util.helper.RitualHelper;
2015-11-17 15:52:31 -08:00
import WayofTime.bloodmagic.block.base.BlockStringContainer;
import WayofTime.bloodmagic.client.IVariantProvider;
import WayofTime.bloodmagic.registry.ModItems;
import WayofTime.bloodmagic.tile.TileImperfectRitualStone;
2015-11-02 13:20:29 -08:00
import WayofTime.bloodmagic.tile.TileMasterRitualStone;
2016-01-03 08:30:59 -05:00
import WayofTime.bloodmagic.util.ChatUtil;
2016-03-16 15:37:55 -07:00
public class BlockRitualController extends BlockStringContainer implements IVariantProvider
{
public static final String[] names = { "master", "imperfect" };
2015-10-30 21:20:23 -07:00
public BlockRitualController()
{
2016-04-24 10:06:28 -07:00
super(Material.ROCK, names);
2015-10-30 21:20:23 -07:00
setUnlocalizedName(Constants.Mod.MODID + ".stone.ritual.");
setCreativeTab(BloodMagic.tabBloodMagic);
2016-03-21 12:55:36 -07:00
setSoundType(SoundType.STONE);
2015-10-30 21:20:23 -07:00
setHardness(2.0F);
setResistance(5.0F);
2015-10-30 21:20:23 -07:00
setHarvestLevel("pickaxe", 2);
}
@Override
2016-03-18 13:16:38 -04:00
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ)
{
TileEntity tile = world.getTileEntity(pos);
if (getMetaFromState(state) == 0 && tile instanceof TileMasterRitualStone)
{
2016-03-18 13:16:38 -04:00
if (heldItem != null && heldItem.getItem() == ModItems.activationCrystal)
{
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() && direction != null && RitualHelper.checkValidRitual(world, pos, key, direction))
{
2016-03-18 13:16:38 -04:00
if (((TileMasterRitualStone) tile).activateRitual(heldItem, player, RitualRegistry.getRitualForId(key)))
{
((TileMasterRitualStone) tile).setDirection(direction);
2015-12-29 09:10:03 -05:00
}
2016-01-03 08:30:59 -05:00
} else
{
ChatUtil.sendNoSpamUnloc(player, "chat.BloodMagic.ritual.notValid");
}
}
} else if (getMetaFromState(state) == 1 && tile instanceof TileImperfectRitualStone)
{
IBlockState determinerState = world.getBlockState(pos.up());
BlockStack determiner = new BlockStack(determinerState.getBlock(), determinerState.getBlock().getMetaFromState(determinerState));
return ((TileImperfectRitualStone) tile).performRitual(world, pos, ImperfectRitualRegistry.getRitualForBlock(determiner), player);
}
return false;
}
@Override
public void onBlockHarvested(World world, BlockPos pos, IBlockState state, EntityPlayer player)
{
TileEntity tile = world.getTileEntity(pos);
if (getMetaFromState(state) == 0 && tile instanceof TileMasterRitualStone)
((TileMasterRitualStone) tile).stopRitual(Ritual.BreakType.BREAK_MRS);
}
@Override
public void onBlockDestroyedByExplosion(World world, BlockPos pos, Explosion explosion)
{
TileEntity tile = world.getTileEntity(pos);
IBlockState state = world.getBlockState(pos);
if (getMetaFromState(state) == 0 && tile instanceof TileMasterRitualStone)
((TileMasterRitualStone) tile).stopRitual(Ritual.BreakType.EXPLOSION);
}
@Override
public TileEntity createNewTileEntity(World world, int meta)
{
return meta == 0 ? (new TileMasterRitualStone()) : (new TileImperfectRitualStone());
}
2016-03-16 15:37:55 -07:00
@Override
2016-03-16 18:41:06 -04:00
public List<Pair<Integer, String>> getVariants()
{
2016-03-16 15:37:55 -07:00
List<Pair<Integer, String>> ret = new ArrayList<Pair<Integer, String>>();
for (int i = 0; i < names.length; i++)
ret.add(new ImmutablePair<Integer, String>(i, "type=" + names[i]));
return ret;
}
2015-10-30 21:20:23 -07:00
}