1.7.x Crafting "caché" en multi



  • Bonjour a tous !
    Je voudrais savoir comment autoriser un craft que pour quelques personnes seulement sur un serveur multijoueurs.

    En solo j'ai réussis détecter le nom du joueur :

    /* Code dans la méthode ClientProxy() du fichier ClientProxy.java */
    if (Minecraft.getMinecraft().getSession().getUsername().contentEquals("Drag0SEaters") == true)
    {
      /* Exemple de craft ^^ */
      GameRegistry.addShapelessRecipe(new ItemStack(Blocks.mossy_cobblestone), new Object[]{ new ItemStack(Blocks.cobblestone), new ItemStack(Blocks.vine) });
    }
    

    J'ai bien compris en parcourant les forums que pour séparer le serveur du client il fallait passé par les Proxy et les Envents.
    J'ai donc mis le code ci-dessus dans mon ClientProxy. Mais je voudrais savoir comment mettre la condition sur serveur (le craft ne doit pas être apparent pour les autres joueurs = ils ne doivent pas savoir que ce craft existe).
    J'ai essayé de mettre ce code dans le CommonProxy :

          @EventHandler
       public void onCrafting(ItemCraftedEvent event)
       {
           if (MinecraftServer.getServer().getAllUsernames().equals("Drag0SEaters") == true)
           {
               GameRegistry.addShapelessRecipe(new ItemStack(Blocks.mossy_cobblestone), new Object[]{ new ItemStack(Blocks.cobblestone), new ItemStack(Blocks.vine) });
           }
       }
    

    Les autres joueurs ne peuvent pas faire le craft, le résultat du craft ne s'affiche pas et même si on clique sur le slot ça nous donne pas l'item. Mais lorsque j’effectue le craft avec le perso Drag0SEaters le résultat du craft s'affiche, je peux récupérer la mossy cobble mais une fois sur quatre j'ai l'item, sinon l'item disparais ou alors j'ai l'item sans utiliser la cobble et la liane ect…

    ❗ Je suis conscient que ce n'est pas dans le CommonProxy qu'il faut mettre la condition et que l'Event : " onCrafting " n'est pas le bon, mais je n'ai aucune idée de ce qu'il faut mettre à la place et où.  :huh:

    J'ai repris il y a peux le modding Minecraft sous Forge, je suis plus codding en Vanilla et en 1.5.2. ^^

    Merci d'avance pour votre aide 🙂



  • Hm, tu ajoute la recette lors du craft et non lors de l'initialisation.

    Tu devrais faire un truc genre l'ajouter, et dans l'event, tu regarde les variables disponibles sur event ( Exemple : event.player ( Pas sur que ce soit ça ); et si le craft est celui de l'item en question, tu vérifie le player, et annule l'event si ce n'est pas le bon


  • Moddeurs confirmés Rédacteurs Administrateurs

    Il faudrait modifier la fonction onCrafting de la classe SlotCrafting, faire que si le thePlayer.getCommandSenderName() n'est pas le bon joueur, ça ne fait rien. Sauf qu'il n'y a pas d'event pour, donc ça va pas être possible.
    Si c'est pour un serveur, le plus simple est de passer par un plugin de permission comme permission ex ou même avec world guard.



  • @'robin4002':

    Si c'est pour un serveur, le plus simple est de passer par un plugin de permission comme permission ex ou même avec world guard.

    Effectivement, mais je vais essayer l'idée de Gugu42,et, si je n'y arrive pas je vais passer par un plugin.

    Merci pour votre aide !


  • Moddeurs confirmés Rédacteurs Administrateurs

    L'event de craft ne peut pas être cancel, j'ai vérifier avant de te répondre 😉



  • Ah ok. xD


Log in to reply