• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    Items fantômes dans une GUI

    Sans suite
    1.7.10
    1
    2
    783
    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.
    • JustPingo
      JustPingo dernière édition par

      Bonjour à tous.

      J’ai le preoblème suivant : j’ai un container où un block externe va récupérer des objets dedans. Cependant, lorsque je viens de placer un itemstack manuellement dedans, je dois rouvrir et refermer l’interfacer pour que ça s’affiche correctement, par contre après pour les autres items tout va bien. Dans le côté technique ça fonctionne, mais l’affichage persiste. Je soupçonne le fait que j’exécute trop de trucs côté client, mais je ne parviens pas à trouver la chose qui pose problème. Voici la classe du container :

      package pingo.virtualcraft.common;
      
      import net.minecraft.entity.player.EntityPlayer;
      import net.minecraft.inventory.IInventory;
      import net.minecraft.item.Item;
      import net.minecraft.item.ItemStack;
      import net.minecraft.nbt.NBTTagCompound;
      import net.minecraft.nbt.NBTTagList;
      import net.minecraft.network.NetworkManager;
      import net.minecraft.network.Packet;
      import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
      import net.minecraftforge.common.util.Constants;
      
      public class TileEntityItemScanner extends TileEntityMultiblock implements IInventory {
      
      private ItemStack[] inventory = new ItemStack[27];
      
      private String name = "itemscanner";
      
      public String getName() {
      return name;
      }
      
      public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt)
      
          {
      
              this.readFromNBT(pkt.func_148857_g());
      
          }
      
      public Packet getDescriptionPacket()
      
          {
      
              NBTTagCompound nbttagcompound = new NBTTagCompound();
      
              this.writeToNBT(nbttagcompound);
      
              return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 3, nbttagcompound);
      
          }
      
      public void readFromNBT(NBTTagCompound nbttag){
      super.readFromNBT(nbttag);
      NBTTagList nbttaglist = nbttag.getTagList("Items", Constants.NBT.TAG_COMPOUND);
              this.inventory = new ItemStack[this.getSizeInventory()];
      
              for (int i = 0; i < nbttaglist.tagCount(); i++)
              {
                  NBTTagCompound nbttagcompound1 = (NBTTagCompound)nbttaglist.getCompoundTagAt(i);
                  int j = nbttagcompound1.getByte("Slot");
      
                  if (j >= 0 && j < this.inventory.length)
                  {
                      this.inventory[j] = ItemStack.loadItemStackFromNBT(nbttagcompound1);
                  }
              }
      }
      
      public void writeToNBT(NBTTagCompound nbttag){
      super.writeToNBT(nbttag);
      NBTTagList nbttaglist = new NBTTagList();
      
              for (int i = 0; i < this.inventory.length; i++)
              {
                  if (this.inventory* != null)
                  {
                      NBTTagCompound nbttagcompound1 = new NBTTagCompound();
                      nbttagcompound1.setByte("Slot", (byte)i);
                      this.inventory*.writeToNBT(nbttagcompound1);
                      nbttaglist.appendTag(nbttagcompound1);
                  }
              }
      
              nbttag.setTag("Items", nbttaglist);
      }
      
      @Override
      public void invalidate() {
          if (!worldObj.isRemote){
      if (this.hasMaster) {
      if ((TileEntityMultiblock) this.master != null) ((TileEntityMultiblock) this.master).elements = ((TileEntityMultiblock) this.master).newMaster();
      }
      }
         super.invalidate();
          }
      
      @Override
      public int getSizeInventory() {
      return inventory.length;
      }
      
      @Override
      public ItemStack getStackInSlot(int slotId) {
      return inventory[slotId];
      }
      
      @Override
      public ItemStack decrStackSize(int slotId, int quantity)
          {
              if (this.inventory[slotId] != null)
              {
                  ItemStack itemstack;
      
                  if (this.inventory[slotId].stackSize <= quantity)
                  {
                      itemstack = this.inventory[slotId];
                      this.inventory[slotId] = null;
      
                      this.checkSorting();
                      this.iAmLookingForSomething();
                      this.checkSorting();
                      this.markDirty();
                      return itemstack;
                  }
                  else
                  {
                      itemstack = this.inventory[slotId].splitStack(quantity);
      
                      if (this.inventory[slotId].stackSize == 0)
                      {
                          this.inventory[slotId] = null;
                      }
      
                      this.checkSorting();
                  this.iAmLookingForSomething();
                      this.checkSorting();
                      this.markDirty();
                      return itemstack;
                  }
              }
              else
              {
                  return null;
              }
          }
      
      @Override
      public ItemStack getStackInSlotOnClosing(int slotId)
      {
              if (this.inventory[slotId] != null)
              {
                  ItemStack itemstack = this.inventory[slotId];
                  this.inventory[slotId] = null;
                  return itemstack;
              }
              else
              {
                  return null;
              }
      }
      
      @Override
      public void setInventorySlotContents(int slotId, ItemStack stack)
      {
      
              this.inventory[slotId] = stack;
      
              if (stack != null && stack.stackSize > this.getInventoryStackLimit())
              {
              int redrop = stack.stackSize - this.getInventoryStackLimit();
              stack.stackSize = this.getInventoryStackLimit();
              }
      
              this.checkSorting();
              this.iAmLookingForSomething();
                  this.checkSorting();
              this.markDirty();
      
      }
      
      @Override
      public String getInventoryName() {
      return "container.EUsInjector";
      }
      
      @Override
      public boolean hasCustomInventoryName() {
      return false;
      }
      
      @Override
      public int getInventoryStackLimit()
      {
      return 64;
      }
      
      @Override
      public boolean isUseableByPlayer(EntityPlayer player)
      {
      return worldObj.getTileEntity(xCoord, yCoord, zCoord) == this && player.getDistanceSq(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) < 64;
      }
      
      @Override
      public void openInventory() {
      
      }
      
      @Override
      public void closeInventory() {
      
      }
      
      @Override
      public boolean isItemValidForSlot(int slot, ItemStack item) {
      return true;
      }
      
      public void checkSorting() {
      boolean areThereItems;
      for (int k = 0; 26 > k; k++) {
      areThereItems = false;
      for (int i = k; 27 > i; i++){
      if (this.inventory* != null){
      areThereItems = true;
      }
      }
      if (areThereItems) {
      while (this.inventory[k] == null){
      for (int i = k; 26 > i; i++){
      this.inventory* = this.inventory[i+1];
      this.inventory[i+1] = null;
      }
      }
      }
      }
      }
      
      public void iAmLookingForSomething() {
      System.out.println("iAmLookingForSomething");
      if (this.hasMaster && (!worldObj.isRemote) && this.inventory[0] != null) {
      this.inventory[0] = ((TileEntityMultiblockControler) this.master).giveStack(this.inventory[0]);
      checkSorting();
              this.markDirty();
      }
      }
      
      }
      

      Pouvez-vous m’aider ?

      Merci d’avance !


      Über Networking Antennas

      1 réponse Dernière réponse Répondre Citer 0
      • JustPingo
        JustPingo dernière édition par

        Un petit thumbs up ^^

        Merci d’avance.


        Über Networking Antennas

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

        MINECRAFT FORGE FRANCE © 2018

        Powered by NodeBB