mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
97 lines
2.6 KiB
Java
97 lines
2.6 KiB
Java
package com.hbm.blocks;
|
|
|
|
import java.util.Random;
|
|
|
|
import com.hbm.entity.item.EntityFallingBlockNT;
|
|
|
|
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.RenderBlocks;
|
|
import net.minecraft.client.renderer.Tessellator;
|
|
import net.minecraft.creativetab.CreativeTabs;
|
|
import net.minecraft.init.Blocks;
|
|
import net.minecraft.world.World;
|
|
|
|
public class BlockFallingNT extends Block {
|
|
|
|
public static boolean fallInstantly;
|
|
|
|
public BlockFallingNT() {
|
|
super(Material.sand);
|
|
this.setCreativeTab(CreativeTabs.tabBlock);
|
|
}
|
|
|
|
public BlockFallingNT(Material mat) {
|
|
super(mat);
|
|
}
|
|
|
|
@Override
|
|
public void onBlockAdded(World world, int x, int y, int z) {
|
|
world.scheduleBlockUpdate(x, y, z, this, this.tickRate(world));
|
|
}
|
|
|
|
@Override
|
|
public void onNeighborBlockChange(World world, int x, int y, int z, Block block) {
|
|
world.scheduleBlockUpdate(x, y, z, this, this.tickRate(world));
|
|
}
|
|
|
|
@Override
|
|
public void updateTick(World world, int x, int y, int z, Random rand) {
|
|
if(!world.isRemote) {
|
|
this.fall(world, x, y, z);
|
|
}
|
|
}
|
|
|
|
protected void fall(World world, int x, int y, int z) {
|
|
|
|
if(canFallThrough(world, x, y - 1, z) && y >= 0) {
|
|
byte range = 32;
|
|
|
|
if(!fallInstantly && world.checkChunksExist(x - range, y - range, z - range, x + range, y + range, z + range)) {
|
|
if(!world.isRemote) {
|
|
EntityFallingBlockNT entityfallingblock = new EntityFallingBlockNT(world, x + 0.5D, y + 0.5D, z + 0.5D, this, world.getBlockMetadata(x, y, z));
|
|
this.modifyFallingBlock(entityfallingblock);
|
|
world.spawnEntityInWorld(entityfallingblock);
|
|
}
|
|
} else {
|
|
world.setBlockToAir(x, y, z);
|
|
|
|
while(canFallThrough(world, x, y - 1, z) && y > 0) {
|
|
--y;
|
|
}
|
|
|
|
if(y > 0) {
|
|
world.setBlock(x, y, z, this);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
protected void modifyFallingBlock(EntityFallingBlockNT falling) { }
|
|
|
|
@Override
|
|
public int tickRate(World world) {
|
|
return 2;
|
|
}
|
|
|
|
public static boolean canFallThrough(World world, int x, int y, int z) {
|
|
Block block = world.getBlock(x, y, z);
|
|
|
|
if(block.isAir(world, x, y, z)) {
|
|
return true;
|
|
} else if(block == Blocks.fire) {
|
|
return true;
|
|
} else {
|
|
Material material = block.getMaterial();
|
|
return material == Material.water ? true : material == Material.lava;
|
|
}
|
|
}
|
|
|
|
public void onLand(World world, int x, int y, int z, int meta) { }
|
|
|
|
@SideOnly(Side.CLIENT) public boolean shouldOverrideRenderer() { return false; }
|
|
@SideOnly(Side.CLIENT) public void overrideRenderer(EntityFallingBlockNT falling, RenderBlocks renderBlocks, Tessellator tessellator) { }
|
|
}
|