MFF

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

    Synchronisation ItemStack Server -> Client

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.10
    2 Messages 1 Publieurs 689 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.
    • JoelchasseuJ Hors-ligne
      Joelchasseu
      dernière édition par

      Bonjour à tous,

      J’explique mon idée, l’idée c’est de faire de la nourriture qui, lorsqu’elle est craftée va recevoir une qualité donnée par un jet de dés.
      Pour cela j’ai crée un random qui va être intégré à l’itemStack en question grâce au NBTTagCompound. Seulement voilà je n’arrive pas à faire en sorte que le client puisse accéder au Compound pour afficher une String dans la description de l’item. Tout du moins pas sur le coup, la modification prend effet quand le serveur et/ou la partie solo s’arrête.

      Mes classes :

      public class ItemsFoodHeimnor extends ItemFood {
      
      public ItemsFoodHeimnor(int gigot, float saturation, boolean wolf) {
      super(gigot, saturation, wolf);
      }
      
      @Override
      public ItemStack onEaten(ItemStack stack, World world, EntityPlayer player) {
      
      stack.stackSize–;
      
      return stack;
      
      }
      
      @Override
      public void onCreated(ItemStack stack, World world, EntityPlayer player) {
      
      if (!world.isRemote) {
      
      int resultat = FichesFonc.throwOneComp(player, "Cuisine", FichesFonc.getCuisine(player), world) + 1;
      int i = 5;
      if (resultat == 1) {
      i = 0;
      } else if (resultat != 1 && resultat < 10) {
      i = 1;
      } else if (resultat >= 10 && resultat < 20) {
      i = 2;
      } else if (resultat >= 20) {
      i = 3;
      }
      System.out.println("Resultat dés : " + resultat);
      String[] tableau = { "Même un lainard n'en voudrait pas ...", "Ça se mange je suppose ...",
      "Ça ne devrait pas être mauvais !", "Parfait !" };
      
      if (!stack.hasTagCompound()) {
      stack.setTagCompound(new NBTTagCompound());
      }
      NBTTagCompound compound = stack.getTagCompound();
      
      System.out.println(compound);
      System.out.println(tableau*);
      String lore = tableau*;
      compound.setString("lore", lore);
      System.out.println(compound);
      stack.setTagCompound(compound);
      
      }
      
      }
      
      @SideOnly(Side.CLIENT)
      public void addInformation(ItemStack stack, EntityPlayer player, List lores, boolean bool) {
      
      if (stack.hasTagCompound()) {
      
      if (stack.getTagCompound().hasKey("lore")) {
      
      String loreStack = stack.getTagCompound().getString("lore");
      lores.add(EnumChatFormatting.GREEN + loreStack);
      }
      }
      
      super.addInformation(stack, player, lores, bool);
      }
      }
      ``` 
      
      ```java
      public static int getCuisine(EntityPlayer player) {
      
      if (NbtCsFile.getData(new File("Heimnor/Joueurs.dat")).getCompoundTag("index").getCompoundTag(player.getDisplayName())
      .hasKey("perso")) {
      
      String persoName = NbtCsFile.getData(new File("Heimnor/Joueurs.dat")).getCompoundTag("index")
      .getCompoundTag(player.getDisplayName()).getString("perso");
      int cuisine = NbtCsFile.getData(new File("Heimnor/Fiches.dat")).getCompoundTag("index").getCompoundTag(persoName)
      .getInteger("cuisine");
      System.out.println("Cuisine : " + cuisine);
      return cuisine;
      } else {
      return 0;
      }
      
      }
      
      public static int throwOneComp(EntityPlayer player, String comp1Name, int comp1, World world) {
      
      if (!world.isRemote) {
      Random rand = new Random();
      int jet = rand.nextInt(20);
      int resultat = jet + comp1;
      
      String formula = "(" + jet + "+" + comp1 + "=" + resultat + ")";
      ChatStyle style = new ChatStyle().setColor(EnumChatFormatting.GRAY);
      IChatComponent chatMsg = new ChatComponentText(
      "[" + comp1Name + "]" + formula + player.getDisplayName() + " obtient " + resultat + ".")
      .setChatStyle(style);
      player.addChatMessage(chatMsg);
      
      return resultat;
      }
      return 0;
      }
      

      Merci d’avance pour votre aide 😉

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

        Bon j’ai du bidouiller mais problème résolu je vous poste quand même le code si ça intéresse quelqu’un :

        public class SyncFood implements IMessage{
        
        ItemStack stack;
        int slot;
        
        public SyncFood() {}
        
        public SyncFood(ItemStack stack, int slot) {
        this.stack = stack;
        this.slot = slot;
        }
        
        @Override
        public void fromBytes(ByteBuf buf) {
        
        this.stack = ByteBufUtils.readItemStack(buf);
        this.slot = ByteBufUtils.readVarInt(buf, 5);
        }
        
        @Override
        public void toBytes(ByteBuf buf) {
        
        ByteBufUtils.writeItemStack(buf, this.stack);
        ByteBufUtils.writeVarInt(buf, this.slot, 5);
        
        }
        
        public static class Handler implements IMessageHandler<syncfood, imessage="">{
        
        @Override
        public IMessage onMessage(SyncFood message, MessageContext ctx) {
        
        Minecraft.getMinecraft().thePlayer.inventory.setInventorySlotContents(message.slot, message.stack);
        return null;
        }
        
        }
        }
        
        public class ItemsFoodHeimnor extends ItemFood {
        
        public ItemsFoodHeimnor(int gigot, float saturation, boolean wolf) {
        super(gigot, saturation, wolf);
        }
        
        @Override
        public ItemStack onEaten(ItemStack stack, World world, EntityPlayer player) {
        
        stack.stackSize–;
        
        return stack;
        }
        
        @Override
        public void onUpdate(ItemStack stack, World world, Entity player, int slotID, boolean p_77663_5_) {
        
        if (player instanceof EntityPlayer) {
        if (!stack.hasTagCompound()) {
        stack.setTagCompound(new NBTTagCompound());
        }
        if (!world.isRemote) {
        
        if (!stack.getTagCompound().hasKey("quality")) {
        int result = FichesFonc.throwOneComp((EntityPlayer) player, "Cuisine",
        FichesFonc.getCuisine((EntityPlayer) player), world);
        
        System.out.println("Jet de dés :" + result);
        int i = 5;
        if (result == 1) {
        i = 0;
        } else if (result > 1 && result <= 10) {
        i = 1;
        } else if (result > 10 && result < 20) {
        i = 2;
        } else if (result == 20) {
        i = 3;
        }
        String[] table = { "Même un lainard n'oserait pas y toucher ...", "Mouais ... ça se mange.",
        "Bien ! Ça ne doit pas être mauvais.", "Parfait !" };
        String stringNBT = table*;
        
        if (stack.hasTagCompound()) {
        stack.getTagCompound().setString("quality", stringNBT);
        System.out.println("stack server : " + stack);
        Heimnor.network.sendTo(new SyncFood(stack, slotID), (EntityPlayerMP) player);
        System.out.println(stack.getTagCompound().getString("quality"));
        }
        ((EntityPlayer) player).inventory.setInventorySlotContents(slotID, stack);
        }
        }
        }
        }
        
        }
        ```</syncfood,>
        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