MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Problème avec des Slot

    Planifier Épinglé Verrouillé Déplacé Sans suite
    1.8
    5 Messages 2 Publieurs 1.3k Vues 1 Watching
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • N Hors-ligne
      Nyhillius
      dernière édition par

      Bonjour,

      J’ai créer une machine en suivant un tuto de membre. Presque tout marche.

      Je m’explique, dans la machine, il y a 4 Slots d’input, 2 de fuel et un d’output. Il n’y a aucun soucis sur les Slots d’output ou de fuel mais en revanche les Slots d’input ne fonctionnent pas vraiment bien.

      En effet, lorsque qu’un ItemStack est présent sur le Slot, le shift-clic, le clic droit et même le clic gauche de fonctionne pas bien voire pas du tout. Le clic gauche ne ramasse pas le stack mais drop les tiems un par un ou des fois ramasse le stack. Le shift et right clic de fonctionne pas du tout.

      Ce que je ne comprends pas, c’est que la class Slot est une classe de base du jeu, nous n’intervenant pas dessus si ?

      Si jamais une âme charitable aurait une idée. 🙂

      Merci d’avance.

      1 réponse Dernière réponse Répondre Citer 0
      • AymericRedA Hors-ligne
        AymericRed
        dernière édition par

        Pour le shift-clic, il faut que tu regardes dans la fonction transfertStackInSlot de ton gui (bonne chance car la fonction est compliquée).
        Pour les autres problèmes, c’est byzarre, montre ton Container. Et as-tu des slots custom ?

        Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

        AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

        Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
        Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

        1 réponse Dernière réponse Répondre Citer 0
        • N Hors-ligne
          Nyhillius
          dernière édition par

          @‘AymericRed’:

          Pour le shift-clic, il faut que tu regardes dans la fonction transfertStackInSlot de ton gui (bonne chance car la fonction est compliquée).
          Pour les autres problèmes, c’est byzarre, montre ton Container. Et as-tu des slots custom ?

          Merci pour ton réponse. Ce ne sont pas des classes customs (les classes customs marchent bien ^^). Avec le debug que j’ai pus faire, il me semble que la fonction transfertStackInSlot n’ai appelée que lorsque que l’on transfère dans le Slot et non pas quand on extrait les items. Je me trompe ? Ça pourrait en effet être ça le problème sinon en effet.

          Pour ce qui est du Container :

           public class ContainerSmeltery extends Container
          {
              private TileEntitySmeltery tile;
              private int currentWorkingTime;
              private int totalWorkingTime;
              private int remainingFuelTime;
              private int totalCurrentFuelTime;
              private int remainingWaterQuantity;
              private int totalWaterCapacity;
          
              public ContainerSmeltery(TileEntitySmeltery tile, InventoryPlayer inventory)
              {
                  this.tile = tile;
          
                  // INPUTS
                  this.addSlotToContainer(new Slot(tile, 0, 45, -9));
                  this.addSlotToContainer(new Slot(tile, 1, 69, -9));
                  this.addSlotToContainer(new Slot(tile, 2, 93, -9));
                  this.addSlotToContainer(new Slot(tile, 3, 117, -9));
          
                  // FUEL
                  this.addSlotToContainer(new Slot(tile, 4, 44, 39));
                  this.addSlotToContainer(new Slot(tile, 5, 117, 39));
          
                  // OUTPUTS
                  this.addSlotToContainer(new SlotOutput(tile, 6, 80, 39));
          
                  this.bindPlayerInventory(inventory);
              }
          
              private void bindPlayerInventory(InventoryPlayer inventory)
              {
                  int i;
                  int j;
                  for(i = 0; i < 3; ++i)
                  {
                      for(j = 0; j < 9; ++j)
                          this.addSlotToContainer(new Slot(inventory, j + i * 9 + 9, 9 + j * 18, 66 + i * 18 + 17));
                  }
          
                  for(i = 0; i < 9; ++i)
                      this.addSlotToContainer(new Slot(inventory, i, 9 + i * 18, 124 + 17));
              }
          
              @Override
              public ItemStack transferStackInSlot(EntityPlayer player, int quantity)
              {
                  System.out.println("Transfer stack in slot");
                  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.tile.getSizeInventory())
                      {
                          if(!this.mergeItemStack(itemstack1, this.tile.getSizeInventory(), this.inventorySlots.size(), true))
                              return null;
                      }
                      else if(!this.mergeItemStack(itemstack1, 0, this.tile.getSizeInventory(), false))
                          return null;
                      if(itemstack1.stackSize == 0)
                          slot.putStack((ItemStack)null);
                      else
                          slot.onSlotChanged();
                  }
                  return itemstack;
              }
          
              @Override
              public boolean canInteractWith(EntityPlayer player)
              {
                  return this.tile.isUseableByPlayer(player);
              }
          
              @Override
              public void onContainerClosed(EntityPlayer player)
              {
                  super.onContainerClosed(player);
                  this.tile.closeInventory(player);
              }
          
              @Override
              public void addCraftingToCrafters(ICrafting crafting)
              {
                  super.addCraftingToCrafters(crafting);
                  for(int i = 0; i < this.tile.getFieldCount(); i++)
                      crafting.sendProgressBarUpdate(this, i, this.tile.getField(i));
                  crafting.func_175173_a(this, this.tile);
              }
          
              @Override
              public void detectAndSendChanges()
              {
                  super.detectAndSendChanges();
                  for(int i = 0; i < this.crafters.size(); ++i)
                  {
                      ICrafting icrafting = (ICrafting)this.crafters.get(i);
                      for(int j = 0; j < this.tile.getFieldCount(); j++)
                      {
                          if(this.getField(j) != this.tile.getField(j))
                              icrafting.sendProgressBarUpdate(this, j, this.tile.getField(j));
                      }
                  }
                  for(int i = 0; i < this.tile.getFieldCount(); i++)
                      this.setField(i, this.tile.getField(i));
              }
          
              @Override
              @SideOnly(Side.CLIENT)
              public void updateProgressBar(int id, int value)
              {
                  this.tile.setField(id, value);
              }
          
              private int getField(int id)
              {
                  switch(id)
                  {
                      case 0:
                          return this.currentWorkingTime;
                      case 1:
                          return this.totalWorkingTime;
                      case 2:
                          return this.remainingFuelTime;
                      case 3:
                          return this.totalCurrentFuelTime;
                      case 4:
                          return this.remainingWaterQuantity;
                      case 5:
                          return this.totalWaterCapacity;
                      default:
                          return 0;
                  }
              }
          
              private void setField(int id, int value)
              {
                  switch(id)
                  {
                      case 0:
                          this.currentWorkingTime = value;
                          break;
                      case 1:
                          this.totalWorkingTime = value;
                          break;
                      case 2:
                          this.remainingFuelTime = value;
                          break;
                      case 3:
                          this.totalCurrentFuelTime = value;
                          break;
                      case 4:
                          this.remainingWaterQuantity = value;
                          break;
                      case 5:
                          this.totalWaterCapacity = value;
                          break;
                  }
              }
          } 
          
          1 réponse Dernière réponse Répondre Citer 0
          • AymericRedA Hors-ligne
            AymericRed
            dernière édition par

            D’après ce que je sais, transferStackInSlot est appelée quand on fait shift+clic sur un slot avec un item et la fonction doit déplacer le stack dans un slot qu’elle aura trouver, mais elle ne gère pas les clics, c’est slotClick, qui le fait, ça me paraîtrait bizarre qu’elle soit buggée, surtout que les ids de tes slots ont l’air corrects…
            PS : Quelle version de Mc (des fois que transferStackInSlot ait changé dans la dernière version).
            PS-2 : pense à mettre une balise java pour le code java au lieu d’un balise code, ça colore le texte.

            Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

            AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

            Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
            Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

            1 réponse Dernière réponse Répondre Citer 0
            • N Hors-ligne
              Nyhillius
              dernière édition par

              @‘AymericRed’:

              D’après ce que je sais, transferStackInSlot est appelée quand on fait shift+clic sur un slot avec un item et la fonction doit déplacer le stack dans un slot qu’elle aura trouver, mais elle ne gère pas les clics, c’est slotClick, qui le fait, ça me paraîtrait bizarre qu’elle soit buggée, surtout que les ids de tes slots ont l’air corrects…
              PS : Quelle version de Mc (des fois que transferStackInSlot ait changé dans la dernière version).
              PS-2 : pense à mettre une balise java pour le code java au lieu d’un balise code, ça colore le texte.

              Merci pour le tuyau ! 😄

              Pour ce qui est de Forge c’est la 11.14.4.1563 en Minecraft 1.8.

              1 réponse Dernière réponse Répondre Citer 0
              • 1 / 1
              • Premier message
                Dernier message
              Design by Woryk
              ContactMentions Légales

              MINECRAFT FORGE FRANCE © 2024

              Powered by NodeBB