mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
205 lines
6.0 KiB
Java
205 lines
6.0 KiB
Java
package com.hbm.blocks.generic;
|
|
|
|
import static net.minecraftforge.common.util.ForgeDirection.EAST;
|
|
import static net.minecraftforge.common.util.ForgeDirection.NORTH;
|
|
import static net.minecraftforge.common.util.ForgeDirection.SOUTH;
|
|
import static net.minecraftforge.common.util.ForgeDirection.WEST;
|
|
|
|
import com.hbm.lib.RefStrings;
|
|
|
|
import cpw.mods.fml.client.registry.RenderingRegistry;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.block.material.Material;
|
|
import net.minecraft.client.renderer.texture.IIconRegister;
|
|
import net.minecraft.entity.EntityLivingBase;
|
|
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;
|
|
|
|
public class BlockChain extends Block {
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
private IIcon iconEnd;
|
|
|
|
public BlockChain(Material mat) {
|
|
super(mat);
|
|
}
|
|
|
|
public boolean isOpaqueCube() {
|
|
return false;
|
|
}
|
|
|
|
public boolean renderAsNormalBlock() {
|
|
return false;
|
|
}
|
|
|
|
public static int renderID = RenderingRegistry.getNextAvailableRenderId();
|
|
|
|
public int getRenderType() {
|
|
return renderID;
|
|
}
|
|
|
|
@Override
|
|
public boolean isLadder(IBlockAccess world, int x, int y, int z, EntityLivingBase entity) {
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public void registerBlockIcons(IIconRegister iconRegister) {
|
|
this.iconEnd = iconRegister.registerIcon(RefStrings.MODID + ":chain_end");
|
|
super.registerBlockIcons(iconRegister);
|
|
}
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) {
|
|
|
|
if(world.isSideSolid(x, y - 1, z, ForgeDirection.UP, false) || (world.getBlock(x, y - 1, z) == this && world.getBlockMetadata(x, y, z) == world.getBlockMetadata(x, y - 1, z)))
|
|
return this.blockIcon;
|
|
|
|
return this.iconEnd;
|
|
}
|
|
|
|
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
|
|
return null;
|
|
}
|
|
|
|
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) {
|
|
func_149797_b(world.getBlockMetadata(x, y, z));
|
|
|
|
if(!(world.isSideSolid(x, y - 1, z, ForgeDirection.UP, false) || (world.getBlock(x, y - 1, z) == this && world.getBlockMetadata(x, y, z) == world.getBlockMetadata(x, y - 1, z))))
|
|
this.minY = 0.25;
|
|
}
|
|
|
|
public void func_149797_b(int meta) {
|
|
|
|
float f = 0.125F;
|
|
|
|
if(meta == 0) {
|
|
|
|
this.minX = 3 * f;
|
|
this.minY = 0;
|
|
this.minZ = 3 * f;
|
|
this.maxX = 5 * f;
|
|
this.maxY = 1;
|
|
this.maxZ = 5 * f;
|
|
}
|
|
|
|
if (meta == 2)
|
|
{
|
|
this.setBlockBounds(3 * f, 0.0F, 1.0F - f, 5 * f, 1.0F, 1.0F);
|
|
}
|
|
|
|
if (meta == 3)
|
|
{
|
|
this.setBlockBounds(3 * f, 0.0F, 0.0F, 5 * f, 1.0F, f);
|
|
}
|
|
|
|
if (meta == 4)
|
|
{
|
|
this.setBlockBounds(1.0F - f, 0.0F, 3 * f, 1.0F, 1.0F, 5 * f);
|
|
}
|
|
|
|
if (meta == 5)
|
|
{
|
|
this.setBlockBounds(0.0F, 0.0F, 3 * f, f, 1.0F, 5 * f);
|
|
}
|
|
}
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int x, int y, int z) {
|
|
this.setBlockBoundsBasedOnState(world, x, y, z);
|
|
return super.getSelectedBoundingBoxFromPool(world, x, y, z);
|
|
}
|
|
|
|
public boolean canPlaceBlockAt(World world, int x, int y, int z) {
|
|
|
|
if(world.isSideSolid(x, y + 1, z, ForgeDirection.DOWN) || world.getBlock(x, y + 1, z) == this)
|
|
return true;
|
|
|
|
return world.isSideSolid(x - 1, y, z, EAST ) ||
|
|
world.isSideSolid(x + 1, y, z, WEST ) ||
|
|
world.isSideSolid(x, y, z - 1, SOUTH) ||
|
|
world.isSideSolid(x, y, z + 1, NORTH);
|
|
}
|
|
|
|
public int onBlockPlaced(World world, int x, int y, int z, int side, float p_149660_6_, float p_149660_7_, float p_149660_8_, int meta)
|
|
{
|
|
int j1 = meta;
|
|
|
|
if(side == 2 && world.isSideSolid(x, y, z + 1, NORTH))
|
|
j1 = 2;
|
|
|
|
if(side == 3 && world.isSideSolid(x, y, z - 1, SOUTH))
|
|
j1 = 3;
|
|
|
|
if(side == 4 && world.isSideSolid(x + 1, y, z, WEST))
|
|
j1 = 4;
|
|
|
|
if(side == 5 && world.isSideSolid(x - 1, y, z, EAST))
|
|
j1 = 5;
|
|
|
|
if(j1 == 0) {
|
|
|
|
if(world.getBlock(x, y + 1, z) == this)
|
|
return world.getBlockMetadata(x, y + 1, z);
|
|
|
|
if(world.isSideSolid(x, y + 1, z, ForgeDirection.DOWN))
|
|
return 0;
|
|
}
|
|
|
|
if(j1 == 0) {
|
|
if(world.isSideSolid(x, y, z + 1, NORTH))
|
|
j1 = 2;
|
|
|
|
if(world.isSideSolid(x, y, z - 1, SOUTH))
|
|
j1 = 3;
|
|
|
|
if(world.isSideSolid(x + 1, y, z, WEST))
|
|
j1 = 4;
|
|
|
|
if(world.isSideSolid(x - 1, y, z, EAST))
|
|
j1 = 5;
|
|
}
|
|
|
|
return j1;
|
|
}
|
|
|
|
public void onNeighborBlockChange(World world, int x, int y, int z, Block block) {
|
|
|
|
int l = world.getBlockMetadata(x, y, z);
|
|
boolean flag = false;
|
|
|
|
if(world.getBlock(x, y + 1, z) == this && world.getBlockMetadata(x, y, z) == world.getBlockMetadata(x, y + 1, z)) {
|
|
super.onNeighborBlockChange(world, x, y, z, block);
|
|
return;
|
|
}
|
|
|
|
if(world.isSideSolid(x, y + 1, z, ForgeDirection.DOWN) && world.getBlockMetadata(x, y, z) == 0) {
|
|
super.onNeighborBlockChange(world, x, y, z, block);
|
|
return;
|
|
}
|
|
|
|
if (l == 2 && world.isSideSolid(x, y, z + 1, NORTH))
|
|
flag = true;
|
|
|
|
if (l == 3 && world.isSideSolid(x, y, z - 1, SOUTH))
|
|
flag = true;
|
|
|
|
if (l == 4 && world.isSideSolid(x + 1, y, z, WEST))
|
|
flag = true;
|
|
|
|
if (l == 5 && world.isSideSolid(x - 1, y, z, EAST))
|
|
flag = true;
|
|
|
|
if (!flag)
|
|
world.func_147480_a(x, y, z, true);
|
|
|
|
super.onNeighborBlockChange(world, x, y, z, block);
|
|
}
|
|
}
|