jayhillx

SleepingPlayerUtils

May 28th, 2026
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.98 KB | None | 0 0
  1. package com.mystanica.dreamlands.handler.util;
  2.  
  3. import com.mystanica.dreamlands.common.data.level.DreamlandsPlayerEntry;
  4. import com.mystanica.dreamlands.common.data.level.DreamlandsSavedData;
  5. import com.mystanica.dreamlands.common.data.level.player.SleepingPlayerData;
  6. import com.mystanica.dreamlands.common.entity.misc.SleepingPlayer;
  7. import com.mystanica.dreamlands.common.worldgen.PortalTeleporter;
  8. import com.mystanica.dreamlands.init.DreamEntities;
  9. import net.minecraft.nbt.CompoundTag;
  10. import net.minecraft.server.level.ServerLevel;
  11. import net.minecraft.world.entity.Entity;
  12. import net.minecraft.world.entity.LivingEntity;
  13. import net.minecraft.world.entity.player.Player;
  14.  
  15. import javax.annotation.Nullable;
  16. import java.util.UUID;
  17. import java.util.function.Consumer;
  18.  
  19. public class SleepingPlayerUtils {
  20.  
  21.     /**
  22.      * create a sleeping player based from the actual player when they enter a dream.
  23.      *
  24.      * @param player - create the sleeping player from this player.
  25.      */
  26.     public static void createPlayersSleepingPlayer(ServerLevel level, Player player) {
  27.         DreamlandsSavedData savedData = DreamlandsSavedData.getData(level);
  28.         DreamlandsPlayerEntry playerEntry = savedData.getPlayerById(player.getUUID());
  29.  
  30.         /// create a new player entry if they do not exist already.
  31.         if (playerEntry == null) {
  32.             playerEntry = new DreamlandsPlayerEntry(new CompoundTag());
  33.             playerEntry.setPlayerId(player.getUUID());
  34.  
  35.             savedData.getPlayers().put(player.getUUID(), playerEntry); /// add the player entry into the overworld data.
  36.             savedData.setChanged();
  37.         }
  38.  
  39.         SleepingPlayerData playerData = playerEntry.getPlayerData();
  40.         if (playerData == null) {
  41.             playerData = createSleepingPlayerData(player);
  42.             playerEntry.savePlayerData(playerData);
  43.             savedData.setChanged();
  44.         }
  45.  
  46.         if (getSleepingPlayer(level, playerData.getSleepingPlayersId()) == null) {
  47.             spawnSleepingPlayer(level, player, playerData);
  48.             System.out.println("    created");
  49.         }
  50.     }
  51.  
  52.     private static SleepingPlayerData createSleepingPlayerData(Player player) {
  53.         SleepingPlayerData playerData = new SleepingPlayerData(new CompoundTag());
  54.         playerData.setProfileFromPlayer(player.getGameProfile());
  55.         playerData.setSavedDataFromPlayer(player.saveWithoutId(new CompoundTag()));
  56.         playerData.setSleepingPlayersId(UUID.randomUUID());
  57.  
  58.         player.getSleepingPos().ifPresent(playerData::setSleepingPos);
  59.         return playerData;
  60.     }
  61.  
  62.     public static void removePlayersSleepingPlayer(ServerLevel level, Player player) {
  63.         DreamlandsSavedData savedData = DreamlandsSavedData.getData(level);
  64.         DreamlandsPlayerEntry playerEntry = savedData.getPlayerById(player.getUUID());
  65.  
  66.         if (playerEntry != null) {
  67.             SleepingPlayerData playerData = playerEntry.getPlayerData();
  68.  
  69.             if (playerData != null) {
  70.                 getSleepingPlayer(level, playerData.getSleepingPlayersId(), sleepingPlayer -> {
  71.                     player.startSleeping(playerData.getSleepingPos());
  72.                     player.stopSleeping();
  73.  
  74.                     sleepingPlayer.remove(Entity.RemovalReason.DISCARDED);
  75.                     System.out.println("    removed");
  76.                 });
  77.  
  78.                 playerEntry.clearPlayerData(); /// remove the data from the saved data.
  79.                 savedData.setChanged();
  80.             }
  81.         }
  82.     }
  83.    
  84.     public static void unloadSleepingPlayer(ServerLevel level, Player player) {
  85.         DreamlandsSavedData savedData = DreamlandsSavedData.getData(level);
  86.         DreamlandsPlayerEntry playerEntry = savedData.getPlayerById(player.getUUID());
  87.  
  88.         if (playerEntry != null) {
  89.             SleepingPlayerData playerData = playerEntry.getPlayerData();
  90.  
  91.             if (playerData != null) {
  92.                 getSleepingPlayer(level, playerData.getSleepingPlayersId(), sleepingPlayer -> {
  93.                     sleepingPlayer.remove(Entity.RemovalReason.UNLOADED_WITH_PLAYER);
  94.                     System.out.println("    unloaded");
  95.                 });
  96.             }
  97.         }
  98.     }
  99.  
  100.     public static void reloadSleepingPlayer(ServerLevel level, Player player) {
  101.         DreamlandsSavedData savedData = DreamlandsSavedData.getData(level);
  102.         DreamlandsPlayerEntry playerEntry = savedData.getPlayerById(player.getUUID());
  103.  
  104.         if (playerEntry != null) {
  105.             SleepingPlayerData playerData = playerEntry.getPlayerData();
  106.  
  107.             if (playerData != null) {
  108.                 if (getSleepingPlayer(level, playerData.getSleepingPlayersId()) == null) {
  109.                     spawnSleepingPlayer(level, player, playerData);
  110.                     System.out.println("    reloaded");
  111.                 }
  112.             }
  113.         }
  114.     }
  115.  
  116.     private static void spawnSleepingPlayer(ServerLevel level, Player player, SleepingPlayerData playerData) {
  117.         SleepingPlayer sleepingPlayer = DreamEntities.SLEEPING_PLAYER.get().create(level);
  118.         if (sleepingPlayer == null) {
  119.             return;
  120.         }
  121.  
  122.         sleepingPlayer.load(playerData.getPlayerData());
  123.         sleepingPlayer.setGameProfile(playerData.getPlayerProfile());
  124.         sleepingPlayer.setUUID(playerData.getSleepingPlayersId());
  125.         sleepingPlayer.setCustomName(player.getName());
  126.         sleepingPlayer.setSleepingPos(playerData.getSleepingPos());
  127.         sleepingPlayer.copyPosition(player);
  128.  
  129.         level.addFreshEntity(sleepingPlayer);
  130.     }
  131.  
  132.     public static void getSleepingPlayer(ServerLevel level, UUID uuid, Consumer<SleepingPlayer> consumer) {
  133.         SleepingPlayer sleepingPlayer = getSleepingPlayer(level, uuid);
  134.  
  135.         if (sleepingPlayer != null) {
  136.             consumer.accept(sleepingPlayer);
  137.         }
  138.     }
  139.  
  140.     /**
  141.      * @param level - this needs to be the overworld, as the data is always saved in it.
  142.      * @param uuid -- the uuid of the sleeping player; grabbed from the players' overworld saved data.
  143.      *
  144.      * @return either the sleeping player, or null.
  145.      */
  146.     @Nullable
  147.     public static SleepingPlayer getSleepingPlayer(ServerLevel level, UUID uuid) {
  148.         Entity entity = level.getEntity(uuid);
  149.         if (entity instanceof SleepingPlayer sleepingPlayer) {
  150.             return sleepingPlayer;
  151.         }
  152.  
  153.         return null;
  154.     }
  155.  
  156.     @Nullable
  157.     public static Player getPlayerFromSleepingPlayer(SleepingPlayer sleepingPlayer) {
  158.         if (sleepingPlayer.getServer() != null && sleepingPlayer.getGameProfile() != null) {
  159.             UUID uuid = sleepingPlayer.getGameProfile().getId();
  160.             return sleepingPlayer.getServer().getPlayerList().getPlayer(uuid);
  161.         }
  162.  
  163.         return null;
  164.     }
  165.  
  166.     public static <T extends LivingEntity> void sendToDimension(T entity, ServerLevel destination) {
  167.         if (entity instanceof Player player) {
  168.             player.changeDimension(destination, new PortalTeleporter());
  169.         }
  170.     }
  171.  
  172. }
Advertisement
Add Comment
Please, Sign In to add comment