Jump to content

Check side on mod load


Antonii

Recommended Posts

I want my mod to only load when running on the logical client side. The problem is that on initial setup `Minecraft.getInstance().level` is null and so I cannot tell the sides apart. Is there any other clean way of doing this or should I use the `Thread.currentThread()` method?

Link to comment
Share on other sites

8 minutes ago, Antonii said:

I want my mod to only load when running on the logical client side. The problem is that on initial setup `Minecraft.getInstance().level` is null and so I cannot tell the sides apart. Is there any other clean way of doing this or should I use the `Thread.currentThread()` method?

https://mcforge.readthedocs.io/en/latest/concepts/sides/#writing-one-sided-mods

Link to comment
Share on other sites

51 minutes ago, Antonii said:

Well you see DistExecutor is for the physical side. My mod will never run on a server but only on the client side. I only need to set apart the logical server and the logical client.

what exactly should your mod do

if you want to write a client only mod you should use DistExecutor,
if you only have one method, class, code part that is only executed on the client,
the logical side is the better choice, therefore the question what you want to do

Link to comment
Share on other sites

Quote

the logical side is the better choice, therefore the question what you want to do

Yes indeed logical side is better and exactly what I want to do! Now how do I do that? isClientSide() doesn't work....because `level` is null

Edited by Antonii
Link to comment
Share on other sites

3 minutes ago, Antonii said:

Yes indeed logical side is better and exactly what I want to do! Now how do I do that?

again what exactly do you want to do, show your code, because I can't find a solution for your problem with:

5 minutes ago, Antonii said:

isClientSide() doesn't work....because `level` is null

 

Link to comment
Share on other sites

public Main() {
	DistExecutor.safeRunWhenOn(Dist.CLIENT,()->SomeClass::Init);
}
//SomeClass::Init contains register code

This bad/not needed - my mod will never run on physical server

public Main() {
	if (Minecraft.getInstance() == null || !Minecraft.getInstance().level.isClientSide()) return;
	FMLJavaModLoadingContext.get().getModEventBus().addListener(this::Init);
}

This good but doesn't work because `level` is null

Link to comment
Share on other sites

Now now there is no need for irony or insults. I am just asking for help. Redirecting me to a page I already read doesn't help, does it?

Now here is what I understood:

Quote

The logical server is present within the physical server, but is also can run inside a physical client together with a logical client,

So I must "protect" my code from all forms of server. Taking into consideration that this mod will only run on my PC and not on a physical server that leaves me with the following problem: how to differentiate between the logical server and logical client. The method isClientSide() seems appropriate but it is not available where I need it (perhaps at a later stage?)

 

 

Quote

Yes it will. Do not write mods that will crash on server or client

Let's say I do what you keep insisting I should do; I use DistExecutor for Dist.CLIENT and....I don't know if the mod is loaded on logical server or logical client. And this is because

Quote

DistExecutor, which provides various methods to run different methods on different physical sides

 

Edited by Antonii
Link to comment
Share on other sites

3 minutes ago, Antonii said:

how to differentiate between the logical server and logical client. The method isClientSide() seems appropriate but it is not available where I need it.

you don't need it if your mod only runs on the client, this method would always return true

 

4 minutes ago, Antonii said:

Let's say I do what you keep insisting I should do; I use DistExecutor for Dist.CLIENT and....I don't know if the mod is loaded on logical server or logical client. And this is because

you still haven't understood Dist and DistExecutor, if your mod only runs on the client, the physical and logical side is the client

Link to comment
Share on other sites

I admit I left one thing out: I will want to play a normal game locally. When I will do that won't my mod be loaded also on the logical server? It's true that in normal conditions the check is somewhat useless but just sometimes I don't want to load it when playing a singleplayer game. Also I will test my mod locally on a singleplayer world and that will have the same issues.

 

I used to have some sort of check in my mod in 1.12 version that did this.

Edited by Antonii
Link to comment
Share on other sites

Quote

This question makes no sense. Mod loading takes place before there is any kind of logical side. At mod loading time there is no integrated server, because there is no world loaded yet. As such the question "am I loading on the logical server" makes no sense.

This is exactly what I thought! Thanks. This is why I said

Quote

but it is not available where I need it (perhaps at a later stage?)

So the issue at hand is to differentiate between the two...when? On events? I recall that some events where called on both sides.

 

Quote

 At mod loading time there is no integrated server, because there is no world loaded yet.

You must put this in the docs perhaps on the Sided page

Edited by Antonii
positive reinforcement
Link to comment
Share on other sites

5 minutes ago, Antonii said:

So the issue at hand is to differentiate between the two...when? On events? I recall that some events where called on both sides.

yes or if you have data that only exist on one side (Edit: Example would be a capability)

Edited by Luis_ST
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.