Hbm-s-Nuclear-Tech-GIT/src/main/java/com/hbm/entity/cart/EntityMinecartCrate.java

118 lines
3.5 KiB
Java

package com.hbm.entity.cart;
import java.io.IOException;
import com.hbm.blocks.ModBlocks;
import com.hbm.inventory.container.ContainerCrateSteel;
import com.hbm.inventory.gui.GUICrateSteel;
import com.hbm.items.tool.ItemModMinecart;
import com.hbm.items.tool.ItemModMinecart.EnumCartBase;
import com.hbm.items.tool.ItemModMinecart.EnumMinecart;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.IGUIProvider;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompressedStreamTools;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.DamageSource;
import net.minecraft.world.World;
public class EntityMinecartCrate extends EntityMinecartContainerBase implements IGUIProvider {
public EntityMinecartCrate(World world) {
super(world);
}
public EntityMinecartCrate(World world, double x, double y, double z, EnumCartBase type, ItemStack stack) {
super(world, x, y, z, type);
if(stack.hasTagCompound()) {
for(int i = 0; i < getSizeInventory(); i++) {
setInventorySlotContents(i, ItemStack.loadItemStackFromNBT(stack.stackTagCompound.getCompoundTag("slot" + i)));
}
}
}
@Override
public boolean interactFirst(EntityPlayer player) {
if(net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.minecart.MinecartInteractEvent(this, player)))
return true;
if(!this.worldObj.isRemote) {
FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, worldObj, this.getEntityId(), 0, 0);
}
return true;
}
@Override
public Block func_145817_o() {
return ModBlocks.crate_steel;
}
@Override
public int getSizeInventory() {
return 9 * 6;
}
@Override
public void killMinecart(DamageSource p_94095_1_) {
this.setDead();
ItemStack itemstack = ItemModMinecart.createCartItem(EnumCartBase.VANILLA, EnumMinecart.CRATE);
NBTTagCompound nbt = new NBTTagCompound();
for(int i = 0; i < getSizeInventory(); i++) {
ItemStack stack = getStackInSlot(i);
if(stack == null)
continue;
NBTTagCompound slot = new NBTTagCompound();
stack.writeToNBT(slot);
nbt.setTag("slot" + i, slot);
}
if(!nbt.hasNoTags()) {
itemstack.stackTagCompound = nbt;
}
if(this.func_95999_t() != null) {
itemstack.setStackDisplayName(this.func_95999_t());
}
try {
byte[] abyte = CompressedStreamTools.compress(nbt);
if(abyte.length > 6000) {
worldObj.newExplosion(this, posX, posY, posZ, 2F, true, true);
this.entityDropItem(ItemModMinecart.createCartItem(EnumCartBase.VANILLA, EnumMinecart.CRATE), 0.0F);
}
} catch(IOException e) { }
this.entityDropItem(itemstack, 0.0F);
}
@Override
public ItemStack getCartItem() {
return ItemModMinecart.createCartItem(EnumCartBase.VANILLA, EnumMinecart.CRATE);
}
@Override
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new ContainerCrateSteel(player.inventory, (EntityMinecartCrate)player.worldObj.getEntityByID(x));
}
@Override
@SideOnly(Side.CLIENT)
public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new GUICrateSteel(player.inventory, (EntityMinecartCrate) player.worldObj.getEntityByID(x));
}
}