mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-10-22 08:07:42 +00:00
Dicing things up a little
- Trying to slim this beauty down to a size 6. - Shes a size 7.1
This commit is contained in:
1 parent
d10d70a894
commit
f2887632fe
50 files changed
+668
-491
No files matched your search
@@ -46,7 +46,7 @@ public final class CapabilitySnapshot {
|
||||
private final Method removeLevelMethod;
|
||||
private final String paperLikeResolution;
|
||||
|
||||
private CapabilitySnapshot(
|
||||
CapabilitySnapshot(
|
||||
ServerFamily serverFamily,
|
||||
boolean regionizedRuntime,
|
||||
Object worldsProvider,
|
||||
@@ -259,94 +259,6 @@ public final class CapabilitySnapshot {
|
||||
);
|
||||
}
|
||||
|
||||
public static CapabilitySnapshot forTesting(ServerFamily serverFamily, boolean regionizedRuntime, boolean worldsProviderHealthy, boolean paperLikeRuntimeHealthy) {
|
||||
Object minecraftServer = paperLikeRuntimeHealthy ? new TestingPaperLikeServer("datapack-registry", "server-registry") : null;
|
||||
Method createLevelMethod = null;
|
||||
Field worldLoaderContextField = null;
|
||||
Method serverRegistryAccessMethod = null;
|
||||
try {
|
||||
createLevelMethod = paperLikeRuntimeHealthy
|
||||
? TestingPaperLikeServer.class.getDeclaredMethod("createLevel", Object.class, Object.class, Object.class)
|
||||
: null;
|
||||
worldLoaderContextField = paperLikeRuntimeHealthy
|
||||
? CapabilityResolution.resolveField(TestingPaperLikeServer.class, "worldLoaderContext")
|
||||
: null;
|
||||
serverRegistryAccessMethod = paperLikeRuntimeHealthy
|
||||
? CapabilityResolution.resolveServerRegistryAccessMethod(TestingPaperLikeServer.class)
|
||||
: null;
|
||||
} catch (NoSuchMethodException | NoSuchFieldException e) {
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
return new CapabilitySnapshot(
|
||||
serverFamily,
|
||||
regionizedRuntime,
|
||||
worldsProviderHealthy ? new Object() : null,
|
||||
worldsProviderHealthy ? Object.class : null,
|
||||
worldsProviderHealthy ? Object.class : null,
|
||||
worldsProviderHealthy ? "test-provider" : "inactive",
|
||||
null,
|
||||
minecraftServer,
|
||||
createLevelMethod,
|
||||
paperLikeRuntimeHealthy ? PaperLikeFlavor.CURRENT_INFO_AND_DATA : PaperLikeFlavor.UNSUPPORTED,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
worldLoaderContextField,
|
||||
serverRegistryAccessMethod,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
paperLikeRuntimeHealthy ? "available(test)" : "unsupported(test)"
|
||||
);
|
||||
}
|
||||
|
||||
public static CapabilitySnapshot forTestingRuntimeRegistries(ServerFamily serverFamily, boolean regionizedRuntime, Object datapackDimensions, Object serverRegistryAccess) {
|
||||
TestingPaperLikeServer minecraftServer = new TestingPaperLikeServer(datapackDimensions, serverRegistryAccess);
|
||||
Method createLevelMethod;
|
||||
Field worldLoaderContextField;
|
||||
Method registryAccessMethod;
|
||||
try {
|
||||
createLevelMethod = TestingPaperLikeServer.class.getDeclaredMethod("createLevel", Object.class, Object.class, Object.class);
|
||||
worldLoaderContextField = CapabilityResolution.resolveField(TestingPaperLikeServer.class, "worldLoaderContext");
|
||||
registryAccessMethod = CapabilityResolution.resolveServerRegistryAccessMethod(TestingPaperLikeServer.class);
|
||||
} catch (NoSuchMethodException | NoSuchFieldException e) {
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
return new CapabilitySnapshot(
|
||||
serverFamily,
|
||||
regionizedRuntime,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
"inactive",
|
||||
null,
|
||||
minecraftServer,
|
||||
createLevelMethod,
|
||||
PaperLikeFlavor.CURRENT_INFO_AND_DATA,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
worldLoaderContextField,
|
||||
registryAccessMethod,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
"available(test-runtime-registries)"
|
||||
);
|
||||
}
|
||||
|
||||
public ServerFamily serverFamily() {
|
||||
return serverFamily;
|
||||
}
|
||||
@@ -578,35 +490,4 @@ public final class CapabilitySnapshot {
|
||||
return new Object[]{null, null, null, "inactive(service scan found nothing)"};
|
||||
}
|
||||
|
||||
private static final class TestingPaperLikeServer {
|
||||
private final TestingWorldLoaderContext worldLoaderContext;
|
||||
private final Object registryAccess;
|
||||
|
||||
private TestingPaperLikeServer(Object datapackDimensions, Object registryAccess) {
|
||||
this.worldLoaderContext = new TestingWorldLoaderContext(datapackDimensions);
|
||||
this.registryAccess = registryAccess;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private void createLevel(Object levelStem, Object worldLoadingInfoAndData, Object worldDataAndGenSettings) {
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private Object registryAccess() {
|
||||
return registryAccess;
|
||||
}
|
||||
}
|
||||
|
||||
private static final class TestingWorldLoaderContext {
|
||||
private final Object datapackDimensions;
|
||||
|
||||
private TestingWorldLoaderContext(Object datapackDimensions) {
|
||||
this.datapackDimensions = datapackDimensions;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private Object datapackDimensions() {
|
||||
return datapackDimensions;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,126 +0,0 @@
|
||||
package art.arcane.iris.core.localization;
|
||||
|
||||
import art.arcane.volmlib.util.localization.MessageKey;
|
||||
import art.arcane.volmlib.util.localization.PluralKey;
|
||||
import art.arcane.volmlib.util.localization.TextKey;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public final class ClientUiMessages {
|
||||
public static final TextKey VISION_TITLE = TextKey.of(
|
||||
"iris.client.vision.title",
|
||||
"Iris Vision"
|
||||
);
|
||||
public static final TextKey VISION_CONNECTING = TextKey.of(
|
||||
"iris.client.vision.connecting",
|
||||
"Connecting to Iris server..."
|
||||
);
|
||||
public static final TextKey VISION_NOT_CONNECTED = TextKey.of(
|
||||
"iris.client.vision.not_connected",
|
||||
"not connected"
|
||||
);
|
||||
public static final TextKey VISION_NOT_IRIS_WORLD = TextKey.of(
|
||||
"iris.client.vision.not_iris_world",
|
||||
"Not an Iris world"
|
||||
);
|
||||
public static final TextKey VISION_SERVER_WITHOUT_IRIS = TextKey.of(
|
||||
"iris.client.vision.server_without_iris",
|
||||
"This server does not run Iris"
|
||||
);
|
||||
public static final TextKey VISION_VERSION_MISMATCH = TextKey.of(
|
||||
"iris.client.vision.version_mismatch",
|
||||
"Iris version mismatch between client and server"
|
||||
);
|
||||
public static final TextKey VISION_NO_DIMENSION_DATA = TextKey.of(
|
||||
"iris.client.vision.no_dimension_data",
|
||||
"no dimension data"
|
||||
);
|
||||
public static final TextKey VISION_HEADER_DETAIL = TextKey.of(
|
||||
"iris.client.vision.header_detail",
|
||||
"{status} zoom {zoom} x{x} z{z}"
|
||||
);
|
||||
public static final TextKey VISION_FOOTER_HINT = TextKey.of(
|
||||
"iris.client.vision.footer_hint",
|
||||
"Drag to pan Scroll to zoom Esc to close"
|
||||
);
|
||||
public static final TextKey VISION_DIMENSION_PACK = TextKey.of(
|
||||
"iris.client.vision.dimension_pack",
|
||||
"{dimension} pack {pack}"
|
||||
);
|
||||
public static final TextKey CREATE_STRUCTURES_REQUIRED_TITLE = TextKey.of(
|
||||
"iris.client.create.structures_required_title",
|
||||
"Iris requires Generate Structures"
|
||||
);
|
||||
public static final TextKey CREATE_STRUCTURES_REQUIRED_BODY = TextKey.of(
|
||||
"iris.client.create.structures_required_body",
|
||||
"Iris places its own structures through the structure generation step, and refuses to load a world that was created with Generate Structures off. Turn Generate Structures back on, or choose a different world type."
|
||||
);
|
||||
public static final TextKey TOAST_STUDIO_HOTLOAD = TextKey.of("iris.client.toast.studio_hotload", "Studio Hotload");
|
||||
public static final PluralKey TOAST_CHANGED_FILES = PluralKey.of(
|
||||
"iris.client.toast.changed_files",
|
||||
"count",
|
||||
Map.of(
|
||||
"one", "{count} file",
|
||||
"other", "{count} files"
|
||||
)
|
||||
);
|
||||
public static final TextKey TOAST_RELOAD_FAILED = TextKey.of("iris.client.toast.reload_failed", "reload failed");
|
||||
public static final TextKey TOAST_RELOADED = TextKey.of("iris.client.toast.reloaded", "reloaded");
|
||||
public static final TextKey TOAST_PACK_FAILED = TextKey.of("iris.client.toast.pack_failed", "{pack} failed");
|
||||
public static final TextKey WHAT_TITLE = TextKey.of("iris.client.what.title", "Iris What");
|
||||
public static final TextKey WHAT_QUERYING = TextKey.of("iris.client.what.querying", "Querying {x}, {z}...");
|
||||
public static final TextKey WHAT_BIOME = TextKey.of("iris.client.what.biome", "Biome: {biome}");
|
||||
public static final TextKey WHAT_REGION = TextKey.of("iris.client.what.region", "Region: {region}");
|
||||
public static final TextKey WHAT_CAVE = TextKey.of("iris.client.what.cave", "Cave: {cave}");
|
||||
public static final TextKey WHAT_HEIGHT = TextKey.of("iris.client.what.height", "Height: {height} ({x}, {z})");
|
||||
public static final TextKey PREGEN_STATS = TextKey.of("iris.client.pregen.stats", "{done} / {total} ({percent}%)");
|
||||
public static final TextKey PREGEN_PAUSED = TextKey.of("iris.client.pregen.paused", "PAUSED");
|
||||
public static final TextKey PREGEN_STALE = TextKey.of("iris.client.pregen.stale", "no updates for {seconds}s");
|
||||
public static final TextKey PREGEN_RATE = TextKey.of("iris.client.pregen.rate", "{rate}/s");
|
||||
public static final TextKey PREGEN_RATE_ETA = TextKey.of("iris.client.pregen.rate_eta", "{rate}/s ETA {eta}");
|
||||
public static final TextKey DURATION_HOURS_MINUTES = TextKey.of("iris.client.duration.hours_minutes", "{hours}h {minutes}m");
|
||||
public static final TextKey DURATION_MINUTES_SECONDS = TextKey.of("iris.client.duration.minutes_seconds", "{minutes}m {seconds}s");
|
||||
public static final TextKey DURATION_SECONDS = TextKey.of("iris.client.duration.seconds", "{seconds}s");
|
||||
|
||||
private static final List<MessageKey> KEYS = List.of(
|
||||
VISION_TITLE,
|
||||
VISION_CONNECTING,
|
||||
VISION_NOT_CONNECTED,
|
||||
VISION_NOT_IRIS_WORLD,
|
||||
VISION_SERVER_WITHOUT_IRIS,
|
||||
VISION_VERSION_MISMATCH,
|
||||
VISION_NO_DIMENSION_DATA,
|
||||
VISION_HEADER_DETAIL,
|
||||
VISION_FOOTER_HINT,
|
||||
VISION_DIMENSION_PACK,
|
||||
CREATE_STRUCTURES_REQUIRED_TITLE,
|
||||
CREATE_STRUCTURES_REQUIRED_BODY,
|
||||
TOAST_STUDIO_HOTLOAD,
|
||||
TOAST_CHANGED_FILES,
|
||||
TOAST_RELOAD_FAILED,
|
||||
TOAST_RELOADED,
|
||||
TOAST_PACK_FAILED,
|
||||
WHAT_TITLE,
|
||||
WHAT_QUERYING,
|
||||
WHAT_BIOME,
|
||||
WHAT_REGION,
|
||||
WHAT_CAVE,
|
||||
WHAT_HEIGHT,
|
||||
PREGEN_STATS,
|
||||
PREGEN_PAUSED,
|
||||
PREGEN_STALE,
|
||||
PREGEN_RATE,
|
||||
PREGEN_RATE_ETA,
|
||||
DURATION_HOURS_MINUTES,
|
||||
DURATION_MINUTES_SECONDS,
|
||||
DURATION_SECONDS
|
||||
);
|
||||
|
||||
private ClientUiMessages() {
|
||||
}
|
||||
|
||||
public static List<MessageKey> keys() {
|
||||
return KEYS;
|
||||
}
|
||||
}
|
||||
@@ -568,15 +568,20 @@ public final class IrisLanguage {
|
||||
});
|
||||
}
|
||||
|
||||
private static void validateDownload(String locale, String raw) {
|
||||
LocalizationValidator.validate(CATALOG, List.of(parseOverlay("download:" + locale, locale, raw)))
|
||||
.throwIfInvalid();
|
||||
static void validateDownload(String locale, String raw) {
|
||||
LocaleOverlay overlay = parseDownloadedOverlay("download:" + locale, locale, raw);
|
||||
LocalizationValidator.validate(CATALOG, List.of(overlay)).throwIfInvalid();
|
||||
for (MessageKey key : CATALOG.keys()) {
|
||||
if (overlay.value(key.id()) == null) {
|
||||
throw new IllegalArgumentException("Downloaded Iris locale " + locale + " is incomplete: " + key.id());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static LocaleOverlay loadDownloadedOverlay(File root, String locale) {
|
||||
RemoteLanguageCatalog.CacheResult cached = remote(root).read(locale, IrisLanguage::validateDownload);
|
||||
if (cached.state() == RemoteLanguageCatalog.CacheState.VALID) {
|
||||
return parseOverlay(cached.file().toString(), locale, cached.content());
|
||||
return parseDownloadedOverlay(cached.file().toString(), locale, cached.content());
|
||||
}
|
||||
if (cached.failure() != null) {
|
||||
IrisLogging.error("Ignoring invalid downloaded Iris locale " + locale + ".");
|
||||
@@ -585,6 +590,17 @@ public final class IrisLanguage {
|
||||
return null;
|
||||
}
|
||||
|
||||
static LocaleOverlay parseDownloadedOverlay(String source, String locale, String raw) {
|
||||
LocaleOverlay parsed = parseOverlay(source, locale, raw);
|
||||
LocaleOverlay.Builder builder = LocaleOverlay.builder(source, locale);
|
||||
for (Map.Entry<String, MessageValue> entry : parsed.values().entrySet()) {
|
||||
if (CATALOG.key(entry.getKey()) != null) {
|
||||
builder.put(entry.getKey(), entry.getValue());
|
||||
}
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
static LocaleOverlay parseOverlay(String source, String locale, String raw) {
|
||||
JsonElement parsed = JsonParser.parseString(raw == null || raw.isBlank() ? "{}" : raw);
|
||||
if (!parsed.isJsonObject()) {
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package art.arcane.iris.core.localization;
|
||||
|
||||
import art.arcane.volmlib.util.localization.MessageKey;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface IrisMessageContributor {
|
||||
List<MessageKey> keys();
|
||||
}
|
||||
@@ -7,8 +7,14 @@ import art.arcane.volmlib.util.localization.TextKey;
|
||||
import art.arcane.volmlib.util.localization.VolmitLocales;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.ServiceLoader;
|
||||
|
||||
public final class IrisMessages {
|
||||
public static final TextKey PREGEN_ALREADY_RUNNING = TextKey.of(
|
||||
"iris.modded.irismoddedcommands.pregeneration_task_is_already_running_stop_it_first_with_iris",
|
||||
"A pregeneration task is already running. Stop it first with /iris pregen stop."
|
||||
);
|
||||
|
||||
public static final TextKey COMMAND_PERMISSION_DENIED = TextKey.of(
|
||||
"iris.command.permission_denied",
|
||||
"You lack the permission '{permission}'"
|
||||
@@ -67,6 +73,7 @@ public final class IrisMessages {
|
||||
);
|
||||
|
||||
private static final List<MessageKey> RUNTIME_KEYS = List.of(
|
||||
PREGEN_ALREADY_RUNNING,
|
||||
COMMAND_PERMISSION_DENIED,
|
||||
COMMAND_UNKNOWN,
|
||||
COMMAND_PLAYER_ONLY,
|
||||
@@ -101,16 +108,16 @@ public final class IrisMessages {
|
||||
builder.addAll(RUNTIME_KEYS);
|
||||
builder.addAll(BukkitCommandMessages.keys());
|
||||
builder.addAll(BukkitCommandMessagesExtended.keys());
|
||||
builder.addAll(ModdedCommandMessages.keys());
|
||||
builder.addAll(DirectorCommandMessages.keys());
|
||||
builder.addAll(ModdedHelpMessages.keys());
|
||||
builder.addAll(RuntimeUiMessages.keys());
|
||||
builder.addAll(BukkitRuntimeMessages.keys());
|
||||
builder.addAll(RuntimeProgressMessages.keys());
|
||||
builder.addAll(PackDownloadMessages.keys());
|
||||
builder.addAll(ClientUiMessages.keys());
|
||||
builder.addAll(BukkitUiMessages.keys());
|
||||
builder.addAll(DesktopUiMessages.keys());
|
||||
for (IrisMessageContributor contributor : ServiceLoader.load(IrisMessageContributor.class, IrisMessages.class.getClassLoader())) {
|
||||
builder.addAll(contributor.keys());
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
@@ -1,534 +0,0 @@
|
||||
package art.arcane.iris.core.localization;
|
||||
|
||||
import art.arcane.volmlib.util.localization.MessageKey;
|
||||
import art.arcane.volmlib.util.localization.TextKey;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public final class ModdedHelpMessages {
|
||||
public static final TextKey COMMAND_VERSION_PRINT_VERSION_INFORMATION = TextKey.of(
|
||||
"iris.modded.help.entry.command.version",
|
||||
"Print version information"
|
||||
);
|
||||
public static final TextKey COMMAND_INFO_LIST_LOADED_IRIS_DIMENSIONS_AND_PACK_DETAILS = TextKey.of(
|
||||
"iris.modded.help.entry.command.info",
|
||||
"List loaded Iris dimensions and pack details"
|
||||
);
|
||||
public static final TextKey COMMAND_WHAT_INSPECT_THE_IRIS_BIOME_REGION_CAVE_BIOME_SURFACE_AND_CHUNK_AT_YOUR = TextKey.of(
|
||||
"iris.modded.help.entry.command.what",
|
||||
"Inspect the Iris biome, region, cave biome, surface and chunk at your position, the block you look at, your held item, or nearby markers"
|
||||
);
|
||||
public static final TextKey GROUP_FIND_FIND_AND_TELEPORT_TO_IRIS_BIOMES_REGIONS_OBJECTS_IRIS_STRUCTURES_NATIVE_STRUCTURES = TextKey.of(
|
||||
"iris.modded.help.entry.group.find",
|
||||
"Find and teleport to Iris biomes, regions, objects, Iris structures, native structures and points of interest"
|
||||
);
|
||||
public static final TextKey COMMAND_TP_TELEPORT_YOURSELF_OR_A_NAMED_PLAYER_INTO_A_LOADED_IRIS_DIMENSION = TextKey.of(
|
||||
"iris.modded.help.entry.command.tp",
|
||||
"Teleport yourself or a named player into a loaded Iris dimension"
|
||||
);
|
||||
public static final TextKey COMMAND_EVACUATE_TELEPORT_EVERY_PLAYER_OUT_OF_AN_IRIS_DIMENSION_TO_THE_PRIMARY_WORLD = TextKey.of(
|
||||
"iris.modded.help.entry.command.evacuate",
|
||||
"Teleport every player out of an Iris dimension to the primary world spawn"
|
||||
);
|
||||
public static final TextKey COMMAND_SEED_PRINT_WORLD_AND_ENGINE_SEED_INFORMATION = TextKey.of(
|
||||
"iris.modded.help.entry.command.seed",
|
||||
"Print world and engine seed information"
|
||||
);
|
||||
public static final TextKey COMMAND_DEBUG_TOGGLE_IRIS_DEBUG_LOGGING_AND_SAVE_SETTINGS_JSON = TextKey.of(
|
||||
"iris.modded.help.entry.command.debug",
|
||||
"Toggle Iris debug logging and save iris.json"
|
||||
);
|
||||
public static final TextKey COMMAND_RELOAD_RELOAD_SETTINGS_JSON_ALSO_HOTLOADED_AUTOMATICALLY_EVERY_3S = TextKey.of(
|
||||
"iris.modded.help.entry.command.reload",
|
||||
"Reload iris.json (also hotloaded automatically every 3s)"
|
||||
);
|
||||
public static final TextKey COMMAND_DOWNLOAD_DOWNLOAD_A_PACK_PROJECT = TextKey.of(
|
||||
"iris.modded.help.entry.command.download",
|
||||
"Download a pack project"
|
||||
);
|
||||
public static final TextKey COMMAND_METRICS_PRINT_GENERATION_METRICS_FOR_YOUR_CURRENT_IRIS_DIMENSION = TextKey.of(
|
||||
"iris.modded.help.entry.command.metrics",
|
||||
"Print generation metrics for your current Iris dimension"
|
||||
);
|
||||
public static final TextKey COMMAND_REGEN_DELETE_AND_REGENERATE_NEARBY_CHUNKS_IN_PLACE = TextKey.of(
|
||||
"iris.modded.help.entry.command.regen",
|
||||
"Delete and regenerate nearby chunks in place"
|
||||
);
|
||||
public static final TextKey GROUP_PREGEN_PREGENERATE_AN_IRIS_DIMENSION = TextKey.of(
|
||||
"iris.modded.help.entry.group.pregen",
|
||||
"Pregenerate an Iris dimension"
|
||||
);
|
||||
public static final TextKey COMMAND_WAND_GET_AN_IRIS_OBJECT_WAND = TextKey.of(
|
||||
"iris.modded.help.entry.command.wand",
|
||||
"Get an Iris object wand"
|
||||
);
|
||||
public static final TextKey GROUP_OBJECT_OBJECT_WAND_SAVE_PASTE_ANALYZE_AND_UNDO_TOOLS = TextKey.of(
|
||||
"iris.modded.help.entry.group.object",
|
||||
"Object wand, save, paste, analyze and undo tools"
|
||||
);
|
||||
public static final TextKey GROUP_EDIT_OPEN_PACK_BIOME_REGION_AND_DIMENSION_JSON_FILES_IN_YOUR_DESKTOP_EDITOR = TextKey.of(
|
||||
"iris.modded.help.entry.group.edit",
|
||||
"Open pack biome, region and dimension json files in your desktop editor"
|
||||
);
|
||||
public static final TextKey COMMAND_CREATE_CREATE_AND_INJECT_A_PERSISTENT_IRIS_DIMENSION_QUOTE_PACK_DIMENSIONKEY_TO_PICK = TextKey.of(
|
||||
"iris.modded.help.entry.command.create",
|
||||
"Create and inject a persistent Iris dimension; quote pack:dimensionKey to pick a specific pack dimension"
|
||||
);
|
||||
public static final TextKey GROUP_STUDIO_PACK_PROJECT_CREATION_PACKAGING_AND_REPORTS = TextKey.of(
|
||||
"iris.modded.help.entry.group.studio",
|
||||
"Pack project creation, packaging and reports"
|
||||
);
|
||||
public static final TextKey GROUP_PACK_PACK_VALIDATION_AND_MAINTENANCE = TextKey.of(
|
||||
"iris.modded.help.entry.group.pack",
|
||||
"Pack validation and maintenance"
|
||||
);
|
||||
public static final TextKey GROUP_WORLD_RUNTIME_IRIS_DIMENSION_CREATION_REMOVAL_AND_STATUS = TextKey.of(
|
||||
"iris.modded.help.entry.group.world",
|
||||
"Runtime Iris dimension creation, removal and status"
|
||||
);
|
||||
public static final TextKey GROUP_DATAPACK_WORLD_DATAPACK_INSTALL_AND_STATUS_HELPERS = TextKey.of(
|
||||
"iris.modded.help.entry.group.datapack",
|
||||
"World datapack install and status helpers"
|
||||
);
|
||||
public static final TextKey GROUP_STRUCTURE_IRIS_STRUCTURE_INDEX_INFO_AND_PLACEMENT_TOOLS = TextKey.of(
|
||||
"iris.modded.help.entry.group.structure",
|
||||
"Iris structure index, info and placement tools"
|
||||
);
|
||||
public static final TextKey COMMAND_GOLDENHASH_GENERATE_DETERMINISTIC_BLOCK_HASHES_FOR_PARITY_TESTING = TextKey.of(
|
||||
"iris.modded.help.entry.command.goldenhash",
|
||||
"Generate deterministic block hashes for parity testing"
|
||||
);
|
||||
public static final TextKey GROUP_DEVELOPER_DEVELOPER_DIAGNOSTICS_NETWORK_INTERFACES_REGION_FILE_SCAN = TextKey.of(
|
||||
"iris.modded.help.entry.group.developer",
|
||||
"Developer diagnostics: network interfaces and region-file scan"
|
||||
);
|
||||
public static final TextKey COMMAND_BIOME_FIND_AN_IRIS_BIOME = TextKey.of(
|
||||
"iris.modded.help.entry.command.biome",
|
||||
"Find an Iris biome"
|
||||
);
|
||||
public static final TextKey COMMAND_REGION_FIND_AN_IRIS_REGION = TextKey.of(
|
||||
"iris.modded.help.entry.command.region",
|
||||
"Find an Iris region"
|
||||
);
|
||||
public static final TextKey COMMAND_OBJECT_FIND_AN_OBJECT_PLACEMENT = TextKey.of(
|
||||
"iris.modded.help.entry.command.object",
|
||||
"Find an object placement"
|
||||
);
|
||||
public static final TextKey COMMAND_STRUCTURE_FIND_AN_IRIS_PLACED_OR_NATIVE_DATAPACK_STRUCTURE = TextKey.of(
|
||||
"iris.modded.help.entry.command.structure",
|
||||
"Find an Iris-placed or native/datapack structure"
|
||||
);
|
||||
public static final TextKey COMMAND_POI_FIND_A_SUPPORTED_POINT_OF_INTEREST = TextKey.of(
|
||||
"iris.modded.help.entry.command.poi",
|
||||
"Find a supported point of interest"
|
||||
);
|
||||
public static final TextKey COMMAND_BIOME_OPEN_A_BIOME_JSON_IN_YOUR_DESKTOP_EDITOR_NO_KEY_OPENS_THE = TextKey.of(
|
||||
"iris.modded.help.entry.command.biome_2",
|
||||
"Open a biome json in your desktop editor; no key opens the biome at your position"
|
||||
);
|
||||
public static final TextKey COMMAND_REGION_OPEN_A_REGION_JSON_IN_YOUR_DESKTOP_EDITOR_NO_KEY_OPENS_THE = TextKey.of(
|
||||
"iris.modded.help.entry.command.region_2",
|
||||
"Open a region json in your desktop editor; no key opens the region at your position"
|
||||
);
|
||||
public static final TextKey COMMAND_DIMENSION_OPEN_THE_CURRENT_PACK_S_DIMENSION_JSON_IN_YOUR_DESKTOP_EDITOR = TextKey.of(
|
||||
"iris.modded.help.entry.command.dimension",
|
||||
"Open the current pack's dimension json in your desktop editor"
|
||||
);
|
||||
public static final TextKey COMMAND_START_START_PREGENERATION_RADIUS_IN_BLOCKS_RESUMABLE_CHECKPOINT_CACHE_ON_BY_DEFAULT_CENTER = TextKey.of(
|
||||
"iris.modded.help.entry.command.start",
|
||||
"Start pregeneration; radius in blocks, resumable checkpoint cache on by default, center via 'at <x> <z>', flags compose in any order"
|
||||
);
|
||||
public static final TextKey COMMAND_STOP_STOP_THE_ACTIVE_PREGENERATION_TASK = TextKey.of(
|
||||
"iris.modded.help.entry.command.stop",
|
||||
"Stop the active pregeneration task"
|
||||
);
|
||||
public static final TextKey COMMAND_PAUSE_PAUSE_OR_RESUME_PREGENERATION = TextKey.of(
|
||||
"iris.modded.help.entry.command.pause",
|
||||
"Pause or resume pregeneration"
|
||||
);
|
||||
public static final TextKey COMMAND_STATUS_SHOW_PREGENERATION_STATUS = TextKey.of(
|
||||
"iris.modded.help.entry.command.status",
|
||||
"Show pregeneration status"
|
||||
);
|
||||
public static final TextKey COMMAND_WAND_GET_AN_IRIS_OBJECT_WAND_2 = TextKey.of(
|
||||
"iris.modded.help.entry.command.wand_3",
|
||||
"Get an Iris object wand"
|
||||
);
|
||||
public static final TextKey COMMAND_DUST_GET_DUST_THAT_REVEALS_OBJECT_PLACEMENTS = TextKey.of(
|
||||
"iris.modded.help.entry.command.dust",
|
||||
"Get dust that reveals object placements"
|
||||
);
|
||||
public static final TextKey COMMAND_SAVE_SAVE_THE_SELECTED_WAND_VOLUME_AS_AN_OBJECT = TextKey.of(
|
||||
"iris.modded.help.entry.command.save",
|
||||
"Save the selected wand volume as an object"
|
||||
);
|
||||
public static final TextKey COMMAND_PASTE_PASTE_AN_OBJECT_AT_YOUR_POSITION_OR_A_GIVEN_POSITION_OPTIONALLY_ROTATED = TextKey.of(
|
||||
"iris.modded.help.entry.command.paste",
|
||||
"Paste an object at your position or a given position, optionally rotated"
|
||||
);
|
||||
public static final TextKey COMMAND_EXPAND_EXPAND_THE_WAND_SELECTION_IN_YOUR_LOOKING_DIRECTION = TextKey.of(
|
||||
"iris.modded.help.entry.command.expand",
|
||||
"Expand the wand selection in your looking direction"
|
||||
);
|
||||
public static final TextKey COMMAND_CONTRACT_CONTRACT_THE_WAND_SELECTION_IN_YOUR_LOOKING_DIRECTION = TextKey.of(
|
||||
"iris.modded.help.entry.command.contract",
|
||||
"Contract the wand selection in your looking direction"
|
||||
);
|
||||
public static final TextKey COMMAND_SHIFT_SHIFT_THE_WAND_SELECTION_IN_YOUR_LOOKING_DIRECTION = TextKey.of(
|
||||
"iris.modded.help.entry.command.shift",
|
||||
"Shift the wand selection in your looking direction"
|
||||
);
|
||||
public static final TextKey COMMAND_POSITION1_SET_SELECTION_POINT_1 = TextKey.of(
|
||||
"iris.modded.help.entry.command.position1",
|
||||
"Set selection point 1"
|
||||
);
|
||||
public static final TextKey COMMAND_POSITION2_SET_SELECTION_POINT_2 = TextKey.of(
|
||||
"iris.modded.help.entry.command.position2",
|
||||
"Set selection point 2"
|
||||
);
|
||||
public static final TextKey COMMAND_X_Y_AUTOSELECT_UP_AND_OUT = TextKey.of(
|
||||
"iris.modded.help.entry.command.x_y",
|
||||
"Autoselect up and out"
|
||||
);
|
||||
public static final TextKey COMMAND_X_Y_AUTOSELECT_UP_DOWN_AND_OUT = TextKey.of(
|
||||
"iris.modded.help.entry.command.x_y_2",
|
||||
"Autoselect up, down and out"
|
||||
);
|
||||
public static final TextKey COMMAND_ANALYZE_SHOW_OBJECT_COMPOSITION = TextKey.of(
|
||||
"iris.modded.help.entry.command.analyze",
|
||||
"Show object composition"
|
||||
);
|
||||
public static final TextKey COMMAND_SHRINK_SHRINK_AN_OBJECT_TO_ITS_MINIMUM_SIZE = TextKey.of(
|
||||
"iris.modded.help.entry.command.shrink",
|
||||
"Shrink an object to its minimum size"
|
||||
);
|
||||
public static final TextKey COMMAND_PLAUSIBILIZE_GROW_BRANCHES_SO_TREE_LEAVES_SURVIVE_VANILLA_DECAY = TextKey.of(
|
||||
"iris.modded.help.entry.command.plausibilize",
|
||||
"Grow branches so tree leaves survive vanilla decay"
|
||||
);
|
||||
public static final TextKey COMMAND_UNDO_UNDO_PASTED_OBJECTS = TextKey.of(
|
||||
"iris.modded.help.entry.command.undo",
|
||||
"Undo pasted objects"
|
||||
);
|
||||
public static final TextKey COMMAND_CREATE_CREATE_A_NEW_PACK_PROJECT = TextKey.of(
|
||||
"iris.modded.help.entry.command.create_2",
|
||||
"Create a new pack project"
|
||||
);
|
||||
public static final TextKey COMMAND_PACKAGE_PACKAGE_A_DIMENSION_INTO_A_COMPRESSED_FORMAT = TextKey.of(
|
||||
"iris.modded.help.entry.command.package",
|
||||
"Package a dimension into a compressed format"
|
||||
);
|
||||
public static final TextKey COMMAND_VERSION_PRINT_A_PACK_VERSION = TextKey.of(
|
||||
"iris.modded.help.entry.command.version_2",
|
||||
"Print a pack version"
|
||||
);
|
||||
public static final TextKey COMMAND_REGIONS_CALCULATE_NEARBY_REGION_DISTRIBUTION = TextKey.of(
|
||||
"iris.modded.help.entry.command.regions",
|
||||
"Calculate nearby region distribution"
|
||||
);
|
||||
public static final TextKey COMMAND_OPEN_OPEN_A_TEMPORARY_STUDIO_DIMENSION_FOR_A_PACK = TextKey.of(
|
||||
"iris.modded.help.entry.command.open",
|
||||
"Open a temporary studio dimension for a pack"
|
||||
);
|
||||
public static final TextKey COMMAND_CLOSE_CLOSE_THE_OPEN_STUDIO_DIMENSION_AND_DISCARD_ITS_WORLD = TextKey.of(
|
||||
"iris.modded.help.entry.command.close",
|
||||
"Close the open studio dimension and discard its world"
|
||||
);
|
||||
public static final TextKey COMMAND_TPSTUDIO_TELEPORT_INTO_THE_OPEN_STUDIO_DIMENSION = TextKey.of(
|
||||
"iris.modded.help.entry.command.tpstudio",
|
||||
"Teleport into the open studio dimension"
|
||||
);
|
||||
public static final TextKey COMMAND_STATUS_SHOW_THE_OPEN_STUDIO_DIMENSION_AND_ITS_PACK = TextKey.of(
|
||||
"iris.modded.help.entry.command.status_studio",
|
||||
"Show the open studio dimension and its pack"
|
||||
);
|
||||
public static final TextKey COMMAND_NOISE_OPEN_THE_NOISE_EXPLORER_GUI_ON_THE_SERVER_DISPLAY = TextKey.of(
|
||||
"iris.modded.help.entry.command.noise",
|
||||
"Open the Noise Explorer GUI on the server display"
|
||||
);
|
||||
public static final TextKey COMMAND_MAP_OPEN_THE_VISION_MAP_GUI_ON_THE_SERVER_DISPLAY = TextKey.of(
|
||||
"iris.modded.help.entry.command.map",
|
||||
"Open the Vision map GUI on the server display"
|
||||
);
|
||||
public static final TextKey COMMAND_VSCODE_REGENERATE_THE_CODE_WORKSPACE_FOR_A_PACK_AND_OPEN_IT_IN_YOUR = TextKey.of(
|
||||
"iris.modded.help.entry.command.vscode",
|
||||
"Regenerate the .code-workspace for a pack and open it in your desktop editor"
|
||||
);
|
||||
public static final TextKey COMMAND_UPDATE_REGENERATE_THE_CODE_WORKSPACE_FOR_A_PACK = TextKey.of(
|
||||
"iris.modded.help.entry.command.update",
|
||||
"Regenerate the .code-workspace for a pack"
|
||||
);
|
||||
public static final TextKey COMMAND_IMPORTVANILLA_EXPLAIN_VANILLA_IMPORT_WORKFLOW = TextKey.of(
|
||||
"iris.modded.help.entry.command.importvanilla",
|
||||
"Explain vanilla import workflow"
|
||||
);
|
||||
public static final TextKey COMMAND_VALIDATE_VALIDATE_A_PACK_OR_EVERY_PACK = TextKey.of(
|
||||
"iris.modded.help.entry.command.validate",
|
||||
"Validate a pack or every pack"
|
||||
);
|
||||
public static final TextKey COMMAND_CLEANUP_PREVIEW_OR_QUARANTINE_UNUSED_RESOURCE_CANDIDATES = TextKey.of(
|
||||
"iris.modded.help.entry.command.cleanup",
|
||||
"Preview or quarantine unused-resource candidates"
|
||||
);
|
||||
public static final TextKey COMMAND_RESTORE_PREVIEW_OR_RESTORE_THE_LATEST_QUARANTINE = TextKey.of(
|
||||
"iris.modded.help.entry.command.restore",
|
||||
"Preview or restore the latest quarantine"
|
||||
);
|
||||
public static final TextKey COMMAND_STATUS_SHOW_CACHED_VALIDATION_STATUS = TextKey.of(
|
||||
"iris.modded.help.entry.command.status_validation",
|
||||
"Show cached validation status"
|
||||
);
|
||||
public static final TextKey COMMAND_COMPAT_SHOW_CONTENT_THAT_CANNOT_GENERATE_ON_THIS_MINECRAFT_VERSION = TextKey.of(
|
||||
"iris.modded.help.entry.command.compat_content",
|
||||
"Show content that cannot generate on this Minecraft version"
|
||||
);
|
||||
public static final TextKey COMMAND_ENABLE_CREATE_AND_INJECT_A_PERSISTENT_IRIS_DIMENSION_AT_RUNTIME_DOWNLOADS_THE_PACK = TextKey.of(
|
||||
"iris.modded.help.entry.command.enable",
|
||||
"Create and inject a persistent Iris dimension at runtime; refuses if the pack is missing, quote pack:dimensionKey to pick a specific pack dimension"
|
||||
);
|
||||
public static final TextKey COMMAND_REPLACE_OVERWORLD_INJECT_AN_IRIS_PRIMARY_WORLD_AND_ROUTE_PLAYERS_THERE_INSTEAD_OF_THE = TextKey.of(
|
||||
"iris.modded.help.entry.command.replace_overworld",
|
||||
"Inject an Iris primary world and route players there instead of the vanilla overworld"
|
||||
);
|
||||
public static final TextKey COMMAND_DISABLE_EVACUATE_AND_UNLOAD_AN_IRIS_DIMENSION_WORLD_DATA_ON_DISK_IS_KEPT = TextKey.of(
|
||||
"iris.modded.help.entry.command.disable",
|
||||
"Evacuate and unload an Iris dimension; world data on disk is kept for re-enabling"
|
||||
);
|
||||
public static final TextKey COMMAND_DELETE_DISABLE_AN_IRIS_DIMENSION_AND_WIPE_ITS_CHUNK_AND_MANTLE_DATA_FROM = TextKey.of(
|
||||
"iris.modded.help.entry.command.delete",
|
||||
"Disable an Iris dimension and wipe its chunk and mantle data from disk"
|
||||
);
|
||||
public static final TextKey COMMAND_LIST_LIST_LOADED_IRIS_DIMENSIONS = TextKey.of(
|
||||
"iris.modded.help.entry.command.list",
|
||||
"List loaded Iris dimensions"
|
||||
);
|
||||
public static final TextKey COMMAND_STATUS_SHOW_LOADED_IRIS_DIMENSIONS_AND_THE_CONFIGURED_PRIMARY_WORLD = TextKey.of(
|
||||
"iris.modded.help.entry.command.status_world",
|
||||
"Show loaded Iris dimensions and the configured primary world"
|
||||
);
|
||||
public static final TextKey COMMAND_STATUS_CHECK_LOADED_IRIS_DIMENSION_TYPE_OVERRIDES = TextKey.of(
|
||||
"iris.modded.help.entry.command.status_datapack",
|
||||
"Check loaded Iris dimension type overrides"
|
||||
);
|
||||
public static final TextKey COMMAND_INSTALL_INSTALL_DIMENSION_TYPE_OVERRIDES_FOR_LOADED_IRIS_DIMENSIONS = TextKey.of(
|
||||
"iris.modded.help.entry.command.install",
|
||||
"Install dimension type overrides for loaded Iris dimensions"
|
||||
);
|
||||
public static final TextKey COMMAND_LIST_LIST_CONFIGURED_AND_INSTALLED_DATAPACKS = TextKey.of(
|
||||
"iris.modded.help.entry.command.list_datapacks",
|
||||
"List configured and installed datapacks"
|
||||
);
|
||||
public static final TextKey COMMAND_INGEST_EXPLAIN_BUKKIT_DATAPACK_INGEST_WORKFLOW = TextKey.of(
|
||||
"iris.modded.help.entry.command.ingest",
|
||||
"Explain Bukkit datapack ingest workflow"
|
||||
);
|
||||
public static final TextKey COMMAND_REMOVE_EXPLAIN_DATAPACK_REMOVAL_WORKFLOW = TextKey.of(
|
||||
"iris.modded.help.entry.command.remove",
|
||||
"Explain datapack removal workflow"
|
||||
);
|
||||
public static final TextKey COMMAND_LIST_REGENERATE_STRUCTURE_INDEX_JSON = TextKey.of(
|
||||
"iris.modded.help.entry.command.list_structures",
|
||||
"Regenerate structure-index.json"
|
||||
);
|
||||
public static final TextKey COMMAND_INFO_RESOLVE_AN_IRIS_STRUCTURE_GRAPH_AND_REPORT_BOUNDS = TextKey.of(
|
||||
"iris.modded.help.entry.command.info_2",
|
||||
"Resolve an Iris structure graph and report bounds"
|
||||
);
|
||||
public static final TextKey COMMAND_PLACE_ASSEMBLE_AND_PLACE_AN_IRIS_STRUCTURE_AT_YOUR_LOCATION = TextKey.of(
|
||||
"iris.modded.help.entry.command.place",
|
||||
"Assemble and place an Iris structure at your location"
|
||||
);
|
||||
public static final TextKey COMMAND_IMPORT_EXPLAIN_BUKKIT_STRUCTURE_IMPORT_WORKFLOW = TextKey.of(
|
||||
"iris.modded.help.entry.command.import",
|
||||
"Explain Bukkit structure import workflow"
|
||||
);
|
||||
public static final TextKey COMMAND_CAPTURE_EXPLAIN_BUKKIT_STRUCTURE_CAPTURE_WORKFLOW = TextKey.of(
|
||||
"iris.modded.help.entry.command.capture",
|
||||
"Explain Bukkit structure capture workflow"
|
||||
);
|
||||
public static final TextKey COMMAND_VERIFY_REPORT_NATIVE_AND_IRIS_STRUCTURE_REACHABILITY_IN_THE_CURRENT_DIMENSION = TextKey.of(
|
||||
"iris.modded.help.entry.command.verify",
|
||||
"Report native and Iris structure reachability in the current dimension"
|
||||
);
|
||||
public static final TextKey COMMAND_NETWORK_LIST_NETWORK_INTERFACES_AND_THEIR_ADDRESSES = TextKey.of(
|
||||
"iris.modded.help.entry.command.network",
|
||||
"List network interfaces and their addresses"
|
||||
);
|
||||
public static final TextKey COMMAND_WHAT_HERE_INSPECT_CURRENT_IRIS_CONTEXT = TextKey.of(
|
||||
"iris.modded.help.entry.command.what.here",
|
||||
"Inspect the Iris biome, region, cave biome, surface and chunk at your position"
|
||||
);
|
||||
public static final TextKey COMMAND_WHAT_BIOME_INSPECT_CURRENT_BIOME = TextKey.of(
|
||||
"iris.modded.help.entry.command.what.biome",
|
||||
"Inspect the Iris biome, configured derivative and registered native biome"
|
||||
);
|
||||
public static final TextKey COMMAND_WHAT_REGION_INSPECT_CURRENT_REGION = TextKey.of(
|
||||
"iris.modded.help.entry.command.what.region",
|
||||
"Inspect the Iris region at your current chunk"
|
||||
);
|
||||
public static final TextKey COMMAND_WHAT_BLOCK_INSPECT_TARGET_BLOCK = TextKey.of(
|
||||
"iris.modded.help.entry.command.what.block",
|
||||
"Inspect the targeted block state, properties, object and block entity"
|
||||
);
|
||||
public static final TextKey COMMAND_WHAT_HAND_INSPECT_HELD_ITEM = TextKey.of(
|
||||
"iris.modded.help.entry.command.what.hand",
|
||||
"Inspect the held item and its default block state"
|
||||
);
|
||||
public static final TextKey COMMAND_WHAT_MARKERS_REVEAL_NEARBY_MARKERS = TextKey.of(
|
||||
"iris.modded.help.entry.command.what.markers",
|
||||
"Reveal nearby Iris Mantle markers with particles"
|
||||
);
|
||||
public static final TextKey COMMAND_HEIGHT_PRINT_WORLD_HEIGHT = TextKey.of(
|
||||
"iris.modded.help.entry.command.height",
|
||||
"Print the current dimension height range"
|
||||
);
|
||||
public static final TextKey COMMAND_WORLDS_LIST_WORLD_ACCESS = TextKey.of(
|
||||
"iris.modded.help.entry.command.worlds",
|
||||
"List loaded dimensions and identify the Iris-generated dimensions"
|
||||
);
|
||||
public static final TextKey COMMAND_MAINWORLD_CONFIGURE_PRIMARY_WORLD_PRESET = TextKey.of(
|
||||
"iris.modded.help.entry.command.mainworld",
|
||||
"Configure or clear the Iris primary-world preset used on restart"
|
||||
);
|
||||
public static final TextKey COMMAND_OBJECT_WE_BUKKIT_ONLY = TextKey.of(
|
||||
"iris.modded.help.entry.command.object.we",
|
||||
"Explain why WorldEdit selection import requires the Bukkit plugin"
|
||||
);
|
||||
public static final TextKey COMMAND_OBJECT_STUDIO_BUKKIT_ONLY = TextKey.of(
|
||||
"iris.modded.help.entry.command.object.studio",
|
||||
"Explain why the object studio world requires the Bukkit toolchain"
|
||||
);
|
||||
public static final TextKey COMMAND_OBJECT_CONVERT_BUKKIT_ONLY = TextKey.of(
|
||||
"iris.modded.help.entry.command.object.convert",
|
||||
"Explain why schematic conversion requires the Bukkit plugin"
|
||||
);
|
||||
public static final TextKey COMMAND_STUDIO_LOOT_BUKKIT_ONLY = TextKey.of(
|
||||
"iris.modded.help.entry.command.studio.loot",
|
||||
"Explain why the Bukkit loot simulation GUI is unavailable"
|
||||
);
|
||||
public static final TextKey COMMAND_STUDIO_PROFILE_BUKKIT_ONLY = TextKey.of(
|
||||
"iris.modded.help.entry.command.studio.profile",
|
||||
"Explain why Bukkit pack profiling is unavailable"
|
||||
);
|
||||
public static final TextKey COMMAND_STUDIO_SPAWN_BUKKIT_ONLY = TextKey.of(
|
||||
"iris.modded.help.entry.command.studio.spawn",
|
||||
"Explain why Bukkit Iris entity spawning is unavailable"
|
||||
);
|
||||
public static final TextKey COMMAND_STUDIO_OBJECTS_BUKKIT_ONLY = TextKey.of(
|
||||
"iris.modded.help.entry.command.studio.objects",
|
||||
"Explain why the Bukkit chunk object report is unavailable"
|
||||
);
|
||||
|
||||
private static final List<MessageKey> KEYS = List.of(
|
||||
COMMAND_VERSION_PRINT_VERSION_INFORMATION,
|
||||
COMMAND_INFO_LIST_LOADED_IRIS_DIMENSIONS_AND_PACK_DETAILS,
|
||||
COMMAND_WHAT_INSPECT_THE_IRIS_BIOME_REGION_CAVE_BIOME_SURFACE_AND_CHUNK_AT_YOUR,
|
||||
GROUP_FIND_FIND_AND_TELEPORT_TO_IRIS_BIOMES_REGIONS_OBJECTS_IRIS_STRUCTURES_NATIVE_STRUCTURES,
|
||||
COMMAND_TP_TELEPORT_YOURSELF_OR_A_NAMED_PLAYER_INTO_A_LOADED_IRIS_DIMENSION,
|
||||
COMMAND_EVACUATE_TELEPORT_EVERY_PLAYER_OUT_OF_AN_IRIS_DIMENSION_TO_THE_PRIMARY_WORLD,
|
||||
COMMAND_SEED_PRINT_WORLD_AND_ENGINE_SEED_INFORMATION,
|
||||
COMMAND_DEBUG_TOGGLE_IRIS_DEBUG_LOGGING_AND_SAVE_SETTINGS_JSON,
|
||||
COMMAND_RELOAD_RELOAD_SETTINGS_JSON_ALSO_HOTLOADED_AUTOMATICALLY_EVERY_3S,
|
||||
COMMAND_DOWNLOAD_DOWNLOAD_A_PACK_PROJECT,
|
||||
COMMAND_METRICS_PRINT_GENERATION_METRICS_FOR_YOUR_CURRENT_IRIS_DIMENSION,
|
||||
COMMAND_REGEN_DELETE_AND_REGENERATE_NEARBY_CHUNKS_IN_PLACE,
|
||||
GROUP_PREGEN_PREGENERATE_AN_IRIS_DIMENSION,
|
||||
COMMAND_WAND_GET_AN_IRIS_OBJECT_WAND,
|
||||
GROUP_OBJECT_OBJECT_WAND_SAVE_PASTE_ANALYZE_AND_UNDO_TOOLS,
|
||||
GROUP_EDIT_OPEN_PACK_BIOME_REGION_AND_DIMENSION_JSON_FILES_IN_YOUR_DESKTOP_EDITOR,
|
||||
COMMAND_CREATE_CREATE_AND_INJECT_A_PERSISTENT_IRIS_DIMENSION_QUOTE_PACK_DIMENSIONKEY_TO_PICK,
|
||||
GROUP_STUDIO_PACK_PROJECT_CREATION_PACKAGING_AND_REPORTS,
|
||||
GROUP_PACK_PACK_VALIDATION_AND_MAINTENANCE,
|
||||
GROUP_WORLD_RUNTIME_IRIS_DIMENSION_CREATION_REMOVAL_AND_STATUS,
|
||||
GROUP_DATAPACK_WORLD_DATAPACK_INSTALL_AND_STATUS_HELPERS,
|
||||
GROUP_STRUCTURE_IRIS_STRUCTURE_INDEX_INFO_AND_PLACEMENT_TOOLS,
|
||||
COMMAND_GOLDENHASH_GENERATE_DETERMINISTIC_BLOCK_HASHES_FOR_PARITY_TESTING,
|
||||
GROUP_DEVELOPER_DEVELOPER_DIAGNOSTICS_NETWORK_INTERFACES_REGION_FILE_SCAN,
|
||||
COMMAND_BIOME_FIND_AN_IRIS_BIOME,
|
||||
COMMAND_REGION_FIND_AN_IRIS_REGION,
|
||||
COMMAND_OBJECT_FIND_AN_OBJECT_PLACEMENT,
|
||||
COMMAND_STRUCTURE_FIND_AN_IRIS_PLACED_OR_NATIVE_DATAPACK_STRUCTURE,
|
||||
COMMAND_POI_FIND_A_SUPPORTED_POINT_OF_INTEREST,
|
||||
COMMAND_BIOME_OPEN_A_BIOME_JSON_IN_YOUR_DESKTOP_EDITOR_NO_KEY_OPENS_THE,
|
||||
COMMAND_REGION_OPEN_A_REGION_JSON_IN_YOUR_DESKTOP_EDITOR_NO_KEY_OPENS_THE,
|
||||
COMMAND_DIMENSION_OPEN_THE_CURRENT_PACK_S_DIMENSION_JSON_IN_YOUR_DESKTOP_EDITOR,
|
||||
COMMAND_START_START_PREGENERATION_RADIUS_IN_BLOCKS_RESUMABLE_CHECKPOINT_CACHE_ON_BY_DEFAULT_CENTER,
|
||||
COMMAND_STOP_STOP_THE_ACTIVE_PREGENERATION_TASK,
|
||||
COMMAND_PAUSE_PAUSE_OR_RESUME_PREGENERATION,
|
||||
COMMAND_STATUS_SHOW_PREGENERATION_STATUS,
|
||||
COMMAND_WAND_GET_AN_IRIS_OBJECT_WAND_2,
|
||||
COMMAND_DUST_GET_DUST_THAT_REVEALS_OBJECT_PLACEMENTS,
|
||||
COMMAND_SAVE_SAVE_THE_SELECTED_WAND_VOLUME_AS_AN_OBJECT,
|
||||
COMMAND_PASTE_PASTE_AN_OBJECT_AT_YOUR_POSITION_OR_A_GIVEN_POSITION_OPTIONALLY_ROTATED,
|
||||
COMMAND_EXPAND_EXPAND_THE_WAND_SELECTION_IN_YOUR_LOOKING_DIRECTION,
|
||||
COMMAND_CONTRACT_CONTRACT_THE_WAND_SELECTION_IN_YOUR_LOOKING_DIRECTION,
|
||||
COMMAND_SHIFT_SHIFT_THE_WAND_SELECTION_IN_YOUR_LOOKING_DIRECTION,
|
||||
COMMAND_POSITION1_SET_SELECTION_POINT_1,
|
||||
COMMAND_POSITION2_SET_SELECTION_POINT_2,
|
||||
COMMAND_X_Y_AUTOSELECT_UP_AND_OUT,
|
||||
COMMAND_X_Y_AUTOSELECT_UP_DOWN_AND_OUT,
|
||||
COMMAND_ANALYZE_SHOW_OBJECT_COMPOSITION,
|
||||
COMMAND_SHRINK_SHRINK_AN_OBJECT_TO_ITS_MINIMUM_SIZE,
|
||||
COMMAND_PLAUSIBILIZE_GROW_BRANCHES_SO_TREE_LEAVES_SURVIVE_VANILLA_DECAY,
|
||||
COMMAND_UNDO_UNDO_PASTED_OBJECTS,
|
||||
COMMAND_CREATE_CREATE_A_NEW_PACK_PROJECT,
|
||||
COMMAND_PACKAGE_PACKAGE_A_DIMENSION_INTO_A_COMPRESSED_FORMAT,
|
||||
COMMAND_VERSION_PRINT_A_PACK_VERSION,
|
||||
COMMAND_REGIONS_CALCULATE_NEARBY_REGION_DISTRIBUTION,
|
||||
COMMAND_OPEN_OPEN_A_TEMPORARY_STUDIO_DIMENSION_FOR_A_PACK,
|
||||
COMMAND_CLOSE_CLOSE_THE_OPEN_STUDIO_DIMENSION_AND_DISCARD_ITS_WORLD,
|
||||
COMMAND_TPSTUDIO_TELEPORT_INTO_THE_OPEN_STUDIO_DIMENSION,
|
||||
COMMAND_STATUS_SHOW_THE_OPEN_STUDIO_DIMENSION_AND_ITS_PACK,
|
||||
COMMAND_NOISE_OPEN_THE_NOISE_EXPLORER_GUI_ON_THE_SERVER_DISPLAY,
|
||||
COMMAND_MAP_OPEN_THE_VISION_MAP_GUI_ON_THE_SERVER_DISPLAY,
|
||||
COMMAND_VSCODE_REGENERATE_THE_CODE_WORKSPACE_FOR_A_PACK_AND_OPEN_IT_IN_YOUR,
|
||||
COMMAND_UPDATE_REGENERATE_THE_CODE_WORKSPACE_FOR_A_PACK,
|
||||
COMMAND_IMPORTVANILLA_EXPLAIN_VANILLA_IMPORT_WORKFLOW,
|
||||
COMMAND_VALIDATE_VALIDATE_A_PACK_OR_EVERY_PACK,
|
||||
COMMAND_CLEANUP_PREVIEW_OR_QUARANTINE_UNUSED_RESOURCE_CANDIDATES,
|
||||
COMMAND_RESTORE_PREVIEW_OR_RESTORE_THE_LATEST_QUARANTINE,
|
||||
COMMAND_STATUS_SHOW_CACHED_VALIDATION_STATUS,
|
||||
COMMAND_COMPAT_SHOW_CONTENT_THAT_CANNOT_GENERATE_ON_THIS_MINECRAFT_VERSION,
|
||||
COMMAND_ENABLE_CREATE_AND_INJECT_A_PERSISTENT_IRIS_DIMENSION_AT_RUNTIME_DOWNLOADS_THE_PACK,
|
||||
COMMAND_REPLACE_OVERWORLD_INJECT_AN_IRIS_PRIMARY_WORLD_AND_ROUTE_PLAYERS_THERE_INSTEAD_OF_THE,
|
||||
COMMAND_DISABLE_EVACUATE_AND_UNLOAD_AN_IRIS_DIMENSION_WORLD_DATA_ON_DISK_IS_KEPT,
|
||||
COMMAND_DELETE_DISABLE_AN_IRIS_DIMENSION_AND_WIPE_ITS_CHUNK_AND_MANTLE_DATA_FROM,
|
||||
COMMAND_LIST_LIST_LOADED_IRIS_DIMENSIONS,
|
||||
COMMAND_STATUS_SHOW_LOADED_IRIS_DIMENSIONS_AND_THE_CONFIGURED_PRIMARY_WORLD,
|
||||
COMMAND_STATUS_CHECK_LOADED_IRIS_DIMENSION_TYPE_OVERRIDES,
|
||||
COMMAND_INSTALL_INSTALL_DIMENSION_TYPE_OVERRIDES_FOR_LOADED_IRIS_DIMENSIONS,
|
||||
COMMAND_LIST_LIST_CONFIGURED_AND_INSTALLED_DATAPACKS,
|
||||
COMMAND_INGEST_EXPLAIN_BUKKIT_DATAPACK_INGEST_WORKFLOW,
|
||||
COMMAND_REMOVE_EXPLAIN_DATAPACK_REMOVAL_WORKFLOW,
|
||||
COMMAND_LIST_REGENERATE_STRUCTURE_INDEX_JSON,
|
||||
COMMAND_INFO_RESOLVE_AN_IRIS_STRUCTURE_GRAPH_AND_REPORT_BOUNDS,
|
||||
COMMAND_PLACE_ASSEMBLE_AND_PLACE_AN_IRIS_STRUCTURE_AT_YOUR_LOCATION,
|
||||
COMMAND_IMPORT_EXPLAIN_BUKKIT_STRUCTURE_IMPORT_WORKFLOW,
|
||||
COMMAND_CAPTURE_EXPLAIN_BUKKIT_STRUCTURE_CAPTURE_WORKFLOW,
|
||||
COMMAND_VERIFY_REPORT_NATIVE_AND_IRIS_STRUCTURE_REACHABILITY_IN_THE_CURRENT_DIMENSION,
|
||||
COMMAND_NETWORK_LIST_NETWORK_INTERFACES_AND_THEIR_ADDRESSES,
|
||||
COMMAND_WHAT_HERE_INSPECT_CURRENT_IRIS_CONTEXT,
|
||||
COMMAND_WHAT_BIOME_INSPECT_CURRENT_BIOME,
|
||||
COMMAND_WHAT_REGION_INSPECT_CURRENT_REGION,
|
||||
COMMAND_WHAT_BLOCK_INSPECT_TARGET_BLOCK,
|
||||
COMMAND_WHAT_HAND_INSPECT_HELD_ITEM,
|
||||
COMMAND_WHAT_MARKERS_REVEAL_NEARBY_MARKERS,
|
||||
COMMAND_HEIGHT_PRINT_WORLD_HEIGHT,
|
||||
COMMAND_WORLDS_LIST_WORLD_ACCESS,
|
||||
COMMAND_MAINWORLD_CONFIGURE_PRIMARY_WORLD_PRESET,
|
||||
COMMAND_OBJECT_WE_BUKKIT_ONLY,
|
||||
COMMAND_OBJECT_STUDIO_BUKKIT_ONLY,
|
||||
COMMAND_OBJECT_CONVERT_BUKKIT_ONLY,
|
||||
COMMAND_STUDIO_LOOT_BUKKIT_ONLY,
|
||||
COMMAND_STUDIO_PROFILE_BUKKIT_ONLY,
|
||||
COMMAND_STUDIO_SPAWN_BUKKIT_ONLY,
|
||||
COMMAND_STUDIO_OBJECTS_BUKKIT_ONLY
|
||||
);
|
||||
|
||||
private ModdedHelpMessages() {
|
||||
}
|
||||
|
||||
public static List<MessageKey> keys() {
|
||||
return KEYS;
|
||||
}
|
||||
}
|
||||
@@ -41,7 +41,7 @@ public class BukkitPublicBackendTest {
|
||||
worldName, worldKey, World.Environment.NORMAL, generator, biomeProvider,
|
||||
WorldType.NORMAL, true, false, 123L, false, false, WorldLifecycleCaller.CREATE);
|
||||
BukkitPublicBackend backend = new BukkitPublicBackend(
|
||||
CapabilitySnapshot.forTesting(ServerFamily.PAPER, false, false, false));
|
||||
CapabilitySnapshotFixtures.forTesting(ServerFamily.PAPER, false, false, false));
|
||||
|
||||
doAnswer(invocation -> {
|
||||
assertSame(generator, WorldLifecycleStaging.peekStemGenerator(worldName));
|
||||
|
||||
@@ -0,0 +1,131 @@
|
||||
package art.arcane.iris.core.lifecycle;
|
||||
|
||||
import art.arcane.iris.core.lifecycle.CapabilitySnapshot.PaperLikeFlavor;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
final class CapabilitySnapshotFixtures {
|
||||
private CapabilitySnapshotFixtures() {
|
||||
}
|
||||
|
||||
static CapabilitySnapshot forTesting(ServerFamily serverFamily, boolean regionizedRuntime, boolean worldsProviderHealthy, boolean paperLikeRuntimeHealthy) {
|
||||
Object minecraftServer = paperLikeRuntimeHealthy ? new TestingPaperLikeServer("datapack-registry", "server-registry") : null;
|
||||
Method createLevelMethod = null;
|
||||
Field worldLoaderContextField = null;
|
||||
Method serverRegistryAccessMethod = null;
|
||||
try {
|
||||
createLevelMethod = paperLikeRuntimeHealthy
|
||||
? TestingPaperLikeServer.class.getDeclaredMethod("createLevel", Object.class, Object.class, Object.class)
|
||||
: null;
|
||||
worldLoaderContextField = paperLikeRuntimeHealthy
|
||||
? CapabilityResolution.resolveField(TestingPaperLikeServer.class, "worldLoaderContext")
|
||||
: null;
|
||||
serverRegistryAccessMethod = paperLikeRuntimeHealthy
|
||||
? CapabilityResolution.resolveServerRegistryAccessMethod(TestingPaperLikeServer.class)
|
||||
: null;
|
||||
} catch (NoSuchMethodException | NoSuchFieldException e) {
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
return new CapabilitySnapshot(
|
||||
serverFamily,
|
||||
regionizedRuntime,
|
||||
worldsProviderHealthy ? new Object() : null,
|
||||
worldsProviderHealthy ? Object.class : null,
|
||||
worldsProviderHealthy ? Object.class : null,
|
||||
worldsProviderHealthy ? "test-provider" : "inactive",
|
||||
null,
|
||||
minecraftServer,
|
||||
createLevelMethod,
|
||||
paperLikeRuntimeHealthy ? PaperLikeFlavor.CURRENT_INFO_AND_DATA : PaperLikeFlavor.UNSUPPORTED,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
worldLoaderContextField,
|
||||
serverRegistryAccessMethod,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
paperLikeRuntimeHealthy ? "available(test)" : "unsupported(test)"
|
||||
);
|
||||
}
|
||||
|
||||
static CapabilitySnapshot forTestingRuntimeRegistries(ServerFamily serverFamily, boolean regionizedRuntime, Object datapackDimensions, Object serverRegistryAccess) {
|
||||
TestingPaperLikeServer minecraftServer = new TestingPaperLikeServer(datapackDimensions, serverRegistryAccess);
|
||||
Method createLevelMethod;
|
||||
Field worldLoaderContextField;
|
||||
Method registryAccessMethod;
|
||||
try {
|
||||
createLevelMethod = TestingPaperLikeServer.class.getDeclaredMethod("createLevel", Object.class, Object.class, Object.class);
|
||||
worldLoaderContextField = CapabilityResolution.resolveField(TestingPaperLikeServer.class, "worldLoaderContext");
|
||||
registryAccessMethod = CapabilityResolution.resolveServerRegistryAccessMethod(TestingPaperLikeServer.class);
|
||||
} catch (NoSuchMethodException | NoSuchFieldException e) {
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
return new CapabilitySnapshot(
|
||||
serverFamily,
|
||||
regionizedRuntime,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
"inactive",
|
||||
null,
|
||||
minecraftServer,
|
||||
createLevelMethod,
|
||||
PaperLikeFlavor.CURRENT_INFO_AND_DATA,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
worldLoaderContextField,
|
||||
registryAccessMethod,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
"available(test-runtime-registries)"
|
||||
);
|
||||
}
|
||||
|
||||
private static final class TestingPaperLikeServer {
|
||||
private final TestingWorldLoaderContext worldLoaderContext;
|
||||
private final Object registryAccess;
|
||||
|
||||
private TestingPaperLikeServer(Object datapackDimensions, Object registryAccess) {
|
||||
this.worldLoaderContext = new TestingWorldLoaderContext(datapackDimensions);
|
||||
this.registryAccess = registryAccess;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private void createLevel(Object levelStem, Object worldLoadingInfoAndData, Object worldDataAndGenSettings) {
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private Object registryAccess() {
|
||||
return registryAccess;
|
||||
}
|
||||
}
|
||||
|
||||
private static final class TestingWorldLoaderContext {
|
||||
private final Object datapackDimensions;
|
||||
|
||||
private TestingWorldLoaderContext(Object datapackDimensions) {
|
||||
this.datapackDimensions = datapackDimensions;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private Object datapackDimensions() {
|
||||
return datapackDimensions;
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -15,7 +15,7 @@ import static org.junit.Assert.fail;
|
||||
public class WorldLifecycleDiagnosticsTest {
|
||||
@Test
|
||||
public void studioCreateSelectionFailurePrintsFullStacktrace() {
|
||||
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshot.forTesting(ServerFamily.PAPER, false, false, false));
|
||||
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshotFixtures.forTesting(ServerFamily.PAPER, false, false, false));
|
||||
WorldLifecycleRequest request = new WorldLifecycleRequest("studio", NamespacedKey.minecraft("studio"), World.Environment.NORMAL, null, null, null, true, false, 1337L, true, false, WorldLifecycleCaller.STUDIO);
|
||||
|
||||
ByteArrayOutputStream output = new ByteArrayOutputStream();
|
||||
|
||||
+1
-1
@@ -24,7 +24,7 @@ public class WorldLifecycleRuntimeLevelStemTest {
|
||||
public void runtimeStemUsesFullServerRegistryAccessForPlatformGenerators() throws Exception {
|
||||
Object datapackDimensions = new MissingDimensionTypeRegistry();
|
||||
Object serverRegistryAccess = new Object();
|
||||
CapabilitySnapshot capabilities = CapabilitySnapshot.forTestingRuntimeRegistries(ServerFamily.PURPUR, false, datapackDimensions, serverRegistryAccess);
|
||||
CapabilitySnapshot capabilities = CapabilitySnapshotFixtures.forTestingRuntimeRegistries(ServerFamily.PURPUR, false, datapackDimensions, serverRegistryAccess);
|
||||
WorldLifecycleRequest request = new WorldLifecycleRequest(
|
||||
"studio",
|
||||
NamespacedKey.minecraft("studio"),
|
||||
|
||||
+11
-11
@@ -21,7 +21,7 @@ public class WorldLifecycleSelectionTest {
|
||||
|
||||
@Test
|
||||
public void studioSelectsPaperLikeBackendOnPaper() {
|
||||
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshot.forTesting(ServerFamily.PAPER, false, false, true));
|
||||
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshotFixtures.forTesting(ServerFamily.PAPER, false, false, true));
|
||||
WorldLifecycleRequest request = new WorldLifecycleRequest("studio", NamespacedKey.minecraft("studio"), World.Environment.NORMAL, null, null, null, true, false, 1337L, true, false, WorldLifecycleCaller.STUDIO);
|
||||
|
||||
assertEquals("paper_like_runtime", service.selectCreateBackend(request).backendName());
|
||||
@@ -29,7 +29,7 @@ public class WorldLifecycleSelectionTest {
|
||||
|
||||
@Test
|
||||
public void studioSelectsPaperLikeBackendOnPurpur() {
|
||||
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshot.forTesting(ServerFamily.PURPUR, false, false, true));
|
||||
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshotFixtures.forTesting(ServerFamily.PURPUR, false, false, true));
|
||||
WorldLifecycleRequest request = new WorldLifecycleRequest("studio", NamespacedKey.minecraft("studio"), World.Environment.NORMAL, null, null, null, true, false, 1337L, true, false, WorldLifecycleCaller.STUDIO);
|
||||
|
||||
assertEquals("paper_like_runtime", service.selectCreateBackend(request).backendName());
|
||||
@@ -37,7 +37,7 @@ public class WorldLifecycleSelectionTest {
|
||||
|
||||
@Test
|
||||
public void studioSelectsPaperLikeBackendOnCanvas() {
|
||||
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshot.forTesting(ServerFamily.CANVAS, true, false, true));
|
||||
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshotFixtures.forTesting(ServerFamily.CANVAS, true, false, true));
|
||||
WorldLifecycleRequest request = new WorldLifecycleRequest("studio", NamespacedKey.minecraft("studio"), World.Environment.NORMAL, null, null, null, true, false, 1337L, true, false, WorldLifecycleCaller.STUDIO);
|
||||
|
||||
assertEquals("paper_like_runtime", service.selectCreateBackend(request).backendName());
|
||||
@@ -45,7 +45,7 @@ public class WorldLifecycleSelectionTest {
|
||||
|
||||
@Test
|
||||
public void studioSelectsPaperLikeBackendOnFolia() {
|
||||
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshot.forTesting(ServerFamily.FOLIA, true, false, true));
|
||||
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshotFixtures.forTesting(ServerFamily.FOLIA, true, false, true));
|
||||
WorldLifecycleRequest request = new WorldLifecycleRequest("studio", NamespacedKey.minecraft("studio"), World.Environment.NORMAL, null, null, null, true, false, 1337L, true, false, WorldLifecycleCaller.STUDIO);
|
||||
|
||||
assertEquals("paper_like_runtime", service.selectCreateBackend(request).backendName());
|
||||
@@ -53,7 +53,7 @@ public class WorldLifecycleSelectionTest {
|
||||
|
||||
@Test
|
||||
public void studioSelectsBukkitBackendOnSpigot() {
|
||||
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshot.forTesting(ServerFamily.SPIGOT, false, false, false));
|
||||
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshotFixtures.forTesting(ServerFamily.SPIGOT, false, false, false));
|
||||
WorldLifecycleRequest request = new WorldLifecycleRequest("studio", NamespacedKey.minecraft("studio"), World.Environment.NORMAL, null, null, null, true, false, 1337L, true, false, WorldLifecycleCaller.STUDIO);
|
||||
|
||||
assertEquals("bukkit_public", service.selectCreateBackend(request).backendName());
|
||||
@@ -61,7 +61,7 @@ public class WorldLifecycleSelectionTest {
|
||||
|
||||
@Test
|
||||
public void persistentCreatePrefersBukkitBackendOnPaperLikeServers() {
|
||||
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshot.forTesting(ServerFamily.PURPUR, false, false, true));
|
||||
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshotFixtures.forTesting(ServerFamily.PURPUR, false, false, true));
|
||||
WorldLifecycleRequest request = new WorldLifecycleRequest("persistent", NamespacedKey.minecraft("persistent"), World.Environment.NORMAL, null, null, null, true, false, 1337L, false, false, WorldLifecycleCaller.CREATE);
|
||||
|
||||
assertEquals("bukkit_public", service.selectCreateBackend(request).backendName());
|
||||
@@ -69,7 +69,7 @@ public class WorldLifecycleSelectionTest {
|
||||
|
||||
@Test
|
||||
public void persistentCreateSelectsPaperLikeBackendOnFolia() {
|
||||
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshot.forTesting(ServerFamily.FOLIA, true, false, true));
|
||||
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshotFixtures.forTesting(ServerFamily.FOLIA, true, false, true));
|
||||
WorldLifecycleRequest request = new WorldLifecycleRequest("persistent", NamespacedKey.minecraft("persistent"), World.Environment.NORMAL, null, null, null, true, false, 1337L, false, false, WorldLifecycleCaller.CREATE);
|
||||
|
||||
assertEquals("paper_like_runtime", service.selectCreateBackend(request).backendName());
|
||||
@@ -77,7 +77,7 @@ public class WorldLifecycleSelectionTest {
|
||||
|
||||
@Test
|
||||
public void persistentCreateSelectsPaperLikeBackendOnCanvas() {
|
||||
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshot.forTesting(ServerFamily.CANVAS, true, false, true));
|
||||
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshotFixtures.forTesting(ServerFamily.CANVAS, true, false, true));
|
||||
WorldLifecycleRequest request = new WorldLifecycleRequest("persistent", NamespacedKey.minecraft("persistent"), World.Environment.NORMAL, null, null, null, true, false, 1337L, false, false, WorldLifecycleCaller.CREATE);
|
||||
|
||||
assertEquals("paper_like_runtime", service.selectCreateBackend(request).backendName());
|
||||
@@ -85,7 +85,7 @@ public class WorldLifecycleSelectionTest {
|
||||
|
||||
@Test
|
||||
public void persistentCreateFailsClosedOnFoliaWithoutRuntime() {
|
||||
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshot.forTesting(ServerFamily.FOLIA, false, false, false));
|
||||
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshotFixtures.forTesting(ServerFamily.FOLIA, false, false, false));
|
||||
WorldLifecycleRequest request = new WorldLifecycleRequest("persistent", NamespacedKey.minecraft("persistent"), World.Environment.NORMAL, null, null, null, true, false, 1337L, false, false, WorldLifecycleCaller.CREATE);
|
||||
|
||||
assertThrows(IllegalStateException.class, () -> service.selectCreateBackend(request));
|
||||
@@ -93,7 +93,7 @@ public class WorldLifecycleSelectionTest {
|
||||
|
||||
@Test
|
||||
public void unloadUsesRememberedBackendFamily() {
|
||||
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshot.forTesting(ServerFamily.PURPUR, false, false, true));
|
||||
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshotFixtures.forTesting(ServerFamily.PURPUR, false, false, true));
|
||||
|
||||
service.rememberBackend(NamespacedKey.minecraft("studio"), "paper_like_runtime");
|
||||
assertEquals("paper_like_runtime", service.selectUnloadBackend("minecraft:studio").backendName());
|
||||
@@ -104,7 +104,7 @@ public class WorldLifecycleSelectionTest {
|
||||
CountingBackend selected = new CountingBackend("selected", true);
|
||||
CountingBackend inactive = new CountingBackend("inactive", false);
|
||||
WorldLifecycleService service = new WorldLifecycleService(
|
||||
CapabilitySnapshot.forTesting(ServerFamily.PAPER, false, false, true),
|
||||
CapabilitySnapshotFixtures.forTesting(ServerFamily.PAPER, false, false, true),
|
||||
selected,
|
||||
inactive,
|
||||
inactive);
|
||||
|
||||
+1
-1
@@ -279,7 +279,7 @@ public class WorldLifecycleUnloadAsyncTest {
|
||||
) {
|
||||
ControlledBackend inactive = new ControlledBackend("inactive");
|
||||
return new WorldLifecycleService(
|
||||
CapabilitySnapshot.forTesting(ServerFamily.PURPUR, false, false, false),
|
||||
CapabilitySnapshotFixtures.forTesting(ServerFamily.PURPUR, false, false, false),
|
||||
inactive,
|
||||
remembered,
|
||||
fallback
|
||||
|
||||
@@ -0,0 +1,158 @@
|
||||
package art.arcane.iris.core.localization;
|
||||
|
||||
import art.arcane.volmlib.util.localization.LocaleOverlay;
|
||||
import art.arcane.volmlib.util.localization.LocalizationValidator;
|
||||
import art.arcane.volmlib.util.localization.RemoteLanguageCatalog;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import com.sun.net.httpserver.HttpExchange;
|
||||
import com.sun.net.httpserver.HttpServer;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.rules.TemporaryFolder;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.URI;
|
||||
import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertThrows;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
public class IrisDownloadValidationTest {
|
||||
private static final String LOCALE = "de_DE";
|
||||
private static final String MISSING_KEY = "iris.director.commanddeveloper.director.stage_world_generation_update";
|
||||
|
||||
@Rule
|
||||
public TemporaryFolder temporaryFolder = new TemporaryFolder();
|
||||
|
||||
@Test
|
||||
public void incompleteCacheDownloadsCompleteCatalogAndReusesIt() throws Exception {
|
||||
String complete = completeCatalog();
|
||||
AtomicInteger requests = new AtomicInteger();
|
||||
HttpServer server = server(complete, requests);
|
||||
try (URLClassLoader resources = resources();
|
||||
RemoteLanguageCatalog catalog = catalog(server, resources)) {
|
||||
Path cache = catalog.cacheFile(LOCALE);
|
||||
Files.createDirectories(cache.getParent());
|
||||
Files.writeString(cache, incompleteCatalog(complete));
|
||||
|
||||
RemoteLanguageCatalog.CacheResult initial = catalog.read(LOCALE, IrisLanguage::validateDownload);
|
||||
assertEquals(RemoteLanguageCatalog.CacheState.INVALID, initial.state());
|
||||
assertTrue(initial.failure().getMessage().contains(MISSING_KEY));
|
||||
assertEquals(0, requests.get());
|
||||
|
||||
assertEquals(complete, catalog.readOrDownload(LOCALE, IrisLanguage::validateDownload));
|
||||
assertEquals(complete, Files.readString(cache));
|
||||
assertEquals(RemoteLanguageCatalog.CacheState.VALID,
|
||||
catalog.read(LOCALE, IrisLanguage::validateDownload).state());
|
||||
assertEquals(1, requests.get());
|
||||
|
||||
assertEquals(complete, catalog.readOrDownload(LOCALE, IrisLanguage::validateDownload));
|
||||
assertEquals(1, requests.get());
|
||||
} finally {
|
||||
server.stop(0);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void incompleteUpstreamDoesNotReplaceAnInvalidCache() throws Exception {
|
||||
String incomplete = incompleteCatalog(completeCatalog());
|
||||
AtomicInteger requests = new AtomicInteger();
|
||||
HttpServer server = server(incomplete, requests);
|
||||
try (URLClassLoader resources = resources();
|
||||
RemoteLanguageCatalog catalog = catalog(server, resources)) {
|
||||
Path cache = catalog.cacheFile(LOCALE);
|
||||
Files.createDirectories(cache.getParent());
|
||||
String cached = "{\"locale\":\"de_DE\",\"messages\":{}}";
|
||||
Files.writeString(cache, cached);
|
||||
|
||||
IllegalArgumentException failure = assertThrows(IllegalArgumentException.class,
|
||||
() -> catalog.readOrDownload(LOCALE, IrisLanguage::validateDownload));
|
||||
assertTrue(failure.getMessage().contains(MISSING_KEY));
|
||||
assertEquals(cached, Files.readString(cache));
|
||||
assertEquals(1, requests.get());
|
||||
} finally {
|
||||
server.stop(0);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void incompleteUpstreamDoesNotCreateACacheFile() throws Exception {
|
||||
AtomicInteger requests = new AtomicInteger();
|
||||
HttpServer server = server(incompleteCatalog(completeCatalog()), requests);
|
||||
try (URLClassLoader resources = resources();
|
||||
RemoteLanguageCatalog catalog = catalog(server, resources)) {
|
||||
assertThrows(IllegalArgumentException.class,
|
||||
() -> catalog.readOrDownload(LOCALE, IrisLanguage::validateDownload));
|
||||
assertFalse(Files.exists(catalog.cacheFile(LOCALE)));
|
||||
assertEquals(1, requests.get());
|
||||
} finally {
|
||||
server.stop(0);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void partialOperatorOverridesRemainValid() {
|
||||
LocaleOverlay overlay = IrisLanguage.parseOverlay("override", LOCALE, """
|
||||
{"locale":"de_DE","messages":{"iris.command.unknown":"Unbekannter Iris-Befehl"}}
|
||||
""");
|
||||
|
||||
assertEquals(1, overlay.values().size());
|
||||
assertTrue(LocalizationValidator.validate(IrisLanguage.catalog(), List.of(overlay)).errors().isEmpty());
|
||||
}
|
||||
|
||||
private String completeCatalog() throws IOException {
|
||||
return Files.readString(Path.of("src/main/resources/languages", LOCALE + ".json"));
|
||||
}
|
||||
|
||||
private String incompleteCatalog(String complete) {
|
||||
JsonObject document = JsonParser.parseString(complete).getAsJsonObject();
|
||||
assertTrue(document.getAsJsonObject("messages").remove(MISSING_KEY) != null);
|
||||
return document.toString();
|
||||
}
|
||||
|
||||
private HttpServer server(String content, AtomicInteger requests) throws IOException {
|
||||
byte[] response = content.getBytes(StandardCharsets.UTF_8);
|
||||
HttpServer server = HttpServer.create(new InetSocketAddress("127.0.0.1", 0), 0);
|
||||
server.createContext("/master/languages/de_DE.json", exchange -> respond(exchange, response, requests));
|
||||
server.start();
|
||||
return server;
|
||||
}
|
||||
|
||||
private void respond(HttpExchange exchange, byte[] response, AtomicInteger requests) throws IOException {
|
||||
requests.incrementAndGet();
|
||||
try {
|
||||
exchange.sendResponseHeaders(200, response.length);
|
||||
exchange.getResponseBody().write(response);
|
||||
} finally {
|
||||
exchange.close();
|
||||
}
|
||||
}
|
||||
|
||||
private URLClassLoader resources() throws IOException {
|
||||
Path resources = temporaryFolder.newFolder().toPath();
|
||||
Files.writeString(resources.resolve("source.properties"), "revision=master\nlocales=de_DE\n");
|
||||
return new URLClassLoader(new URL[]{resources.toUri().toURL()}, null);
|
||||
}
|
||||
|
||||
private RemoteLanguageCatalog catalog(HttpServer server, ClassLoader resources) throws IOException {
|
||||
return RemoteLanguageCatalog.load(new RemoteLanguageCatalog.Options(
|
||||
"Iris",
|
||||
URI.create("http://127.0.0.1:" + server.getAddress().getPort() + "/"),
|
||||
"languages",
|
||||
".json",
|
||||
"source.properties",
|
||||
temporaryFolder.newFolder().toPath(),
|
||||
resources
|
||||
));
|
||||
}
|
||||
}
|
||||
@@ -128,7 +128,32 @@ public class IrisLanguageTest {
|
||||
|
||||
private LocaleOverlay loadSourceOverlay(String locale) throws Exception {
|
||||
Path source = Path.of("src/main/resources/languages", locale + ".json");
|
||||
return IrisLanguage.parseOverlay(source.toString(), locale, Files.readString(source));
|
||||
return IrisLanguage.parseDownloadedOverlay(source.toString(), locale, Files.readString(source));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void downloadedCatalogSelectsBukkitKeysWithoutAcceptingUnknownOverrides() {
|
||||
String raw = """
|
||||
{"locale":"de_DE","messages":{
|
||||
"iris.command.unknown":"Unbekannter Iris-Befehl",
|
||||
"iris.modded.help.entry.command.version":"Version anzeigen"
|
||||
}}
|
||||
""";
|
||||
LocaleOverlay downloaded = IrisLanguage.parseDownloadedOverlay("download", "de_DE", raw);
|
||||
assertEquals(Set.of(IrisMessages.COMMAND_UNKNOWN.id()), downloaded.values().keySet());
|
||||
assertTrue(LocalizationValidator.validate(IrisLanguage.catalog(), List.of(downloaded)).errors().isEmpty());
|
||||
LocaleOverlay override = IrisLanguage.parseOverlay("override", "de_DE", raw);
|
||||
assertFalse(LocalizationValidator.validate(IrisLanguage.catalog(), List.of(override)).errors().isEmpty());
|
||||
assertEquals("A pregeneration task is already running. Stop it first with /iris pregen stop.",
|
||||
IrisLanguage.plain(IrisMessages.PREGEN_ALREADY_RUNNING));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void downloadedCatalogStillRejectsInvalidActivePlaceholders() {
|
||||
LocaleOverlay downloaded = IrisLanguage.parseDownloadedOverlay("download", "de_DE", """
|
||||
{"locale":"de_DE","messages":{"iris.command.permission_denied":"Keine Erlaubnis"}}
|
||||
""");
|
||||
assertFalse(LocalizationValidator.validate(IrisLanguage.catalog(), List.of(downloaded)).errors().isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -231,7 +256,8 @@ public class IrisLanguageTest {
|
||||
}
|
||||
assertValueIntegrity(locale, key.id(), key.englishValue(), overlay.value(key.id()));
|
||||
}
|
||||
assertTrue(locale + " contains too many English placeholder values", translated >= 1050);
|
||||
assertTrue(locale + " contains too many English placeholder values",
|
||||
translated * 10 >= IrisLanguage.catalog().keys().size() * 7);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user