package net.minecraft.world.level.storage; import java.util.Locale; import java.util.UUID; import net.minecraft.CrashReportCategory; import net.minecraft.CrashReportDetail; import net.minecraft.server.MinecraftServer; import net.minecraft.world.level.GameRules; import net.minecraft.world.level.GameType; import net.minecraft.world.level.LevelHeightAccessor; import net.minecraft.world.level.border.WorldBorder; import net.minecraft.world.level.timers.TimerQueue; import org.jetbrains.annotations.Nullable; public interface ServerLevelData extends WritableLevelData { /** * Get current world name */ String getLevelName(); /** * Sets whether it is thundering or not. */ void setThundering(boolean thundering); /** * Return the number of ticks until rain. */ int getRainTime(); /** * Sets the number of ticks until rain. */ void setRainTime(int time); /** * Defines the number of ticks until next thunderbolt. */ void setThunderTime(int time); /** * Returns the number of ticks until next thunderbolt. */ int getThunderTime(); @Override default void fillCrashReportCategory(CrashReportCategory crashReportCategory, LevelHeightAccessor level) { WritableLevelData.super.fillCrashReportCategory(crashReportCategory, level); crashReportCategory.setDetail("Level name", this::getLevelName); crashReportCategory.setDetail( "Level game mode", (CrashReportDetail)(() -> String.format( Locale.ROOT, "Game mode: %s (ID %d). Hardcore: %b. Commands: %b", this.getGameType().getName(), this.getGameType().getId(), this.isHardcore(), this.isAllowCommands() )) ); crashReportCategory.setDetail( "Level weather", (CrashReportDetail)(() -> String.format( Locale.ROOT, "Rain time: %d (now: %b), thunder time: %d (now: %b)", this.getRainTime(), this.isRaining(), this.getThunderTime(), this.isThundering() )) ); } int getClearWeatherTime(); void setClearWeatherTime(int time); int getWanderingTraderSpawnDelay(); void setWanderingTraderSpawnDelay(int delay); int getWanderingTraderSpawnChance(); void setWanderingTraderSpawnChance(int chance); @Nullable UUID getWanderingTraderId(); void setWanderingTraderId(UUID id); /** * Gets the GameType. */ GameType getGameType(); void setWorldBorder(WorldBorder.Settings serializer); WorldBorder.Settings getWorldBorder(); /** * Returns {@code true} if the World is initialized. */ boolean isInitialized(); /** * Sets the initialization status of the World. */ void setInitialized(boolean initialized); boolean isAllowCommands(); void setGameType(GameType type); TimerQueue getScheduledEvents(); void setGameTime(long time); /** * Set current world time */ void setDayTime(long time); GameRules getGameRules(); }