Количество слотов

Версия Minecraft
1.7.10

Led

291
3
0
Здравствуйте софорумцы!
Добрался я наконец до GUI и тут же ошпарился.
Решил я создать свой верстак по этому гайду.



[font=Monaco, Consolas, Courier, monospace][size=small][font=Monaco, Consolas, Courier, monospace]guiPerlTable.java[/font][/SIZE][/font][/size]]
Код:
package ru.legendary.lwmod.lwmench.gui;

import org.lwjgl.opengl.GL11;

import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.StatCollector;
import net.minecraft.world.World;
import ru.legendary.lwmod.lwmcore.util.Logging;
import ru.legendary.lwmod.lwmench.LWMEnch;
import ru.legendary.lwmod.lwmench.container.containerPerlTable;

public class guiPerlTable extends GuiContainer {

 private static final ResourceLocation texture = new ResourceLocation("lwm2/textures/gui/guiPerlTable.png");
 
 public guiPerlTable(InventoryPlayer invPlayer, World world, int x, int y, int z) {
 super(new containerPerlTable(invPlayer, world, x, y, z));
 this.xSize = 176;
 this.ySize = 188;
 }
 
 public void onGuiClosed(){
 super.onGuiClosed();
 }

 protected void drawGuiContainerForegroundLayer (int i, int j) {

 this.fontRendererObj.drawString(StatCollector.translateToLocal("Work Surface"), 100, 5, 0xFFFFFF);
 
 }
 
 
 @Override
 protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) {
 GL11.glColor4f(1F, 1F, 1F, 1F);
 
 this.bindTexture(texture);
 
 drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
 
 }

 private void bindTexture(ResourceLocation texture2) {
 //texture2 = texture;
 }

}


Я уже почти десять часов бьюсь, пытаясь сократить количество слотов GUI. Сейчас оно - ровная сетка 5*5.
А мне нужно 2*1, как на наковальня. При попытке немного что то крутануть - все крашится.
Очень прошу подсказать, в какую сторону копать. И помочь по возможности.

[font=Monaco, Consolas, Courier, monospace]containerPerlTable.java[/font][/SIZE]]
Код:
package ru.legendary.lwmod.lwmench.container;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.ContainerWorkbench;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.InventoryCraftResult;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.inventory.Slot;
import net.minecraft.inventory.SlotCrafting;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import ru.legendary.lwmod.lwmcore.util.Logging;
import ru.legendary.lwmod.lwmench.LWMEnch;
import ru.legendary.lwmod.lwmench.core.ModBlocks;
import ru.legendary.lwmod.lwmench.crafting.PerlTableManager;

public class containerPerlTable extends Container {

 public InventoryCrafting craftMatrix;
 public IInventory craftResult;
 private World worldObj;
 private int posX;
 private int posY;
 private int posZ;
 
 public containerPerlTable(InventoryPlayer invPlayer, World world, int x, int y, int z) {
 craftMatrix = new InventoryCrafting(this, 5, 5);
 craftResult = new InventoryCraftResult();
 worldObj = world;
 posX = x;
 posY = y;
 posZ = z;
 
 this.addSlotToContainer(new SlotCrafting(invPlayer.player, craftMatrix, craftResult, 0, 141, 43));
 
 for (int i = 0; i < 5; i++) {
 for(int k = 0; k < 5; k++) {
 this.addSlotToContainer(new Slot(craftMatrix, k + i * 5, 8 + k * 18, 7 + i * 18));
 }
 }
 
 for (int i = 0; i < 3; i++) {
 for(int k = 0; k < 9; k++) {
 this.addSlotToContainer(new Slot(invPlayer, k + i * 9 + 9, 8 + k * 18, 106 + i * 18));
 }
 }
 
 for (int i = 0; i < 9; i++) {
 this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 164));
 }
 
 onCraftMatrixChanged(craftMatrix);
 }
 
 
 public void onCraftMatrixChanged(IInventory iiventory) {
 craftResult.setInventorySlotContents(0, PerlTableManager.getInstance().findMatchingRecipe(craftMatrix, worldObj));
 }
 
 
 @Override
 public boolean canInteractWith(EntityPlayer player) {
 if(worldObj.getBlock(posX, posY, posZ) != ModBlocks.blockPerlTable) {
 return false;
 }else{
 return player.getDistanceSq((double)posX + 0.5D, (double)posY + 0.5D, (double)posZ + 0.5D) <= 64.0D;
 }

 }
 
 public void onContainerClosed(EntityPlayer par1EntityPlayer) {
        super.onContainerClosed(par1EntityPlayer);

        if (!this.worldObj.isRemote)
        {
            for (int i = 0; i < 9; ++i)
            {
                ItemStack itemstack = this.craftMatrix.getStackInSlotOnClosing(i);

                if (itemstack != null)
                {
                    par1EntityPlayer.dropPlayerItemWithRandomChoice(itemstack, false);
                }
            }
        }
    }

 
 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 == 0)
            {
                if (!this.mergeItemStack(itemstack1, 10, 46, true))
                {
                    return null;
                }

                slot.onSlotChange(itemstack1, itemstack);
            }
            else if (par2 >= 10 && par2 < 37)
            {
                if (!this.mergeItemStack(itemstack1, 37, 46, false))
                {
                    return null;
                }
            }
            else if (par2 >= 37 && par2 < 46)
            {
                if (!this.mergeItemStack(itemstack1, 10, 37, false))
                {
                    return null;
                }
            }
            else if (!this.mergeItemStack(itemstack1, 10, 46, false))
            {
                return null;
            }

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

            if (itemstack1.stackSize == itemstack.stackSize)
            {
                return null;
            }

            slot.onPickupFromSlot(par1EntityPlayer, itemstack1);
        }

        return itemstack;
    }

Заранее благодарен!
 
Led написал(а):
Код:
for (int i = 0; i < 5; i++) {
for(int k = 0; k < 5; k++) {
this.addSlotToContainer(new Slot(craftMatrix, k + i * 5, 8 + k * 18, 7 + i * 18));
}
}
Если я не ошибаюсь, то можно как пример:
Код:
this.addSlotToContainer(new Slot(craftMatrix, 0, 26, 7));
this.addSlotToContainer(new Slot(craftMatrix, 1, 26, 27));
Либо смотреть из контейнера наковальни.
 
timaxa007 написал(а):
Led написал(а):
Код:
for (int i = 0; i < 5; i++) {
for(int k = 0; k < 5; k++) {
this.addSlotToContainer(new Slot(craftMatrix, k + i * 5, 8 + k * 18, 7 + i * 18));
}
}
Если я не ошибаюсь, то можно как пример:
Код:
this.addSlotToContainer(new Slot(craftMatrix, 0, 26, 7));
this.addSlotToContainer(new Slot(craftMatrix, 1, 26, 27));
Либо смотреть из контейнера наковальни.
Так получается добавить только один слот.
При попытке добавить второй - краш.

Нужно где то ещё указывать количество слотов?

Например, тут?

Код:
craftMatrix = new InventoryCrafting(this, 5, 5);
 
Не знаю, в чём у тебя проблема, но у меня заработала такая версия (конечно меньше переменных и методов, чем у тебя, но всё-же работает). Есть вероятность, что ты плохо открываешь это GUI с Container'ом (даже возможно ты открываешь GUI, но его Container на серверной стороне не открываеться).

Led написал(а):
Например, тут?

Код:
craftMatrix = new InventoryCrafting(this, 5, 5);
Если только на:
Код:
craftMatrix = new InventoryCrafting(this, 2, 0);
Но в таком виде, не понятно зачем тебе нужен InventoryCrafting.
 
В тайле? Эм, у меня его нет...
А зачем верстаку тайл? Он же не хранит предметы? Он просто предоставляет временное хранилище. При закрытии GUI они выпадают.


Краш происходит так: открываю гуи, оно отрисовывается и крашит.
Видимо, да, инвентарь при изменение количества слотов не хочет подключаться куда надо.
Код:
[11:22:11] [Client thread/FATAL]: Unreported exception thrown!
java.lang.ArrayIndexOutOfBoundsException: 0
 at net.minecraft.inventory.InventoryCrafting.setInventorySlotContents(InventoryCrafting.java:131) ~[InventoryCrafting.class:?]
 at net.minecraft.inventory.Slot.putStack(Slot.java:104) ~[Slot.class:?]
 at net.minecraft.inventory.Container.putStacksInSlots(Container.java:558) ~[Container.class:?]
 at net.minecraft.client.network.NetHandlerPlayClient.handleWindowItems(NetHandlerPlayClient.java:1202) ~[NetHandlerPlayClient.class:?]
 at net.minecraft.network.play.server.S30PacketWindowItems.processPacket(S30PacketWindowItems.java:70) ~[S30PacketWindowItems.class:?]
 at net.minecraft.network.play.server.S30PacketWindowItems.processPacket(S30PacketWindowItems.java:78) ~[S30PacketWindowItems.class:?]
 at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241) ~[NetworkManager.class:?]
 at net.minecraft.client.multiplayer.PlayerControllerMP.updateController(PlayerControllerMP.java:317) ~[PlayerControllerMP.class:?]
 at net.minecraft.client.Minecraft.runTick(Minecraft.java:1693) ~[Minecraft.class:?]
 at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039) ~[Minecraft.class:?]
 at net.minecraft.client.Minecraft.run(Minecraft.java:962) [Minecraft.class:?]
 at net.minecraft.client.main.Main.main(Main.java:164) [Main.class:?]
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_60]
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_60]
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_60]
 at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_60]
 at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
 at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
 at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) [start/:?]
 at GradleStart.main(Unknown Source) [start/:?]
[11:22:11] [Client thread/INFO] [STDOUT]: [net.minecraft.client.Minecraft:displayCrashReport:388]: ---- Minecraft Crash Report ----
// Daisy, daisy...

Time: 21.10.16 11:22
Description: Unexpected error

java.lang.ArrayIndexOutOfBoundsException: 0
 at net.minecraft.inventory.InventoryCrafting.setInventorySlotContents(InventoryCrafting.java:131)
 at net.minecraft.inventory.Slot.putStack(Slot.java:104)
 at net.minecraft.inventory.Container.putStacksInSlots(Container.java:558)
 at net.minecraft.client.network.NetHandlerPlayClient.handleWindowItems(NetHandlerPlayClient.java:1202)
 at net.minecraft.network.play.server.S30PacketWindowItems.processPacket(S30PacketWindowItems.java:70)
 at net.minecraft.network.play.server.S30PacketWindowItems.processPacket(S30PacketWindowItems.java:78)
 at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241)
 at net.minecraft.client.multiplayer.PlayerControllerMP.updateController(PlayerControllerMP.java:317)
 at net.minecraft.client.Minecraft.runTick(Minecraft.java:1693)
 at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039)
 at net.minecraft.client.Minecraft.run(Minecraft.java:962)
 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:135)
 at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
 at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source)
 at GradleStart.main(Unknown Source)


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- Head --
Stacktrace:
 at net.minecraft.inventory.InventoryCrafting.setInventorySlotContents(InventoryCrafting.java:131)
 at net.minecraft.inventory.Slot.putStack(Slot.java:104)
 at net.minecraft.inventory.Container.putStacksInSlots(Container.java:558)
 at net.minecraft.client.network.NetHandlerPlayClient.handleWindowItems(NetHandlerPlayClient.java:1202)
 at net.minecraft.network.play.server.S30PacketWindowItems.processPacket(S30PacketWindowItems.java:70)
 at net.minecraft.network.play.server.S30PacketWindowItems.processPacket(S30PacketWindowItems.java:78)
 at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241)
 at net.minecraft.client.multiplayer.PlayerControllerMP.updateController(PlayerControllerMP.java:317)

-- Affected level --
Details:
 Level name: MpServer
 All players: 1 total; [EntityClientPlayerMP['Player12'/388, l='MpServer', x=29,74, y=75,62, z=47,49]]
 Chunk stats: MultiplayerChunkCache: 164, 164
 Level seed: 0
 Level generator: ID 00 - default, ver 1. Features enabled: false
 Level generator options: 
 Level spawn location: World: (40,64,124), Chunk: (at 8,4,12 in 2,7; contains blocks 32,0,112 to 47,255,127), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,0,0 to 511,255,511)
 Level time: 422118 game time, 1000 day time
 Level dimension: 0
 Level storage version: 0x00000 - Unknown?
 Level weather: Rain time: 0 (now: false), thunder time: 0 (now: false)
 Level game mode: Game mode: survival (ID 0). Hardcore: false. Cheats: false
 Forced entities: 98 total; [EntitySheep['Овца'/269, l='MpServer', x=90,81, y=63,00, z=-7,31], EntitySheep['Овца'/270, l='MpServer', x=84,78, y=66,00, z=-6,94], EntityCreeper['Крипер'/271, l='MpServer', x=84,88, y=42,00, z=25,84], EntitySheep['Овца'/272, l='MpServer', x=94,69, y=71,00, z=20,16], EntitySheep['Овца'/273, l='MpServer', x=93,38, y=63,00, z=55,16], EntitySheep['Овца'/275, l='MpServer', x=85,47, y=65,00, z=112,09], EntitySkeleton['Скелет'/789, l='MpServer', x=8,50, y=51,00, z=5,50], EntityZombie['Зомби'/1050, l='MpServer', x=-36,50, y=45,00, z=96,50], EntityCreeper['Крипер'/1053, l='MpServer', x=-36,50, y=45,00, z=95,50], EntitySheep['Овца'/287, l='MpServer', x=105,38, y=71,00, z=-10,19], EntitySheep['Овца'/290, l='MpServer', x=107,72, y=65,00, z=61,63], EntitySheep['Овца'/291, l='MpServer', x=100,53, y=74,00, z=83,63], EntityZombie['Зомби'/831, l='MpServer', x=97,44, y=36,00, z=54,03], EntityPig['Свинья'/75, l='MpServer', x=-50,50, y=72,00, z=36,69], EntityPig['Свинья'/77, l='MpServer', x=-48,31, y=70,00, z=91,47], EntityZombie['Зомби'/1619, l='MpServer', x=69,50, y=31,00, z=56,50], EntityPig['Свинья'/91, l='MpServer', x=-42,06, y=70,00, z=2,50], EntityPig['Свинья'/92, l='MpServer', x=-40,91, y=70,00, z=6,97], EntityPig['Свинья'/93, l='MpServer', x=-31,31, y=73,00, z=27,50], EntityPig['Свинья'/94, l='MpServer', x=-39,69, y=70,00, z=17,50], EntityPig['Свинья'/95, l='MpServer', x=-33,91, y=72,00, z=37,78], EntityPig['Свинья'/96, l='MpServer', x=-34,09, y=71,00, z=32,28], EntityPig['Свинья'/98, l='MpServer', x=-32,81, y=76,00, z=49,13], EntityPig['Свинья'/100, l='MpServer', x=-41,97, y=82,00, z=78,50], EntitySkeleton['Скелет'/1645, l='MpServer', x=-44,06, y=35,00, z=81,50], EntitySkeleton['Скелет'/1646, l='MpServer', x=-39,91, y=36,00, z=89,50], EntitySkeleton['Скелет'/1647, l='MpServer', x=-40,50, y=35,00, z=82,50], EntityCreeper['Крипер'/1648, l='MpServer', x=-45,50, y=35,00, z=81,50], EntityCreeper['Крипер'/1649, l='MpServer', x=-44,50, y=35,00, z=80,50], EntityCreeper['Крипер'/1650, l='MpServer', x=-49,03, y=36,00, z=82,50], EntitySkeleton['Скелет'/1651, l='MpServer', x=-42,50, y=35,00, z=85,16], EntitySkeleton['Скелет'/123, l='MpServer', x=-29,72, y=19,00, z=-1,25], EntitySkeleton['Скелет'/891, l='MpServer', x=7,50, y=58,00, z=14,50], EntitySkeleton['Скелет'/893, l='MpServer', x=9,50, y=58,00, z=13,50], EntityPig['Свинья'/127, l='MpServer', x=-28,19, y=69,00, z=6,88], EntityPig['Свинья'/128, l='MpServer', x=-16,91, y=78,00, z=26,81], EntityPig['Свинья'/129, l='MpServer', x=-15,97, y=80,00, z=32,53], EntityPig['Свинья'/130, l='MpServer', x=-22,81, y=79,00, z=40,59], EntityClientPlayerMP['Player12'/388, l='MpServer', x=29,74, y=75,62, z=47,49], EntitySheep['Овца'/133, l='MpServer', x=-29,91, y=70,00, z=104,97], EntityZombie['Зомби'/1414, l='MpServer', x=50,50, y=37,00, z=60,50], EntityPainting['Картина'/177, l='MpServer', x=14,50, y=77,50, z=50,94], EntityPainting['Картина'/178, l='MpServer', x=12,50, y=77,50, z=50,94], EntityPainting['Картина'/174, l='MpServer', x=11,06, y=76,50, z=47,50], EntityPainting['Картина'/175, l='MpServer', x=13,50, y=77,00, z=44,06], EntityPig['Свинья'/142, l='MpServer', x=-6,94, y=67,00, z=-13,88], EntityPig['Свинья'/143, l='MpServer', x=-7,47, y=76,47, z=4,38], EntityPig['Свинья'/144, l='MpServer', x=-9,03, y=81,00, z=10,09], EntityPig['Свинья'/145, l='MpServer', x=-14,09, y=82,00, z=25,75], EntityPig['Свинья'/146, l='MpServer', x=-4,34, y=74,00, z=80,53], EntityItemFrame['entity.ItemFrame.name'/148, l='MpServer', x=-1,50, y=72,50, z=114,94], EntityItemFrame['entity.ItemFrame.name'/149, l='MpServer', x=-2,50, y=72,50, z=114,94], EntityItemFrame['entity.ItemFrame.name'/150, l='MpServer', x=-3,50, y=72,50, z=114,94], EntityItemFrame['entity.ItemFrame.name'/151, l='MpServer', x=-5,50, y=72,50, z=114,94], EntityItemFrame['entity.ItemFrame.name'/152, l='MpServer', x=-0,50, y=70,50, z=138,94], EntityItemFrame['entity.ItemFrame.name'/153, l='MpServer', x=-0,50, y=71,50, z=138,94], EntityItemFrame['entity.ItemFrame.name'/154, l='MpServer', x=-1,50, y=71,50, z=138,94], EntityItemFrame['entity.ItemFrame.name'/155, l='MpServer', x=-1,50, y=70,50, z=138,94], EntityZombie['Зомби'/1440, l='MpServer', x=70,50, y=23,00, z=94,50], EntityPig['Свинья'/169, l='MpServer', x=2,69, y=77,00, z=-2,50], EntityPig['Свинья'/170, l='MpServer', x=11,81, y=77,00, z=0,94], EntityPig['Свинья'/171, l='MpServer', x=-10,06, y=80,00, z=19,06], EntityPig['Свинья'/172, l='MpServer', x=12,91, y=85,00, z=15,91], EntityPig['Свинья'/173, l='MpServer', x=9,22, y=85,00, z=16,34], EntityPainting['Картина'/174, l='MpServer', x=11,06, y=76,50, z=47,50], EntityPainting['Картина'/175, l='MpServer', x=13,50, y=77,00, z=44,06], EntitySkeleton['Скелет'/687, l='MpServer', x=85,50, y=12,00, z=65,50], EntityItemFrame['entity.ItemFrame.name'/176, l='MpServer', x=15,94, y=76,50, z=47,50], EntityPainting['Картина'/177, l='MpServer', x=14,50, y=77,50, z=50,94], EntityPainting['Картина'/178, l='MpServer', x=12,50, y=77,50, z=50,94], EntityItemFrame['entity.ItemFrame.name'/179, l='MpServer', x=13,50, y=80,50, z=50,94], EntityItemFrame['entity.ItemFrame.name'/180, l='MpServer', x=5,50, y=70,50, z=138,94], EntityItemFrame['entity.ItemFrame.name'/181, l='MpServer', x=4,50, y=70,50, z=138,94], EntityItemFrame['entity.ItemFrame.name'/182, l='MpServer', x=3,50, y=70,50, z=138,94], EntityItemFrame['entity.ItemFrame.name'/183, l='MpServer', x=2,50, y=70,50, z=138,94], EntityItemFrame['entity.ItemFrame.name'/184, l='MpServer', x=4,50, y=71,50, z=138,94], EntitySkeleton['Скелет'/1464, l='MpServer', x=106,72, y=33,00, z=58,22], EntityItemFrame['entity.ItemFrame.name'/185, l='MpServer', x=5,50, y=71,50, z=138,94], EntityItemFrame['entity.ItemFrame.name'/186, l='MpServer', x=2,50, y=71,50, z=138,94], EntityItemFrame['entity.ItemFrame.name'/187, l='MpServer', x=3,50, y=71,50, z=138,94], EntityItemFrame['entity.ItemFrame.name'/188, l='MpServer', x=1,50, y=71,50, z=138,94], EntityItemFrame['entity.ItemFrame.name'/189, l='MpServer', x=1,50, y=70,50, z=138,94], EntityItemFrame['entity.ItemFrame.name'/190, l='MpServer', x=0,50, y=71,50, z=138,94], EntityItemFrame['entity.ItemFrame.name'/191, l='MpServer', x=0,50, y=70,50, z=138,94], EntityPig['Свинья'/200, l='MpServer', x=24,03, y=77,00, z=6,38], EntityItemFrame['entity.ItemFrame.name'/202, l='MpServer', x=24,50, y=71,50, z=124,94], EntityZombie['Зомби'/1738, l='MpServer', x=88,50, y=45,00, z=97,50], EntityPig['Свинья'/210, l='MpServer', x=40,88, y=71,00, z=-5,19], EntityPig['Свинья'/214, l='MpServer', x=38,84, y=73,00, z=45,09], EntityPig['Свинья'/224, l='MpServer', x=53,06, y=71,00, z=-2,06], EntityPig['Свинья'/225, l='MpServer', x=53,97, y=73,00, z=14,84], EntitySkeleton['Скелет'/1764, l='MpServer', x=-2,50, y=25,00, z=24,50], EntitySkeleton['Скелет'/1766, l='MpServer', x=-3,50, y=25,00, z=22,50], EntityPig['Свинья'/246, l='MpServer', x=69,06, y=63,00, z=58,03], EntityPig['Свинья'/247, l='MpServer', x=67,47, y=63,00, z=58,47], EntityPig['Свинья'/251, l='MpServer', x=64,19, y=68,00, z=90,50], EntitySheep['Овца'/253, l='MpServer', x=71,88, y=66,00, z=121,25], EntitySheep['Овца'/255, l='MpServer', x=69,06, y=65,00, z=125,09]]
 Retry entities: 0 total; []
 Server brand: fml,forge
 Server type: Integrated singleplayer server
Stacktrace:
 at net.minecraft.client.multiplayer.WorldClient.addWorldInfoToCrashReport(WorldClient.java:415)
 at net.minecraft.client.Minecraft.addGraphicsAndWorldToCrashReport(Minecraft.java:2566)
 at net.minecraft.client.Minecraft.run(Minecraft.java:991)
 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:135)
 at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
 at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source)
 at GradleStart.main(Unknown Source)

-- System Details --
Details:
 Minecraft Version: 1.7.10
 Operating System: Windows 7 (amd64) version 6.1
 Java Version: 1.8.0_60, Oracle Corporation
 Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
 Memory: 1952093736 bytes (1861 MB) / 2112618496 bytes (2014 MB) up to 2112618496 bytes (2014 MB)
 JVM Flags: 3 total; -Xincgc -Xmx2048M -Xms2048M
 AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
 IntCache: cache: 0, tcache: 0, allocated: 13, tallocated: 95
 FML: MCP v9.05 FML v7.10.99.99 Minecraft Forge 10.13.4.1564 8 mods loaded, 8 mods active
 States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored
 UCHIJAAAA mcp{9.05} [Minecraft Coder Pack] (minecraft.jar) 
 UCHIJAAAA FML{7.10.99.99} [Forge Mod Loader] (forgeSrc-1.7.10-10.13.4.1564-1.7.10.jar) 
 UCHIJAAAA Forge{10.13.4.1564} [Minecraft Forge] (forgeSrc-1.7.10-10.13.4.1564-1.7.10.jar) 
 UCHIJAAAA lwm3{1.8.x (v1.0.4-indev)} [LWMod: Core] (bin) 
 UCHIJAAAA lwm2{1.8.x (v1.0.4-indev)} [LWMod: SoulPearl] (bin) 
 UCHIJAAAA lwm4{1.8.x (v1.0.4-indev)} [LWMod: Event] (bin) 
 UCHIJAAAA lwm5{1.8.x (v1.0.4-indev)} [LWMod: Farm] (bin) 
 UCHIJAAAA legendarymod{1.8.x (v1.0.4-indev)} [LWMod: Tools] (bin) 
 GL info: ' Vendor: 'Intel' Version: '4.0.0 - Build 10.18.10.4276' Renderer: 'Intel(R) HD Graphics 4000'
 Launched Version: 1.7.10
 LWJGL: 2.9.1
 OpenGL: Intel(R) HD Graphics 4000 GL version 4.0.0 - Build 10.18.10.4276, Intel
 GL Caps: Using GL 1.3 multitexturing.
Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported.
Anisotropic filtering is supported and maximum anisotropy is 16.
Shaders are available because OpenGL 2.1 is supported.

 Is Modded: Definitely; Client brand changed to 'fml,forge'
 Type: Client (map_client.txt)
 Resource Packs: [RUS_172_bold]
 Current Language: Русский (Россия)
 Profiler Position: N/A (disabled)
 Vec3 Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
 Anisotropic Filtering: Off (1)
[11:22:11] [Client thread/INFO] [STDOUT]: [net.minecraft.client.Minecraft:displayCrashReport:398]: #@!@# Game crashed! Crash report saved to: #@!@# C:\DevMine\eclipse\.\crash-reports\crash-2016-10-21_11.22.11-client.txt
Java HotSpot(TM) 64-Bit Server VM warning: Using incremental CMS is deprecated and will likely be removed in a future release

Открываю вот так
Код:
public class GuiHandler implements IGuiHandler{

 @Override
 public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
 TileEntity entity = world.getTileEntity(x, y, z);
 
 if(ID == ModBlocks.guiIDPerlTable) {
 return ID == ModBlocks.guiIDPerlTable && world.getBlock(x, y, z) == ModBlocks.blockPerlTable ? new containerPerlTable(player.inventory, world, x, y, z) : null;
 }
 return null;
 }

 @Override
 public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
 TileEntity entity = world.getTileEntity(x, y, z);
 if (ID == ModBlocks.guiIDPerlTable) {
 return ID == ModBlocks.guiIDPerlTable && world.getBlock(x, y, z) == ModBlocks.blockPerlTable ? new guiPerlTable(player.inventory, world, x, y, z) : null;
 }
 return null;
 }

}
 
Решил взять GUI и Контейнер Наковальни.
Интересное дело, во время дебага все работает, а стоит отключить дебаг и гуи закрывается через полсекунды после открытия
 
Народ, подскажите в чём беда?
Проблема такая же, что описана выше, правда версия 1.10.2...
Открываю гуи, но через мгновение после открытия оно закрывается...
Что не так?
Handler регистрирую в коммон прокси:
Код:
NetworkRegistry.INSTANCE.registerGuiHandler(Mist.instance, new GuiHandler());

Внутри всё по стандарту:
Код:
public class GuiHandler implements IGuiHandler {

 @Override
 public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
 switch(ID) {
 case 0: return new ContainerR(player.inventory);
 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 GuiR(player.inventory);
 default: return null;
 }
 }
}

Вызываю так:
Код:
player.openGui((Object)Mist.instance, 0, player.worldObj, MathHelper.floor_double(player.posX), MathHelper.floor_double(player.posY), MathHelper.floor_double(player.posZ));

Сама гуиха:
Код:
@SideOnly(Side.CLIENT)
public class GuiR extends GuiContainer {

 private static final ResourceLocation guiTextures = new ResourceLocation("mist:textures/gui/container/R.png");

 public GuiR(InventoryPlayer inventory) {
 super(new ContainerR(inventory));
 }

 @Override
 protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) {
        this.mc.getTextureManager().bindTexture(guiTextures);
 GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
 this.guiLeft = (this.width - this.xSize) / 2;
 this.guiTop = (this.height - this.ySize) / 2;
 drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.height);
 }
}
 
не знаю. чем помочь с закрытием... вроде код нормальный. я с ходу косяков не вижу.
в ответ автору темы: краш можетбыть от совпадения слотов. т. е. 2 ячейки контецнера к 1 итемстаку привязываешь. у меня например 5 слотов в гуи и масив итемстаков в тайле. я каждый слот к отдельному стаку привязываю. это проверь. и скинь крашлог. ну это если ты решишь по тому гайду делать. а с причинлй закрыти гуи подумаю. сам с ней не сталкивался. либо крашилось либо просто не открывалось всегда.
 
(@)Liahim, попробуй в onBlockActivated делать через
if(!world.isRemote) player.openGui(EasyTeleport.instance, GuiProxy.TC_ID, world, pos.getX(), pos.getY(), pos.getZ());
(@)Ainor, одни из "последних" сообщений в теме идут аж в 10 месяца 2016 года. Вроде-бы за это время все решилось.
 
автору темы. увидел крашлог. ошибка с индексов масива. а тайл нужен всеравно. с ним правильнее. проще обрабатывать закрытие гуи и дропать вещи. а вообще хранаюящий вещи верстак удобнее.


ну как бы решения нет и вдруг всеравно надо. ну и ядату не увидел)))


Doc написал(а):
(@)Liahim, попробуй в onBlockActivated делать через
if(!world.isRemote) player.openGui(EasyTeleport.instance, GuiProxy.TC_ID, world, pos.getX(), pos.getY(), pos.getZ());
(@)Ainor, одни из "последних" сообщений в теме идут аж в 10 месяца 2016 года. Вроде-бы за это время все решилось.

кстати. да. у меня везде проверка! world.isRemote
 
Пока он почти пустой:
Код:
public class ContainerR extends Container {

//public InventoryCrafting containerInv = new InventoryCrafting(this, 2, 2); 

 public ContainerRespirator(InventoryPlayer inventory) {
//this.addSlotToContainer(new SlotR(containerInv, 0, 44, 53));
 int row;
 int col;
        for (row = 0; row < 3; ++row) {
            for (col = 0; col < 9; ++col) {
                this.addSlotToContainer(new Slot(inventory, col + row * 9 + 9, 8 + col * 18, 84 + row * 18));
            }
        }
        for (row = 0; row < 9; ++row) {
            this.addSlotToContainer(new Slot(inventory, row, 8 + row * 18, 142));
        }
 }

 @Override
 public boolean canInteractWith(EntityPlayer playerIn) {
 // TODO Auto-generated method stub
 return false;
 }
}
Пробовал просто добавлять ванильный инвентарь...
 
Liahim написал(а):
Код:
 @Override
 public boolean canInteractWith(EntityPlayer playerIn) {
 // TODO Auto-generated method stub
 return false;
 }
}
Не false, а true. Или иначе он так и будет у тебя на мгновение высвечиваться.
 
Кстати, если это поможет, при открытии гуи он у меня ругался на Mist.instance.
Требовал перевести её в Object. Пришлось конвертировать.
Код:
player.openGui((Object)Mist.instance, 0, player.worldObj, MathHelper.floor_double(player.posX), MathHelper.floor_double(player.posY), MathHelper.floor_double(player.posZ));


timaxa007 написал(а):

Чо, серьёзно?
От блин!
Из-за такой мелочи?
Что это за метод такой?

Всё заработало )))
 
Liahim написал(а):
Чо, серьёзно?
От блин!
Из-за такой мелочи?
Может быть, но это одна из причин.

Liahim написал(а):
Что это за метод такой?
Нужно возвращать значение true если игрок может взаимодействовать с этим контейнером. Если false, то не может взаимодействовать с этим контейнером и через тик должен закрыться контейнер с GUI (типа игрок слишком далеко от этого контейнера или по другим причинам).

Liahim написал(а):
Всё заработало )))
Хорошо. Пожалуйста.
 
Назад
Сверху