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

127 lines
5.9 KiB
Java
Raw Normal View History

package WayofTime.bloodmagic.block;
2015-10-30 21:20:23 -07:00
2017-08-15 21:30:48 -07:00
import WayofTime.bloodmagic.BloodMagic;
import WayofTime.bloodmagic.apibutnotreally.BlockStack;
import WayofTime.bloodmagic.apibutnotreally.iface.IBindable;
import WayofTime.bloodmagic.apibutnotreally.registry.ImperfectRitualRegistry;
import WayofTime.bloodmagic.apibutnotreally.registry.RitualRegistry;
import WayofTime.bloodmagic.apibutnotreally.ritual.Ritual;
import WayofTime.bloodmagic.apibutnotreally.ritual.imperfect.ImperfectRitual;
import WayofTime.bloodmagic.apibutnotreally.util.helper.RitualHelper;
2017-01-02 00:10:28 -08:00
import WayofTime.bloodmagic.block.base.BlockEnum;
2017-08-15 21:30:48 -07:00
import WayofTime.bloodmagic.block.enums.EnumRitualController;
import WayofTime.bloodmagic.core.RegistrarBloodMagicItems;
import WayofTime.bloodmagic.tile.TileImperfectRitualStone;
import WayofTime.bloodmagic.tile.TileMasterRitualStone;
import amerifrance.guideapi.api.IGuideLinked;
import com.google.common.base.Strings;
2016-03-18 13:16:38 -04:00
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;
2016-06-05 16:29:36 -07:00
import net.minecraft.util.ResourceLocation;
2016-03-18 13:16:38 -04:00
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextComponentTranslation;
2016-03-18 13:16:38 -04:00
import net.minecraft.world.Explosion;
import net.minecraft.world.World;
2017-08-15 21:30:48 -07:00
import javax.annotation.Nullable;
2016-06-05 16:29:36 -07:00
2017-08-15 21:30:48 -07:00
public class BlockRitualController extends BlockEnum<EnumRitualController> implements IGuideLinked {
public BlockRitualController() {
super(Material.ROCK, EnumRitualController.class);
2015-10-30 21:20:23 -07:00
setUnlocalizedName(BloodMagic.MODID + ".stone.ritual.");
setCreativeTab(BloodMagic.TAB_BM);
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
2017-08-15 21:30:48 -07:00
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) {
2017-01-02 00:10:28 -08:00
ItemStack heldItem = player.getHeldItem(hand);
TileEntity tile = world.getTileEntity(pos);
2017-08-15 21:30:48 -07:00
if (state.getValue(getProperty()) != EnumRitualController.IMPERFECT && tile instanceof TileMasterRitualStone) {
if (heldItem.getItem() == RegistrarBloodMagicItems.ACTIVATION_CRYSTAL) {
IBindable bindable = (IBindable) heldItem.getItem();
if (Strings.isNullOrEmpty(bindable.getOwnerName(heldItem)))
return false;
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.
2017-08-15 21:30:48 -07:00
if (!key.isEmpty() && direction != null && RitualHelper.checkValidRitual(world, pos, key, direction)) {
if (((TileMasterRitualStone) tile).activateRitual(heldItem, player, RitualRegistry.getRitualForId(key))) {
((TileMasterRitualStone) tile).setDirection(direction);
if (state.getValue(getProperty()) == EnumRitualController.INVERTED)
((TileMasterRitualStone) tile).setInverted(true);
2015-12-29 09:10:03 -05:00
}
2017-08-15 21:30:48 -07:00
} else {
player.sendStatusMessage(new TextComponentTranslation("chat.bloodmagic.ritual.notValid"), true);
}
}
2017-08-15 21:30:48 -07:00
} else if (state.getValue(getProperty()) == EnumRitualController.IMPERFECT && 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
2017-08-15 21:30:48 -07:00
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
2017-08-15 21:30:48 -07:00
public void onBlockDestroyedByExplosion(World world, BlockPos pos, Explosion explosion) {
TileEntity tile = world.getTileEntity(pos);
2016-07-13 17:18:34 -04:00
if (tile instanceof TileMasterRitualStone)
((TileMasterRitualStone) tile).stopRitual(Ritual.BreakType.EXPLOSION);
}
@Override
2017-08-15 21:30:48 -07:00
public boolean hasTileEntity(IBlockState state) {
2016-10-18 16:38:56 -07:00
return true;
}
@Override
2017-08-15 21:30:48 -07:00
public TileEntity createTileEntity(World world, IBlockState state) {
return state.getValue(getProperty()) != EnumRitualController.IMPERFECT ? new TileMasterRitualStone() : new TileImperfectRitualStone();
}
2016-06-05 16:29:36 -07:00
// IGuideLinked
@Override
@Nullable
2017-08-15 21:30:48 -07:00
public ResourceLocation getLinkedEntry(World world, BlockPos pos, EntityPlayer player, ItemStack stack) {
2016-06-05 16:29:36 -07:00
IBlockState state = world.getBlockState(pos);
2017-08-15 21:30:48 -07:00
if (state.getValue(getProperty()).equals(EnumRitualController.MASTER)) {
2016-06-05 16:29:36 -07:00
TileMasterRitualStone mrs = (TileMasterRitualStone) world.getTileEntity(pos);
if (mrs == null || mrs.getCurrentRitual() == null)
return null;
else
return new ResourceLocation("bloodmagic", "ritual_" + mrs.getCurrentRitual().getName());
2017-08-15 21:30:48 -07:00
} else if (state.getValue(getProperty()).equals(EnumRitualController.IMPERFECT)) {
2016-06-05 16:29:36 -07:00
ImperfectRitual imperfectRitual = ImperfectRitualRegistry.getRitualForBlock(BlockStack.getStackFromPos(world, pos.up()));
if (imperfectRitual != null)
return new ResourceLocation("bloodmagic", "ritual_" + imperfectRitual.getName());
}
return null;
}
2015-10-30 21:20:23 -07:00
}