minecraft-src/net/minecraft/client/main/GameConfig.java
2025-09-18 12:27:44 +00:00

144 lines
4.2 KiB
Java

package net.minecraft.client.main;
import com.mojang.authlib.properties.PropertyMap;
import com.mojang.blaze3d.platform.DisplayData;
import java.io.File;
import java.net.Proxy;
import java.nio.file.Path;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.User;
import net.minecraft.client.resources.IndexedAssetSource;
import net.minecraft.util.StringUtil;
import org.jetbrains.annotations.Nullable;
@Environment(EnvType.CLIENT)
public class GameConfig {
public final GameConfig.UserData user;
public final DisplayData display;
public final GameConfig.FolderData location;
public final GameConfig.GameData game;
public final GameConfig.QuickPlayData quickPlay;
public GameConfig(GameConfig.UserData user, DisplayData display, GameConfig.FolderData location, GameConfig.GameData game, GameConfig.QuickPlayData quickPlay) {
this.user = user;
this.display = display;
this.location = location;
this.game = game;
this.quickPlay = quickPlay;
}
@Environment(EnvType.CLIENT)
public static class FolderData {
public final File gameDirectory;
public final File resourcePackDirectory;
public final File assetDirectory;
@Nullable
public final String assetIndex;
public FolderData(File gameDirectory, File resourcePackDirectory, File assetDirectory, @Nullable String assetIndex) {
this.gameDirectory = gameDirectory;
this.resourcePackDirectory = resourcePackDirectory;
this.assetDirectory = assetDirectory;
this.assetIndex = assetIndex;
}
public Path getExternalAssetSource() {
return this.assetIndex == null ? this.assetDirectory.toPath() : IndexedAssetSource.createIndexFs(this.assetDirectory.toPath(), this.assetIndex);
}
}
@Environment(EnvType.CLIENT)
public static class GameData {
public final boolean demo;
public final String launchVersion;
public final String versionType;
public final boolean disableMultiplayer;
public final boolean disableChat;
public final boolean captureTracyImages;
public final boolean renderDebugLabels;
public GameData(
boolean demo,
String launchVersion,
String versionType,
boolean disableMultiplayer,
boolean disableChat,
boolean captureTracyImages,
boolean renderDebugLabels
) {
this.demo = demo;
this.launchVersion = launchVersion;
this.versionType = versionType;
this.disableMultiplayer = disableMultiplayer;
this.disableChat = disableChat;
this.captureTracyImages = captureTracyImages;
this.renderDebugLabels = renderDebugLabels;
}
}
@Environment(EnvType.CLIENT)
public record QuickPlayData(@Nullable String logPath, GameConfig.QuickPlayVariant variant) {
public boolean isEnabled() {
return this.variant.isEnabled();
}
}
@Environment(EnvType.CLIENT)
public record QuickPlayDisabled() implements GameConfig.QuickPlayVariant {
@Override
public boolean isEnabled() {
return false;
}
}
@Environment(EnvType.CLIENT)
public record QuickPlayMultiplayerData(String serverAddress) implements GameConfig.QuickPlayVariant {
@Override
public boolean isEnabled() {
return !StringUtil.isBlank(this.serverAddress);
}
}
@Environment(EnvType.CLIENT)
public record QuickPlayRealmsData(String realmId) implements GameConfig.QuickPlayVariant {
@Override
public boolean isEnabled() {
return !StringUtil.isBlank(this.realmId);
}
}
@Environment(EnvType.CLIENT)
public record QuickPlaySinglePlayerData(@Nullable String worldId) implements GameConfig.QuickPlayVariant {
@Override
public boolean isEnabled() {
return true;
}
}
@Environment(EnvType.CLIENT)
public sealed interface QuickPlayVariant
permits GameConfig.QuickPlaySinglePlayerData,
GameConfig.QuickPlayMultiplayerData,
GameConfig.QuickPlayRealmsData,
GameConfig.QuickPlayDisabled {
GameConfig.QuickPlayVariant DISABLED = new GameConfig.QuickPlayDisabled();
boolean isEnabled();
}
@Environment(EnvType.CLIENT)
public static class UserData {
public final User user;
public final PropertyMap userProperties;
public final PropertyMap profileProperties;
public final Proxy proxy;
public UserData(User user, PropertyMap userProperties, PropertyMap profileProperties, Proxy proxy) {
this.user = user;
this.userProperties = userProperties;
this.profileProperties = profileProperties;
this.proxy = proxy;
}
}
}