Recherche affichage pour un broadcast
-
Tu me mets le doute x)
Faudra faire des tests aujourd’hui alors. -
Les commandes sont tous exécuté côté serveur. player.addChatMessage envoie un paquet au client.
@‘SkylleHD’:
Du coup on fait comment pour détecter un /broadcast ?
Je ne suis pas sûr qu’on puisse. Le mieux c’est de faire une commande custom qui envoie un paquet au client et à l’arrivé de ce paquet le client affiche le message.
-
Ok merci a tous pour vos réponses je vais tester sa tout de suite ! Et je vous dit si sa fonctione.

-
- String message = event.message.getUnformattedText().substring(Minecraft.getMinecraft().getSession().getUsername().length() + 3, event.message.getUnformattedText().length());
- if(message.equals(“broadcast”))
- System.out.println(“ton code”);
Le “ton code” je mais quoi dedans ? pour que sa fonction.
-
public class CommandReloadConfig extends CommandBase {
-
@Override
-
public String getCommandName() {
-
return “rsreload”;
-
}
-
@Override
-
public String getCommandUsage(ICommandSender sender) {
-
return null;
-
}
-
@Override
-
public int getRequiredPermissionLevel()
-
{
-
return 1;
-
}
-
@Override
-
public void processCommand(ICommandSender sender, String[] args) {
-
ConfigurationLoader.read(new File(ConfigurationLoader.configFilePath));
-
sender.addChatMessage(new ChatComponentText(“Configuration file reloaded”));
-
}
J’ai un problème avec le “ConfigurationLoader” il ne le trouve pas sur eclipse.
-
C’était un exemple, ici c’est une commande pour reload le fichier de configuration d’un mod, c’est normal qu’il ne trouve pas ConfigurationLoader qui est une classe que j’ai créé, dans processCommand il faut que tu envoie un packet au client
-
@‘BrokenSwing’:
C’était un exemple, ici c’est une commande pour reload le fichier de configuration d’un mod, c’est normal qu’il ne trouve pas ConfigurationLoader qui est une classe que j’ai créé, dans processCommand il faut que tu envoie un packet au client
Du coup je dois crée une class Broadcast ?
-
Tu crée une classe qui s’appelle par exemple BroadcastCommand qui est extends CommandBase et dans getCommandName() tu met return “broadcast”;
Dans processCommand tu envoie un packet au joueurs.Ensuite il faut que tu enregistre la commande avec l’event FMLServerStartingEvent en faisaint un truc comme event.registerServerCommand(new BroadcastCommand());
-
Sa serai un truc comme sa ?
package StrafeMod; import java.io.File; import net.minecraft.command.CommandBase; import net.minecraft.command.ICommandSender; public class CommandTutoriel extends CommandBase { @Override public String getCommandName() { return "broadcast"; } @Override public String getCommandUsage(ICommandSender sender) { return "broadcast <text>"; } @Override public void processCommand(ICommandSender sender, String[] arguments){ BroadcastCommand.read(new File(BroadcastCommand.configFilePath)); sender.getCommandSenderName(); } }avec sa :
package StrafeMod; import java.io.File; public class BroadcastCommand extends CommandTutoriel { public static String configFilePath; public static void read(File file) { } public static Object createFromTranslationKey(String string) { // TODO Auto-generated method stub return null; } } ```</text> -
Mouai … non
public class CommandTutoriel extends CommandBase { @Override public String getCommandName() { return "broadcast"; } @Override public String getCommandUsage(ICommandSender sender) { return "broadcast <text>"; } @Override public void processCommand(ICommandSender sender, String[] arg){ if(arg.length > 0) ClassePrincipale.network.sendToAll(new TonPacket(arg)); } } ```</text> -
Sa ne fonctionne toujours pas
Je n’arrive pas à le faire fonctionner -
Tu en est où pour le moment ?
Envoie : La classe de ta commande, ta classe principale, ton packet -
La class Principal :
package StrafeMod; import java.awt.Color; import org.lwjgl.opengl.GL11; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiIngame; import net.minecraft.client.gui.GuiIngameMenu; import net.minecraft.client.gui.GuiMainMenu; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.init.Blocks; import net.minecraftforge.client.GuiIngameForge; import net.minecraftforge.client.event.ClientChatReceivedEvent; import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.common.MinecraftForge; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLServerStartingEvent; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.TickEvent; import cpw.mods.fml.common.gameevent.TickEvent.Phase; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @Mod(modid = ModStrafe.MODID, version = ModStrafe.VERSION) public class ModStrafe { public static final String MODID = "GuiInGame"; public static final String VERSION = "1.0"; public static final String network = null; protected String msgPlaying = ""; protected int msgPlayingUpFor = 0; @EventHandler public void init(FMLInitializationEvent event) { MinecraftForge.EVENT_BUS.register(this); } @EventHandler public void serverStarting(FMLServerStartingEvent event) { event.registerServerCommand(new CommandTutoriel()); } @SubscribeEvent @SideOnly(Side.CLIENT) public void onGuiIngameRender(RenderGameOverlayEvent.Post event) { if (this.msgPlayingUpFor > 0) { this.msgPlayingUpFor–; String str = "" + this.msgPlaying; Minecraft.getMinecraft().fontRenderer.drawString(str, (event.resolution.getScaledWidth() / 2) - (Minecraft.getMinecraft().fontRenderer.getStringWidth(str) / 2), event.resolution.getScaledHeight() - 75, Integer.MAX_VALUE); } } public void renderMsg(String message) { this.msgPlaying = message; this.msgPlayingUpFor = 2000; } @SubscribeEvent @EventHandler public void onClientChatMessage(ClientChatReceivedEvent event) { if (event.message.getUnformattedText().startsWith(" ~") || event.message.getUnformattedText().startsWith("broadcast")) { System.out.println("DEBUG"); this.renderMsg(event.message.getFormattedText()); event.setCanceled(true); } } }La class commande :
package StrafeMod; import java.io.File; import net.minecraft.command.CommandBase; import net.minecraft.command.ICommandSender; import sun.security.krb5.internal.Ticket; public class CommandTutoriel extends CommandBase { @Override public String getCommandName() { return "broadcast"; } @Override public String getCommandUsage(ICommandSender sender) { return "broadcast <text>"; } @Override public void processCommand(ICommandSender sender, String[] arg){ if(arg.length > 0) ModStrafe.network.notifyAll(); } }Mon packet
package StrafeMod; import java.io.File; public class BroadcastCommand extends CommandTutoriel { public static String configFilePath; public BroadcastCommand(String[] arg) { // TODO Auto-generated constructor stub } public static void read(File file) { } public static Object createFromTranslationKey(String string) { // TODO Auto-generated method stub return null; } } ```</text> -
Mets des balises java, parce que là …
Ta classe de la commande est presque bonne, ensuite ton network (c’est un String wtf !) il faut que ce soit un SimpleNetworkWrapper que tu initialise ensuite dans la fonction init en faisant comme ça :network = NetworkRegistry.INSTANCE.newSimpleChannel(MODID);A la suite faut que enregistre ton packet :
network.registerMessage(ClasseDuPacket.Handler.class, ClasseDuPacket.class, 0, Side.CLIENT);Et la classe du packet je vais pas te la faire, mais je t’invite à regarder ici : ~~http://www.minecraftforgefrance.fr/showthread.php?tid=1118#enregistrerPacket~~
Et puis lit depuis le début, ça ne fera pas de mal http://www.minecraftforgefrance.fr/showthread.php?tid=1118#intro
-
Sa nous ferai sa ? :
@EventHandler public void preInit(FMLPreInitializationEvent event) { NetworkRegistry.INSTANCE.newSimpleChannel("ModStrafe"); registerMessage(BroadcastCommand.class, CommandTutoriel.class, 0, Side.SERVER); } private void registerMessage(Class <broadcastcommand>class1, Class <commandtutoriel>class2, int i, Side server) { }public class CommandTutoriel extends CommandBase { protected static Object network; @Override public String getCommandName() { return "broadcast"; } @Override public String getCommandUsage(ICommandSender sender) { return "broadcast <text>"; } @Override public void processCommand(ICommandSender sender, String[] arg){ if(arg.length > 0) ((SimpleNetworkWrapper) BroadcastCommand.network).sendToAll((IMessage) new BroadcastCommand(arg)); network = NetworkRegistry.INSTANCE.newSimpleChannel(ModStrafe.MODID); }package StrafeMod; import java.io.File; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.relauncher.Side; public class BroadcastCommand extends CommandTutoriel { public static String configFilePath; public BroadcastCommand(String[] arg) { } public static void read(File file) { } public static Object createFromTranslationKey(String string) { return null; } ```</text></commandtutoriel></broadcastcommand> -
T’as juste au moins regardé le tutoriel que je t’ai envoyé et lu ce que j’ai écrit ?
EDIT : Non ça fait pas du tout un truc comme ça
-
J’ai essayé de suivre le tutoriel que tu ma envoyer.
-
@‘BrokenSwing’:
Mets des balises java, parce que là …
Ta classe de la commande est presque bonne, ensuite ton network (c’est un String wtf !) il faut que ce soit un SimpleNetworkWrapper que tu initialise ensuite dans la fonction init en faisant comme ça :network = NetworkRegistry.INSTANCE.newSimpleChannel(MODID);A la suite faut que enregistre ton packet :
network.registerMessage(ClasseDuPacket.Handler.class, ClasseDuPacket.class, 0, Side.CLIENT);La classe du packet on verra après fait déjà ce que j’avais dit
-
Déjà j’ai ajouter sa dans ma class principal:
@EventHandler public void preInit(FMLPreInitializationEvent event) { network.registerMessage(CommandTutoriel.Handler.class, CommandTutoriel.class, 0, Side.CLIENT);}et ensuite dans mon packet :
public static void read(File file) { network = NetworkRegistry.INSTANCE.newSimpleChannel(ModStrafe.MODID); } -
network = NetworkRegistry.INSTANCE.newSimpleChannel(ModStrafe.MODID);
doit être dans la classe principale avant network.registerMessage sinon tu vas te manger un npe.
et tu ne devrais pas avoir de fonction nommé read … -
@‘robin4002’:
network = NetworkRegistry.INSTANCE.newSimpleChannel(ModStrafe.MODID);
doit être dans la classe principale avant network.registerMessage sinon tu vas te manger un npe.
et tu ne devrais pas avoir de fonction nommé read …Merci je viens de corriger mon erreur.
EDIT : Du coup maintenant je rajoute quoi ?