tutorial:persistent_states
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
tutorial:persistent_states [2023/09/10 15:27] – It was noticed people were having trouble with the networking aspect of persistent state, so this version seeks to address that. jmanc3 | tutorial:persistent_states [2024/04/25 14:06] (current) – mayaqq | ||
---|---|---|---|
Line 128: | Line 128: | ||
// ... (Previously written code) | // ... (Previously written code) | ||
- | public static StateSaverAndLoader createFromNbt(NbtCompound tag) { | + | public static StateSaverAndLoader createFromNbt(NbtCompound tag, RegistryWrapper.WrapperLookup registryLookup) { |
StateSaverAndLoader state = new StateSaverAndLoader(); | StateSaverAndLoader state = new StateSaverAndLoader(); | ||
state.totalDirtBlocksBroken = tag.getInt(" | state.totalDirtBlocksBroken = tag.getInt(" | ||
Line 136: | Line 136: | ||
</ | </ | ||
- | This function does the opposite of '' | + | This function does the opposite of '' |
* Note: how we pull out the int we stored earlier with '' | * Note: how we pull out the int we stored earlier with '' | ||
- | Now we just need to add one more utility function which hooks everything up together. This function will take a '' | + | Now we just need to add one more utility function which hooks everything up together. This function will take a '' |
<code java> | <code java> | ||
Line 147: | Line 147: | ||
// ... (Previously written code) | // ... (Previously written code) | ||
- | | + | |
- | * This function gets the 'PersistentStateManager' | + | |
- | * It does this by calling ' | + | |
- | */ | + | null // Supposed to be an 'DataFixTypes' |
+ | ); | ||
public static StateSaverAndLoader getServerState(MinecraftServer server) { | public static StateSaverAndLoader getServerState(MinecraftServer server) { | ||
+ | // (Note: arbitrary choice to use ' | ||
PersistentStateManager persistentStateManager = server.getWorld(World.OVERWORLD).getPersistentStateManager(); | PersistentStateManager persistentStateManager = server.getWorld(World.OVERWORLD).getPersistentStateManager(); | ||
- | StateSaverAndLoader | + | |
- | StateSaverAndLoader:: | + | // stores it inside the ' |
- | StateSaverAndLoader::new, | + | // ' |
- | | + | StateSaverAndLoader |
- | | + | |
// If state is not marked dirty, when Minecraft closes, ' | // If state is not marked dirty, when Minecraft closes, ' | ||
Line 191: | Line 193: | ||
} | } | ||
- | public static StateSaverAndLoader createFromNbt(NbtCompound tag) { | + | public static StateSaverAndLoader createFromNbt(NbtCompound tag, RegistryWrapper.WrapperLookup registryLookup) { |
StateSaverAndLoader state = new StateSaverAndLoader(); | StateSaverAndLoader state = new StateSaverAndLoader(); | ||
state.totalDirtBlocksBroken = tag.getInt(" | state.totalDirtBlocksBroken = tag.getInt(" | ||
Line 197: | Line 199: | ||
} | } | ||
- | | + | |
- | * This function gets the 'PersistentStateManager' | + | |
- | * It does this by calling ' | + | |
- | */ | + | null // Supposed to be an 'DataFixTypes' |
+ | ); | ||
public static StateSaverAndLoader getServerState(MinecraftServer server) { | public static StateSaverAndLoader getServerState(MinecraftServer server) { | ||
+ | // (Note: arbitrary choice to use ' | ||
PersistentStateManager persistentStateManager = server.getWorld(World.OVERWORLD).getPersistentStateManager(); | PersistentStateManager persistentStateManager = server.getWorld(World.OVERWORLD).getPersistentStateManager(); | ||
- | StateSaverAndLoader | + | |
- | StateSaverAndLoader:: | + | // stores it inside the ' |
- | StateSaverAndLoader::new, | + | // ' |
- | | + | StateSaverAndLoader |
- | | + | |
// If state is not marked dirty, when Minecraft closes, ' | // If state is not marked dirty, when Minecraft closes, ' | ||
Line 279: | Line 283: | ||
<code java> | <code java> | ||
class PlayerData { | class PlayerData { | ||
- | int dirtBlocksBroken = 0; | + | |
} | } | ||
</ | </ | ||
Line 424: | Line 428: | ||
} | } | ||
- | public static StateSaverAndLoader createFromNbt(NbtCompound tag) { | + | public static StateSaverAndLoader createFromNbt(NbtCompound tag, RegistryWrapper.WrapperLookup registryLookup) { |
StateSaverAndLoader state = new StateSaverAndLoader(); | StateSaverAndLoader state = new StateSaverAndLoader(); | ||
state.totalDirtBlocksBroken = tag.getInt(" | state.totalDirtBlocksBroken = tag.getInt(" | ||
Line 482: | Line 486: | ||
} | } | ||
- | public static StateSaverAndLoader createFromNbt(NbtCompound tag) { | + | public static StateSaverAndLoader createFromNbt(NbtCompound tag, RegistryWrapper.WrapperLookup registryLookup) { |
StateSaverAndLoader state = new StateSaverAndLoader(); | StateSaverAndLoader state = new StateSaverAndLoader(); | ||
state.totalDirtBlocksBroken = tag.getInt(" | state.totalDirtBlocksBroken = tag.getInt(" | ||
Line 499: | Line 503: | ||
} | } | ||
- | | + | |
- | * This function gets the 'PersistentStateManager' | + | |
- | * It does this by calling ' | + | |
- | */ | + | null // Supposed to be an 'DataFixTypes' |
+ | ); | ||
public static StateSaverAndLoader getServerState(MinecraftServer server) { | public static StateSaverAndLoader getServerState(MinecraftServer server) { | ||
+ | // (Note: arbitrary choice to use ' | ||
PersistentStateManager persistentStateManager = server.getWorld(World.OVERWORLD).getPersistentStateManager(); | PersistentStateManager persistentStateManager = server.getWorld(World.OVERWORLD).getPersistentStateManager(); | ||
- | StateSaverAndLoader | + | |
- | StateSaverAndLoader:: | + | // stores it inside the ' |
- | StateSaverAndLoader::new, | + | // ' |
- | | + | StateSaverAndLoader |
- | | + | |
// If state is not marked dirty, when Minecraft closes, ' | // If state is not marked dirty, when Minecraft closes, ' | ||
Line 535: | Line 541: | ||
Running the client now, all our player-specific data is correctly saved. | Running the client now, all our player-specific data is correctly saved. | ||
- | | + | ==== Important Caveat ==== |
+ | |||
+ | | ||
Just remember if you add new fields to '' | Just remember if you add new fields to '' | ||
Line 640: | Line 648: | ||
* Note: The '' | * Note: The '' | ||
- | | + | ==== Important Caveat ==== |
+ | |||
+ | | ||
====== More Involved Player Data ====== | ====== More Involved Player Data ====== | ||
Line 654: | Line 664: | ||
public class PlayerData { | public class PlayerData { | ||
- | int dirtBlocksBroken = 0; | + | |
public HashMap< | public HashMap< | ||
Line 704: | Line 714: | ||
} | } | ||
- | public static StateSaverAndLoader createFromNbt(NbtCompound tag) { | + | public static StateSaverAndLoader createFromNbt(NbtCompound tag, RegistryWrapper.WrapperLookup registryLookup) { |
StateSaverAndLoader state = new StateSaverAndLoader(); | StateSaverAndLoader state = new StateSaverAndLoader(); | ||
state.totalDirtBlocksBroken = tag.getInt(" | state.totalDirtBlocksBroken = tag.getInt(" | ||
Line 732: | Line 742: | ||
} | } | ||
- | | + | |
- | * This function gets the 'PersistentStateManager' | + | |
- | * It does this by calling ' | + | |
- | */ | + | null // Supposed to be an 'DataFixTypes' |
+ | ); | ||
public static StateSaverAndLoader getServerState(MinecraftServer server) { | public static StateSaverAndLoader getServerState(MinecraftServer server) { | ||
+ | // (Note: arbitrary choice to use ' | ||
PersistentStateManager persistentStateManager = server.getWorld(World.OVERWORLD).getPersistentStateManager(); | PersistentStateManager persistentStateManager = server.getWorld(World.OVERWORLD).getPersistentStateManager(); | ||
- | StateSaverAndLoader | + | |
- | StateSaverAndLoader:: | + | // stores it inside the ' |
- | StateSaverAndLoader::new, | + | // ' |
- | | + | StateSaverAndLoader |
- | | + | |
// If state is not marked dirty, when Minecraft closes, ' | // If state is not marked dirty, when Minecraft closes, ' |
tutorial/persistent_states.1694359671.txt.gz · Last modified: 2023/09/10 15:27 by jmanc3