package mcjty.rftools.blocks.screens;
import mcjty.rftools.RFTools;
import net.minecraft.block.Block;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.material.Material;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.Explosion;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import java.util.Random;
public class ScreenHitBlock extends Block implements ITileEntityProvider {
private IIcon icon;
public ScreenHitBlock() {
super(Material.glass);
setBlockUnbreakable();
setResistance(6000000.0F);
setBlockName("screenHitBlock");
}
@Override
public void registerBlockIcons(IIconRegister iconRegister) {
icon = iconRegister.registerIcon(RFTools.MODID + ":screenFrame_icon");
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return new ScreenHitTileEntity();
}
@Override
public void onBlockClicked(World world, int x, int y, int z, EntityPlayer player) {
if (world.isRemote) {
ScreenHitTileEntity screenHitTileEntity = (ScreenHitTileEntity) world.getTileEntity(x, y, z);
int dx = screenHitTileEntity.getDx();
int dy = screenHitTileEntity.getDy();
int dz = screenHitTileEntity.getDz();
Block block = world.getBlock(x + dx, y + dy, z + dz);
if (block != ScreenSetup.screenBlock) {
return;
}
MovingObjectPosition mouseOver = Minecraft.getMinecraft().objectMouseOver;
ScreenTileEntity screenTileEntity = (ScreenTileEntity) world.getTileEntity(x+dx, y+dy, z+dz);
screenTileEntity.hitScreenClient(mouseOver.hitVec.xCoord - x - dx, mouseOver.hitVec.yCoord - y - dy, mouseOver.hitVec.zCoord - z - dz, mouseOver.sideHit);
}
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float sidex, float sidey, float sidez) {
ScreenHitTileEntity screenHitTileEntity = (ScreenHitTileEntity) world.getTileEntity(x, y, z);
int dx = screenHitTileEntity.getDx();
int dy = screenHitTileEntity.getDy();
int dz = screenHitTileEntity.getDz();
Block block = world.getBlock(x + dx, y + dy, z + dz);
if (block != ScreenSetup.screenBlock) {
return false;
}
return block.onBlockActivated(world, x + dx, y + dy, z + dz, player, side, sidex, sidey, sidez);
}
/**
* Updates the blocks bounds based on its current state. Args: world, x, y, z
*/
@Override
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) {
int meta = world.getBlockMetadata(x, y, z);
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
if (meta == 2) {
this.setBlockBounds(0.0F, 0.0F, 1.0F - 0.125F, 1.0F, 1.0F, 1.0F);
}
if (meta == 3) {
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.125F);
}
if (meta == 4) {
this.setBlockBounds(1.0F - 0.125F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
}
if (meta == 5) {
this.setBlockBounds(0.0F, 0.0F, 0.0F, 0.125F, 1.0F, 1.0F);
}
}
@Override
public boolean isOpaqueCube() {
return false;
}
@Override
public int getRenderType() {
return -1; // Invisible
}
@Override
public boolean canEntityDestroy(IBlockAccess world, int x, int y, int z, Entity entity) {
return false;
}
@Override
public void onBlockExploded(World world, int x, int y, int z, Explosion explosion) {
}
@Override
public int quantityDropped(Random random) {
return 0;
}
@Override
public int getMobilityFlag() {
return 2;
}
@Override
public IIcon getIcon(int side, int meta) {
return icon;
}
}