[1.7.10] Не срабатывает GUI. И пару вопросов про initGUI();

Статус
В этой теме нельзя размещать новые ответы.
675
2
Вотс тебе адекватный пример:
Код:
    @Override
    public Object getServerGuiElement(int id, EntityPlayer player, World world,int x, int y, int z) {
        if(id == 1) {
            return new DropChangerContainer(player.inventory);
        }
        return null;
    }
    
    @Override
    public Object getClientGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) {
        if(id == 1) {
            return new DropChangerGui(player.inventory);
        }
        return null;
    }

брик - кирпич :)
Да, верно, у тебя там return'ы, break'и не нужны вообще(даже тот один, который там зачем-то есть).
 
Ладно, открыть - открыл, теперь надо разобраться с исчезновением предметов из инвентаря.
После того как их возьму(в гуи), они пропадают.
 
last24242 написал(а):
Открыл гуи через:
Код:
Minecraft.getMinecraft().displayGuiScreen(new TMTableGui(player.inventory, (TileEntityTiny)tileEntity));
Открывается и работает, но вот только почему то когда беру предмет из инвентаря от исчезает сразу же.
Понимаешь?
[merge_posts_bbcode]Добавлено: 11.09.2014 19:17:44[/merge_posts_bbcode]

Лол, кажется понял о чём ты.
Код:
java.lang.NullPointerException: Unexpected error
    at cpw.mods.fml.common.network.NetworkRegistry.getLocalGuiContainer(NetworkRegistry.java:263)
    at cpw.mods.fml.common.network.internal.FMLNetworkHandler.openGui(FMLNetworkHandler.java:93)
    at net.minecraft.entity.player.EntityPlayer.openGui(EntityPlayer.java:2514)
    at last2424.mods.mandastrialcraft.TMTable.onBlockActivated(TMTable.java:29)
    at net.minecraft.client.multiplayer.PlayerControllerMP.onPlayerRightClick(PlayerControllerMP.java:380)
    at net.minecraft.client.Minecraft.func_147121_ag(Minecraft.java:1528)
    at net.minecraft.client.Minecraft.runTick(Minecraft.java:2043)
    at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1038)
    at net.minecraft.client.Minecraft.run(Minecraft.java:961)
    at net.minecraft.client.main.Main.main(Main.java:164)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:134)
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at GradleStart.bounce(GradleStart.java:107)
    at GradleStart.startClient(GradleStart.java:100)
    at GradleStart.main(GradleStart.java:55)
Всё равно не пашет пишет вот это.
 

necauqua

когда-то был anti344
Администратор
1,216
27
172
Открыл гуи через:
Код:
Minecraft.getMinecraft().displayGuiScreen(new TMTableGui(player.inventory, (TileEntityTiny)tileEntity));
Открывается и работает, но вот только почему то когда беру предмет из инвентаря от исчезает сразу же.
Как-то это запашет и без IGuiHandler-а, ибо кое-кто вообще им не воспользовался. А весь его смысл в том, чтобы открывать контечнер на сервере, чего ты не делаешь. FMLCommonHandler.instance().что_то_типа_openGui
 

necauqua

когда-то был anti344
Администратор
1,216
27
172
И что он вызывает? Хе-хе.
 
Ребят, я открыл через FMLCommonHandler.instance().showGuiHandler(...);

Но когда я беру предмет он всё-равно пропадает когда он drag&drop.
[merge_posts_bbcode]Добавлено: 13.09.2014 20:40:23[/merge_posts_bbcode]

Код:
package last2424.mods.mandastrialcraft;

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 ContainerTiny extends Container {

        protected TileEntityTiny tileEntity;

        public ContainerTiny (InventoryPlayer inventoryPlayer, TileEntityTiny te){
                tileEntity = te;

                //the Slot constructor takes the IInventory and the slot number in that it binds to
                //and the x-y coordinates it resides on-screen
                for (int i = 0; i < 1; i++) {
                        for (int j = 0; j < 1; j++) {
                                addSlotToContainer(new Slot(tileEntity, 0, 0, 0));
                        }
                }

                //commonly used vanilla code that adds the player's inventory
                bindPlayerInventory(inventoryPlayer);
        }

        @Override
        public boolean canInteractWith(EntityPlayer player) {
                return tileEntity.isUseableByPlayer(player);
        }


        protected void bindPlayerInventory(InventoryPlayer inventoryPlayer) {
                for (int i = 0; i < 3; i++) {
                        for (int j = 0; j < 9; j++) {
                                addSlotToContainer(new Slot(inventoryPlayer, j + i * 9 + 9,
                                                8 + j * 18, 84 + i * 18));
                        }
                }

                for (int i = 0; i < 9; i++) {
                        addSlotToContainer(new Slot(inventoryPlayer, i, 8 + i * 18, 142));
                }
        }

        @Override
        public ItemStack transferStackInSlot(EntityPlayer player, int slot) {
                ItemStack stack = null;
                Slot slotObject = (Slot) inventorySlots.get(slot);

                //null checks and checks if the item can be stacked (maxStackSize > 1)
                if (slotObject != null && slotObject.getHasStack()) {
                        ItemStack stackInSlot = slotObject.getStack();
                        stack = stackInSlot.copy();

                        //merges the item into player inventory since its in the tileEntity
                        if (slot < 9) {
                                if (!this.mergeItemStack(stackInSlot, 0, 35, true)) {
                                        return null;
                                }
                        }
                        //places it into the tileEntity is possible since its in the player inventory
                        else if (!this.mergeItemStack(stackInSlot, 0, 9, false)) {
                                return null;
                        }

                        if (stackInSlot.stackSize == 0) {
                                slotObject.putStack(null);
                        } else {
                                slotObject.onSlotChanged();
                        }

                        if (stackInSlot.stackSize == stack.stackSize) {
                                return null;
                        }
                        slotObject.onPickupFromSlot(player, stackInSlot);
                }
                return stack;
        }
}

Скрипт контейнера.

[merge_posts_bbcode]Добавлено: 13.09.2014 21:05:52[/merge_posts_bbcode]

Друзья всё, проблема решена, всё дело было в том, что я не регистрировал прокси :D

[merge_posts_bbcode]Добавлено: 13.09.2014 21:23:01[/merge_posts_bbcode]

Теперь последний вопрос который меня интересует, мне нужно поставить на слот ограничение, что бы туда можно положить только определённые предметы, также интересует таймер и анимация в minecraft, ну как в печке когда мы положили предмет и топливо, ну и также изменение предмета и перебрасывание его с другую ячейку.
 
1,990
18
105
2swj6Rt.png

Создаешь новый класс слота и переопределяешь там этот метод. Который подчеркнут.
Потом этот слот кидаешь в свой контейнер.
 
1,990
18
105
Чего?
Это метод, он принимает ItemStack, дальше ты проверяешь валиден ли он для слота и возвращаешь тру или фолс.
 
Ладно, я сделал наконецто, но в последствий появились вопросы, опять :D

Использование таймера интерисует, что бы через определённое время срабатывала функция.
 
2,955
12
Делаешь переменную, каждый тик прибавляешь один. Когда она дошла до нужного значения -обнуляешь.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху