Posted June 25, 20205 yr I am a little confused when I need to use the same message on both sides. When I want to execute client side code like Minecraft.getInstance(), I can use this: DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> { // this is client side PlayerEntity playerEntity = Minecraft.getInstance().player; Entity entity = playerEntity.world.getEntityByID(entityId); .... // the rest of code here }); but this is generating an error when I try to start the server.... the error occurs while registering network messages because there is Minecraft.getInstance in message body... I don't know when to use this: Dist.DEDICATED_SERVER because I'm afraid of the code inside it only runs if the server is physical, I mean, the code inside this will not run when minecraft is running in single player mode. Another approach that I used (but again I am not sure what I am doing), was this: if (ctx.get().getDirection().getReceptionSide().isServer()) { ent = ctx.get().getSender().world.getEntityByID(playerID); if (ent instanceof PlayerEntity) { // server side code here.... } } else if (ctx.get().getDirection().getReceptionSide().isClient()) { XPTransferScreen.open(playerID, playerName); } Note that I am not using Client methods here directly, but I put the client part inside the XPTransferScreen.open method: public static void open(int playerIDToTransfer, String playerName) { Minecraft.getInstance().displayGuiScreen(new XPTransferScreen(playerIDToTransfer, playerName)); } This way the code runs without problems on single player and dedicated server. So my question is: Which method should i use? (DistExecutor or getReceptionSide) ? If your answer is DistExecutor, I have another question: How can I run it server side and single player, Dist.DEDICATED_SERVER will run like server side if I run the single player game? Thanks! †GnR† Slash Edited June 25, 20205 yr by GnRSlashSP †GnR† Slash can one man truly make a difference?
June 26, 20205 yr Author Diesieben, thanks for the explanation. It's really complicated, but now I have a chance to write code the right way. So I changed the code from: PlayerEntity playerEntity = Minecraft.getInstance().player to: ClientPlayerEntity playerEntity = Minecraft.getInstance().player; and it works! But I still don't know why this do not work (even if I put all inside DistExecutor): if (ctx.get().getDirection().getReceptionSide().isClient()) { Minecraft.getInstance().displayGuiScreen(new XPTransferScreen(playerIDToTransfer, playerName)); } and this works: if (ctx.get().getDirection().getReceptionSide().isClient()) { XPTransferScreen.open(playerID, playerName); } this is inside XPTransfer class, that extends Screen: public static void open(int playerIDToTransfer, String playerName) { Minecraft.getInstance().displayGuiScreen(new XPTransferScreen(playerIDToTransfer, playerName)); } I just want to open a simple Screen, without container, just buttons, textfields †GnR† Slash can one man truly make a difference?
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.