Jump to content

[Solved] [1.12.2] How to detect when player joins Singleplayer vs Multiplayer?


Recommended Posts

Kind of specific situation, but about two hours of googling has come to no-avail (and this website's search system is horrible, no offence intended.) I need an event to detect when the Client has connected to a Singleplayer world and a Multiplayer world. Here are the specific times I need to know:

- When the player has connected to a Singleplayer World.
- When the player has connected to a LAN World.
- When the player has connected to a Dedicated Server.

I also need the player's current dimension in all of the above cases. I've tried using PlayerLoggedInEvent as well as EntityJoinWorldEvent. I got PlayerLoggedIn to work for a singleplayer world, but not a dedicated server. EntityJoinWorldEvent works fine, but I can't seem to find a way to limit it only to the current client.

I ALSO need to know every time the player changes a dimension, and when the player has exited the end. This is a CLIENT-SIDE only party of the mod. PlayerChangedDimensionEvent and PlayerRespawnEvent both don't work for the dedicated server.


Oh, also, while I'm here and this seems like a small thing to make a thread of so I just want to attribute this to my current messages, how do I get the version of Minecraft without doing Minecraft.getMinecraft().getVersion(); ?

Edited by FireController1847

I am on my journey of making a remake of matmos, as explained here.

Link to comment
Share on other sites

To see if the server is dedicated or integrated just use MinecraftServer#isDedicatedServer... for LAN world I think maybe checking if the server is integrated and MinecraftServer#getPlayerList has 2 or more players. I think you will have to use packets to do something on the client for the change dimension and respawn events. For checking the minecraft version use ForgeVersion.mcVersion (I use that but you can also use MinecraftForge.MC_VERSION or Loader.MC_VERSION since it connects to the same thing)

Edited by Terrails
Link to comment
Share on other sites

I am making a Rich Presence mod for Discord, and one of the things the presence will say is if the user is connected to a server or not. If they are, I'll add the ability to ask others to join. If not, disable it. 

 

And apologies for using that terminology, I've edited it to make more sense.

Edited by FireController1847

I am on my journey of making a remake of matmos, as explained here.

Link to comment
Share on other sites

Yes, and that is all I'm trying to detect.

 

I just need to know if the user is playing Multiplayer, including LAN, and if the player is playing Singleplayer.

 

To set the presence, I need events when the user changes dimensions and first joins the world. The presence displays the current dimension the player is in. So, when the user joins a world, in a server or not, as well as changing their dimension, in a server or not, I need to update the presence. And each time I also detect if the user is in Singleplayer or Multiplayer. And event for when the user begins Open to LAN would be nice too.

I am on my journey of making a remake of matmos, as explained here.

Link to comment
Share on other sites

I do understand this concept. I believe my word choice is making this more confusing than it needs to be.

 

But, just to ensure I understand this concept, let me tell you how I understand it:

 

The client has two sides when you enter a Singleplayer world: Two integrated sides, the Server Side, and the Client Side. You recently told me what both sides are for so I won't repeat that.

 

When connecting to a dedicated server, the client still has two sides, but there is now a third side, or the dedicated server. I am still unsure how the dedicated server talks to the client and integrated server.

 

When hosting a LAN world, the server side just becomes public, I believe.

When connecting to a LAN world, it's as if you were on a dedicated and there are three sides.

 

Please correct me if I'm wrong in any of these areas, as even after reading the new documentation on sides it is a little confusing for me.

 

Hopefully now with the information you've provided me, I can achieve the effect I want. It is very much past my bedtime at this point, so any responses after this may come late (but if you respond sooner that's fine, I'll read it in the morning). Thanks for your help so far, and have a good night/day/evening or whatever else it is there.

Edited by FireController1847

I am on my journey of making a remake of matmos, as explained here.

Link to comment
Share on other sites

As mentioned the MInecraft#currentServerData probably gives you enough info for what you need. It has a boolean to indicate lan and also contains the IP address of the server. I'm thinking (you should test this) that the IP address would always be the loopback local address (127.0.0.1) in single player mode.

 

So if the isOnLan() method returns true, you know you're on LAN. Otherwise check the serverIP field to see if it is 127.0.0.1 (in which case you'd assume single player) and otherwise assume multiplayer.

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

Link to comment
Share on other sites

Minecraft#isSingleplayer will return false if the player is connected to a server, and true if the player is in singleplayer or hosting a LAN world. Minecraft#getIntegratedServer().getPublic() will return true if the player is hosting a LAN world but will throw a NullPointerException if the player is connected to a server. So you could use !mc.isSingleplayer() || mc.getIntegratedServer().getPublic() which will be true if the player is connected to a server or hosting a LAN world and false if the player is in a singleplayer world.

  • Thanks 1
Link to comment
Share on other sites

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.