Merge branch '1.8-Rewrite' of https://github.com/WayofTime/BloodMagic into 1.8-Rewrite

This commit is contained in:
WayofTime 2016-01-05 18:27:55 -05:00
commit b736fd3eaa
5 changed files with 34 additions and 30 deletions

View file

@ -3,6 +3,9 @@ package WayofTime.bloodmagic.api;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.Getter; import lombok.Getter;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.util.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.registry.GameData; import net.minecraftforge.fml.common.registry.GameData;
@Getter @Getter
@ -23,6 +26,12 @@ public class BlockStack
this(block, 0); this(block, 0);
} }
public static BlockStack getStackFromPos(World world, BlockPos pos)
{
IBlockState state = world.getBlockState(pos);
return new BlockStack(state.getBlock(), state.getBlock().getMetaFromState(state));
}
@Override @Override
public String toString() public String toString()
{ {

View file

@ -43,6 +43,11 @@ public class ItemStackWrapper
this(block, 1, 0); this(block, 1, 0);
} }
public ItemStackWrapper(BlockStack blockStack)
{
this(blockStack.getBlock(), 1, blockStack.getMeta());
}
public static ItemStackWrapper getHolder(ItemStack stack) public static ItemStackWrapper getHolder(ItemStack stack)
{ {
return new ItemStackWrapper(stack.getItem(), stack.stackSize, stack.getItemDamage()); return new ItemStackWrapper(stack.getItem(), stack.stackSize, stack.getItemDamage());

View file

@ -1,6 +1,6 @@
package WayofTime.bloodmagic.api.event; package WayofTime.bloodmagic.api.event;
import net.minecraft.block.Block; import WayofTime.bloodmagic.api.BlockStack;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.BlockPos; import net.minecraft.util.BlockPos;
import net.minecraft.world.World; import net.minecraft.world.World;
@ -17,27 +17,21 @@ public class TeleposeEvent extends Event
{ {
public final World initalWorld; public final World initalWorld;
public final BlockPos initialBlockPos; public final BlockPos initialBlockPos;
public final BlockStack initialStack;
public final Block initialBlock;
public final int initialMetadata;
public final World finalWorld; public final World finalWorld;
public final BlockPos finalBlockPos; public final BlockPos finalBlockPos;
public final BlockStack finalStack;
public final Block finalBlock; public TeleposeEvent(World initialWorld, BlockPos initialBlockPos, World finalWorld, BlockPos finalBlockPos)
public final int finalMetadata;
public TeleposeEvent(World initialWorld, BlockPos initialBlockPos, Block initialBlock, int initialMetadata, World finalWorld, BlockPos finalBlockPos, Block finalBlock, int finalMetadata)
{ {
this.initalWorld = initialWorld; this.initalWorld = initialWorld;
this.initialBlockPos = initialBlockPos; this.initialBlockPos = initialBlockPos;
this.initialBlock = initialBlock; this.initialStack = BlockStack.getStackFromPos(initialWorld, initialBlockPos);
this.initialMetadata = initialMetadata;
this.finalWorld = finalWorld; this.finalWorld = finalWorld;
this.finalBlockPos = finalBlockPos; this.finalBlockPos = finalBlockPos;
this.finalBlock = finalBlock; this.finalStack = BlockStack.getStackFromPos(finalWorld, finalBlockPos);
this.finalMetadata = finalMetadata;
} }
public TileEntity getInitialTile() public TileEntity getInitialTile()

View file

@ -3,6 +3,7 @@ package WayofTime.bloodmagic.tile;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import WayofTime.bloodmagic.api.BlockStack;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockMobSpawner; import net.minecraft.block.BlockMobSpawner;
import net.minecraft.block.BlockPortal; import net.minecraft.block.BlockPortal;
@ -195,20 +196,17 @@ public class TileTeleposer extends TileInventory implements ITickable
if (finalTile != null) if (finalTile != null)
finalTile.writeToNBT(finalTag); finalTile.writeToNBT(finalTag);
Block initialBlock = initialWorld.getBlockState(initialPos).getBlock(); BlockStack initialStack = BlockStack.getStackFromPos(initialWorld, initialPos);
Block finalBlock = finalWorld.getBlockState(finalPos).getBlock(); BlockStack finalStack = BlockStack.getStackFromPos(finalWorld, finalPos);
if ((initialBlock.equals(Blocks.air) && finalBlock.equals(Blocks.air)) || (initialBlock instanceof BlockMobSpawner || finalBlock instanceof BlockMobSpawner || if ((initialStack.getBlock().equals(Blocks.air) && finalStack.getBlock().equals(Blocks.air)) || (initialStack.getBlock() instanceof BlockMobSpawner || finalStack.getBlock() instanceof BlockMobSpawner ||
// caller instanceof TEDemonPortal ? false : // caller instanceof TEDemonPortal ? false :
initialBlock instanceof BlockPortal || finalBlock instanceof BlockPortal)) initialStack.getBlock() instanceof BlockPortal || finalStack.getBlock() instanceof BlockPortal))
{ {
return false; return false;
} }
int initialMeta = initialBlock.getMetaFromState(initialWorld.getBlockState(initialPos)); TeleposeEvent event = new TeleposeEvent(initialWorld, initialPos, finalWorld, finalPos);
int finalMeta = finalBlock.getMetaFromState(finalWorld.getBlockState(finalPos));
TeleposeEvent event = new TeleposeEvent(initialWorld, initialPos, initialBlock, initialMeta, finalWorld, finalPos, finalBlock, finalMeta);
if (MinecraftForge.EVENT_BUS.post(event)) if (MinecraftForge.EVENT_BUS.post(event))
return false; return false;
@ -216,10 +214,10 @@ public class TileTeleposer extends TileInventory implements ITickable
finalWorld.playSoundEffect(finalPos.getX(), finalPos.getY(), finalPos.getZ(), "mob.endermen.portal", 1.0F, 1.0F); finalWorld.playSoundEffect(finalPos.getX(), finalPos.getY(), finalPos.getZ(), "mob.endermen.portal", 1.0F, 1.0F);
//Finally, we get to do something! (CLEARING TILES) //Finally, we get to do something! (CLEARING TILES)
if (finalBlock != null) if (finalStack.getBlock() != null)
finalWorld.setTileEntity(finalPos, finalBlock.createTileEntity(finalWorld, finalWorld.getBlockState(finalPos))); finalWorld.setTileEntity(finalPos, finalStack.getBlock().createTileEntity(finalWorld, finalWorld.getBlockState(finalPos)));
if (initialBlock != null) if (initialStack.getBlock() != null)
initialWorld.setTileEntity(initialPos, initialBlock.createTileEntity(initialWorld, initialWorld.getBlockState(initialPos))); initialWorld.setTileEntity(initialPos, initialStack.getBlock().createTileEntity(initialWorld, initialWorld.getBlockState(initialPos)));
//TILES CLEARED //TILES CLEARED
IBlockState initialBlockState = initialWorld.getBlockState(initialPos); IBlockState initialBlockState = initialWorld.getBlockState(initialPos);
@ -248,8 +246,8 @@ public class TileTeleposer extends TileInventory implements ITickable
newTileFinal.setPos(initialPos); newTileFinal.setPos(initialPos);
} }
initialWorld.notifyNeighborsOfStateChange(initialPos, finalBlock); initialWorld.notifyNeighborsOfStateChange(initialPos, finalStack.getBlock());
finalWorld.notifyNeighborsOfStateChange(finalPos, initialBlock); finalWorld.notifyNeighborsOfStateChange(finalPos, initialStack.getBlock());
return true; return true;
} }

View file

@ -97,13 +97,11 @@ public class EventHandler
@SubscribeEvent @SubscribeEvent
public void onTelepose(TeleposeEvent event) public void onTelepose(TeleposeEvent event)
{ {
BlockStack initialBlock = new BlockStack(event.initialBlock, event.initialMetadata);
BlockStack finalBlock = new BlockStack(event.finalBlock, event.finalMetadata);
if (ConfigHandler.teleposerBlacklist.contains(initialBlock) || ConfigHandler.teleposerBlacklist.contains(finalBlock)) if (ConfigHandler.teleposerBlacklist.contains(event.initialStack) || ConfigHandler.teleposerBlacklist.contains(event.finalStack))
event.setCanceled(true); event.setCanceled(true);
if (BloodMagicAPI.getTeleposerBlacklist().contains(initialBlock) || BloodMagicAPI.getTeleposerBlacklist().contains(finalBlock)) if (BloodMagicAPI.getTeleposerBlacklist().contains(event.initialStack) || BloodMagicAPI.getTeleposerBlacklist().contains(event.finalStack))
event.setCanceled(true); event.setCanceled(true);
} }