Проблема со слотами в кастомном гуи

Здравствуйте. Я создал свое гуи с контейнером и всем прочим(аналог лошади), но при попытке взаимодействовать со слотами инвентаря игрока в этом гуи почему-то берется предмет совершенно из другого слота. К примеру, я кликаю на итем в любом слоте в моем гуи, а берутся все итемы по диагонали в инвентаре
Помогите, пожалуйста.

 
Да я же говорю, все почти тоже самое...
Код:
    public void displayGUIHorse(EntityPlayer player, EntityCustomHorse par1EntityHorse, IInventory par2IInventory)
    {
        this.mc.displayGuiScreen(new HorseGui(player.inventory, par2IInventory, par1EntityHorse));
    }
Код:
public class HorseContainer extends Container
{
    private IInventory field_111243_a;
    private EntityCutsomHorse theHorse;

    public CarContainer(IInventory par1IInventory, IInventory par2IInventory, EntityCutsomHorse par3EntityHorse)
    {
        this.field_111243_a = par2IInventory;
        this.theHorse = par3EntityHorse;
        byte b0 = 3;
        //par2IInventory.openChest();
        int i = (b0 - 4) * 18;
        this.addSlotToContainer(new SlotCustom(this, par2IInventory, 0, 8, 18));
        this.addSlotToContainer(new SlotCustom(this, par2IInventory, 1, 8, 36, par3EntityHorse));

        for (int j = 0; j < 3; ++j)
        {
            for (int k = 0; k < 9; ++k)
            {
                this.addSlotToContainer(new Slot(par1IInventory, k + j * 9 + 9, 8 + k * 18, 102 + j * 18 + i));
            }
        }

        for (int j = 0; j < 9; ++j)
        {
            this.addSlotToContainer(new Slot(par1IInventory, j, 8 + j * 18, 160 + i));
        }
    }

    public boolean canInteractWith(EntityPlayer par1EntityPlayer)
    {
        return this.field_111243_a.isUseableByPlayer(par1EntityPlayer) && this.theHorse.isEntityAlive() && this.theHorse.getDistanceToEntity(par1EntityPlayer) < 8.0F;
    }

    /**
     * Called when a player shift-clicks on a slot. You must override this or you will crash when someone does that.
     */
    public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int par2)
    {
        ItemStack itemstack = null;
        Slot slot = (Slot)this.inventorySlots.get(par2);

        if (slot != null && slot.getHasStack())
        {
            ItemStack itemstack1 = slot.getStack();
            itemstack = itemstack1.copy();

            if (par2 < this.field_111243_a.getSizeInventory())
            {
                if (!this.mergeItemStack(itemstack1, this.field_111243_a.getSizeInventory(), this.inventorySlots.size(), true))
                {
                    return null;
                }
            }
            else if (this.getSlot(1).isItemValid(itemstack1) && !this.getSlot(1).getHasStack())
            {
                if (!this.mergeItemStack(itemstack1, 1, 2, false))
                {
                    return null;
                }
            }
            else if (this.getSlot(0).isItemValid(itemstack1))
            {
                if (!this.mergeItemStack(itemstack1, 0, 1, false))
                {
                    return null;
                }
            }
            else if (this.field_111243_a.getSizeInventory() <= 2 || !this.mergeItemStack(itemstack1, 2, this.field_111243_a.getSizeInventory(), false))
            {
                return null;
            }

            if (itemstack1.stackSize == 0)
            {
                slot.putStack((ItemStack)null);
            }
            else
            {
                slot.onSlotChanged();
            }
        }

        return itemstack;
    }

    /**
     * Called when the container is closed.
     */
    public void onContainerClosed(EntityPlayer par1EntityPlayer)
    {
        super.onContainerClosed(par1EntityPlayer);
        this.field_111243_a.closeChest();
    }
}

Я кажись понял в чем проблемка. С гуи я много не возился, но видимо я запускаю его в клиенте, а на сервере инфы об этом никакой. Нужно это исправить ?
 
FanKar написал(а):
Покажи код гуи
контэйнер ничего не решит.
Код:
public class CarGui extends GuiContainer
{
    private static final ResourceLocation horseGuiTextures = new ResourceLocation("textures/gui/container/horse.png");
    private IInventory field_110413_u;
    private IInventory field_110412_v;
    private EntityCustomHorse field_110411_w;
    private float field_110416_x;
    private float field_110415_y;

    public CarGui(IInventory par1IInventory, IInventory par2IInventory, EntityCustomHorse par3EntityHorse)
    {
        super(new HorseContainer(par1IInventory, par2IInventory, par3EntityHorse));
        this.field_110413_u = par1IInventory;
        this.field_110412_v = par2IInventory;
        this.field_110411_w = par3EntityHorse;
        this.allowUserInput = false;
    }

    /**
     * Draw the foreground layer for the GuiContainer (everything in front of the items)
     */
    protected void drawGuiContainerForegroundLayer(int par1, int par2)
    {
        this.fontRenderer.drawString(this.field_110412_v.isInvNameLocalized() ? this.field_110412_v.getInvName() : I18n.getString(this.field_110412_v.getInvName()), 8, 6, 4210752);
        this.fontRenderer.drawString(this.field_110413_u.isInvNameLocalized() ? this.field_110413_u.getInvName() : I18n.getString(this.field_110413_u.getInvName()), 8, this.ySize - 96 + 2, 4210752);
    }

    /**
     * Draw the background layer for the GuiContainer (everything behind the items)
     */
    protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3)
    {
        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
        this.mc.getTextureManager().bindTexture(horseGuiTextures);
        int k = (this.width - this.xSize) / 2;
        int l = (this.height - this.ySize) / 2;
        this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize);

        if (this.field_110411_w.isChested())
        {
            this.drawTexturedModalRect(k + 79, l + 17, 0, this.ySize, 90, 54);
        }

        if (this.field_110411_w.func_110259_cr())
        {
            this.drawTexturedModalRect(k + 7, l + 35, 0, this.ySize + 54, 18, 18);
        }

    }

    /**
     * Draws the screen and all the components in it.
     */
    public void drawScreen(int par1, int par2, float par3)
    {
        this.field_110416_x = (float)par1;
        this.field_110415_y = (float)par2;
        super.drawScreen(par1, par2, par3);
    }
 
Хм. Попробуй открытие сделать похожим на это:
Код:
            if (par1World.isRemote)
            {
                return true;
            }else
            {
                if(!par5EntityPlayer.isSneaking())
                {
                        par5EntityPlayer.openGui(Mod.instance, Config.guiID[0], par1World, par2, par3, par4);
                        return true;
                }
                else
                {
                    return false;
                }
            }
Так-же скажи версию майна. А то чё-то подозреваю не та на которой я пишу.
 
FanKar написал(а):
Хм. Попробуй открытие сделать похожим на это:
Код:
            if (par1World.isRemote)
            {
                return true;
            }else
            {
                if(!par5EntityPlayer.isSneaking())
                {
                        par5EntityPlayer.openGui(Mod.instance, Config.guiID[0], par1World, par2, par3, par4);
                        return true;
                }
                else
                {
                    return false;
                }
            }
Так-же скажи версию майна. А то чё-то подозреваю не та на которой я пишу.
1 6 4
 
FanKar написал(а):
Хм. Попробуй открытие сделать похожим на это:
Код:
            if (par1World.isRemote)
            {
                return true;
            }else
            {
                if(!par5EntityPlayer.isSneaking())
                {
                        par5EntityPlayer.openGui(Mod.instance, Config.guiID[0], par1World, par2, par3, par4);
                        return true;
                }
                else
                {
                    return false;
                }
            }
Так-же скажи версию майна. А то чё-то подозреваю не та на которой я пишу.
Большое спасибо, похоже проблема решена. Как я и думал, дело в открытии только на клиентской части. Реализовал открытие гуи через хендлер и все успешно работает :)
 
Пожалуйста. Был рад помочь, просто был не уверен т.к. ты на 1.6.4 ;)
 
Назад
Сверху