mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
194 lines
6.8 KiB
Java
194 lines
6.8 KiB
Java
package com.hbm.blocks.generic;
|
|
|
|
import java.util.Random;
|
|
|
|
import com.hbm.blocks.ModBlocks;
|
|
import com.hbm.config.GeneralConfig;
|
|
import com.hbm.lib.RefStrings;
|
|
import com.hbm.main.MainRegistry;
|
|
import com.hbm.potion.HbmPotion;
|
|
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.block.BlockBush;
|
|
import net.minecraft.block.BlockLeaves;
|
|
import net.minecraft.block.BlockLiquid;
|
|
import net.minecraft.block.BlockMushroom;
|
|
import net.minecraft.block.material.Material;
|
|
import net.minecraft.client.renderer.texture.IIconRegister;
|
|
import net.minecraft.entity.Entity;
|
|
import net.minecraft.entity.EntityLivingBase;
|
|
import net.minecraft.init.Blocks;
|
|
import net.minecraft.init.Items;
|
|
import net.minecraft.item.Item;
|
|
import net.minecraft.potion.Potion;
|
|
import net.minecraft.potion.PotionEffect;
|
|
import net.minecraft.util.IIcon;
|
|
import net.minecraft.world.IBlockAccess;
|
|
import net.minecraft.world.World;
|
|
import net.minecraftforge.common.EnumPlantType;
|
|
import net.minecraftforge.common.IPlantable;
|
|
import net.minecraftforge.common.util.ForgeDirection;
|
|
import net.minecraftforge.fluids.BlockFluidBase;
|
|
|
|
public class WasteEarth extends Block {
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
private IIcon iconTop;
|
|
@SideOnly(Side.CLIENT)
|
|
private IIcon iconBottom;
|
|
|
|
public WasteEarth(Material mat, boolean tick) {
|
|
super(mat);
|
|
this.setTickRandomly(tick);
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public void registerBlockIcons(IIconRegister iconRegister) {
|
|
this.iconTop = iconRegister.registerIcon(RefStrings.MODID + (this == ModBlocks.waste_earth ? ":waste_grass_top" : (this == ModBlocks.burning_earth ? ":burning_grass_top" : (this == ModBlocks.waste_mycelium ? ":waste_mycelium_top" : ":frozen_grass_top"))));
|
|
this.iconBottom = iconRegister.registerIcon(RefStrings.MODID + (this == ModBlocks.waste_earth ? ":waste_earth_bottom" : (this == ModBlocks.burning_earth ? ":waste_earth_bottom" : (this == ModBlocks.waste_mycelium ? ":waste_earth_bottom" : ":frozen_dirt"))));
|
|
this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + (this == ModBlocks.waste_earth ? ":waste_grass_side" : (this == ModBlocks.burning_earth ? ":burning_grass_side" : (this == ModBlocks.waste_mycelium ? ":waste_mycelium_side" : ":frozen_grass_side"))));
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public IIcon getIcon(int side, int metadata) {
|
|
return side == 1 ? this.iconTop : (side == 0 ? this.iconBottom : this.blockIcon);
|
|
}
|
|
|
|
@Override
|
|
public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_) {
|
|
|
|
if(this == ModBlocks.waste_earth || this == ModBlocks.waste_mycelium || this == ModBlocks.burning_earth) {
|
|
return Item.getItemFromBlock(Blocks.dirt);
|
|
}
|
|
|
|
if(this == ModBlocks.frozen_grass) {
|
|
return Items.snowball;
|
|
}
|
|
|
|
return Item.getItemFromBlock(this);
|
|
}
|
|
|
|
@Override
|
|
public int quantityDropped(Random p_149745_1_) {
|
|
return 1;
|
|
}
|
|
|
|
@Override
|
|
public void onEntityWalking(World p_149724_1_, int x, int y, int z, Entity entity) {
|
|
|
|
if(entity instanceof EntityLivingBase) {
|
|
|
|
EntityLivingBase living = (EntityLivingBase) entity;
|
|
|
|
if(this == ModBlocks.frozen_grass) {
|
|
living.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 2 * 60 * 20, 2));
|
|
}
|
|
if(this == ModBlocks.waste_mycelium) {
|
|
living.addPotionEffect(new PotionEffect(HbmPotion.radiation.id, 30 * 20, 3));
|
|
}
|
|
if(this == ModBlocks.burning_earth) {
|
|
living.setFire(5);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public void randomDisplayTick(World world, int x, int y, int z, Random rand) {
|
|
super.randomDisplayTick(world, x, y, z, rand);
|
|
|
|
if(this == ModBlocks.waste_mycelium) {
|
|
world.spawnParticle("townaura", x + rand.nextFloat(), y + 1.1F, z + rand.nextFloat(), 0.0D, 0.0D, 0.0D);
|
|
}
|
|
if(this == ModBlocks.burning_earth) {
|
|
world.spawnParticle("flame", x + rand.nextFloat(), y + 1.1F, z + rand.nextFloat(), 0.0D, 0.0D, 0.0D);
|
|
world.spawnParticle("smoke", x + rand.nextFloat(), y + 1.1F, z + rand.nextFloat(), 0.0D, 0.0D, 0.0D);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void updateTick(World world, int x, int y, int z, Random rand) {
|
|
|
|
if(this == ModBlocks.waste_mycelium && GeneralConfig.enableMycelium) {
|
|
for(int i = -1; i < 2; i++) {
|
|
for(int j = -1; j < 2; j++) {
|
|
for(int k = -1; k < 2; k++) {
|
|
Block b0 = world.getBlock(x + i, y + j, z + k);
|
|
Block b1 = world.getBlock(x + i, y + j + 1, z + k);
|
|
if(!b1.isOpaqueCube() && (b0 == Blocks.dirt || b0 == Blocks.grass || b0 == Blocks.mycelium || b0 == ModBlocks.waste_earth)) {
|
|
world.setBlock(x + i, y + j, z + k, ModBlocks.waste_mycelium);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if(this == ModBlocks.burning_earth) {
|
|
|
|
for(int i = -1; i < 2; i++) {
|
|
for(int j = -1; j < 2; j++) {
|
|
for(int k = -1; k < 2; k++) {
|
|
|
|
Block b0 = world.getBlock(x + i, y + j, z + k);
|
|
Block b1 = world.getBlock(x + i, y + j + 1, z + k);
|
|
|
|
if(!b1.isOpaqueCube() &&
|
|
((b0 == Blocks.grass || b0 == Blocks.mycelium || b0 == ModBlocks.waste_earth ||
|
|
b0 == ModBlocks.frozen_grass || b0 == ModBlocks.waste_mycelium)
|
|
&& !world.canLightningStrikeAt(x, y, z))) {
|
|
world.setBlock(x + i, y + j, z + k, ModBlocks.burning_earth);
|
|
}
|
|
if((b0 instanceof BlockLeaves || b0 instanceof BlockBush)) {
|
|
world.setBlockToAir(x + i, y + j, z + k);
|
|
}
|
|
if(b0 == ModBlocks.frozen_dirt) {
|
|
world.setBlock(x + i, y + j, z + k, Blocks.dirt);
|
|
}
|
|
if(b1.isFlammable(world, x, y, z, ForgeDirection.UP) && !(b1 instanceof BlockLeaves || b1 instanceof BlockBush) && world.getBlock(x, y + 1, z) == Blocks.air) {
|
|
world.setBlock(x, y + 1, z, Blocks.fire);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
world.setBlock(x, y, z, ModBlocks.impact_dirt);
|
|
}
|
|
|
|
if(this == ModBlocks.waste_earth || this == ModBlocks.waste_mycelium) {
|
|
|
|
if(GeneralConfig.enableAutoCleanup || (world.getBlockLightValue(x, y + 1, z) < 4 && world.getBlockLightOpacity(x, y + 1, z) > 2)) {
|
|
world.setBlock(x, y, z, Blocks.dirt);
|
|
|
|
}
|
|
|
|
if(world.getBlock(x, y + 1, z) instanceof BlockMushroom) {
|
|
world.setBlock(x, y + 1, z, ModBlocks.mush);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onNeighborBlockChange(World world, int x, int y, int z, Block block) {
|
|
|
|
if(this == ModBlocks.burning_earth) {
|
|
Block b = world.getBlock(x, y + 1, z);
|
|
if(b instanceof BlockLiquid || b instanceof BlockFluidBase || b.isNormalCube()) {
|
|
world.setBlock(x, y, z, Blocks.dirt);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public boolean canSustainPlant(IBlockAccess world, int x, int y, int z, ForgeDirection direction, IPlantable plantable) {
|
|
|
|
if(this == ModBlocks.waste_earth || this == ModBlocks.waste_mycelium) {
|
|
return plantable.getPlantType(world, x, y, z) == EnumPlantType.Cave;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|