[En Attente] [1.7.10] probleme ouverture gui

Besoin d'aide ? c'est par ici ;)
Règles du forum
[En Attente] - Qui est défini par défaut à l'ouverture de la demande d'aide
[En Cours] - Qui est à mettre lorsque vous venez d'avoir une réponse à votre demande d'aide
[Résolu] - Qui est à mettre lorsque votre problème est résolu
Merci de respecter ce modèle pour toutes demandes d'assistances !
Merci de mettre votre code dans les balises code prévus à cet effet, icon </>
Version de Minecraft:
Version de Forge: (Il s'agit du numéro de version indiqué sur le nom de votre dossier forge téléchargé)

Description du problème:
(Un maximum d'informations sera utile, quel code fait crash ?, quand cela ce produit ?, ne pas hésiter à mettre des captures d'écran et fichiers de log en pièces jointes)
Répondre
ZunF1x
Messages : 19
Inscription : 24 avr. 2021 19:02

[1.7.10] probleme ouverture gui

Message par ZunF1x »

Bonsoir, j'ai créé une machine en 1.7.10 et quand je clique dessus, il y a l'action d'ouverture mais pas de gui apparante, voici mon code:

tile entity:

Code : Tout sélectionner

package fr.zunf1x.energy.tileentity;

import cofh.api.energy.EnergyStorage;
import fr.zunf1x.energy.core.energy.TileEnergized;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;

public class TileEntityCoalGenerator extends TileEntity implements IInventory {

	private ItemStack[] contents = new ItemStack[4];
	private int workingTime = 0; //Temps de cuisson actuel
	private int workingTimeNeeded = 200; //Temps de cuisson nécessaire
	
    @Override
    public void writeToNBT(NBTTagCompound compound)
    {
        super.writeToNBT(compound);
        NBTTagList nbttaglist = new NBTTagList();
 
        for (int i = 0; i < this.contents.length; ++i) //pour les slots
        {
            if (this.contents[i] != null)
            {
                NBTTagCompound nbttagcompound1 = new NBTTagCompound();
                nbttagcompound1.setByte("Slot", (byte)i);
                this.contents[i].writeToNBT(nbttagcompound1);
                nbttaglist.appendTag(nbttagcompound1);
            }
        }
 
        compound.setTag("Items", nbttaglist);
        compound.setShort("workingTime",(short)this.workingTime); //On les enregistrent en short
        compound.setShort("workingTimeNeeded", (short)this.workingTimeNeeded);
    }
    
    @Override
    public void readFromNBT(NBTTagCompound compound)
    {
        super.readFromNBT(compound);
 
        NBTTagList nbttaglist = compound.getTagList("Items", 10);
        this.contents = new ItemStack[this.getSizeInventory()];
 
        for (int i = 0; i < nbttaglist.tagCount(); ++i) //Encore une fois pour les slots
        {
            NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i);
            int j = nbttagcompound1.getByte("Slot") & 255;
 
            if (j >= 0 && j < this.contents.length)
            {
                this.contents[j] = ItemStack.loadItemStackFromNBT(nbttagcompound1);
            }
        }
 
        this.workingTime = compound.getShort("workingTime"); //On lit nos valeurs
        this.workingTimeNeeded = compound.getShort("workingTimeNeeded");
    }
    
    @Override
    public int getSizeInventory() { //Tout est dans le nom, retourne la taille de l'inventaire, pour notre bloc c'est quatre
        return this.contents.length;
    }
    
    @Override
    public ItemStack getStackInSlot(int slotIndex) { //Renvoie L'itemStack se trouvant dans le slot passé en argument
        return this.contents[slotIndex];
    }
    
    @Override //Comme dit plus haut, c'est expliqué dans le tutoriel de robin
    public ItemStack decrStackSize(int slotIndex, int amount) {
            if (this.contents[slotIndex] != null)
            {
                ItemStack itemstack;
 
                if (this.contents[slotIndex].stackSize <= amount)
                {
                    itemstack = this.contents[slotIndex];
                    this.contents[slotIndex] = null;
                    this.markDirty();
                    return itemstack;
                }
                else
                {
                    itemstack = this.contents[slotIndex].splitStack(amount);
 
                    if (this.contents[slotIndex].stackSize == 0)
                    {
                        this.contents[slotIndex] = null;
                    }
 
                    this.markDirty();
                    return itemstack;
                }
            }
            else
            {
                return null;
            }
    }
 
    @Override
    public ItemStack getStackInSlotOnClosing(int slotIndex) {
        if (this.contents[slotIndex] != null)
        {
            ItemStack itemstack = this.contents[slotIndex];
            this.contents[slotIndex] = null;
            return itemstack;
        }
        else
        {
            return null;
        }
    }
 
    @Override
    public void setInventorySlotContents(int slotIndex, ItemStack stack) {
        this.contents[slotIndex] = stack;
 
        if (stack != null && stack.stackSize > this.getInventoryStackLimit())
        {
            stack.stackSize = this.getInventoryStackLimit();
        }
 
        this.markDirty();
    }
 
    @Override
    public String getInventoryName() { //J'ai décider qu'on ne pouvait pas mettre de nom custom
        return "tile.machineTuto";
    }
 
    @Override
    public boolean hasCustomInventoryName() {
        return false;
    }
 
    @Override
    public int getInventoryStackLimit() {
        return 64;
    }
 
    @Override
    public boolean isUseableByPlayer(EntityPlayer player) {
        return this.worldObj.getTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : player.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D;
    }
 
    @Override
    public void openInventory() {
 
    }
 
    @Override
    public void closeInventory() {
 
    }
 
    @Override
    public boolean isItemValidForSlot(int slot, ItemStack stack) {
        return slot == 3 ? false : true;
    }
    
    public boolean isBurning()
    {
        return this.workingTime > 0;
    }
    
    private boolean canSmelt()
    {
        if (this.contents[0] == null || this.contents[1] == null || this.contents[2] == null) //Si les trois premiers slots sont vides
        {
            return false; //On ne peut pas lancer le processus
        }
        else
        {
            ItemStack itemstack = MachineTutoRecipes.smelting().getSmeltingResult(new ItemStack[]{this.contents[0], this.contents[1], this.contents[2]}); //Il y a une erreur ici, c'est normal, on y vient après (c'est pour les recettes)
            if (itemstack == null) return false; //rapport avec les recettes
            if (this.contents[3] == null) return true; //vérifications du slot d'output
            if (!this.contents[3].isItemEqual(itemstack)) return false; //ici aussi
            int result = contents[3].stackSize + itemstack.stackSize;
            return result <= getInventoryStackLimit() && result <= this.contents[3].getMaxStackSize(); //Et là aussi décidément
        }
    }
    
    public void updateEntity() //Méthode exécutée à chaque tick
    {
        if(this.isBurning() && this.canSmelt()) //Si on "cuit" et que notre recette et toujours bonne, on continue
        {
            ++this.workingTime; //incrémentation
        }
        if(this.canSmelt() && !this.isBurning()) //Si la recette est bonne mais qu'elle n'est toujours pas lancée, on la lance
        {
            this.workingTime = 1; //La méthode isBurning() renverra true maintenant (1>0)
        }
        if(this.canSmelt() && this.workingTime == this.workingTimeNeeded) //Si on est arrivé au bout du temps de cuisson et que la recette est toujours bonne
        {
            this.smeltItem(); //on "cuit" les items
            this.workingTime = 0; //et on réinitialise le temps de cuisson
        }
        if(!this.canSmelt()) //Si la recette la recette n'est plus bonne
        {
                this.workingTime= 0; //le temps de cuisson est de 0
        }
    }
    
    public void smeltItem()
    {
        if (this.canSmelt())
        {
            ItemStack itemstack = MachineTutoRecipes.smelting().getSmeltingResult(new ItemStack[]{this.contents[0], this.contents[1], this.contents[2]}); //On récupère l'output de la recette
            if (this.contents[3] == null) //Si il y a rien dans le slot d'output
            {
                this.contents[3] = itemstack.copy(); //On met directement l'ItemStack
            }
            else if (this.contents[3].getItem() == itemstack.getItem()) //Et si l'item que l'on veut est le même que celui qu'il y a déjà
            {
                this.contents[3].stackSize += itemstack.stackSize; // Alors ont incrémente l'ItemStack
            }
 
            --this.contents[0].stackSize; //On décrémente les slots d'input
            --this.contents[1].stackSize;
            --this.contents[2].stackSize;
 
            if (this.contents[0].stackSize <= 0) //Si les slots sont vides, on remet à null le slot
            {
                this.contents[0] = null;
            }
            if (this.contents[1].stackSize <= 0)
            {
                this.contents[1] = null;
            }
            if (this.contents[2].stackSize <= 0)
            {
                this.contents[2] = null;
            }
        }
    }
    
    
}
gui:

Code : Tout sélectionner

package fr.zunf1x.energy.tileentity;

import org.lwjgl.opengl.GL11;

import fr.zunf1x.energy.Energy;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.util.ResourceLocation;

public class GuiCoalGenerator extends GuiContainer {
	 
    private static final ResourceLocation texture = new ResourceLocation(Energy.MODID, "textures/gui/container/coal_generator.png");
    private TileEntityCoalGenerator tileMachineTuto;
    private IInventory playerInv;
 
    public GuiCoalGenerator(TileEntityCoalGenerator tile, InventoryPlayer inventory)
    {
        super(new ContainerCoalGenerator(tile, inventory));
        this.tileMachineTuto = tile;
        this.playerInv = inventory;
        this.allowUserInput = false;
        this.ySize = 256;
        this.xSize = 256;
    }
 
    @Override
    protected void drawGuiContainerBackgroundLayer(float partialRenderTick, int x, int y)
    {
 
        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
        this.mc.getTextureManager().bindTexture(texture);
        int k = (this.width - this.xSize) / 2;
        int l = (this.height - this.ySize) / 2;
        this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize);
        this.drawTexturedModalRect(0, 0, 176, 14, 100 + 1, 16);
 
    }
 
    protected void drawGuiContainerForegroundLayer(int x, int y)
    {
        this.fontRendererObj.drawString(this.playerInv.hasCustomInventoryName() ? this.playerInv.getInventoryName() : I18n.format(this.playerInv.getInventoryName()), 10, this.ySize - 98, 4210752);
    }
 
}
container:

Code : Tout sélectionner

package fr.zunf1x.energy.tileentity;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;

public class ContainerCoalGenerator extends Container {

	private TileEntityCoalGenerator tileMachineTuto;
	
    public ContainerCoalGenerator(TileEntityCoalGenerator tile, InventoryPlayer inventory)
    {
        this.tileMachineTuto = tile;
        this.addSlotToContainer(new Slot(tile, 0, 49, 75)); //Lancez votre jeu en debug pour calibrer vos slots
        this.addSlotToContainer(new Slot(tile, 1, 89, 75));
        this.addSlotToContainer(new Slot(tile, 2, 129, 75));
        this.addSlotToContainer(new SlotResult(tile, 3, 89, 135)); //Ici c'est un slot que j'ai créer, on le fera après
        this.bindPlayerInventory(inventory); //Les containers ont été vus dans un tutoriel de robin, merci de d'y référer
    }
    
    @Override
    public boolean canInteractWith(EntityPlayer player) {
        return this.tileMachineTuto.isUseableByPlayer(player);
    }
 
    private void bindPlayerInventory(InventoryPlayer inventory)
    {
        int i;
        for (i = 0; i < 3; ++i)
        {
            for (int j = 0; j < 9; ++j)
            {
                this.addSlotToContainer(new Slot(inventory, j + i * 9 + 9, 17 + j * 18, 171 + i * 18));
            }
        }
 
        for (i = 0; i < 9; ++i)
        {
            this.addSlotToContainer(new Slot(inventory, i, 17 + i * 18, 229));
        }
    }
 
    public ItemStack transferStackInSlot(EntityPlayer player, int quantity)
    {
        ItemStack itemstack = null;
        Slot slot = (Slot)this.inventorySlots.get(quantity);
 
        if (slot != null && slot.getHasStack())
        {
            ItemStack itemstack1 = slot.getStack();
            itemstack = itemstack1.copy();
 
            if (quantity < this.tileMachineTuto.getSizeInventory())
            {
                if (!this.mergeItemStack(itemstack1, this.tileMachineTuto.getSizeInventory(), this.inventorySlots.size(), true))
                {
                    return null;
                }
            }
            else if (!this.mergeItemStack(itemstack1, 0, this.tileMachineTuto.getSizeInventory(), false))
            {
                return null;
            }
 
            if (itemstack1.stackSize == 0)
            {
                slot.putStack((ItemStack)null);
            }
            else
            {
                slot.onSlotChanged();
            }
        }
 
        return itemstack;
    }
 
    public void onContainerClosed(EntityPlayer player)
    {
        super.onContainerClosed(player);
        this.tileMachineTuto.closeInventory();
    }
    
    public class SlotResult extends Slot {
    	 
        public SlotResult(IInventory inventory, int id, int x, int y)
        {
            super(inventory, id, x, y);
        }
     
        @Override
        public boolean isItemValid(ItemStack stack) //Interdit la pose d'items dans le slot
        {
            return false;
        }
     
        public ItemStack decrStackSize(int amount)
        {
            return super.decrStackSize(amount);
        }
     
        public void onPickupFromSlot(EntityPlayer player, ItemStack stack)
        {
            super.onCrafting(stack);
            super.onPickupFromSlot(player, stack);
        }
    }
}
block:

Code : Tout sélectionner

package fr.zunf1x.energy.blocks;

import fr.zunf1x.energy.Energy;
import fr.zunf1x.energy.tileentity.TileEntityCoalGenerator;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;

public class BlockCoalGenerator extends BlockContainer {

	public BlockCoalGenerator() {
		super(Material.iron);

		setBlockName("coal_generator");
		setBlockTextureName(Energy.MODID + ":coal_generator");
		setCreativeTab(CreativeTabs.tabBlock);
	}
	
	@Override
	public TileEntity createNewTileEntity(World world, int metadata) {
		return new TileEntityCoalGenerator();
	}
	
	@Override
	public boolean hasTileEntity(int metadata) {
		return true;
	}
	
	public void breakBlock(World world, int x, int y, int z, Block block, int metadata)
    {
        TileEntity tileentity = world.getTileEntity(x, y, z);
 
                if (tileentity instanceof IInventory)
                {
                    IInventory inv = (IInventory)tileentity;
                    for (int i1 = 0; i1 < inv.getSizeInventory(); ++i1)
                    {
                        ItemStack itemstack = inv.getStackInSlot(i1);
 
                        if (itemstack != null)
                        {
                            float f = world.rand.nextFloat() * 0.8F + 0.1F;
                            float f1 = world.rand.nextFloat() * 0.8F + 0.1F;
                            EntityItem entityitem;
 
                            for (float f2 = world.rand.nextFloat() * 0.8F + 0.1F; itemstack.stackSize > 0; world.spawnEntityInWorld(entityitem))
                            {
                                int j1 = world.rand.nextInt(21) + 10;
 
                                if (j1 > itemstack.stackSize)
                                {
                                    j1 = itemstack.stackSize;
                                }
 
                                itemstack.stackSize -= j1;
                                entityitem = new EntityItem(world, (double)((float)x + f), (double)((float)y + f1), (double)((float)z + f2), new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage()));
                                float f3 = 0.05F;
                                entityitem.motionX = (double)((float)world.rand.nextGaussian() * f3);
                                entityitem.motionY = (double)((float)world.rand.nextGaussian() * f3 + 0.2F);
                                entityitem.motionZ = (double)((float)world.rand.nextGaussian() * f3);
 
                                if (itemstack.hasTagCompound())
                                {
                                    entityitem.getEntityItem().setTagCompound((NBTTagCompound)itemstack.getTagCompound().copy());
                                }
                            }
                        }
                    }
 
                world.func_147453_f(x, y, z, block);
            }
 
        super.breakBlock(world, x, y, z, block, metadata);
    }
	
    public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitx, float hity, float hitz)
    {
        if (world.isRemote)
        {
            return true;
        }
        else
        {
            player.openGui(Energy.instance, 0, world, x, y, z);
            return true;
        }
    }
}
classe principale:

Code : Tout sélectionner

package fr.zunf1x.energy;

import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.Mod.Instance;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.common.registry.GameRegistry;
import fr.zunf1x.energy.init.ModBlocks;
import fr.zunf1x.energy.proxy.CommonProxy;
import fr.zunf1x.energy.tileentity.TileEntityCoalGenerator;
import vazkii.botania.common.network.GuiHandler;

@Mod(modid = Energy.MODID, name = Energy.NAME, version = Energy.VERSION, dependencies = "required-after:ThermalExpansion;after:Avaritia;after:DraconicEvolution;after:Botania")
public class Energy {
	
	public static final String MODID = "energy";
	public static final String NAME = "Energy";
	public static final String VERSION = "1.0.0";
	
	@Instance(Energy.MODID)
	public static Energy instance;
	
	@SidedProxy(clientSide = "fr.zunf1x.energy.proxy.ClientProxy", serverSide = "fr.zunf1x.energy.proxy.ServerProxy")
	public static CommonProxy proxy;
	
	@EventHandler
	public void preInit(FMLPreInitializationEvent e) {
		proxy.preInit();
		
		ModBlocks.init();
		
		GameRegistry.registerTileEntity(TileEntityCoalGenerator.class, "energy:tileentitycoalgenerator");
	}
	
	@EventHandler
	public void init(FMLInitializationEvent e) {
		proxy.init();
		
		NetworkRegistry.INSTANCE.registerGuiHandler(Energy.instance, new GuiHandler());
	}
	
	@EventHandler
	public void postInit(FMLPostInitializationEvent e) {
		proxy.postInit();
	}
}
merci de m'aider car la je bloque 100%
Répondre