mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
131 lines
4.0 KiB
Java
131 lines
4.0 KiB
Java
package com.hbm.blocks.generic;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.Random;
|
|
|
|
import com.hbm.items.ModItems;
|
|
|
|
import net.minecraft.block.BlockContainer;
|
|
import net.minecraft.block.material.Material;
|
|
import net.minecraft.entity.EntityLivingBase;
|
|
import net.minecraft.entity.item.EntityItem;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.item.Item;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.nbt.NBTTagList;
|
|
import net.minecraft.tileentity.TileEntity;
|
|
import net.minecraft.world.World;
|
|
|
|
public class BlockSupplyCrate extends BlockContainer {
|
|
|
|
public BlockSupplyCrate(Material mat) {
|
|
super(mat);
|
|
}
|
|
|
|
@Override
|
|
public TileEntity createNewTileEntity(World world, int meta) {
|
|
return new TileEntitySupplyCrate();
|
|
}
|
|
|
|
@Override public int getRenderType() { return BlockCanCrate.renderID; }
|
|
@Override public boolean isOpaqueCube() { return false; }
|
|
@Override public boolean renderAsNormalBlock() { return false; }
|
|
|
|
@Override public Item getItemDropped(int i, Random rand, int j) { return null; }
|
|
|
|
@Override
|
|
public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z, boolean willHarvest) {
|
|
|
|
if(!player.capabilities.isCreativeMode && !world.isRemote && willHarvest) {
|
|
|
|
ItemStack drop = new ItemStack(this);
|
|
TileEntitySupplyCrate inv = (TileEntitySupplyCrate) world.getTileEntity(x, y, z);
|
|
NBTTagCompound nbt = new NBTTagCompound();
|
|
|
|
if(inv != null) {
|
|
for(int i = 0; i < inv.items.size(); i++) {
|
|
ItemStack stack = inv.items.get(i);
|
|
if(stack == null) continue;
|
|
NBTTagCompound slot = new NBTTagCompound();
|
|
stack.writeToNBT(slot);
|
|
nbt.setTag("slot" + i, slot);
|
|
}
|
|
nbt.setInteger("amount", inv.items.size());
|
|
}
|
|
|
|
if(!nbt.hasNoTags()) drop.stackTagCompound = nbt;
|
|
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, drop));
|
|
}
|
|
return world.setBlockToAir(x, y, z);
|
|
}
|
|
|
|
@Override
|
|
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) {
|
|
|
|
TileEntitySupplyCrate inv = (TileEntitySupplyCrate) world.getTileEntity(x, y, z);
|
|
|
|
if(inv != null && stack.hasTagCompound()) {
|
|
int amount = stack.stackTagCompound.getInteger("amount");
|
|
for(int i = 0; i < amount; i++) {
|
|
inv.items.add(ItemStack.loadItemStackFromNBT(stack.stackTagCompound.getCompoundTag("slot" + i)));
|
|
}
|
|
}
|
|
|
|
super.onBlockPlacedBy(world, x, y, z, player, stack);
|
|
}
|
|
|
|
@Override
|
|
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int p_149727_6_, float p_149727_7_, float p_149727_8_, float p_149727_9_) {
|
|
if(player.getHeldItem() != null && player.getHeldItem().getItem().equals(ModItems.crowbar)) {
|
|
if(!world.isRemote) {
|
|
dropContents(world, x, y, z);
|
|
world.func_147480_a(x, y, z, false);
|
|
world.playSoundEffect(x, y, z, "hbm:block.crateBreak", 0.5F, 1.0F);
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public void dropContents(World world, int x, int y, int z) {
|
|
TileEntity tile = world.getTileEntity(x, y, z);
|
|
if(tile instanceof TileEntitySupplyCrate) {
|
|
TileEntitySupplyCrate crate = (TileEntitySupplyCrate) tile;
|
|
|
|
for(ItemStack item : crate.items) {
|
|
this.dropBlockAsItem(world, x, y, z, item);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static class TileEntitySupplyCrate extends TileEntity {
|
|
|
|
public List<ItemStack> items = new ArrayList();
|
|
|
|
@Override
|
|
public void readFromNBT(NBTTagCompound nbt) {
|
|
super.readFromNBT(nbt);
|
|
items.clear();
|
|
NBTTagList list = nbt.getTagList("items", 10);
|
|
for(int i = 0; i < list.tagCount(); i++) {
|
|
NBTTagCompound nbt1 = list.getCompoundTagAt(i);
|
|
items.add(ItemStack.loadItemStackFromNBT(nbt1));
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void writeToNBT(NBTTagCompound nbt) {
|
|
super.writeToNBT(nbt);
|
|
NBTTagList list = new NBTTagList();
|
|
for(int i = 0; i < items.size(); i++) {
|
|
NBTTagCompound nbt1 = new NBTTagCompound();
|
|
items.get(i).writeToNBT(nbt1);
|
|
list.appendTag(nbt1);
|
|
}
|
|
nbt.setTag("items", list);
|
|
}
|
|
}
|
|
}
|