mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
118 lines
3.5 KiB
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));
|
|
}
|
|
}
|