From 1e77b16bd7dc7aa5d76976ea1c24c8ce528479f3 Mon Sep 17 00:00:00 2001 From: WayofTime Date: Sun, 11 Sep 2016 17:58:54 -0400 Subject: [PATCH] Yeah. --- .../block/BlockInversionPillar.java | 14 +++++ .../inversion/InversionPillarHandler.java | 57 +++++++++++++++++++ .../item/block/ItemBlockInversionPillar.java | 51 +++++++++++++++++ .../bloodmagic/tile/TileInversionPillar.java | 5 ++ 4 files changed, 127 insertions(+) diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockInversionPillar.java b/src/main/java/WayofTime/bloodmagic/block/BlockInversionPillar.java index 6c5c8d79..e7cd4404 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockInversionPillar.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockInversionPillar.java @@ -20,6 +20,7 @@ import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.soul.EnumDemonWillType; import WayofTime.bloodmagic.block.base.BlockStringContainer; import WayofTime.bloodmagic.client.IVariantProvider; +import WayofTime.bloodmagic.tile.TileAltar; import WayofTime.bloodmagic.tile.TileInversionPillar; public class BlockInversionPillar extends BlockStringContainer implements IVariantProvider @@ -38,6 +39,19 @@ public class BlockInversionPillar extends BlockStringContainer implements IVaria setHarvestLevel("pickaxe", 2); } + @Override + public void breakBlock(World world, BlockPos blockPos, IBlockState blockState) + { + TileEntity tile = world.getTileEntity(blockPos); + if (tile instanceof TileInversionPillar) + { + TileInversionPillar tilePillar = (TileInversionPillar) world.getTileEntity(blockPos); + tilePillar.removePillarFromMap(); + } + + super.breakBlock(world, blockPos, blockState); + } + @Override public boolean isOpaqueCube(IBlockState state) { diff --git a/src/main/java/WayofTime/bloodmagic/inversion/InversionPillarHandler.java b/src/main/java/WayofTime/bloodmagic/inversion/InversionPillarHandler.java index a8106bb1..3c9fb261 100644 --- a/src/main/java/WayofTime/bloodmagic/inversion/InversionPillarHandler.java +++ b/src/main/java/WayofTime/bloodmagic/inversion/InversionPillarHandler.java @@ -13,7 +13,9 @@ import WayofTime.bloodmagic.tile.TileInversionPillar; public class InversionPillarHandler { + public static final double farthestDistanceSquared = 16 * 16; public static Map>> pillarMap = new HashMap>>(); + public static Map>>> nearPillarMap = new HashMap>>>(); public static boolean addPillarToMap(World world, EnumDemonWillType type, BlockPos pos) { @@ -49,6 +51,61 @@ public class InversionPillarHandler } } + public static boolean removePillarFromMap(World world, EnumDemonWillType type, BlockPos pos) + { + int dim = world.provider.getDimension(); + if (pillarMap.containsKey(dim)) + { + Map> willMap = pillarMap.get(dim); + if (willMap.containsKey(type)) + { + if (willMap.get(type).contains(pos)) + { + return willMap.get(type).remove(pos); + } else + { + return false; + } + } else + { + return false; + } + } else + { + return false; + } + } + + private static void onPillarRemoved(World world, EnumDemonWillType type, BlockPos pos) + { + int dim = world.provider.getDimension(); + if (nearPillarMap.containsKey(dim)) + { + Map>> willMap = nearPillarMap.get(dim); + if (willMap.containsKey(type)) + { + Map> posMap = willMap.get(type); + List posList = posMap.get(pos); + if (posList != null) + { + Iterator itr = posList.iterator(); + while (itr.hasNext()) + { + BlockPos checkPos = itr.next(); + List checkPosList = posMap.get(checkPos); + if (checkPosList != null) + { + checkPosList.remove(pos); + } + } + + posMap.remove(pos); + } + } + } + } + + //TODO: Change to use the nearPillarMap. public static List getNearbyPillars(World world, EnumDemonWillType type, BlockPos pos) { int dim = world.provider.getDimension(); diff --git a/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockInversionPillar.java b/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockInversionPillar.java index e1b4aa08..26035f69 100644 --- a/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockInversionPillar.java +++ b/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockInversionPillar.java @@ -1,9 +1,15 @@ package WayofTime.bloodmagic.item.block; import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; import WayofTime.bloodmagic.block.BlockInversionPillar; +import WayofTime.bloodmagic.registry.ModBlocks; public class ItemBlockInversionPillar extends ItemBlock { @@ -13,6 +19,51 @@ public class ItemBlockInversionPillar extends ItemBlock setHasSubtypes(true); } + @Override + public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, IBlockState newState) + { + if (!isBlockPillarBase(world.getBlockState(pos.offset(EnumFacing.DOWN)), newState) || !isBlockPillarCap(world.getBlockState(pos.offset(EnumFacing.UP)), newState)) + { + return false; + } + + return super.placeBlockAt(stack, player, world, pos, side, hitX, hitY, hitZ, newState); + } + + public boolean isBlockPillarBase(IBlockState baseState, IBlockState newState) + { + Block block = baseState.getBlock(); + if (block == ModBlocks.INVERSION_PILLAR_END) + { + int baseMeta = block.getMetaFromState(baseState); + int pillarMeta = newState.getBlock().getMetaFromState(newState); + + if (pillarMeta == baseMeta / 2 && baseMeta % 2 == 0) + { + return true; + } + } + + return false; + } + + public boolean isBlockPillarCap(IBlockState capState, IBlockState newState) + { + Block block = capState.getBlock(); + if (block == ModBlocks.INVERSION_PILLAR_END) + { + int capMeta = block.getMetaFromState(capState); + int pillarMeta = newState.getBlock().getMetaFromState(newState); + + if (pillarMeta == capMeta / 2 && capMeta % 2 == 1) + { + return true; + } + } + + return false; + } + @Override public String getUnlocalizedName(ItemStack stack) { diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileInversionPillar.java b/src/main/java/WayofTime/bloodmagic/tile/TileInversionPillar.java index 141496ec..e9a9be8e 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileInversionPillar.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileInversionPillar.java @@ -92,6 +92,11 @@ public class TileInversionPillar extends TileTicking } } + public void removePillarFromMap() + { + + } + public List getNearbyPillarsExcludingThis() { return InversionPillarHandler.getNearbyPillars(worldObj, type, pos);