Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

pre shutdown event


guid118
 Share

Recommended Posts

hey all,

i cant seem to find an event that triggers before the server shuts down.

I have found ServerStoppingEvent, but this event crashes the server because:
 

Caused by: java.lang.IllegalArgumentException: Listener for event class net.minecraftforge.event.server.ServerStoppingEvent takes an argument that is not a subtype of the base type interface net.minecraftforge.fml.event.IModBusEvent

 

Link to comment
Share on other sites

3 minutes ago, diesieben07 said:

What do you need this event for?

The error you showed is caused by you using the wrong event bus for the event.

I need to save an HashMap to the config

Link to comment
Share on other sites

7 minutes ago, diesieben07 said:

Why are you changing the user's config file?

I am changing the server config file, and i have to save data to it. (i want the data to be easily accessible and changeable)

Would there be a different way to save this per-player data? its just three integers per player

Link to comment
Share on other sites

Config files are not suitable for saving per player data. Config files are intended to be changed by the user to configure your mod. If your mod changes the config file on its own, this defeats the purpose of a config file, using which the user can decide how your mod behaves.

If you want to save per-player data you need to use capabilities.

For very simple data structures, you can also use Entity#getPersistentData for the player. If you want the data to persist after death, store it under the sub-tag Player.PERSISTED_NBT_TAGNote that in both cases (persisting through death or not) you must use a sub-tag based on your ModID, to avoid collisions with other mods as this is a shared data storage. I would only recommend using getPersistentData for very simple data structures, as it requires constant (de-)serialization from and to NBT.

Link to comment
Share on other sites

Posted (edited)
1 hour ago, diesieben07 said:

Config files are not suitable for saving per player data. Config files are intended to be changed by the user to configure your mod. If your mod changes the config file on its own, this defeats the purpose of a config file, using which the user can decide how your mod behaves.

If you want to save per-player data you need to use capabilities.

For very simple data structures, you can also use Entity#getPersistentData for the player. If you want the data to persist after death, store it under the sub-tag Player.PERSISTED_NBT_TAGNote that in both cases (persisting through death or not) you must use a sub-tag based on your ModID, to avoid collisions with other mods as this is a shared data storage. I would only recommend using getPersistentData for very simple data structures, as it requires constant (de-)serialization from and to NBT.

So, if I understand correctly, capabilities are NBT tags?

I want to make a method that saves an integer to a tag created by my mod, but I'm not entirely sure how to do that.

Edited by guid118
Link to comment
Share on other sites

38 minutes ago, guid118 said:

So, if I understand correctly, capabilities are NBT tags?

No. Capabilities are just that: capabilities of an object. You can ask CapabilityProviders (this includes entities, block entities, etc.) if they have a certain capability. For example, "do you have an inventory"? If so, the object will either give you an implementation for that capability, which in this case would let you access the object's inventory - or it will report that it does not havve the capability you asked for.

Capabilities can also save data. Staying with the inventory example, the inventory obviously needs to save data. For this NBT is used, like everywhere else in the game.

Additionally you can also attach capabilities to "foreign objects" (i.e. things your mod has not created, such as the player). For this you use AttachCapabilitiesEvent. By this mechanism you can teach the player object a new capability, which can also save data. In your case this capability would simply hold whatever values you want to store.

41 minutes ago, guid118 said:

I want to make a method that saves an integer to a tag created by my mod, but I'm not entirely sure how to do that.

Refer to the documentation about capabilities that I linked. NBT is only for saving to disk. At runtime your capability implementation will simply have 3 int fields.

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
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.

 Share



×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.