Informations du groupe Privé

Rédacteurs

 

Liste des membres

  • RE: Commande pour modifier l'item qui est dans la Main

    Salut, c'est une opération assez simple :

    def : style
    Pour i allant de 1 à (taille(args) - 1):
        Si args[i] dans valeurs(EnumFormatting) :
             def : format = récupérerEnumFormattingDepuisNom(args[i])
             style.ajouterFormat(format)
    

    Voilà, plus qu'à traduire cette logique en Java.

    posté dans Support pour les moddeurs
  • RE: Commande pour modifier l'item qui est dans la Main

    Salut, as-tu lu le tutoriel sur les commandes ?

    Si tu as déjà lu ce dernier, peux-tu nous indiquer sur quelle partie tu bloques ?

    posté dans Support pour les moddeurs
  • RE: Question pour progresser.

    Salut,

    Effectivement, pour commencer il est plus simple de suivre les différents tutoriels que l'on peut trouver sur Internet (j'ai personnellement commencé le modding en suivant les tutoriels de MFF), après tout, c'est très confortable de se reposer dessus au début.

    Cependant, si tu comptes progresser rapidement dans le milieu du modding je te donnerai plusieurs conseils :

    • Lorsque tu lis les tutoriels, je te conseille de mettre un point d'honneur à comprendre TOUT le code que tu écris, c'est si facile de copier/coller du code sans comprendre ce qu'il fait mais si peu efficace (car ceux qui font ça on besoin de revenir sur le tutoriel à chaque fois qu'ils veulent reproduire la feature).

    • N'hésite pas à lire le code source de Forge, et de Minecraft. Cela te permettra d'avoir une très bonne idée de la manière dont chaque donnée est gérée et quelles méthodes sont appelées quand et où. De plus, certaines fonctionnalités n'ont pas de tutoriel dédié sur le forum (généralement les fonctionnalités avancées), c'est donc dans le code source que tu trouvera le plus d'informations sur leur fonctionnement.

    • Code dans les dernières version. Je veux dire par là que, sans revenir dans l'éternel débat avec la 1.7.10, la plupart des moddeurs compétents développent dans les versions récentes pour plusieurs raisons (je suis conscient qu'il y a aussi des raisons qui poussent certains développeurs à modder dans d'ancienne versions) :

      • Celles-ci ont des fonctionnalités rendant le modding plus agréable
      • Elles ont un meilleur support (cf. le forum de MinecraftForge qui ne fait plus de support pour les vieilles versions)
      • Elles sont plus performantes (des fois, pas tout le temps :D )
      • Elles sont mieux mappées (cf. les mappings MCP)
    • Demande de l'aide, mais en étant le plus clair possible. Il faut éviter le problème xy et il faut utiliser un vocabulaire précis (fonction != méthode, classe != interface, etc ...). Ce cette manière, les réponses seront elles aussi plus claires (cela t'évitera aussi les "Laisse moi consulter ma boule de cristal").

    • Pour en revenir aux tutoriels : si, lors de leur lecture, il y a un point que tu ne trouves pas très clair, qui n'est pas très bien expliqué, contact un rédacteur ou un modérateur afin qu'il puisse clarifier le tutoriel. Cela te profitera et profitera aussi aux autres.

    Pour terminer je te conseil, si ce n'est pas déjà le cas, de rejoindre le Discord de MinecraftForgeFrance, on peut y aborder différents sujets assez intéressants que tu ne trouvera pas vraiment sur le forum (chose qui est dommage quand j'y pense. Je vais me pencher sur ce point là, tient.)

    Sur ce, je te souhaite de t'amuser en moddant et surtout de ne pas désespérer si tu as quelques difficultés au début.

    TL;DR : Dommage pour toi

    posté dans Discussion générale
  • RE: Couleur dans la console java sous Windows 10

    Après si tu veux le faire toi même tu peux link une native C ("Windows.h") qui permet de colorer le texte affiché dans la console

    posté dans Le salon libre
  • RE: Modifier Information World Summary

    Salut,
    Quel genre d'informations veux-tu ajouter, et dans quel but ? Je pense que savoir cela pourrait nous aider à mieux t'aiguiller vers la bonne solution à ton problème.

    posté dans Sans suite
  • RE: Erreur de synchronisation Client/Serveur

    Ok, je vois où est ton problème actuellement.
    Ce que tu devrais faire à mon avis c'est changer la classe RPName de façon à ce qu'elle ne contienne plus l'unique ID car tu ne t'en sert pas :

    public class RPName implements IRPName {
    	private String name = "undefined";
    
    	public RPName() {}
    
    	@Override
    	public void set(String nameIn) {
    		this.name = nameIn;
    	}
    
    	@Override
    	public String getName() {
    		return this.name;
    	}
    
    }
    

    Bien sûr ta capability devient donc :

    public interface IRPName
    {
          void set(String name);
          String getName();
    }
    

    Ensuite, ton plus gros problème vient de l'handler de ton paquet. Ce que tu fais est tout simplement incorrect. Déjà on va passer l'id de l'entité dans le paquet plutôt que l'UUID du joueur, ce sera mieux. Puis, grâce à cet id on pourra récupérer cette entité et changer son nom RP :

    public class PacketRPName implements IMessage
    {
    
        private String name;
        private int entityId;
    
        public PacketRPName() {}
    
        public PacketRPName(EntityPlayerMP player) {
            this.name = player.getCapability(RPNameProvider.RPNAME_CAP, null).getName();
            this.entityId= player.getEntityId();
        }
    
        @Override
        public void fromBytes(ByteBuf buf) {
            this.name = ByteBufUtils.readUTF8String(buf);
            this.entityId = buf.readInt();
        }
    
        @Override
        public void toBytes(ByteBuf buf) {
            ByteBufUtils.writeUTF8String(buf, this.name);
            buf.writeInt(this.entityId);
        }
    
        public static class Handler implements IMessageHandler<PacketRPName, IMessage>
        {
    
            @SideOnly(Side.CLIENT)
            @Override
            public IMessage onMessage(PacketRPName message, MessageContext ctx) {
                Minecraft.getMinecraft().addScheduledTask(() -> 
                {
                    Entity entity = Minecraft.getMinecraft().player.world.getEntityByID(message.entityId);
                    if(entity instanceof EntityPlayer) // Vérifie que entity != null et au passage que c'est bien un joueur, au cas où
                    {
                        entity.getCapability(RPNameProvider.RPNAME_CAP, null).set(message.name);
                    }
                });
                return null;
            }
        }
    }
    

    Du coup il va aussi falloir modifier un peu ta commande :

    @Override
    public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException {
        if (args.length >= 2) {
            if (args[0].equalsIgnoreCase("assign") && args.length >= 3) {
                if (args[2].length() > 0) {
                    // NAKConfig.addTitles(args[1], args[2]);
                    EntityPlayerMP player = getPlayer(server, null, args[1]);
                    IRPName rpname = player.getCapability(RPNameProvider.RPNAME_CAP, null);
                    String title = "";
                    for (int i = 2; i < args.length; i++) {
                        title = title + args[i];
                    }
                    rpname.set(title);
    
                    // TODO Sending Packet Command #1
                    Caminelot.getNetwork().sendToAllTracking(new PacketRPName(player), player);
    
                    TextComponentTranslation textComponantTranslation1 = new TextComponentTranslation("Title " + title + " assigned to " + args[1] + " with success!", "");
                    textComponantTranslation1.getStyle().setColor(TextFormatting.GREEN);
                    sender.sendMessage(textComponantTranslation1);
                } else {
                    wrongUsage(sender);
                }
            } else if (args[0].equalsIgnoreCase("remove")) {
                EntityPlayerMP playerr = getPlayer(server, sender, args[1]);
                IRPName rpname = player.getCapability(RPNameProvider.RPNAME_CAP, null);
                rpname.set("undefined");
    
                // TODO Sending Packet Command #2
                Caminelot.getNetwork().sendToAllTracking(new PacketRPName(player), player);
    
                TextComponentTranslation textComponantTranslation1 = new TextComponentTranslation("Title removed to " + args[1] + " with success!", "");
                textComponantTranslation1.getStyle().setColor(TextFormatting.GREEN);
                sender.sendMessage(textComponantTranslation1);
            } else {
                wrongUsage(sender);
            }
        } else {
            wrongUsage(sender);
        }
    }
    

    Pour ce qui est de l'enregistrement du paquet tu n'a besoin de l'envoyer sur un seul côté donc tu as seulement besoin de la ligne :

    registerMessage(PacketRPName.Handler.class, PacketRPName.class, Side.CLIENT, 2);
    

    Il te faut aussi modifier un peu le storage de ta capability :

    instance.set(((NBTTagString) nbt).getString());
    

    Et il te faut rajouter un event dans ta classe d'event qui ressemble à ça :

    @SubscribeEvent
    public static void onStartTracking(PlayerEvent.StartTracking event) {
        if(event.getTarget() instanceof EntityPlayerMP)
        {
            Caminelot.getNetwork().sendTo((EntityPlayerMP)event.getEntityPlayer(), new PacketRPName(event.getTarget()));
        }
    }
    

    Voilà, ça devrait fonctionner

    posté dans Sans suite
  • RE: Erreur de synchronisation Client/Serveur

    Vas-y, renvoie le tout ;)

    posté dans Sans suite
  • RE: Erreur de synchronisation Client/Serveur

    Pas grave, en gros, tu dois utiliser sendToAllTracking plutôt que sendToAll pour envoyer ton paquet.

    posté dans Sans suite
  • RE: Aidez-moi pour mon serveur modée avec des plugins

    Hello,

    Je dis peut-être une connerie, mais t'es pas censé avoir le minecraft_server.jar dans le dossier aussi ? Ou peut-être que ça tente de le télécharger mais que ça n'y arrive pas.

    Ce que tu peux essayer de faire (de ce que j'ai vu en cherchant l'erreur sur Google), c'est justement d'aller sur le site de Minecraft, télécharger le .jar du serveur associé à la version de Minecraft que tu utilises et de mettre le minecraft_server.jar avec tes deux autres .jar

    posté dans Support pour les utilisateurs