Class WorldManager

java.lang.Object
org.geysermc.geyser.level.WorldManager
Direct Known Subclasses:
GeyserWorldManager

public abstract class WorldManager extends Object
Class that manages or retrieves various information from the world. Everything in this class should be safe to return null or an empty value in the event that chunk caching or anything of the sort is disabled on the standalone version of Geyser.
  • Constructor Details

    • WorldManager

      public WorldManager()
  • Method Details

    • getBlockAt

      public final int getBlockAt(GeyserSession session, org.cloudburstmc.math.vector.Vector3i vector)
      Gets the Java block state at the specified location
      Parameters:
      session - the session
      vector - the position
      Returns:
      the block state at the specified location
    • getBlockAt

      public abstract int getBlockAt(GeyserSession session, int x, int y, int z)
      Gets the Java block state at the specified location
      Parameters:
      session - the session
      x - the x coordinate to get the block at
      y - the y coordinate to get the block at
      z - the z coordinate to get the block at
      Returns:
      the block state at the specified location
    • getBlockAtAsync

      public final CompletableFuture<Integer> getBlockAtAsync(GeyserSession session, org.cloudburstmc.math.vector.Vector3i vector)
    • getBlockAtAsync

      public CompletableFuture<Integer> getBlockAtAsync(GeyserSession session, int x, int y, int z)
    • getBlocksAt

      public int[] getBlocksAt(GeyserSession session, org.geysermc.erosion.util.BlockPositionIterator iter)
    • hasOwnChunkCache

      public abstract boolean hasOwnChunkCache()
      Checks whether or not this world manager requires a separate chunk cache/has access to more block data than the chunk cache.

      Some world managers (e.g. Spigot) can provide access to block data outside of the chunk cache, and even with chunk caching disabled. This method provides a means to check if this manager has this capability.

      Returns:
      whether or not this world manager has access to more block data than the chunk cache
    • sendLecternData

      public abstract void sendLecternData(GeyserSession session, int x, int y, int z)
      Sigh.
      So, on Java Edition, the lectern is an inventory. Java opens it and gets the contents of the book there. On Bedrock, the lectern contents are part of the block entity tag. Therefore, Bedrock expects to have the contents of the lectern ready and present in the world. If the contents are not there, it takes at least two clicks for the lectern to update the tag and then present itself.
      We solve this problem by querying all loaded lecterns, where possible, and sending their information in a block entity tag.

      Note that the lectern data may be sent asynchronously.

      Parameters:
      session - the session of the player
      x - the x coordinate of the lectern
      y - the y coordinate of the lectern
      z - the z coordinate of the lectern
    • sendLecternData

      public abstract void sendLecternData(GeyserSession session, int x, int z, List<com.github.steveice10.mc.protocol.data.game.level.block.BlockEntityInfo> blockEntityInfos)
      Parameters:
      x - chunk x
      z - chunk z
      blockEntityInfos - a list of coordinates (chunk local) to grab lecterns from.
    • shouldExpectLecternHandled

      public abstract boolean shouldExpectLecternHandled(GeyserSession session)
      Returns:
      whether we should expect lectern data to update, or if we have to fall back on a workaround.
    • setGameRule

      public void setGameRule(GeyserSession session, String name, Object value)
      Updates a gamerule value on the Java server
      Parameters:
      session - The session of the user that requested the change
      name - The gamerule to change
      value - The new value for the gamerule
    • getGameRuleBool

      public abstract boolean getGameRuleBool(GeyserSession session, GameRule gameRule)
      Gets a gamerule value as a boolean
      Parameters:
      session - The session of the user that requested the value
      gameRule - The gamerule to fetch the value of
      Returns:
      The boolean representation of the value
    • getGameRuleInt

      public abstract int getGameRuleInt(GeyserSession session, GameRule gameRule)
      Get a gamerule value as an integer
      Parameters:
      session - The session of the user that requested the value
      gameRule - The gamerule to fetch the value of
      Returns:
      The integer representation of the value
    • setPlayerGameMode

      public void setPlayerGameMode(GeyserSession session, com.github.steveice10.mc.protocol.data.game.entity.player.GameMode gameMode)
      Change the game mode of the given session
      Parameters:
      session - The session of the player to change the game mode of
      gameMode - The game mode to change the player to
    • getDefaultGameMode

      public abstract com.github.steveice10.mc.protocol.data.game.entity.player.GameMode getDefaultGameMode(GeyserSession session)
      Get the default game mode of the server
      Parameters:
      session - the player requesting the default game mode
      Returns:
      the default game mode of the server, or Survival if unknown.
    • setDefaultGameMode

      public void setDefaultGameMode(GeyserSession session, com.github.steveice10.mc.protocol.data.game.entity.player.GameMode gameMode)
      Change the default game mode of the session's server
      Parameters:
      session - the player making the change
      gameMode - the new default game mode
    • setDifficulty

      public void setDifficulty(GeyserSession session, com.github.steveice10.mc.protocol.data.game.setting.Difficulty difficulty)
      Change the difficulty of the Java server
      Parameters:
      session - The session of the user that requested the change
      difficulty - The difficulty to change to
    • hasPermission

      public abstract boolean hasPermission(GeyserSession session, String permission)
      Checks if the given session's player has a permission
      Parameters:
      session - The session of the player to check the permission of
      permission - The permission node to check
      Returns:
      True if the player has the requested permission, false if not
    • getBiomeIdentifiers

      public String @Nullable [] getBiomeIdentifiers(boolean withTags)
      Returns a list of biome identifiers available on the server.
    • getPickItemNbt

      public @NonNull CompletableFuture<@Nullable com.github.steveice10.opennbt.tag.builtin.CompoundTag> getPickItemNbt(GeyserSession session, int x, int y, int z, boolean addNbtData)
      Used for pick block, so we don't need to cache more data than necessary.
      Returns:
      expected NBT for this item.