Separation client serveur
-
Ah ok d’accord je comprend mieux

C’est pas super optimisé je trouve _ -
La pour le coups j’ai encore un problème ^^
J’ai un gui qui a besoin d’informations concernant le client, seulement ses informations sont initialisée lorsque le client rejoint une partie.Du coups je me retrouve avec des null pointer exceptions.
Comment je peux faire pour initialiser mon GUI proprement uniquement lorsqu’il rejoint une partie ?
J’ai essayé ça :
private GuiJob guiJob; @SubscribeEvent public void onPlayerJoin(PlayerEvent.PlayerLoggedInEvent event) { System.out.println("Player join : "+Minecraft.getMinecraft().thePlayer); if(event.player.getDisplayName().equals(Minecraft.getMinecraft().thePlayer.getDisplayName())) { System.out.println("player is me"); guiJob = new GuiJob(); FMLCommonHandler.instance().bus().register(guiJob); } } @SubscribeEvent public void onPlayerLeave(PlayerEvent.PlayerLoggedOutEvent event) { if(event.player.getDisplayName().equals(Minecraft.getMinecraft().thePlayer.getDisplayName())) { FMLCommonHandler.instance().bus().unregister(guiJob); guiJob = null; } }Mais Minecraft.getMinecraft().thePlayer est toujours null :'/
-
Normal. Minecraft.getMinecraft() est côté client seulement

Utilise le player de l’event -
J’ai mis des @SideOnly(Side.CLIENT), mais thePlayer est toujours null

Je préfèrerai ne pas utiliser le player de l’event, car si un autre joueur se connect, je vais aussi initialisé la chose
Autre chose,
J’ai une class Lumberjack que voici :package fr.mff.eyzox.job.defaultjob.common; /*import …*/ public class Lumberjack extends Job { public static final String NAME = "Lumberjack"; public static final ResourceLocation TEXTURE = new ResourceLocation(Main.MODID, "lumberjack.png"); @Override public String getName() { return NAME; } @Override public int getIconID() { return Minecraft.getMinecraft().renderEngine.getTexture(TEXTURE).getGlTextureId(); } public Lumberjack() { MinecraftForge.EVENT_BUS.register(this); Minecraft.getMinecraft().renderEngine.bindTexture(TEXTURE); } @SubscribeEvent public void onBlockBreak(BlockEvent.BreakEvent event) { if(event.block instanceof BlockLog) { EyJobPlayer player = (EyJobPlayer) ExtensiblePlayer.getPlayerAddon(event.getPlayer(), EyJobPlayer.ADDON_NAME); if(player != null) { JobLevel jobLevel = player.getJob(this); if(jobLevel != null) { jobLevel.setEXP(jobLevel.getEXP()+1); } } } } }Comment faire la séparation proprement entre le serveur et le client ?
-
Étrange que le player soit null. Pour séparer le client et le serveur, les proxys sont tes amis.
-
La problème des poxies c’est qu’il me faut obligatoirement un attribut static non ?
Je peux pas faire un proxy dans une methode ?Et ça veut dire qu’a chaque fois que je vais devoir créé un metier, il va me falloir un LumberjackServer et un LumberjackClient extend LumberjackServer ??
-
De toutes façon, pour un mod, le proxy est obligatoire, sinon, crash.
-
Non x)
Tu appelle ta méthode comme ça :
ClassePrincipale.proxy.methode()
Et ensuite dans cette méthode tu mets ce que tu veux.Sinon si tu as l’objet du monde tu peux aussi utiliser world.isRemote.
-
J’ai pas l’objet world

Et ça veut dire qu’a chaque fois que je vais devoir créé un metier, il va me falloir un LumberjackServer et un LumberjackClient extend LumberjackServer ??
-
Non, absolument pas. Dans ta classe Lumberjack, tu appelle le proxy, et dans le proxy tu fais ce que tu veux.
