Résolu Problème avec les packets
-
Salut Salut !
Hier j’ai voulu faire un mod qui détécte si le joueur utilise le launcher custom ou pas ( je sais que les launchers custom ne son plus en support )
J’ai fait de nombreuses recherches et j’ai fini par tomber sur un topic qui disait que j’avais besoin de faire appel aux packets custom !
La encore après de nombreuses recherches je me suis retrouvé avec des tutoriels datant du 27 avril 2013 utilisant le Packet270CustomPayload x)C’est alors que j’ai trouvé le tutoriel qui a été posté ici même >>>celui-ci<<<
J’ai bien lu et tout compris .
Mais je me retoruve avec le problème que (2 possibilités)
La plus probable : Le packet ne s’envoye pas
Alors pour faire simple je doute que le packet soit envoyé vu que je ne reçois aucun message de retour !
Mon code
Class ModCustomMenu@Mod(modid = "ChaosPVP", name = "ChaosPVP", version = "1.0.0") public class ModCustomMenu { public static SimpleNetworkWrapper network; @EventHandler public void preinit(FMLPreInitializationEvent e){ } @EventHandler public void init(FMLInitializationEvent e) { if (e.getSide().isClient()) { network = NetworkRegistry.INSTANCE.newSimpleChannel("ChaosPVP"); network.registerMessage(Launcher.Handler.class, Launcher.class, 84, Side.SERVER); FMLCommonHandler.instance().bus().register(this); MinecraftForge.EVENT_BUS.register(new EventsHandler()); } } @SubscribeEvent @SideOnly(Side.CLIENT) public void onTick(TickEvent.ClientTickEvent event) { Minecraft mc = FMLClientHandler.instance().getClient(); if (mc.currentScreen != null && mc.currentScreen.getClass().equals(GuiMainMenu.class)) { // mc.displayGuiScreen(new GuiCustomMainMenu()); } else if (mc.currentScreen != null && mc.currentScreen.getClass().equals(GuiMultiplayer.class)) { //mc.displayGuiScreen(new GuiCustomMainMenu()); } } @SubscribeEvent public void playerLoggedInEvent(ClientConnectedToServerEvent event) { Minecraft mc = FMLClientHandler.instance().getClient(); network.sendToServer(new Launcher("Launcher") ); }
Class Launcher
public class Launcher implements IMessage { private String text; public Launcher() { } public Launcher(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 <launcher, imessage="">{ @Override public IMessage onMessage(Launcher message, MessageContext ctx) { if(message.text.equals("Launcher")){ System.out.println("You have the launcher ! You're now prefixed !"); } System.out.println(String.format("Received %s from %s", message.text, ctx.getServerHandler().playerEntity.getDisplayName())); return null; // no response in this case } } }
2ème possibilité : Le serveur ne recoit pas le packet
Mais bon je ne pense pas que celui ci soit le vrai problème !
Merci d’avance :)</launcher,>
-
Salut,
Déjà tu n’enregistres que les paquets côté client, donc c’est pour ça que ça ne fonctionne pas.
Deuxièmement, ce que tu fais est inutile, comme tu as fait un mod pour ton serveur, n’importe quel personne qui veut se connecter devra avoir le mod, sinon il ne pourra pas se connecter. -
Alors comment est-ce qu’un serveur ( je ne dirai pas le nom pour éviter toute pub ) a réussi à faire en sorte que certains joueurs ne puissent se connecter qu’avec le launcher pour éviter Nodus , WeepCraft , etc. ?
-
Si se sont des serveurs non Forge il ont juste à faire les modif sur les sources de MC.
Si c’est un serveur Forge tu évites directement tous les mods de cheat qui ne sont pas compatible avec Forge.
Et de toute façon si la personne n’a pas ton mod d’installé il ne pourra pas se co. Donc Forge + ton mod fait déjà office de protection. C’est ce que je t’ai déjà dit sur mon premier message. -
Ok , Merci !