Jump to content

[Solved]How to make the server call a method (Tick Handler)?


Recommended Posts

Posted

Hello, How to check which side is calling a method in a tick handler?

 

To clarify, Here is my code:

 

 

public void tickStart(EnumSet<TickType> type, Object... tickData) {

 

if (type.equals(EnumSet.of(TickType.PLAYER))) {

EntityPlayerMP playerMP = (EntityPlayerMP) tickData[0];

onEntityPlayerMPTick(world, playerMP); // this is the method that I need to only call on the Server Side

}

}

 

 

Also could some one clarify, what does the @SideOnly(Side.SERVER) annotation do when put in front of a method, I assume that it makes sure that it is only being called on the Server.

Don't be afraid to ask question when modding, there are no stupid question! Unless you don't know java then all your questions are stupid!

Posted

Hello, How to check which side is calling a method in a tick handler?

 

To clarify, Here is my code:

 

 

public void tickStart(EnumSet<TickType> type, Object... tickData) {

 

if (type.equals(EnumSet.of(TickType.PLAYER))) {

EntityPlayerMP playerMP = (EntityPlayerMP) tickData[0];

onEntityPlayerMPTick(world, playerMP); // this is the method that I need to only call on the Server Side

}

}

entity.getWorld().isRemote Easiest way to do it with any entity.

Also could some one clarify, what does the @SideOnly(Side.SERVER) annotation do when put in front of a method, I assume that it makes sure that it is only being called on the Server.

No, it makes it NOT EXIST AT ALL unless the code is being loaded by the DEDICATED SERVER.

 

If you are using SideOnly in your code, YOU ARE DOING IT WRONG. And should not be.

I do Forge for free, however the servers to run it arn't free, so anything is appreciated.
Consider supporting the team on Patreon

Posted

No, it makes it NOT EXIST AT ALL unless the code is being loaded by the DEDICATED SERVER.

 

If you are using SideOnly in your code, YOU ARE DOING IT WRONG. And should not be.

 

Yes, this is an important point that took me a while to understand.  The @SideOnly will only load the annotated class or method on the side referenced, whereas checking side with such things as isRemote() methods it is actually running (maybe even on both sides) but you can use the method to choose the code path.

 

Particularly confusing is that when you use a Client run configuration (like when you run your mod from Eclipse) there will still be code running on server side because Minecraft always has a server running, even in single player.  That is why some people prefer to call the run configuration a "combined client".

 

I think the @SideOnly is mostly useful during the time where FML is loading up and registering things since at that point you're not in a world.  That is why you see it a lot for the proxy and preInit() type stuff.  Also in cases where you're absolutely sure you won't need it in a given run configuration, like rendering and models only being needed on client, I guess it saves some memory to use @SideOnly to prevent the unnecessary classes from loading.

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

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.