My objective is to make an entity which opens a Gui with only one slot to store items.
I made all files needed for this. When y right-click on the entity it opens the Gui and i can put objects in the slot, the problem is that the object is not stored inside the slot, if I press Shift + right-click the same.
I don't know what's wrong.
These are my Container and Entity files:
Spoiler: MiEntidad2.java
package PruebaVehiculo;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.common.ISidedInventory;
public class MiEntidad2 extends Entity implements IInventory{
private ItemStack[] items = new ItemStack[1];
public MiEntidad2(World par1World) {
super(par1World);
}
public MiEntidad2(World par1World, double par2, double par4, double par6){
super(par1World);
this.setPosition(par2, par4, par6);
this.motionX = 0.0D;
this.motionY = 0.0D;
this.motionZ = 0.0D;
this.prevPosX = par2;
this.prevPosY = par4;
this.prevPosZ = par6;
this.setSize(1F, 4F);
setPosition(par2, par4, par6);
items[0] = null;
}
// Intenta gastar un fuel y si lo consigue retorna true, sino false
public boolean gastaFuel(){
if(items[0] == null){
return false;
}
items[0] = decrStackSize(0, 1);
return true;
}
@Override
protected void entityInit() {
this.dataWatcher.addObject(17, new Integer(0));
this.dataWatcher.addObject(18, new Integer(1));
this.dataWatcher.addObject(19, new Integer(0));
}
public boolean interact(EntityPlayer par1EntityPlayer){
par1EntityPlayer.openGui(mod_Prueba.instance, 0, worldObj, this.entityId, (int)posY, (int)posZ);
return false;
}
@Override
protected void readEntityFromNBT(NBTTagCompound var1) {
entityId = var1.getInteger("motorID");
NBTTagList tagList = var1.getTagList("Inventory");
for(int i = 0; i < tagList.tagCount(); i++){
NBTTagCompound tag = (NBTTagCompound) tagList.tagAt(i);
byte slot = tag.getByte("Slot");
if(slot >= 0 && slot < items.length){
items[slot] = ItemStack.loadItemStackFromNBT(tag);
}
}
}
@Override
protected void writeEntityToNBT(NBTTagCompound var1) {
var1.setInteger("motorID", entityId);
NBTTagList itemList = new NBTTagList();
for(int i = 0; i < items.length; i++){
ItemStack stack = items[i];
if(stack != null){
NBTTagCompound tag = new NBTTagCompound();
tag.setByte("Slot", (byte) i);
stack.writeToNBT(tag);
itemList.appendTag(tag);
}
}
var1.setTag("Inventory", itemList);
}
public AxisAlignedBB getCollisionBox(Entity par1Entity)
{
return par1Entity.boundingBox;
}
public AxisAlignedBB getBoundingBox()
{
return this.boundingBox;
}
public boolean canBeCollidedWith()
{
return !this.isDead;
}
@Override
public int getSizeInventory() {
// TODO Auto-generated method stub
return this.items.length;
}
@Override
public ItemStack getStackInSlot(int par1) {
if (this.items[par1] != null){
ItemStack var2 = this.items[par1];
this.items[par1] = null;
return var2;
}
else
{
return null;
}
}
@Override
public void setInventorySlotContents(int par1, ItemStack par2ItemStack) {
if(! worldObj.isRemote){
this.items[par1] = par2ItemStack;
//Ajusta el tamaƱo al maximo
if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()){
par2ItemStack.stackSize = this.getInventoryStackLimit();
}
}
}
@Override
public ItemStack decrStackSize(int par1, int par2) {
if (this.items[par1] != null){
ItemStack var3;
if (this.items[par1].stackSize <= par2){
var3 = this.items[par1];
this.items[par1] = null;
return var3;
}
else{
var3 = this.items[par1].splitStack(par2);
if (this.items[par1].stackSize == 0){
this.items[par1] = null;
}
return var3;
}
}
else {
return null;
}
}
@Override
public ItemStack getStackInSlotOnClosing(int par1) {
if (this.items[par1] != null){
ItemStack var2 = this.items[par1];
this.items[par1] = null;
return var2;
}
else{
return null;
}
}
@Override
public String getInvName() {
// TODO Auto-generated method stub
return "Motor";
}
@Override
public int getInventoryStackLimit() {
// TODO Auto-generated method stub
return 64;
}
@Override
public void onInventoryChanged() {
}
@Override
public boolean isUseableByPlayer(EntityPlayer var1) {
// TODO Auto-generated method stub
return true;
}
@Override
public void openChest() {}
@Override
public void closeChest() {}
}
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.common.ISidedInventory;
public class MiEntidad2 extends Entity implements IInventory{
private ItemStack[] items = new ItemStack[1];
public MiEntidad2(World par1World) {
super(par1World);
}
public MiEntidad2(World par1World, double par2, double par4, double par6){
super(par1World);
this.setPosition(par2, par4, par6);
this.motionX = 0.0D;
this.motionY = 0.0D;
this.motionZ = 0.0D;
this.prevPosX = par2;
this.prevPosY = par4;
this.prevPosZ = par6;
this.setSize(1F, 4F);
setPosition(par2, par4, par6);
items[0] = null;
}
// Intenta gastar un fuel y si lo consigue retorna true, sino false
public boolean gastaFuel(){
if(items[0] == null){
return false;
}
items[0] = decrStackSize(0, 1);
return true;
}
@Override
protected void entityInit() {
this.dataWatcher.addObject(17, new Integer(0));
this.dataWatcher.addObject(18, new Integer(1));
this.dataWatcher.addObject(19, new Integer(0));
}
public boolean interact(EntityPlayer par1EntityPlayer){
par1EntityPlayer.openGui(mod_Prueba.instance, 0, worldObj, this.entityId, (int)posY, (int)posZ);
return false;
}
@Override
protected void readEntityFromNBT(NBTTagCompound var1) {
entityId = var1.getInteger("motorID");
NBTTagList tagList = var1.getTagList("Inventory");
for(int i = 0; i < tagList.tagCount(); i++){
NBTTagCompound tag = (NBTTagCompound) tagList.tagAt(i);
byte slot = tag.getByte("Slot");
if(slot >= 0 && slot < items.length){
items[slot] = ItemStack.loadItemStackFromNBT(tag);
}
}
}
@Override
protected void writeEntityToNBT(NBTTagCompound var1) {
var1.setInteger("motorID", entityId);
NBTTagList itemList = new NBTTagList();
for(int i = 0; i < items.length; i++){
ItemStack stack = items[i];
if(stack != null){
NBTTagCompound tag = new NBTTagCompound();
tag.setByte("Slot", (byte) i);
stack.writeToNBT(tag);
itemList.appendTag(tag);
}
}
var1.setTag("Inventory", itemList);
}
public AxisAlignedBB getCollisionBox(Entity par1Entity)
{
return par1Entity.boundingBox;
}
public AxisAlignedBB getBoundingBox()
{
return this.boundingBox;
}
public boolean canBeCollidedWith()
{
return !this.isDead;
}
@Override
public int getSizeInventory() {
// TODO Auto-generated method stub
return this.items.length;
}
@Override
public ItemStack getStackInSlot(int par1) {
if (this.items[par1] != null){
ItemStack var2 = this.items[par1];
this.items[par1] = null;
return var2;
}
else
{
return null;
}
}
@Override
public void setInventorySlotContents(int par1, ItemStack par2ItemStack) {
if(! worldObj.isRemote){
this.items[par1] = par2ItemStack;
//Ajusta el tamaƱo al maximo
if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()){
par2ItemStack.stackSize = this.getInventoryStackLimit();
}
}
}
@Override
public ItemStack decrStackSize(int par1, int par2) {
if (this.items[par1] != null){
ItemStack var3;
if (this.items[par1].stackSize <= par2){
var3 = this.items[par1];
this.items[par1] = null;
return var3;
}
else{
var3 = this.items[par1].splitStack(par2);
if (this.items[par1].stackSize == 0){
this.items[par1] = null;
}
return var3;
}
}
else {
return null;
}
}
@Override
public ItemStack getStackInSlotOnClosing(int par1) {
if (this.items[par1] != null){
ItemStack var2 = this.items[par1];
this.items[par1] = null;
return var2;
}
else{
return null;
}
}
@Override
public String getInvName() {
// TODO Auto-generated method stub
return "Motor";
}
@Override
public int getInventoryStackLimit() {
// TODO Auto-generated method stub
return 64;
}
@Override
public void onInventoryChanged() {
}
@Override
public boolean isUseableByPlayer(EntityPlayer var1) {
// TODO Auto-generated method stub
return true;
}
@Override
public void openChest() {}
@Override
public void closeChest() {}
}
Spoiler: MiContainer.java
package PruebaVehiculo;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
public class MiContainer extends Container{
private MiEntidad2 entidad;
public MiContainer(MiEntidad2 ent, InventoryPlayer inventario){
entidad = ent;
addSlotToContainer(new Slot(ent,0,40,20));
bindPlayerInventory(inventario);
}
@Override
public boolean canInteractWith(EntityPlayer player) {
return entidad.isUseableByPlayer(player);
}
protected void bindPlayerInventory(InventoryPlayer player_inventory){
for(int i = 0; i < 3; i++){
for(int j = 0; j < 9; j++){
addSlotToContainer(new Slot(player_inventory, j + i * 9 + 9, 9 + j * 18, 85 + i * 16));
}
}
for(int i = 0; i < 9; i++){
addSlotToContainer(new Slot(player_inventory, i, 6 + i * 16, 142));
}
}
//slor -> slot del que proviene
@Override
public ItemStack transferStackInSlot(EntityPlayer player, int slot) {
if(!player.worldObj.isRemote){
ItemStack stack = null;
Slot slot_object = (Slot) inventorySlots.get(slot);
if(slot_object != null && slot_object.getHasStack()){
ItemStack stack_in_slot = slot_object.getStack();
stack = stack_in_slot.copy();
if(slot == 0){
if(!mergeItemStack(stack_in_slot, 1, inventorySlots.size(), true)){
return null;
}
}
else if(!mergeItemStack(stack_in_slot, 0, 1, false)){
return null;
}
if(stack_in_slot.stackSize == 0){
slot_object.putStack(null);
}
else{
slot_object.onSlotChanged();
}
}
return stack;
}
}
}
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
public class MiContainer extends Container{
private MiEntidad2 entidad;
public MiContainer(MiEntidad2 ent, InventoryPlayer inventario){
entidad = ent;
addSlotToContainer(new Slot(ent,0,40,20));
bindPlayerInventory(inventario);
}
@Override
public boolean canInteractWith(EntityPlayer player) {
return entidad.isUseableByPlayer(player);
}
protected void bindPlayerInventory(InventoryPlayer player_inventory){
for(int i = 0; i < 3; i++){
for(int j = 0; j < 9; j++){
addSlotToContainer(new Slot(player_inventory, j + i * 9 + 9, 9 + j * 18, 85 + i * 16));
}
}
for(int i = 0; i < 9; i++){
addSlotToContainer(new Slot(player_inventory, i, 6 + i * 16, 142));
}
}
//slor -> slot del que proviene
@Override
public ItemStack transferStackInSlot(EntityPlayer player, int slot) {
if(!player.worldObj.isRemote){
ItemStack stack = null;
Slot slot_object = (Slot) inventorySlots.get(slot);
if(slot_object != null && slot_object.getHasStack()){
ItemStack stack_in_slot = slot_object.getStack();
stack = stack_in_slot.copy();
if(slot == 0){
if(!mergeItemStack(stack_in_slot, 1, inventorySlots.size(), true)){
return null;
}
}
else if(!mergeItemStack(stack_in_slot, 0, 1, false)){
return null;
}
if(stack_in_slot.stackSize == 0){
slot_object.putStack(null);
}
else{
slot_object.onSlotChanged();
}
}
return stack;
}
}
}
Any help is wellcome.








