Странное поведение предметов в кастомном gui

Версия Minecraft
1.12.2

ReyMagos

Тег-бомбастер
412
7
121
Я делаю свой gui для торговли с мобом. Но когда я беру предмет в руку, то исчезают и другие предметы.
ДО:
2019-06-15_16.20.58.png
ПОСЛЕ:
2019-06-15_16.21.20.png
Также, когда кладёшь предмет в любой слот торговли, то он работает, как верстак и из берёзы делает доски, из досок кнопки. Как это убрать не знаю, в классе GuiMerchant такого нет. Что делать не знаю.
 

ReyMagos

Тег-бомбастер
412
7
121
Код:
public class ContainerTrade extends Container {

    private final IMerchant merchant;
    private final InventoryMerchant merchantInventory;
    private final World world;

    public ContainerTrade(InventoryPlayer playerInventory, IMerchant merchant, World worldIn) {
        this.merchant = merchant;
        this.merchantInventory = new InventoryMerchant(Minecraft.getMinecraft().player, merchant);
        this.world = worldIn;
        this.addSlotToContainer(new Slot(this.merchantInventory, 0, 75, 53));
        this.addSlotToContainer(new Slot(this.merchantInventory, 1, 101, 53));
        this.addSlotToContainer(new SlotMerchantResult(playerInventory.player, merchant, this.merchantInventory, 2, 159, 53));
        for (int i = 0; i < 3; ++i)
        {
            for (int j = 0; j < 9; ++j)
            {
                this.addSlotToContainer(new Slot(playerInventory, j + i * 9 + 9, 47 + j * 18, 84 + i * 18));
            }
        }
        for (int k = 0; k < 9; ++k)
        {
            this.addSlotToContainer(new Slot(playerInventory, k, 47 + k * 18, 142));
        }
    }

    @Override
    public boolean canInteractWith(EntityPlayer playerIn) {
        return false;
    }
Код:
public class GuiTrade extends GuiContainer {
    private static final int guiWidth = 255;
    private static final int guiHeight = 166;
    private static ResourceLocation texture = new ResourceLocation("tut:textures/gui/trade_inventory.png");
    private final IMerchant merchant;
    private final InventoryPlayer inventory;
    private final World world;
    private int selectedOffer;
    private boolean isOffersOverFreeSpace;


    public GuiTrade(EntityPlayer player, IMerchant merchant) {
        super(new ContainerTrade(player.inventory, merchant, player.world));
        this.merchant = merchant;
        this.inventory = player.inventory;
        this.world = player.world;

    }

    @Override
    public void initGui() {
        super.initGui();
        Keyboard.enableRepeatEvents(true);
    }

    @Override
    public void updateScreen() {
        super.updateScreen();
    }

    @Override
    public void drawScreen(int mouseX, int mouseY, float partialTicks) {
        drawDefaultBackground();
        super.drawScreen(mouseX, mouseY, partialTicks);
        this.renderHoveredToolTip(mouseX, mouseY);
    }

    @Override
    protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) {
        mc.getTextureManager().bindTexture(texture);
        int offsetFromScreenLeft = (width - guiWidth) / 2;
        int offsetFromScreenTop = (height - guiHeight) / 2;
        drawTexturedModalRect(offsetFromScreenLeft, offsetFromScreenTop, 0, 0, guiWidth, guiHeight);
    }

    @Override
    protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException {
        super.mouseClicked(mouseX, mouseY, mouseButton);
    }

    @Override
    public void onGuiClosed() {
        Keyboard.enableRepeatEvents(false);
    }

    @Override
    public boolean doesGuiPauseGame() {
        return false;
    }
}
Инвентарь использую InventoryMerchant.
 

ReyMagos

Тег-бомбастер
412
7
121
Понял, надо что-ли merchant.getCustomer()?
Я попробовал merchant.getCustomer() и playerInventory.player, не получилось. Натыкал принтов - понял, что у меня ContainerTrade вызывается два раза, хотя я его вызываю только один (может в этом проблема, не знаю).
 
Последнее редактирование:

ReyMagos

Тег-бомбастер
412
7
121
Мутильсообщения, впредь цитируй нужные куски и отправляй одним сообщением
Попробовал заменить ContainerTrade на ContainerMerchant, кроме положения слотов ничего не изменилось, проблема осталсаь.
 

ReyMagos

Тег-бомбастер
412
7
121
Как открываешь гуи?
Java:
public class EntityTrader extends EntityMob implements IMerchant {
    public EntityTrader(World world) {
        super(world);
        this.setSize(0.6F, 1.0F);
    }

    public EntityTrader(World world, double x, double y, double z) {
        super(world);
        this.setSize(0.6F, 1.0F);
        this.setPositionAndUpdate(x, y, z);
    }

    //всякие методы для ентити писать не стал, думаю они не понадобятся
 
    @Override
    protected boolean processInteract(EntityPlayer player, EnumHand hand) {
        if (!player.world.isRemote) {
            this.setCustomer(player);
//            FMLCommonHandler.instance().showGuiScreen(new GuiTrade(player, this)); Честно говоря не вижу разницы между этим и тем что ниже
            Minecraft.getMinecraft().displayGuiScreen(new GuiTrade(player, this));
            return true;
        }
        return false;
    }
}
 
Последнее редактирование:

ReyMagos

Тег-бомбастер
412
7
121
Последнее редактирование модератором:
917
22
332
Разница в том, что на сервере нет класса Minecraft.
Ты должен открывать инвентарь не в виде просто гуи, но в виде гуи-контейнера.
player.openGui(mod_instance, 0, world, posX, posY, posZ);

Значит просто передавай игрока из вне.
Java:
    @Nullable
    @Override
    public Object getServerGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) {
        if (id == myGui)
            return new ContainerMYContainer

        return null;
    }
 
Последнее редактирование модератором:
Сверху