2024-11-03 21:32:07 +01:00

135 lines
3.8 KiB
Java

package com.hbm.blocks.generic;
import java.util.Random;
import com.hbm.blocks.ModBlocks;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.entity.Entity;
import net.minecraft.init.Blocks;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class BlockOutgas extends BlockOre {
boolean randomTick;
int rate;
boolean onBreak;
boolean onNeighbour;
public BlockOutgas(Material mat, boolean randomTick, int rate, boolean onBreak) {
super(mat);
this.setTickRandomly(randomTick);
this.randomTick = randomTick;
this.rate = rate;
this.onBreak = onBreak;
this.onNeighbour = false;
}
public BlockOutgas(Material mat, boolean randomTick, int rate, boolean onBreak, boolean onNeighbour) {
this(mat, randomTick, rate, onBreak);
this.onNeighbour = onNeighbour;
}
public int tickRate(World world) {
return rate;
}
protected Block getGas() {
if(this == ModBlocks.ore_uranium || this == ModBlocks.ore_uranium_scorched ||
this == ModBlocks.ore_gneiss_uranium || this == ModBlocks.ore_gneiss_uranium_scorched ||
this == ModBlocks.ore_nether_uranium || this == ModBlocks.ore_nether_uranium_scorched) {
return ModBlocks.gas_radon;
}
if(this == ModBlocks.block_corium_cobble)
return ModBlocks.gas_radon;
if(this == ModBlocks.ancient_scrap)
return ModBlocks.gas_radon_tomb;
if(this == ModBlocks.ore_coal_oil_burning || this == ModBlocks.ore_nether_coal) {
return ModBlocks.gas_monoxide;
}
if(this == ModBlocks.ore_asbestos || this == ModBlocks.ore_gneiss_asbestos ||
this == ModBlocks.block_asbestos || this == ModBlocks.deco_asbestos ||
this == ModBlocks.brick_asbestos || this == ModBlocks.tile_lab ||
this == ModBlocks.tile_lab_cracked || this == ModBlocks.tile_lab_broken) {
return ModBlocks.gas_asbestos;
}
return Blocks.air;
}
@Override
public void onEntityWalking(World world, int x, int y, int z, Entity entity) {
if(this.randomTick && getGas() == ModBlocks.gas_asbestos) {
if(world.getBlock(x, y + 1, z) == Blocks.air) {
if(world.rand.nextInt(10) == 0)
world.setBlock(x, y + 1, z, ModBlocks.gas_asbestos);
for(int i = 0; i < 5; i++)
world.spawnParticle("townaura", x + world.rand.nextFloat(), y + 1.1, z + world.rand.nextFloat(), 0.0D, 0.0D, 0.0D);
}
}
}
@Override
public void updateTick(World world, int x, int y, int z, Random rand) {
ForgeDirection dir = ForgeDirection.getOrientation(rand.nextInt(6));
if(world.getBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ) == Blocks.air) {
world.setBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, getGas());
}
}
@Override
public void dropBlockAsItemWithChance(World world, int x, int y, int z, int meta, float chance, int fortune) {
if(onBreak) {
world.setBlock(x, y, z, this.getGas());
}
super.dropBlockAsItemWithChance(world, x, y, z, meta, chance, fortune);
}
@Override
public void onNeighborBlockChange(World world, int x, int y, int z, Block block) {
if(onNeighbour && world.rand.nextInt(3) == 0) {
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
if(world.getBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ) == Blocks.air) {
world.setBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, getGas());
}
}
}
}
@Override
public void breakBlock(World world, int x, int y, int z, Block block, int i) {
super.breakBlock(world, x, y, z, block, i);
if(this == ModBlocks.ancient_scrap) {
for(int ix = -2; ix <= 2; ix++) {
for(int iy = -2; iy <= 2; iy++) {
for(int iz = -2; iz <= 2; iz++) {
if(Math.abs(ix + iy + iz) < 5 && Math.abs(ix + iy + iz) > 0 && world.getBlock(x + ix, y + iy, z + iz) == Blocks.air) {
world.setBlock(x + ix, y + iy, z + iz, this.getGas());
}
}
}
}
}
}
}