User Tools

Site Tools


tutorial:persistent_states

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revisionBoth sides next 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. jmanc3tutorial:persistent_states [2023/09/28 05:28] – Updated for fabric 1.20.2 jmanc3
Line 147: Line 147:
     // ... (Previously written code)     // ... (Previously written code)
  
-    /** 
-     * This function gets the 'PersistentStateManager' and creates or returns the filled in 'StateSaveAndLoader'. 
-     * It does this by calling 'StateSaveAndLoader::createFromNbt' passing it the previously saved 'NbtCompound' we wrote in 'writeNbt'. 
-     */ 
     public static StateSaverAndLoader getServerState(MinecraftServer server) {     public static StateSaverAndLoader getServerState(MinecraftServer server) {
 +        // (Note: arbitrary choice to use 'World.OVERWORLD' instead of 'World.END' or 'World.NETHER' Any work)
         PersistentStateManager persistentStateManager = server.getWorld(World.OVERWORLD).getPersistentStateManager();         PersistentStateManager persistentStateManager = server.getWorld(World.OVERWORLD).getPersistentStateManager();
  
 +        // The first time the following 'getOrCreate' function is called, it creates a brand new 'StateSaverAndLoader' and
 +        // stores it inside the 'PersistentStateManager'. The subsequent calls to 'getOrCreate' pass in the saved
 +        // 'StateSaverAndLoader' NBT on disk to our function 'StateSaverAndLoader::createFromNbt'.
 +        //
 +        // (Note: 'DataFixTypes.LEVEL' is used as it's a required parameter but the decision to use 'DataFixTypes.LEVEL' specifically is arbitrary.)
         StateSaverAndLoader state = persistentStateManager.getOrCreate(         StateSaverAndLoader state = persistentStateManager.getOrCreate(
-                StateSaverAndLoader::createFromNbt, +                new Type<>(StateSaverAndLoader::new, StateSaverAndLoader::createFromNbt, DataFixTypes.LEVEL)
-                StateSaverAndLoader::new+                ExampleMod.MOD_ID);
-                ExampleMod.MOD_ID +
-        );+
  
         // If state is not marked dirty, when Minecraft closes, 'writeNbt' won't be called and therefore nothing will be saved.         // If state is not marked dirty, when Minecraft closes, 'writeNbt' won't be called and therefore nothing will be saved.
Line 197: Line 197:
     }     }
  
-    /** 
-     * This function gets the 'PersistentStateManager' and creates or returns the filled in 'StateSaveAndLoader'. 
-     * It does this by calling 'StateSaveAndLoader::createFromNbt' passing it the previously saved 'NbtCompound' we wrote in 'writeNbt'. 
-     */ 
     public static StateSaverAndLoader getServerState(MinecraftServer server) {     public static StateSaverAndLoader getServerState(MinecraftServer server) {
 +        // (Note: arbitrary choice to use 'World.OVERWORLD' instead of 'World.END' or 'World.NETHER' Any work)
         PersistentStateManager persistentStateManager = server.getWorld(World.OVERWORLD).getPersistentStateManager();         PersistentStateManager persistentStateManager = server.getWorld(World.OVERWORLD).getPersistentStateManager();
  
 +        // The first time the following 'getOrCreate' function is called, it creates a brand new 'StateSaverAndLoader' and
 +        // stores it inside the 'PersistentStateManager'. The subsequent calls to 'getOrCreate' pass in the saved
 +        // 'StateSaverAndLoader' NBT on disk to our function 'StateSaverAndLoader::createFromNbt'.
 +        //
 +        // (Note: 'DataFixTypes.LEVEL' is used as it's a required parameter but the decision to use 'DataFixTypes.LEVEL' specifically is arbitrary.)
         StateSaverAndLoader state = persistentStateManager.getOrCreate(         StateSaverAndLoader state = persistentStateManager.getOrCreate(
-                StateSaverAndLoader::createFromNbt, +                new Type<>(StateSaverAndLoader::new, StateSaverAndLoader::createFromNbt, DataFixTypes.LEVEL)
-                StateSaverAndLoader::new+                ExampleMod.MOD_ID);
-                ExampleMod.MOD_ID +
-        );+
  
         // If state is not marked dirty, when Minecraft closes, 'writeNbt' won't be called and therefore nothing will be saved.         // If state is not marked dirty, when Minecraft closes, 'writeNbt' won't be called and therefore nothing will be saved.
Line 499: Line 499:
     }     }
  
-    /** 
-     * This function gets the 'PersistentStateManager' and creates or returns the filled in 'StateSaveAndLoader'. 
-     * It does this by calling 'StateSaveAndLoader::createFromNbt' passing it the previously saved 'NbtCompound' we wrote in 'writeNbt'. 
-     */ 
     public static StateSaverAndLoader getServerState(MinecraftServer server) {     public static StateSaverAndLoader getServerState(MinecraftServer server) {
 +        // (Note: arbitrary choice to use 'World.OVERWORLD' instead of 'World.END' or 'World.NETHER' Any work)
         PersistentStateManager persistentStateManager = server.getWorld(World.OVERWORLD).getPersistentStateManager();         PersistentStateManager persistentStateManager = server.getWorld(World.OVERWORLD).getPersistentStateManager();
  
 +        // The first time the following 'getOrCreate' function is called, it creates a brand new 'StateSaverAndLoader' and
 +        // stores it inside the 'PersistentStateManager'. The subsequent calls to 'getOrCreate' pass in the saved
 +        // 'StateSaverAndLoader' NBT on disk to our function 'StateSaverAndLoader::createFromNbt'.
 +        //
 +        // (Note: 'DataFixTypes.LEVEL' is used as it's a required parameter but the decision to use 'DataFixTypes.LEVEL' specifically is arbitrary.)
         StateSaverAndLoader state = persistentStateManager.getOrCreate(         StateSaverAndLoader state = persistentStateManager.getOrCreate(
-                StateSaverAndLoader::createFromNbt, +                new Type<>(StateSaverAndLoader::new, StateSaverAndLoader::createFromNbt, DataFixTypes.LEVEL)
-                StateSaverAndLoader::new+                ExampleMod.MOD_ID);
-                ExampleMod.MOD_ID +
-        );+
  
         // If state is not marked dirty, when Minecraft closes, 'writeNbt' won't be called and therefore nothing will be saved.         // If state is not marked dirty, when Minecraft closes, 'writeNbt' won't be called and therefore nothing will be saved.
Line 732: Line 732:
     }     }
  
-    /** 
-     * This function gets the 'PersistentStateManager' and creates or returns the filled in 'StateSaveAndLoader'. 
-     * It does this by calling 'StateSaveAndLoader::createFromNbt' passing it the previously saved 'NbtCompound' we wrote in 'writeNbt'. 
-     */ 
     public static StateSaverAndLoader getServerState(MinecraftServer server) {     public static StateSaverAndLoader getServerState(MinecraftServer server) {
 +        // (Note: arbitrary choice to use 'World.OVERWORLD' instead of 'World.END' or 'World.NETHER' Any work)
         PersistentStateManager persistentStateManager = server.getWorld(World.OVERWORLD).getPersistentStateManager();         PersistentStateManager persistentStateManager = server.getWorld(World.OVERWORLD).getPersistentStateManager();
  
 +        // The first time the following 'getOrCreate' function is called, it creates a brand new 'StateSaverAndLoader' and
 +        // stores it inside the 'PersistentStateManager'. The subsequent calls to 'getOrCreate' pass in the saved
 +        // 'StateSaverAndLoader' NBT on disk to our function 'StateSaverAndLoader::createFromNbt'.
 +        //
 +        // (Note: 'DataFixTypes.LEVEL' is used as it's a required parameter but the decision to use 'DataFixTypes.LEVEL' specifically is arbitrary.)
         StateSaverAndLoader state = persistentStateManager.getOrCreate(         StateSaverAndLoader state = persistentStateManager.getOrCreate(
-                StateSaverAndLoader::createFromNbt, +                new Type<>(StateSaverAndLoader::new, StateSaverAndLoader::createFromNbt, DataFixTypes.LEVEL)
-                StateSaverAndLoader::new+                ExampleMod.MOD_ID);
-                ExampleMod.MOD_ID +
-        );+
  
         // If state is not marked dirty, when Minecraft closes, 'writeNbt' won't be called and therefore nothing will be saved.         // If state is not marked dirty, when Minecraft closes, 'writeNbt' won't be called and therefore nothing will be saved.
tutorial/persistent_states.txt · Last modified: 2024/04/25 14:06 by mayaqq