• Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    Problème avec des Slot

    Sans suite
    1.8
    2
    5
    1102
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • N
      Nyhillius last edited by

      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 Reply Last reply Reply Quote 0
      • AymericRed
        AymericRed last edited by

        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 Reply Last reply Reply Quote 0
        • N
          Nyhillius last edited by

          @‘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 Reply Last reply Reply Quote 0
          • AymericRed
            AymericRed last edited by

            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 Reply Last reply Reply Quote 0
            • N
              Nyhillius last edited by

              @‘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 Reply Last reply Reply Quote 0
              • 1 / 1
              • First post
                Last post
              Design by Woryk
              Contact / Mentions Légales

              MINECRAFT FORGE FRANCE © 2018

              Powered by NodeBB