George Paton 5d63b80777 Fix spotlight beams crashing in nuclear explosions
Fix nuclear fallout depositing in midair on top of beams
2024-02-23 15:47:00 +11:00

87 lines
2.5 KiB
Java

package com.hbm.blocks.generic;
import java.util.ArrayList;
import java.util.Random;
import com.hbm.extprop.HbmLivingProps;
import com.hbm.extprop.HbmLivingProps.ContaminationEffect;
import com.hbm.items.ModItems;
import com.hbm.potion.HbmPotion;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.potion.PotionEffect;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
public class BlockFallout extends Block {
public BlockFallout(Material mat) {
super(mat);
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.125F, 1.0F);
}
public boolean isOpaqueCube() {
return false;
}
public boolean renderAsNormalBlock() {
return false;
}
public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_) {
return ModItems.fallout;
}
public boolean canPlaceBlockAt(World world, int x, int y, int z) {
Block block = world.getBlock(x, y - 1, z);
if (block == Blocks.ice || block == Blocks.packed_ice) return false;
if (block.isLeaves(world, x, y - 1, z) && !block.isAir(world, x, y - 1, z)) return true;
if (block == this && (world.getBlockMetadata(x, y - 1, z) & 7) == 7) return true;
return block.isOpaqueCube() && block.getMaterial().blocksMovement();
}
@Override
public void onEntityWalking(World world, int x, int y, int z, Entity entity) {
if(!world.isRemote && entity instanceof EntityLivingBase) {
if(entity instanceof EntityPlayer && ((EntityPlayer)entity).capabilities.isCreativeMode) return;
PotionEffect effect = new PotionEffect(HbmPotion.radiation.id, 10 * 60 * 20, 0);
effect.setCurativeItems(new ArrayList());
((EntityLivingBase) entity).addPotionEffect(effect);
}
}
public void onBlockClicked(World world, int x, int y, int z, EntityPlayer player) {
if(!world.isRemote) {
HbmLivingProps.addCont(player, new ContaminationEffect(1F, 200, false));
}
}
public void onNeighborBlockChange(World world, int x, int y, int z, Block b) {
this.func_150155_m(world, x, y, z);
}
private boolean func_150155_m(World world, int x, int y, int z) {
if(!this.canPlaceBlockAt(world, x, y, z)) {
world.setBlockToAir(x, y, z);
return false;
} else {
return true;
}
}
public boolean isReplaceable(IBlockAccess world, int x, int y, int z) {
return true;
}
}