Savoir ce qui il y a dans un slot



  • Salut je cherches à faire une condition avec l'item d'un slot, voici mon code mais il ne marche pas:

    
     @Override
    
            public IMessage onMessage(PaquetHandler message, MessageContext ctx) {
    
            if(message.text.equals("p")){
            if(ctx.getServerHandler().playerEntity.openContainer.getSlot(1).equals(ModHarryPotter.itemPolynectar)){
            System.out.println(String.format("Test"));
            }
            }
                return null;
            }
    

  • Modérateurs

    Ça risque pas de marcher vu que getSlot retourne un slot et teste si c'est un item…



  • Ah ok, alors comment faire ?


  • Administrateurs

    ctx.getServerHandler().playerEntity.openContainer.getSlot(1) != null && ctx.getServerHandler().playerEntity.openContainer.getSlot(1).getItem() == ModHarryPotter.itemPolynectar



  • Ok merci



  • Ca ne marche pas il y a une erreur sur le:

    
    ctx.getServerHandler().playerEntity.openContainer.getSlot(1)
    
    

    Description Resource Path Location Type

    The left-hand side of an assignment must be a variable PaquetHandler.java /Minecraft/src/main/java/com/harrypotter/sosoh/proxy line 41 Java Problem


  • Administrateurs

    Oups, c'est parce que j'ai oublié un point d'exclamation.



  • Je le mets ou ?


  • Administrateurs

    J'ai édité mon message



  • Il y a une nouvelle erreur:
    Description Resource Path Location Type

    The method getItem() is undefined for the type Slot PaquetHandler.java /Minecraft/src/main/java/com/harrypotter/sosoh/proxy line 41 Java Problem

    sur:

    
    ctx.getServerHandler().playerEntity.openContainer.getSlot(1).getItem()
    
    

  • Administrateurs

    Ah il faut peut être mettre getContent avant. Enfin le mieux serait de passer par le tile entity plutôt que le container.



  • Il n'y a pas de .getContent, comment passer par le tile entity ?


  • Administrateurs

    Container c = ctx.getServerHandler().playerEntity.openContainer;
    if(c instanceof TonContainer)
    {
       TonTileEntity tile= ((TonContainer)c).getTile();
       ….
    

    Et il faut créer la fonction

    public TonTileEntity getTile()
    {
       return tonTileentity;
    }
    

    Dans la classe de ton container.



  • J'ai mis ca mais je crash quand je cliques sur le button:

    Mon code:

    package com.harrypotter.sosoh.proxy;
    
    import net.minecraft.inventory.Container;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.util.ChatComponentText;
    
    import com.harrypotter.sosoh.common.ModHarryPotter;
    import com.harrypotter.sosoh.common.blocks.TileEntityChaudron;
    import com.harrypotter.sosoh.common.gui.container.ContainerChaudron;
    
    import io.netty.buffer.ByteBuf;
    import cpw.mods.fml.common.network.ByteBufUtils;
    import cpw.mods.fml.common.network.simpleimpl.IMessage;
    import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
    import cpw.mods.fml.common.network.simpleimpl.MessageContext;
    
    public class PaquetHandler implements IMessage {
    
        private String text;
    
        public PaquetHandler() { }
    
        public PaquetHandler(String text) {
            this.text = text;
        }
    
        @Override
        public void fromBytes(ByteBuf buf) {
            text = ByteBufUtils.readUTF8String(buf); // this class is very useful in general for writing more complex objects
        }
    
        @Override
        public void toBytes(ByteBuf buf) {
            ByteBufUtils.writeUTF8String(buf, text);
        }
    
        public static class Handler implements IMessageHandler <paquethandler, imessage="">{
    
            @Override
            public IMessage onMessage(PaquetHandler message, MessageContext ctx) {
    
            if(message.text.equals("p")){
    
            Container c = ctx.getServerHandler().playerEntity.openContainer;
            if(c instanceof ContainerChaudron){
              TileEntityChaudron tile= ((ContainerChaudron)c).getTile();
    
               if(tile.getStackInSlot(1).getItem() == ModHarryPotter.itemBaguette1){
            System.out.println(String.format("test"));
            ctx.getServerHandler().playerEntity.addChatMessage(new ChatComponentText("Recette Connue"));
                }
                else
                {
                ctx.getServerHandler().playerEntity.addChatMessage(new ChatComponentText("Recette Inconnue"));
                }
            }
            }
                return null;
            }
        }
    ```</paquethandler,>

  • Administrateurs

    Remplace

               if(tile.getStackInSlot(1).getItem() == ModHarryPotter.itemBaguette1){
    

    par :

               if(tile.getStackInSlot(1) != null && tile.getStackInSlot(1).getItem() == ModHarryPotter.itemBaguette1){
    


  • Ok merci