Jump to content

Modified blockResistance doesn't work for TileEntity blocks?


kenijey

Recommended Posts

package kenijey.harshenuniverse.blocks;

import java.util.List;

import kenijey.harshenuniverse.base.BaseBlockHarshenSingleInventory;
import kenijey.harshenuniverse.base.BaseTileEntityHarshenSingleItemInventory;
import kenijey.harshenuniverse.tileentity.TileEntityHarshenSpawner;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemMonsterPlacer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

public class HarshenSpawner extends BaseBlockHarshenSingleInventory implements ITileEntityProvider
{
	public HarshenSpawner() {
		super(Material.ROCK);
		setRegistryName("harshen_spawner");
		setUnlocalizedName("harshen_spawner");
		this.blockHardness=(-1);
		this.blockResistance=(-1);
	}
	
	@Override
	public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ)
	{
		if(playerIn.getHeldItem(hand).getItem() instanceof ItemMonsterPlacer || playerIn.getHeldItem(hand).getItem() == Item.getItemFromBlock(Blocks.AIR))
			super.onBlockActivated(worldIn, pos, state, playerIn, hand, facing, hitX, hitY, hitZ);
		return playerIn.capabilities.isCreativeMode;
	}

	@Override
	public TileEntity createNewTileEntity(World worldIn, int meta) {
		return new TileEntityHarshenSpawner();
	}

	@Override
	public BaseTileEntityHarshenSingleItemInventory getTile() {
		return new TileEntityHarshenSpawner();
	}
	
	@SideOnly(Side.CLIENT)
	public BlockRenderLayer getBlockLayer()
    {
        return BlockRenderLayer.TRANSLUCENT;
    }
	
	@Override
	public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox,
			List<AxisAlignedBB> collidingBoxes, Entity entityIn, boolean p_185477_7_) {
		addCollisionBoxToList(pos, entityBox, collidingBoxes, NULL_AABB);
	}
	
	@Override
	public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) {
		return new AxisAlignedBB(0.45f, 0.05f, 0.45f, 0.55f, 0.95f, 0.55f);
	}
}

this is what i've done with the block class.

and this is its tile entity class:

package kenijey.harshenuniverse.tileentity;

import java.util.UUID;

import kenijey.harshenuniverse.HarshenSounds;
import kenijey.harshenuniverse.base.BaseTileEntityHarshenSingleItemInventory;
import kenijey.harshenuniverse.config.GeneralConfig;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityList;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.IEntityLivingData;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemMonsterPlacer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.math.BlockPos;

public class TileEntityHarshenSpawner extends BaseTileEntityHarshenSingleItemInventory
{
	private EntityLiving entityliving = null;
	private UUID spawnedEntityUUID = null;
	private ItemStack spawnedEntitysEgg = null;
	
	public Entity getEntity(ItemStack stack)
	{
		if(stack.getItem() == Item.getItemFromBlock(Blocks.AIR) || stack.equals(ItemStack.EMPTY))
		{
			this.entityliving = null;
			return null;
		}
		try
		{
			entityliving = (EntityLiving) EntityList.createEntityByIDFromName(ItemMonsterPlacer.getNamedIdFrom(stack), world);
            entityliving.onInitialSpawn(world.getDifficultyForLocation(new BlockPos(entityliving)), (IEntityLivingData)null);
            spawnedEntitysEgg = stack;
		}
		catch (NullPointerException e) {
		}
		return this.entityliving;
	}
	
	@Override
	protected void tick() 
	{
		EntityPlayer player = world.getClosestPlayer(pos.getX(), pos.getY(), pos.getZ(), GeneralConfig.harshenSpawnerDistance, false);
		if(player != null && getEntity(getItem()) != null && !player.isCreative())
			activate(player);
		
		if(entityliving==null)
			for(Entity entity : world.loadedEntityList)
				if(entity.getUniqueID() == spawnedEntityUUID)
				{
					if(entityliving == null && !entity.isEntityAlive())
						world.setBlockToAir(pos);
					if(entity.isEntityAlive() && (player == null || player.isCreative()) && entityliving == null)
						deactivate(spawnedEntitysEgg, entity);
				}
	}
	
	private void activate(EntityPlayer player)
	{
		setItemAir();
		this.entityliving.setPosition(pos.getX()+0.5, pos.getY(), pos.getZ()+0.5);
		this.entityliving.setRotationYawHead(player.getPosition().subtract(pos).getY());
		entityliving.onInitialSpawn(world.getDifficultyForLocation(new BlockPos(entityliving)), (IEntityLivingData)null);
		if(!world.isRemote)
			world.spawnEntity(this.entityliving);
		spawnedEntityUUID = entityliving.getUniqueID();
		world.playSound(pos.getX(), pos.getY(), pos.getZ(), HarshenSounds.SPAWNER_SUMMON, SoundCategory.BLOCKS, 1f, 1f, false);
	}
	
	private void deactivate(ItemStack stack, Entity entity)
	{
		setItem(stack);
		entity.setDead();
	}
}

BUT in the game, when a creeper or TNT explodes, the block just gets destroyed like a dirt block. And it doesn't happen with my other blocks, only this tile entity one. What did i miss? Thanks for helps.

Edited by kenijey
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.