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

    Résolu Exécuter des fonctions au déplacement d'un ItemStack dans un Container

    1.7.x
    1.7.10
    2
    5
    1342
    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 robin4002

      Bonjour à tous.

      J’ai créé une petite fonction qui doit être exécutée à chaque fois qu’on interagit avec les objets dans un container lui aussi fait maison.
      J’ai donc une TE, un Container, une Gui et un BlockContainer.

      Je n’ai pourtant pas trouvé une seule fonction appelée dans cette situation, même sur internet.

      Pouvez-vous m’aider ?

      Merci d’avance.


      Über Networking Antennas

      1 réponse Dernière réponse Répondre Citer 0
      • robin4002
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

        public ItemStack transferStackInSlot(EntityPlayer player, int slotId)
        Dans le container, cette fonction est déclenché dès qu’un item stack est placé dans un slot.

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

          Merci.

          En revanche, cela ne fonctionne pas, mais ça doit définitivement être ma faute.

          J’ai ceci dans mon Container :

          private TileEntityEUsInjector tileEntity;
          
          public ItemStack transferStackInSlot(EntityPlayer player, int slotId)
          {
          ItemStack itemstack = null;
          Slot slot = (Slot)this.inventorySlots.get(slotId);
          
          tileEntity.countBattery();
          
          if(slot != null && slot.getHasStack())
          {
          ItemStack itemstack1 = slot.getStack();
          itemstack = itemstack1.copy();
          
          if(slotId < 9)
          {
          if(!this.mergeItemStack(itemstack1, 9, this.inventorySlots.size(), true))
          {
          return null;
          }
          }
          else if(!this.mergeItemStack(itemstack1, 0, 9, false))
          {
          return null;
          }
          
          if(itemstack1.stackSize == 0)
          {
          slot.putStack((ItemStack)null);
          }
          else
          {
          slot.onSlotChanged();
          }
          }
          return itemstack;
          
          }
          

          On y aperçoit l’appel d’une fonction countBattery présente dans la TE du Container. Voici cette fonction :

          public void countBattery() {
          int upgrades = 0;
          // TODO Debug
          if (this.inventory[0].getUnlocalizedName() == "quantumUpgrade") upgrades++;
          if (this.inventory[1].getUnlocalizedName() == "quantumUpgrade") upgrades++;
          if (this.inventory[2].getUnlocalizedName() == "quantumUpgrade") upgrades++;
          if (this.inventory[3].getUnlocalizedName() == "quantumUpgrade") upgrades++;
          System.out.println("Upgrades: " + upgrades);
          if (upgrades == 0) this.setMaxVoltage(32); else if (upgrades == 1) this.setMaxVoltage(128); else if (upgrades == 2) this.setMaxVoltage(512); else if (upgrades == 3) this.setMaxVoltage(2048); else if (upgrades == 4) this.setMaxVoltage(-1);
          }
          

          (this.inventory étant l’inventaire relatif à la TE)

          Ainsi, cette fonction est sensée, une fois exécutée, effectuer setMaxVoltage en conséquence. Elle print aussi dans les logs une manifestation.

          Hors, lorsque je déplace un objet dans mon container, aucune réaction.
          Pouvez-vous m’aider ?

          Encore une fois merci d’avance.


          Über Networking Antennas

          1 réponse Dernière réponse Répondre Citer 0
          • robin4002
            robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

            Alors en effet la fonction n’est que déclenché quand on utilise shift + clic.
            J’ai rapidement regardé, dans le tile entity, la fonction setInventorySlotContents est déclenché quand on met un item, mais aussi quand on ouvre le container. decrStackSize elle est déclenché quand on prend un item du container.

            Donc au final j’ai pas trouvé ce que tu cherches 😕

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

              A la limite c’est pas très grave si elle est exécutée un peu plus. En fait, j’aurai bien voulu qu’elle soit exécuté en permanence, mais ça pomperait de la ressource serveur. Mais là vu que tu me dis ces fonctions, je vais tester.

              Merci.

              EDIT : Alors j’ai placé la fonction comme ceci sans setInventorySlotContents :

              @Override
              public void setInventorySlotContents(int slotId, ItemStack stack)
              {
              this.inventory[slotId] = stack;
              
              if (stack != null && stack.stackSize > this.getInventoryStackLimit())
              {
              stack.stackSize = this.getInventoryStackLimit();
              }
              
              countBattery();
              
              this.markDirty();
              }
              

              Mais à l’ouverture du GUI, j’ai le temps de l’aperçevoir et puis vlan :

              [10:31:10] [Client thread/FATAL]: Unreported exception thrown!
              java.lang.NullPointerException
              at pingo.virtualcraft.common.TileEntityEUsInjector.countBattery(TileEntityEUsInjector.java:295) ~[TileEntityEUsInjector.class:?]
              at pingo.virtualcraft.common.TileEntityEUsInjector.setInventorySlotContents(TileEntityEUsInjector.java:255) ~[TileEntityEUsInjector.class:?]
              at net.minecraft.inventory.Slot.putStack(Slot.java:104) ~[Slot.class:?]
              at net.minecraft.inventory.Container.putStacksInSlots(Container.java:560) ~[Container.class:?]
              at net.minecraft.client.network.NetHandlerPlayClient.handleWindowItems(NetHandlerPlayClient.java:1205) ~[NetHandlerPlayClient.class:?]
              at net.minecraft.network.play.server.S30PacketWindowItems.processPacket(S30PacketWindowItems.java:70) ~[S30PacketWindowItems.class:?]
              at net.minecraft.network.play.server.S30PacketWindowItems.processPacket(S30PacketWindowItems.java:78) ~[S30PacketWindowItems.class:?]
              at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:247) ~[NetworkManager.class:?]
              at net.minecraft.client.multiplayer.PlayerControllerMP.updateController(PlayerControllerMP.java:321) ~[PlayerControllerMP.class:?]
              at net.minecraft.client.Minecraft.runTick(Minecraft.java:1693) ~[Minecraft.class:?]
              at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039) ~[Minecraft.class:?]
              at net.minecraft.client.Minecraft.run(Minecraft.java:961) [Minecraft.class:?]
              at net.minecraft.client.main.Main.main(Main.java:164) [Main.class:?]
              at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_60]
              at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_60]
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_60]
              at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_60]
              at net.minecraft.launchwrapper.Launch.launch(Launch.java:134) [launchwrapper-1.9.jar:?]
              at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.9.jar:?]
              –-- Minecraft Crash Report ----
              // Oh - I know what I did wrong!
              
              Time: 19/07/14 10:31
              Description: Unexpected error
              
              java.lang.NullPointerException: Unexpected error
              at pingo.virtualcraft.common.TileEntityEUsInjector.countBattery(TileEntityEUsInjector.java:295)
              at pingo.virtualcraft.common.TileEntityEUsInjector.setInventorySlotContents(TileEntityEUsInjector.java:255)
              at net.minecraft.inventory.Slot.putStack(Slot.java:104)
              at net.minecraft.inventory.Container.putStacksInSlots(Container.java:560)
              at net.minecraft.client.network.NetHandlerPlayClient.handleWindowItems(NetHandlerPlayClient.java:1205)
              at net.minecraft.network.play.server.S30PacketWindowItems.processPacket(S30PacketWindowItems.java:70)
              at net.minecraft.network.play.server.S30PacketWindowItems.processPacket(S30PacketWindowItems.java:78)
              at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:247)
              at net.minecraft.client.multiplayer.PlayerControllerMP.updateController(PlayerControllerMP.java:321)
              at net.minecraft.client.Minecraft.runTick(Minecraft.java:1693)
              at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039)
              at net.minecraft.client.Minecraft.run(Minecraft.java:961)
              at net.minecraft.client.main.Main.main(Main.java:164)
              at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
              at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
              at java.lang.reflect.Method.invoke(Unknown Source)
              at net.minecraft.launchwrapper.Launch.launch(Launch.java:134)
              at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
              
              A detailed walkthrough of the error, its code path and all known details is as follows:
              ---------------------------------------------------------------------------------------
              
              -- Head --
              Stacktrace:
              at pingo.virtualcraft.common.TileEntityEUsInjector.countBattery(TileEntityEUsInjector.java:295)
              at pingo.virtualcraft.common.TileEntityEUsInjector.setInventorySlotContents(TileEntityEUsInjector.java:255)
              at net.minecraft.inventory.Slot.putStack(Slot.java:104)
              at net.minecraft.inventory.Container.putStacksInSlots(Container.java:560)
              at net.minecraft.client.network.NetHandlerPlayClient.handleWindowItems(NetHandlerPlayClient.java:1205)
              at net.minecraft.network.play.server.S30PacketWindowItems.processPacket(S30PacketWindowItems.java:70)
              at net.minecraft.network.play.server.S30PacketWindowItems.processPacket(S30PacketWindowItems.java:78)
              at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:247)
              at net.minecraft.client.multiplayer.PlayerControllerMP.updateController(PlayerControllerMP.java:321)
              
              -- Affected level --
              Details:
              Level name: MpServer
              All players: 1 total; [EntityClientPlayerMP['pingoleon60'/4, l='MpServer', x=-510,24, y=58,62, z=398,18]]
              Chunk stats: MultiplayerChunkCache: 190, 190
              Level seed: 0
              Level generator: ID 01 - flat, ver 0\. Features enabled: false
              Level generator options:
              Level spawn location: World: (-499,4,423), Chunk: (at 13,0,7 in -32,26; contains blocks -512,0,416 to -497,255,431), Region: (-1,0; contains chunks -32,0 to -1,31, blocks -512,0,0 to -1,255,511)
              Level time: 261138 game time, 34202 day time
              Level dimension: 0
              Level storage version: 0x00000 - Unknown?
              Level weather: Rain time: 0 (now: false), thunder time: 0 (now: false)
              Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: false
              Forced entities: 1 total; [EntityClientPlayerMP['pingoleon60'/4, l='MpServer', x=-510,24, y=58,62, z=398,18]]
              Retry entities: 0 total; []
              Server brand: fml,forge
              Server type: Integrated singleplayer server
              Stacktrace:
              at net.minecraft.client.multiplayer.WorldClient.addWorldInfoToCrashReport(WorldClient.java:417)
              at net.minecraft.client.Minecraft.addGraphicsAndWorldToCrashReport(Minecraft.java:2568)
              at net.minecraft.client.Minecraft.run(Minecraft.java:990)
              at net.minecraft.client.main.Main.main(Main.java:164)
              at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
              at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
              at java.lang.reflect.Method.invoke(Unknown Source)
              at net.minecraft.launchwrapper.Launch.launch(Launch.java:134)
              at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
              
              – System Details --
              Details:
              Minecraft Version: 1.7.10
              Operating System: Windows 7 (amd64) version 6.1
              Java Version: 1.7.0_60, Oracle Corporation
              Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
              Memory: 1045615912 bytes (997 MB) / 1524105216 bytes (1453 MB) up to 7622623232 bytes (7269 MB)
              JVM Flags: 0 total;
              AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
              IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
              FML: MCP v9.05 FML v7.10.18.1180 Minecraft Forge 10.13.0.1180 11 mods loaded, 11 mods active
              mcp{9.05} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
              FML{7.10.18.1180} [Forge Mod Loader] (forgeSrc-1.7.10-10.13.0.1180.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
              Forge{10.13.0.1180} [Minecraft Forge] (forgeSrc-1.7.10-10.13.0.1180.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
              IC2{2.2.521-experimental} [IndustrialCraft 2] (industrialcraft-2-2.2.521-experimental-dev.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
              BuildCraft|Core{@VERSION@} [BuildCraft] (bin) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
              BuildCraft|Builders{@VERSION@} [BuildCraft Builders] (bin) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
              BuildCraft|Energy{@VERSION@} [BuildCraft Energy] (bin) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
              BuildCraft|Factory{@VERSION@} [BuildCraft Factory] (bin) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
              BuildCraft|Transport{@VERSION@} [Buildcraft Transport] (bin) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
              BuildCraft|Silicon{@VERSION@} [BuildCraft Silicon] (bin) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
              virtualcraft{0.1.0-ALPHADEV} [VirtualCraft] (bin) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
              Launched Version: 1.6
              LWJGL: 2.9.1
              OpenGL: GeForce GTX 780/PCIe/SSE2 GL version 4.4.0, NVIDIA Corporation
              GL Caps: Using GL 1.3 multitexturing.
              Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported.
              Anisotropic filtering is supported and maximum anisotropy is 16.
              Shaders are available because OpenGL 2.1 is supported.
              
              Is Modded: Definitely; Client brand changed to 'fml,forge'
              Type: Client (map_client.txt)
              Resource Packs: []
              Current Language: ~~ERROR~~ NullPointerException: null
              Profiler Position: N/A (disabled)
              Vec3 Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
              Anisotropic Filtering: Off (1)
              #@!@# Game crashed! Crash report saved to: #@!@# G:\Modding\1.7.2\forge\.\crash-reports\crash-2014-07-19_10.31.10-client.txt
              AL lib: (EE) alc_cleanup: 1 device not closed
              

              EDIT 2 : Après test, si je mets ma fonction juste avant les this.markDirty() dans decrStackSize, je peux l’ouvrir, je peux placer des trucs dedans, mais quand je retire, boum crash. Je pense que c’est ma fonction qui déconne. Je vais faire des tests.

              EDIT 3 : Ok résolu ! En fait c’était ma faute, je vérifiais pas si le ItemStack était pas nul (ce qui est le cas quand le slot est vide). Merci pour votre aide !


              Ü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