
I redone where the items/blocsks are stored and how the configs are handled to clean up it and give space. You can change the config line to AWWayofTime if you want to keep the compatibility with old configs. Now you reference the blocks from the ModBlocks and Items from the ModItems.
318 lines
11 KiB
Java
318 lines
11 KiB
Java
package WayofTime.alchemicalWizardry.common.block;
|
|
|
|
import WayofTime.alchemicalWizardry.common.AlchemicalWizardry;
|
|
import WayofTime.alchemicalWizardry.common.items.TelepositionFocus;
|
|
import WayofTime.alchemicalWizardry.common.tileEntity.TETeleposer;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.block.BlockContainer;
|
|
import net.minecraft.block.BlockMobSpawner;
|
|
import net.minecraft.block.material.Material;
|
|
import net.minecraft.client.renderer.texture.IconRegister;
|
|
import net.minecraft.entity.item.EntityItem;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.inventory.IInventory;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.tileentity.TileEntity;
|
|
import net.minecraft.util.Icon;
|
|
import net.minecraft.world.World;
|
|
|
|
import java.util.Random;
|
|
|
|
public class BlockTeleposer extends BlockContainer {
|
|
@SideOnly(Side.CLIENT)
|
|
private static Icon topIcon;
|
|
@SideOnly(Side.CLIENT)
|
|
private static Icon sideIcon1;
|
|
@SideOnly(Side.CLIENT)
|
|
private static Icon sideIcon2;
|
|
@SideOnly(Side.CLIENT)
|
|
private static Icon bottomIcon;
|
|
|
|
public BlockTeleposer(int id)
|
|
{
|
|
super(id, Material.rock);
|
|
setHardness(2.0F);
|
|
setResistance(5.0F);
|
|
setCreativeTab(AlchemicalWizardry.tabBloodMagic);
|
|
setUnlocalizedName("bloodTeleposer");
|
|
//func_111022_d("AlchemicalWizardry:blocks");
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public void registerIcons(IconRegister iconRegister)
|
|
{
|
|
this.topIcon = iconRegister.registerIcon("AlchemicalWizardry:Teleposer_Top");
|
|
this.sideIcon1 = iconRegister.registerIcon("AlchemicalWizardry:Teleposer_Side");
|
|
this.sideIcon2 = iconRegister.registerIcon("AlchemicalWizardry:Teleposer_Side");
|
|
this.bottomIcon = iconRegister.registerIcon("AlchemicalWizardry:Teleposer_Side");
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public Icon getIcon(int side, int meta)
|
|
{
|
|
switch (side)
|
|
{
|
|
case 0:
|
|
return bottomIcon;
|
|
|
|
case 1:
|
|
return topIcon;
|
|
|
|
//case 2: return sideIcon1;
|
|
//case 3: return sideIcon1;
|
|
//case 4: return sideIcon2;
|
|
//case 5: return sideIcon2;
|
|
default:
|
|
return sideIcon2;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int idk, float what, float these, float are)
|
|
{
|
|
TETeleposer tileEntity = (TETeleposer) world.getBlockTileEntity(x, y, z);
|
|
ItemStack playerItem = player.getCurrentEquippedItem();
|
|
|
|
if (playerItem != null)
|
|
{
|
|
if (playerItem.getItem() instanceof TelepositionFocus)
|
|
{
|
|
if (playerItem.stackTagCompound == null)
|
|
{
|
|
playerItem.setTagCompound(new NBTTagCompound());
|
|
}
|
|
|
|
NBTTagCompound itemTag = playerItem.stackTagCompound;
|
|
itemTag.setInteger("xCoord", x);
|
|
itemTag.setInteger("yCoord", y);
|
|
itemTag.setInteger("zCoord", z);
|
|
itemTag.setInteger("dimensionId", world.provider.dimensionId);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
player.openGui(AlchemicalWizardry.instance, 1, world, x, y, z);
|
|
// this.swapBlocks(world, x, y+1, z, x, y+2, z);
|
|
//
|
|
// world.markBlockForUpdate(x, y, z);
|
|
//player.openGui(AlchemicalWizardry.instance, 0, world, x, y, z);
|
|
//PacketDispatcher.sendPacketToServer(tileEntity.getDescriptionPacket());
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public void breakBlock(World world, int x, int y, int z, int par5, int par6)
|
|
{
|
|
dropItems(world, x, y, z);
|
|
super.breakBlock(world, x, y, z, par5, par6);
|
|
}
|
|
|
|
private void dropItems(World world, int x, int y, int z)
|
|
{
|
|
Random rand = new Random();
|
|
TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
|
|
|
|
if (!(tileEntity instanceof IInventory))
|
|
{
|
|
return;
|
|
}
|
|
|
|
IInventory inventory = (IInventory) tileEntity;
|
|
|
|
for (int i = 0; i < inventory.getSizeInventory(); i++)
|
|
{
|
|
ItemStack item = inventory.getStackInSlot(i);
|
|
|
|
if (item != null && item.stackSize > 0)
|
|
{
|
|
float rx = rand.nextFloat() * 0.8F + 0.1F;
|
|
float ry = rand.nextFloat() * 0.8F + 0.1F;
|
|
float rz = rand.nextFloat() * 0.8F + 0.1F;
|
|
EntityItem entityItem = new EntityItem(world, x + rx, y + ry, z + rz, new ItemStack(item.itemID, item.stackSize, item.getItemDamage()));
|
|
|
|
if (item.hasTagCompound())
|
|
{
|
|
entityItem.getEntityItem().setTagCompound((NBTTagCompound) item.getTagCompound().copy());
|
|
}
|
|
|
|
float factor = 0.05F;
|
|
entityItem.motionX = rand.nextGaussian() * factor;
|
|
entityItem.motionY = rand.nextGaussian() * factor + 0.2F;
|
|
entityItem.motionZ = rand.nextGaussian() * factor;
|
|
world.spawnEntityInWorld(entityItem);
|
|
item.stackSize = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public TileEntity createNewTileEntity(World world)
|
|
{
|
|
return new TETeleposer();
|
|
}
|
|
|
|
public static boolean swapBlocks(World worldI, World worldF, int xi, int yi, int zi, int xf, int yf, int zf)
|
|
{
|
|
//TODO Fix sapling duplication glitch
|
|
TileEntity tileEntityI = worldI.getBlockTileEntity(xi, yi, zi);
|
|
TileEntity tileEntityF = worldF.getBlockTileEntity(xf, yf, zf);
|
|
TileEntity tileI;
|
|
TileEntity tileF;
|
|
// ItemStack[] inv1 = new ItemStack[0];
|
|
// ItemStack[] inv2 = new ItemStack[0];
|
|
NBTTagCompound nbttag1 = new NBTTagCompound();
|
|
NBTTagCompound nbttag2 = new NBTTagCompound();
|
|
|
|
if (tileEntityI != null)
|
|
{
|
|
//NBTTagCompound nbttag1 = new NBTTagCompound();
|
|
// tileEntityI.xCoord=xf;
|
|
// tileEntityI.yCoord=yf;
|
|
// tileEntityI.zCoord=zf;
|
|
tileEntityI.writeToNBT(nbttag1);
|
|
//tileEntityI.readFromNBT(new NBTTagCompound());
|
|
}
|
|
|
|
// if(tileEntityI instanceof IInventory)
|
|
// {
|
|
// int size = ((IInventory)tileEntityI).getSizeInventory();
|
|
// inv1 = new ItemStack[size];
|
|
// for(int i=0; i<size; i++)
|
|
// {
|
|
// inv1[i] = ((IInventory)tileEntityI).getStackInSlot(i);
|
|
// ((IInventory)tileEntityI).setInventorySlotContents(i, null);
|
|
// }
|
|
// }
|
|
|
|
if (tileEntityF != null)
|
|
{
|
|
// tileEntityF.xCoord=xi;
|
|
// tileEntityF.yCoord=yi;
|
|
// tileEntityF.zCoord=zi;
|
|
tileEntityF.writeToNBT(nbttag2);
|
|
}
|
|
|
|
// if(tileEntityF instanceof IInventory)
|
|
// {
|
|
// int size = ((IInventory)tileEntityF).getSizeInventory();
|
|
// inv2 = new ItemStack[size];
|
|
// for(int i=0; i<size; i++)
|
|
// {
|
|
// inv2[i] = ((IInventory)tileEntityF).getStackInSlot(i);
|
|
// ((IInventory)tileEntityF).setInventorySlotContents(i, null);
|
|
// }
|
|
// }
|
|
int idI = worldI.getBlockId(xi, yi, zi);
|
|
int idF = worldF.getBlockId(xf, yf, zf);
|
|
|
|
// if(ThaumcraftApi.portableHoleBlackList.contains(idI)||ThaumcraftApi.portableHoleBlackList.contains(idF))
|
|
// {
|
|
// return false;
|
|
// }
|
|
|
|
if (idI == 0 && idF == 0)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
//if(Block.blocksList[idI] instanceof IPlantable || Block.blocksList[idF] instanceof IPlantable||Block.blocksList[idI] instanceof BlockMobSpawner || Block.blocksList[idF] instanceof BlockMobSpawner)
|
|
if (Block.blocksList[idI] instanceof BlockMobSpawner || Block.blocksList[idF] instanceof BlockMobSpawner)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
int metaI = worldI.getBlockMetadata(xi, yi, zi);
|
|
int metaF = worldF.getBlockMetadata(xf, yf, zf);
|
|
worldI.playSoundEffect(xi, yi, zi, "mob.endermen.portal", 1.0F, 1.0F);
|
|
worldF.playSoundEffect(xf, yf, zf, "mob.endermen.portal", 1.0F, 1.0F);
|
|
//CLEAR TILES
|
|
Block finalBlock = Block.blocksList[idF];
|
|
|
|
if (finalBlock != null)
|
|
{
|
|
TileEntity tileToSet = finalBlock.createTileEntity(worldF, metaF);
|
|
// tileToSet.xCoord = xf;
|
|
// tileToSet.yCoord = yf;
|
|
// tileToSet.zCoord = zf;
|
|
worldF.setBlockTileEntity(xf, yf, zf, tileToSet);
|
|
}
|
|
|
|
Block initialBlock = Block.blocksList[idI];
|
|
|
|
if (initialBlock != null)
|
|
{
|
|
TileEntity tileToSet = initialBlock.createTileEntity(worldI, metaI);
|
|
// tileToSet.xCoord = xi;
|
|
// tileToSet.yCoord = yi;
|
|
// tileToSet.zCoord = zi;
|
|
worldI.setBlockTileEntity(xi, yi, zi, tileToSet);
|
|
}
|
|
|
|
//TILES CLEARED
|
|
// worldF.destroyBlock(xf, yf, zf, false);
|
|
// worldI.destroyBlock(xi, yi, zi, false);
|
|
// worldI.setBlockToAir(xi, yi, zi);
|
|
// worldF.setBlockToAir(xf, yf, zf);
|
|
worldF.setBlock(xf, yf, zf, idI, metaI, 3);
|
|
|
|
if (tileEntityI != null)
|
|
{
|
|
TileEntity newTileEntityI = TileEntity.createAndLoadEntity(nbttag1);
|
|
worldF.setBlockTileEntity(xf, yf, zf, newTileEntityI);
|
|
newTileEntityI.xCoord = xf;
|
|
newTileEntityI.yCoord = yf;
|
|
newTileEntityI.zCoord = zf;
|
|
}
|
|
|
|
worldI.setBlock(xi, yi, zi, idF, metaF, 3);
|
|
|
|
if (tileEntityF != null)
|
|
{
|
|
TileEntity newTileEntityF = TileEntity.createAndLoadEntity(nbttag2);
|
|
worldI.setBlockTileEntity(xi, yi, zi, newTileEntityF);
|
|
newTileEntityF.xCoord = xi;
|
|
newTileEntityF.yCoord = yi;
|
|
newTileEntityF.zCoord = zi;
|
|
}
|
|
|
|
// if(finalBlock!=null)
|
|
// finalBlock.onNeighborBlockChange(worldI, xi, yi, zi, AlchemicalWizardry.blockTeleposer.blockID);
|
|
// if(initialBlock!=null)
|
|
// initialBlock.onNeighborBlockChange(worldF, xf, yf, zf, AlchemicalWizardry.blockTeleposer.blockID);
|
|
// tileI = worldI.getBlockTileEntity(xi, yi, zi);
|
|
// tileF = worldF.getBlockTileEntity(xf, yf, zf);
|
|
// if(tileI!=null)
|
|
// {
|
|
// tileI.readFromNBT(nbttag2);
|
|
// }
|
|
//
|
|
// if(tileF!=null)
|
|
// {
|
|
// tileF.readFromNBT(nbttag1);
|
|
// }
|
|
// if(tileI instanceof IInventory && inv2.length>0)
|
|
// {
|
|
// for(int i=0;i<((IInventory)tileI).getSizeInventory();i++)
|
|
// {
|
|
// ((IInventory)tileI).setInventorySlotContents(i, inv2[i]);
|
|
// }
|
|
// }
|
|
//
|
|
// if(tileF instanceof IInventory && inv1.length>0)
|
|
// {
|
|
// for(int i=0;i<((IInventory)tileF).getSizeInventory();i++)
|
|
// {
|
|
// ((IInventory)tileF).setInventorySlotContents(i, inv1[i]);
|
|
// }
|
|
// }
|
|
// worldI.markBlockForUpdate(xi, yi, zi);
|
|
// worldF.markBlockForUpdate(xf, yf, zf);
|
|
return true;
|
|
}
|
|
}
|