[1.7.10] Регистрация двух разных гуи

1,239
2
24
Есть 2 гуи.Если смотреть как они регистрируются в GuiHandler"e то способы сильно отличаются.Например:
1-й гуи:
Код:
public Object getClientGuiElement(int id, EntityPlayer entityPlayer, World world, int x, int y, int z) {
       if (id == GuiI.Machine1.ordinal()) {
           TileEntityMachine1 tileEntityR = (TileEntityMachine1) world.getTileEntity(x, y, z);
           return new GuiMachine1(entityPlayer.inventory, tileEntityR);
//и т.д

       } else {

           return null;
       }
   }
А регистрация 2-го гуи отличается.Понятно что совместить их не получится.И подстроить под 1 рег тоже.Думаю суть понятна,мне нужно зарегать 2 разных по регистрации гуи.
Пробовал сделать 2 гуи хандлера а что с прокси делать-не знаю.Прошу у вас совета тут.
 
Не,ты не понял.Есть 2 гуи.1 регается одним способом другой другим.В примере я показал как регается 1-е гуи а 2-е отличается.Я хочу совместить их в своем моде.Удалил,теперь в примере регается ток 1 гуи.
 
Ок.Есть 2 гуи.Первый регистрируется в хандлере так:
Код:
public Object getServerGuiElement(int ID, EntityPlayer player, World world, int X, int Y, int Z) {
      TileEntity te = world.getTileEntity(X, Y, Z);
      return te != null?(te instanceof TileEntityMachine?((TileEntityMachine)te).getGuiContainer(player.inventory):null):null;
   }


А второй вот так:
Код:
public Object getServerGuiElement(int id, EntityPlayer entityPlayer, World world, int x, int y, int z) {
        if(id == GuiI.MachineM.ordinal()) {
            TileEntityM tileEntityM = (TileEntityM) world.getTileEntity(x, y, z);
            return new ContainerM(entityPlayer.inventory, tileEntityM4);
        } else {
            return null;
        }
    }
Суть не в коде а в том что он отличается.Это 2 гуи для двух блоков.Я хочу совместить их у себя в моде.Понятно что просто копи+паст не получится.
Код:
public Object getServerGuiElement(int ID, EntityPlayer player, World world, int X, int Y, int Z) {
      TileEntity te = world.getTileEntity(X, Y, Z);
      return te != null?(te instanceof TileEntityMachine?((TileEntityMachine)te).getGuiContainer(player.inventory):null):null;
if(id == GuiI.MachineM.ordinal()) {
            TileEntityM tileEntityM = (TileEntityM) world.getTileEntity(x, y, z);
            return new ContainerM(entityPlayer.inventory, tileEntityM4);
        } else {
            return null;
        }
   }
То есть вот так.
Но и переделать первое гуи под второе или второе под первое так же не получится,потому что у их классов разные аргументы и параметры.Например контейнер в первом передает параметры А,Б,С а контейнер во втором О,В,И.Короче,слишком все запутал.Хочу зарегать 2 гуи с разными параметрами.
 
Проблема в незнании языка,да?

Код:
@Override
 public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
 switch (ID) {
 case 0:
 return new ContainerInventory(player);
 case 1:
 return new ContainerSlots(player, x);
 default:
 return null;
 }
 }





 @Override
 public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
 switch (ID) {
 case 0:
 return new GuiInventory(player);
 case 1:
 return new GuiSlots(player, x);
 default:
 return null;
 }
 }


}
 
Почти сработало.Гуи открывается и сразу закрывается.Такое было но как исправлял не помню.
 
XuPuPG написал(а):
Почти сработало.Гуи открывается и сразу закрывается.Такое было но как исправлял не помню.
Поищи в стандартных гуи, у тебя 2 гуи в 1 блоке или что?
 
XuPuPG, убедись что твой Container в методе "canInteractWith", не возвращал постоянное значение false.
 
Если закрывается и открывается - скорее всего ты возвращаешь null-контейнер на сервере. Как итог, гуи открывается на клиенте, через пару тиков ловит пакет от сервера, что гуи кривой и закрывает его.
Выложи оба метода getClientGuiElement и getServerGuiElement.
 
Код:
public Object getServerGuiElement(int id, EntityPlayer player, World world, int x, int y, int z)
    {

        switch (id)
        {
            case 0:
                return world.getBlock(x, y, z) == AMS.MachineI ? new ContainerI(player.inventory, world, x, y, z) : null;

        }
        return null;
    }


    public Object getClientGuiElement(int id, EntityPlayer player, World world, int x, int y, int z)
    {
      
        switch (id)
        {
            case 0:
                return world.getBlock(x, y, z) == AMS.MachineI ? new GuiI(player.inventory, world, x, y, z) : null;

        }
        return null;
    }
canInteractWith не возвращает false
 
XuPuPG, трудно предположить в чём может быть проблема, не видя проблемного кода.
 
Назад
Сверху