274 lines
8.9 KiB
Java
274 lines
8.9 KiB
Java
|
package com.pahimar.ee3.block;
|
||
|
|
||
|
import com.pahimar.ee3.reference.Names;
|
||
|
import com.pahimar.ee3.reference.Textures;
|
||
|
import com.pahimar.ee3.tileentity.TileEntityTransmutationTablet;
|
||
|
import cpw.mods.fml.relauncher.Side;
|
||
|
import cpw.mods.fml.relauncher.SideOnly;
|
||
|
import net.minecraft.block.BlockSlab;
|
||
|
import net.minecraft.block.material.Material;
|
||
|
import net.minecraft.client.renderer.texture.IIconRegister;
|
||
|
import net.minecraft.entity.Entity;
|
||
|
import net.minecraft.entity.player.EntityPlayer;
|
||
|
import net.minecraft.util.AxisAlignedBB;
|
||
|
import net.minecraft.util.IIcon;
|
||
|
import net.minecraft.world.IBlockAccess;
|
||
|
import net.minecraft.world.World;
|
||
|
import net.minecraftforge.common.util.ForgeDirection;
|
||
|
|
||
|
import java.util.List;
|
||
|
|
||
|
public class BlockAshInfusedStoneSlab extends BlockSlab
|
||
|
{
|
||
|
@SideOnly(Side.CLIENT)
|
||
|
protected IIcon blockIcon, sideVariant1, sideVariant2, topVariant1, topVariant2, topVariant3, topVariant4;
|
||
|
|
||
|
public BlockAshInfusedStoneSlab()
|
||
|
{
|
||
|
super(false, Material.rock);
|
||
|
this.setHardness(2.0f);
|
||
|
this.setBlockName(Names.Blocks.ASH_INFUSED_STONE_SLAB);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void setBlockBoundsBasedOnState(IBlockAccess iBlockAccess, int x, int y, int z)
|
||
|
{
|
||
|
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Adds all intersecting collision boxes to a list. (Be sure to only add boxes to the list if they intersect the
|
||
|
* mask.) Parameters: World, X, Y, Z, mask, list, colliding entity
|
||
|
*/
|
||
|
public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB axisAlignedBB, List list, Entity entity)
|
||
|
{
|
||
|
if (isAssociatedWithValidTablet(world, x, y, z))
|
||
|
{
|
||
|
int metaData = world.getBlockMetadata(x, y, z);
|
||
|
|
||
|
if (metaData == 1)
|
||
|
{
|
||
|
this.setBlockBounds(0.5F, 0.0F, 0.5F, 1.0F, 0.625F, 1.0F);
|
||
|
super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, list, entity);
|
||
|
}
|
||
|
else if (metaData == 2)
|
||
|
{
|
||
|
this.setBlockBounds(0.0F, 0.0F, 0.5F, 1.0F, 0.625F, 1.0F);
|
||
|
super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, list, entity);
|
||
|
}
|
||
|
else if (metaData == 3)
|
||
|
{
|
||
|
this.setBlockBounds(0.0F, 0.0F, 1.0F, 0.5F, 0.625F, 0.5F);
|
||
|
super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, list, entity);
|
||
|
}
|
||
|
else if (metaData == 4)
|
||
|
{
|
||
|
this.setBlockBounds(0.5F, 0.0F, 0.0F, 1.0F, 0.625F, 1.0F);
|
||
|
super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, list, entity);
|
||
|
}
|
||
|
else if (metaData == 5)
|
||
|
{
|
||
|
this.setBlockBounds(0.0F, 0.0F, 0.0F, 0.5F, 0.625F, 1.0F);
|
||
|
super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, list, entity);
|
||
|
}
|
||
|
else if (metaData == 6)
|
||
|
{
|
||
|
this.setBlockBounds(0.5F, 0.0F, 0.0F, 1.0F, 0.625F, 0.5F);
|
||
|
super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, list, entity);
|
||
|
}
|
||
|
else if (metaData == 7)
|
||
|
{
|
||
|
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.625F, 0.5F);
|
||
|
super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, list, entity);
|
||
|
}
|
||
|
else if (metaData == 8)
|
||
|
{
|
||
|
this.setBlockBounds(0.0F, 0.0F, 0.0F, 0.5F, 0.625F, 0.5F);
|
||
|
super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, list, entity);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F);
|
||
|
super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, list, entity);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer entityPlayer, int sideHit, float hitX, float hitY, float hitZ)
|
||
|
{
|
||
|
int metaData = world.getBlockMetadata(x, y, z);
|
||
|
|
||
|
int shiftedX = x;
|
||
|
int shiftedZ = z;
|
||
|
if (metaData != 0)
|
||
|
{
|
||
|
if (metaData == 1)
|
||
|
{
|
||
|
shiftedX++;
|
||
|
shiftedZ++;
|
||
|
}
|
||
|
else if (metaData == 2)
|
||
|
{
|
||
|
shiftedZ++;
|
||
|
}
|
||
|
else if (metaData == 3)
|
||
|
{
|
||
|
shiftedX--;
|
||
|
shiftedZ++;
|
||
|
}
|
||
|
else if (metaData == 4)
|
||
|
{
|
||
|
shiftedX++;
|
||
|
}
|
||
|
else if (metaData == 5)
|
||
|
{
|
||
|
shiftedZ--;
|
||
|
}
|
||
|
else if (metaData == 6)
|
||
|
{
|
||
|
shiftedX++;
|
||
|
shiftedZ--;
|
||
|
}
|
||
|
else if (metaData == 7)
|
||
|
{
|
||
|
shiftedZ--;
|
||
|
}
|
||
|
else if (metaData == 8)
|
||
|
{
|
||
|
shiftedX--;
|
||
|
shiftedZ--;
|
||
|
}
|
||
|
|
||
|
if (world.getTileEntity(shiftedX, y, shiftedZ) instanceof TileEntityTransmutationTablet)
|
||
|
{
|
||
|
world.getBlock(shiftedX, y, shiftedZ).onBlockActivated(world, shiftedX, y, shiftedZ, entityPlayer, sideHit, hitX, hitY, hitZ);
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
@SideOnly(Side.CLIENT)
|
||
|
public void registerBlockIcons(IIconRegister iconRegister)
|
||
|
{
|
||
|
blockIcon = iconRegister.registerIcon(String.format("%s", getUnwrappedUnlocalizedName(this.getUnlocalizedName())));
|
||
|
sideVariant1 = iconRegister.registerIcon(String.format("%s", getUnwrappedUnlocalizedName(this.getUnlocalizedName()) + "_side1"));
|
||
|
sideVariant2 = iconRegister.registerIcon(String.format("%s", getUnwrappedUnlocalizedName(this.getUnlocalizedName()) + "_side2"));
|
||
|
topVariant1 = iconRegister.registerIcon(String.format("%s", getUnwrappedUnlocalizedName(this.getUnlocalizedName()) + "_top1"));
|
||
|
topVariant2 = iconRegister.registerIcon(String.format("%s", getUnwrappedUnlocalizedName(this.getUnlocalizedName()) + "_top2"));
|
||
|
topVariant3 = iconRegister.registerIcon(String.format("%s", getUnwrappedUnlocalizedName(this.getUnlocalizedName()) + "_top3"));
|
||
|
topVariant4 = iconRegister.registerIcon(String.format("%s", getUnwrappedUnlocalizedName(this.getUnlocalizedName()) + "_top4"));
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public String getUnlocalizedName()
|
||
|
{
|
||
|
return String.format("tile.%s%s", Textures.RESOURCE_PREFIX, getUnwrappedUnlocalizedName(super.getUnlocalizedName()));
|
||
|
}
|
||
|
|
||
|
protected String getUnwrappedUnlocalizedName(String unlocalizedName)
|
||
|
{
|
||
|
return unlocalizedName.substring(unlocalizedName.indexOf(".") + 1);
|
||
|
}
|
||
|
|
||
|
@SideOnly(Side.CLIENT)
|
||
|
public IIcon getIcon(int side, int meta)
|
||
|
{
|
||
|
ForgeDirection forgeDirection = ForgeDirection.getOrientation(side);
|
||
|
if (forgeDirection == ForgeDirection.SOUTH || forgeDirection == ForgeDirection.NORTH || forgeDirection == ForgeDirection.EAST || forgeDirection == ForgeDirection.WEST)
|
||
|
{
|
||
|
if (meta == 1 || meta == 3 || meta == 6 || meta == 8)
|
||
|
{
|
||
|
return this.sideVariant1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return this.sideVariant2;
|
||
|
}
|
||
|
}
|
||
|
else if (forgeDirection == ForgeDirection.UP)
|
||
|
{
|
||
|
if (meta == 1)
|
||
|
{
|
||
|
return this.topVariant1;
|
||
|
}
|
||
|
else if (meta == 3)
|
||
|
{
|
||
|
return this.topVariant4;
|
||
|
}
|
||
|
else if (meta == 6)
|
||
|
{
|
||
|
return this.topVariant2;
|
||
|
}
|
||
|
else if (meta == 8)
|
||
|
{
|
||
|
return this.topVariant3;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return this.blockIcon;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public String func_150002_b(int meta)
|
||
|
{
|
||
|
return getUnlocalizedName();
|
||
|
}
|
||
|
|
||
|
private boolean isAssociatedWithValidTablet(World world, int x, int y, int z)
|
||
|
{
|
||
|
int metaData = world.getBlockMetadata(x, y, z);
|
||
|
|
||
|
if (metaData != 0)
|
||
|
{
|
||
|
int shiftedX = x;
|
||
|
int shiftedZ = z;
|
||
|
|
||
|
if (metaData == 1)
|
||
|
{
|
||
|
shiftedX++;
|
||
|
shiftedZ++;
|
||
|
}
|
||
|
else if (metaData == 2)
|
||
|
{
|
||
|
shiftedZ++;
|
||
|
}
|
||
|
else if (metaData == 3)
|
||
|
{
|
||
|
shiftedX--;
|
||
|
shiftedZ++;
|
||
|
}
|
||
|
else if (metaData == 4)
|
||
|
{
|
||
|
shiftedX++;
|
||
|
}
|
||
|
else if (metaData == 5)
|
||
|
{
|
||
|
shiftedZ--;
|
||
|
}
|
||
|
else if (metaData == 6)
|
||
|
{
|
||
|
shiftedX++;
|
||
|
shiftedZ--;
|
||
|
}
|
||
|
else if (metaData == 7)
|
||
|
{
|
||
|
shiftedZ--;
|
||
|
}
|
||
|
else if (metaData == 8)
|
||
|
{
|
||
|
shiftedX--;
|
||
|
shiftedZ--;
|
||
|
}
|
||
|
|
||
|
if (world.getTileEntity(shiftedX, y, shiftedZ) instanceof TileEntityTransmutationTablet)
|
||
|
{
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
}
|