Une question sur les backpacks



  • Bonjour j'ais réaliser le tuto de scarex sur les backpacks (qui est un exellent tuto, https://www.minecraftforgefrance.fr/showthread.php?tid=2197) et j'aimerais savoir deux choses dessus.

    1.Je voudrais savoir comment modifier le gui pour qu'il y est par exemple que 4 slots. Je pense que c'est à ce niveaux :

    public class ContainerBackPack extends Container{
    public InventoryBackPack invBackpack;
    public int rows;
    
    public ContainerBackPack(InventoryPlayer playerInv, InventoryBackPack inv) {
    this.invBackpack = inv;
    this.rows = inv.getSizeInventory() / 9;
    int i = (this.rows - 4) * 18;
    int j;
    int k;
    
    // Juste aprés
    for (j = 0; j < this.rows; ++j) {
    for (k = 0; k < 9; ++k) {
    this.addSlotToContainer(new SlotBackPack(inv, k + j * 9, 8 + k * 18, 18 + j * 18));
    }
    }
    

    Mais je ne comprends pas les valeurs K et J utilisé.

    2. Je souhaiterais savoir comment changé le nom du gui lorsque le joueur l'ouvre ( Ce qui est marqué au dessus des slots dans le gui ) j'ais essayé de mettre ce qui est écrit dans le fichier lang comme pour les items mais cela ne fonctionne apparement pas.

    Ps : en piéce jointe il y a une image du 'nom du gui' dont je parle



  • Ce n'est pas très compliqué, remplaces j par y et k par x, tu comprendras mieux le système ^^, mais n'oublie pas de changer la taille de ton tableau de stack dans la classe InventoryBackPack.
    Pour le titre du gui, montre la ligne où tu dessines le titre, il doit manquer l'appel de la fonction qui traduit.



  • Dans mon tutoriel je montrais comment faire un backpack mais de façon général comment afficher un gui et un container grâce à un item : il te faut ajouter tes 4 slots dans ton container de la manière que tu veux et dans le Gui soit tu n'as pas traduit le texte, soit dans le code il manque la partie où le texte est traduit.

    Pour ce qui est des valeurs j et k : j représente le nombre de lignes et k le nombre de colonnes.



  • @'AymericRed':

    Ce n'est pas très compliqué, remplaces j par y et k par x, tu comprendras mieux le système ^^, mais n'oublie pas de changer la taille de ton tableau de stack dans la  classe InventoryBackPack.
    Pour le titre du gui, montre la ligne où tu dessines le titre, il doit manquer l'appel  de la fonction qui traduit.

    Je pense qu'il s'agit de cette classe :

    package fr.extazilia.extaziliamod.common.sac;
    
    import org.lwjgl.opengl.GL11;
    
    import net.minecraft.client.gui.inventory.GuiContainer;
    import net.minecraft.client.resources.I18n;
    import net.minecraft.entity.player.InventoryPlayer;
    import net.minecraft.util.ResourceLocation;
    
    public class GuiBackPack extends GuiContainer
    {
    public static final ResourceLocation texture = new ResourceLocation("textures/gui/container/generic_54.png");
    protected InventoryBackPack inv2;
    protected InventoryPlayer playerinv2;
    public int rows;
    
    public GuiBackPack(InventoryPlayer playerInv, InventoryBackPack inv) {
    
    super(new ContainerBackPack(playerInv, inv));
    this.playerinv2 = playerInv;
    this.inv2 = inv;
    this.allowUserInput = false;
    // Calculate the number of rows
    this.rows = inv.getSizeInventory() / 9;
    // Height of the GUI using the number of rows
    this.ySize = 114 + this.rows * 18;
    }
    
    @Override
    protected void drawGuiContainerForegroundLayer(int x, int y) {
    this.fontRendererObj.drawString(I18n.format(this.inv2.getInventoryName(), new Object[0]), 8, 6, 4210752);
    this.fontRendererObj.drawString(this.playerinv2.hasCustomInventoryName() ? this.playerinv2.getInventoryName() : I18n.format(this.playerinv2.getInventoryName(), new Object[0]), 8, this.ySize - 96 + 2, 4210752);
    }
    
    @Override
    protected void drawGuiContainerBackgroundLayer(float prt, int x, int y) {
    GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    this.mc.getTextureManager().bindTexture(texture);
    
    // Centering GUI
    int k = (this.width - this.xSize) / 2;
    int l = (this.height - this.ySize) / 2;
    
    // Drawing the first part of the GUI (slots of the backpack)
    this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.rows * 18 + 17);
    // And after the slots from the player's inventory
    this.drawTexturedModalRect(k, l + this.rows * 18 + 17, 0, 126, this.xSize, 96);
    }
    }
    

    enfin surement de cette fonction mais je suis pas sur :

    @Override
    protected void drawGuiContainerForegroundLayer(int x, int y) {
    this.fontRendererObj.drawString(I18n.format(this.inv2.getInventoryName(), new Object[0]), 8, 6, 4210752);
    this.fontRendererObj.drawString(this.playerinv2.hasCustomInventoryName() ? this.playerinv2.getInventoryName() : I18n.format(this.playerinv2.getInventoryName(), new Object[0]), 8, this.ySize - 96 + 2, 4210752);
    }
    


  • c'est ça, vu que tu fais appelle à I18n tu as oublié de modifier la traduction



  • Au final j'ais réussie à modifier le titre du gui mais pas a modifier la taille du container. Je vais voir pour une méthode je pense.



  • La taille dépend surtout de ta texture



  • @'SCAREX':

    La taille dépend surtout de ta texture

    La taille des contenaire dépend de la texture ? ( je parle de la grille de slot )



  • ah bah non ça ça dépend de ton container



  • @'SCAREX':

    ah bah non ça ça dépend de ton container

    Un grand merci en revérifiant la classe du container et du gui j'ais réussie a en faire ce je voulé.


Log in to reply