9
0
mirror of https://github.com/VolmitSoftware/Iris.git synced 2025-12-27 11:09:06 +00:00

fixes to the per world dimensions + optimizations with the register method

This commit is contained in:
CrazyDev22
2024-05-03 21:01:10 +02:00
parent 1593bb2088
commit 20b41d65d3
6 changed files with 155 additions and 181 deletions

View File

@@ -6,6 +6,7 @@ import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
@@ -599,8 +600,25 @@ public class NMSBinding implements INMSBinding {
var biomeFiles = biome.listFiles(jsonFilter);
if (biomeFiles == null) continue;
for (File biomeFile : biomeFiles) {
String json = null;
int tries = 10;
while (json == null && tries-- > 0) {
try {
json = IO.readAll(biomeFile);
} catch (IOException e) {
Iris.error("Failed to read biome " + file.getName() + ":" + biomeFile.getName() + " tries left: " + tries);
if (tries == 0) {
e.printStackTrace();
}
try {
Thread.sleep(100);
} catch (InterruptedException ignored) {}
}
}
if (json == null) continue;
try {
var value = decode(net.minecraft.world.level.biome.Biome.CODEC, IO.readAll(file)).map(Holder::value).orElse(null);
var value = decode(net.minecraft.world.level.biome.Biome.CODEC, json).map(Holder::value).orElse(null);
register(Registry.BIOME_REGISTRY, from(file.getName(), biomeFile), value, replace);
} catch (Throwable e) {
Iris.error("Failed to register biome " + file.getName() + ":" + biomeFile.getName());
@@ -639,28 +657,15 @@ public class NMSBinding implements INMSBinding {
field.setAccessible(true);
boolean frozen = field.getBoolean(registry);
field.setBoolean(registry, false);
Field holdersField = null;
boolean holders = false;
for (Field f : MappedRegistry.class.getDeclaredFields()) {
if (!f.getGenericType().getTypeName().startsWith("java.util.Map<T, "))
continue;
holdersField = f;
}
if (holdersField != null) {
holdersField.setAccessible(true);
holders = holdersField.get(registry) == null;
if (holders) holdersField.set(registry, new IdentityHashMap<>());
}
Field valueField = getField(Holder.Reference.class, "T");
valueField.setAccessible(true);
try {
registry.createIntrusiveHolder(value);
registry.register(key, value, Lifecycle.stable());
var holder = registry.register(key, value, Lifecycle.stable());
if (frozen) valueField.set(holder, value);
return true;
} finally {
field.setBoolean(registry, frozen);
if (holders) {
holdersField.set(registry, null);
}
}
} catch (Throwable e) {
throw new IllegalStateException(e);
@@ -777,20 +782,14 @@ public class NMSBinding implements INMSBinding {
@Advice.OnMethodEnter
static void enter(@Advice.Argument(0) MinecraftServer server, @Advice.Argument(2) LevelStorageSource.LevelStorageAccess access, @Advice.Argument(4) ResourceKey<Level> key, @Advice.Argument(value = 5, readOnly = false) LevelStem levelStem) {
File iris = new File(access.levelDirectory.path().toFile(), "iris");
if (!iris.exists()) return;
if (!iris.exists() && !key.location().getPath().startsWith("iris/")) return;
var logger = MinecraftServer.LOGGER;
ResourceKey<DimensionType> typeKey = ResourceKey.create(Registry.DIMENSION_TYPE_REGISTRY, new ResourceLocation("iris", key.location().getPath()));
RegistryAccess registryAccess = server.registryAccess();
Registry<DimensionType> registry = registryAccess.registry(Registry.DIMENSION_TYPE_REGISTRY).orElse(null);
if (registry == null) {
logger.warn("Unable to find registry for dimension type {}", typeKey);
return;
}
if (registry == null) throw new IllegalStateException("Unable to find registry for dimension type " + typeKey);
Holder<DimensionType> holder = registry.getHolder(typeKey).orElse(null);
if (holder == null) {
logger.warn("Unable to find dimension type {}", typeKey);
return;
}
if (holder == null) throw new IllegalStateException("Unable to find dimension type " + typeKey);
levelStem = new LevelStem(holder, levelStem.generator());
}
}

View File

@@ -6,6 +6,7 @@ import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
@@ -601,8 +602,25 @@ public class NMSBinding implements INMSBinding {
var biomeFiles = biome.listFiles(jsonFilter);
if (biomeFiles == null) continue;
for (File biomeFile : biomeFiles) {
String json = null;
int tries = 10;
while (json == null && tries-- > 0) {
try {
json = IO.readAll(biomeFile);
} catch (IOException e) {
Iris.error("Failed to read biome " + file.getName() + ":" + biomeFile.getName() + " tries left: " + tries);
if (tries == 0) {
e.printStackTrace();
}
try {
Thread.sleep(100);
} catch (InterruptedException ignored) {}
}
}
if (json == null) continue;
try {
var value = decode(net.minecraft.world.level.biome.Biome.CODEC, IO.readAll(file)).map(Holder::value).orElse(null);
var value = decode(net.minecraft.world.level.biome.Biome.CODEC, json).map(Holder::value).orElse(null);
register(Registries.BIOME, from(file.getName(), biomeFile), value, replace);
} catch (Throwable e) {
Iris.error("Failed to register biome " + file.getName() + ":" + biomeFile.getName());
@@ -641,28 +659,15 @@ public class NMSBinding implements INMSBinding {
field.setAccessible(true);
boolean frozen = field.getBoolean(registry);
field.setBoolean(registry, false);
Field holdersField = null;
boolean holders = false;
for (Field f : MappedRegistry.class.getDeclaredFields()) {
if (!f.getGenericType().getTypeName().startsWith("java.util.Map<T, "))
continue;
holdersField = f;
}
if (holdersField != null) {
holdersField.setAccessible(true);
holders = holdersField.get(registry) == null;
if (holders) holdersField.set(registry, new IdentityHashMap<>());
}
Field valueField = getField(Holder.Reference.class, "T");
valueField.setAccessible(true);
try {
registry.createIntrusiveHolder(value);
registry.register(key, value, Lifecycle.stable());
var holder = registry.register(key, value, Lifecycle.stable());
if (frozen) valueField.set(holder, value);
return true;
} finally {
field.setBoolean(registry, frozen);
if (holders) {
holdersField.set(registry, null);
}
}
} catch (Throwable e) {
throw new IllegalStateException(e);
@@ -778,20 +783,13 @@ public class NMSBinding implements INMSBinding {
@Advice.OnMethodEnter
static void enter(@Advice.Argument(0) MinecraftServer server, @Advice.Argument(2) LevelStorageSource.LevelStorageAccess access, @Advice.Argument(4) ResourceKey<Level> key, @Advice.Argument(value = 5, readOnly = false) LevelStem levelStem) {
File iris = new File(access.levelDirectory.path().toFile(), "iris");
if (!iris.exists()) return;
var logger = MinecraftServer.LOGGER;
if (!iris.exists() && !key.location().getPath().startsWith("iris/")) return;
ResourceKey<DimensionType> typeKey = ResourceKey.create(Registries.DIMENSION_TYPE, new ResourceLocation("iris", key.location().getPath()));
RegistryAccess registryAccess = server.registryAccess();
Registry<DimensionType> registry = registryAccess.registry(Registries.DIMENSION_TYPE).orElse(null);
if (registry == null) {
logger.warn("Unable to find registry for dimension type {}", typeKey);
return;
}
if (registry == null) throw new IllegalStateException("Unable to find registry for dimension type " + typeKey);
Holder<DimensionType> holder = registry.getHolder(typeKey).orElse(null);
if (holder == null) {
logger.warn("Unable to find dimension type {}", typeKey);
return;
}
if (holder == null) throw new IllegalStateException("Unable to find dimension type " + typeKey);
levelStem = new LevelStem(holder, levelStem.generator());
}
}

View File

@@ -6,6 +6,7 @@ import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
@@ -605,8 +606,25 @@ public class NMSBinding implements INMSBinding {
var biomeFiles = biome.listFiles(jsonFilter);
if (biomeFiles == null) continue;
for (File biomeFile : biomeFiles) {
String json = null;
int tries = 10;
while (json == null && tries-- > 0) {
try {
json = IO.readAll(biomeFile);
} catch (IOException e) {
Iris.error("Failed to read biome " + file.getName() + ":" + biomeFile.getName() + " tries left: " + tries);
if (tries == 0) {
e.printStackTrace();
}
try {
Thread.sleep(100);
} catch (InterruptedException ignored) {}
}
}
if (json == null) continue;
try {
var value = decode(net.minecraft.world.level.biome.Biome.CODEC, IO.readAll(file)).map(Holder::value).orElse(null);
var value = decode(net.minecraft.world.level.biome.Biome.CODEC, json).map(Holder::value).orElse(null);
register(Registries.BIOME, from(file.getName(), biomeFile), value, replace);
} catch (Throwable e) {
Iris.error("Failed to register biome " + file.getName() + ":" + biomeFile.getName());
@@ -645,28 +663,15 @@ public class NMSBinding implements INMSBinding {
field.setAccessible(true);
boolean frozen = field.getBoolean(registry);
field.setBoolean(registry, false);
Field holdersField = null;
boolean holders = false;
for (Field f : MappedRegistry.class.getDeclaredFields()) {
if (!f.getGenericType().getTypeName().startsWith("java.util.Map<T, "))
continue;
holdersField = f;
}
if (holdersField != null) {
holdersField.setAccessible(true);
holders = holdersField.get(registry) == null;
if (holders) holdersField.set(registry, new IdentityHashMap<>());
}
Field valueField = getField(Holder.Reference.class, "T");
valueField.setAccessible(true);
try {
registry.createIntrusiveHolder(value);
registry.register(key, value, Lifecycle.stable());
var holder = registry.register(key, value, Lifecycle.stable());
if (frozen) valueField.set(holder, value);
return true;
} finally {
field.setBoolean(registry, frozen);
if (holders) {
holdersField.set(registry, null);
}
}
} catch (Throwable e) {
throw new IllegalStateException(e);
@@ -782,20 +787,13 @@ public class NMSBinding implements INMSBinding {
@Advice.OnMethodEnter
static void enter(@Advice.Argument(0) MinecraftServer server, @Advice.Argument(2) LevelStorageSource.LevelStorageAccess access, @Advice.Argument(4) ResourceKey<Level> key, @Advice.Argument(value = 5, readOnly = false) LevelStem levelStem) {
File iris = new File(access.levelDirectory.path().toFile(), "iris");
if (!iris.exists()) return;
var logger = MinecraftServer.LOGGER;
if (!iris.exists() && !key.location().getPath().startsWith("iris/")) return;
ResourceKey<DimensionType> typeKey = ResourceKey.create(Registries.DIMENSION_TYPE, new ResourceLocation("iris", key.location().getPath()));
RegistryAccess registryAccess = server.registryAccess();
Registry<DimensionType> registry = registryAccess.registry(Registries.DIMENSION_TYPE).orElse(null);
if (registry == null) {
logger.warn("Unable to find registry for dimension type {}", typeKey);
return;
}
if (registry == null) throw new IllegalStateException("Unable to find registry for dimension type " + typeKey);
Holder<DimensionType> holder = registry.getHolder(typeKey).orElse(null);
if (holder == null) {
logger.warn("Unable to find dimension type {}", typeKey);
return;
}
if (holder == null) throw new IllegalStateException("Unable to find dimension type " + typeKey);
levelStem = new LevelStem(holder, levelStem.generator());
}
}

View File

@@ -88,6 +88,7 @@ import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
@@ -592,8 +593,25 @@ public class NMSBinding implements INMSBinding {
var biomeFiles = biome.listFiles(jsonFilter);
if (biomeFiles == null) continue;
for (File biomeFile : biomeFiles) {
String json = null;
int tries = 10;
while (json == null && tries-- > 0) {
try {
json = IO.readAll(biomeFile);
} catch (IOException e) {
Iris.error("Failed to read biome " + file.getName() + ":" + biomeFile.getName() + " tries left: " + tries);
if (tries == 0) {
e.printStackTrace();
}
try {
Thread.sleep(100);
} catch (InterruptedException ignored) {}
}
}
if (json == null) continue;
try {
var value = decode(net.minecraft.world.level.biome.Biome.CODEC, IO.readAll(file)).map(Holder::value).orElse(null);
var value = decode(net.minecraft.world.level.biome.Biome.CODEC, json).map(Holder::value).orElse(null);
register(Registries.BIOME, from(file.getName(), biomeFile), value, replace);
} catch (Throwable e) {
Iris.error("Failed to register biome " + file.getName() + ":" + biomeFile.getName());
@@ -632,28 +650,15 @@ public class NMSBinding implements INMSBinding {
field.setAccessible(true);
boolean frozen = field.getBoolean(registry);
field.setBoolean(registry, false);
Field holdersField = null;
boolean holders = false;
for (Field f : MappedRegistry.class.getDeclaredFields()) {
if (!f.getGenericType().getTypeName().startsWith("java.util.Map<T, "))
continue;
holdersField = f;
}
if (holdersField != null) {
holdersField.setAccessible(true);
holders = holdersField.get(registry) == null;
if (holders) holdersField.set(registry, new IdentityHashMap<>());
}
Field valueField = getField(Holder.Reference.class, "T");
valueField.setAccessible(true);
try {
registry.createIntrusiveHolder(value);
registry.register(key, value, Lifecycle.stable());
var holder = registry.register(key, value, Lifecycle.stable());
if (frozen) valueField.set(holder, value);
return true;
} finally {
field.setBoolean(registry, frozen);
if (holders) {
holdersField.set(registry, null);
}
}
} catch (Throwable e) {
throw new IllegalStateException(e);
@@ -782,20 +787,13 @@ public class NMSBinding implements INMSBinding {
@Advice.OnMethodEnter
static void enter(@Advice.Argument(0) MinecraftServer server, @Advice.Argument(2) LevelStorageSource.LevelStorageAccess access, @Advice.Argument(4) ResourceKey<Level> key, @Advice.Argument(value = 5, readOnly = false) LevelStem levelStem) {
File iris = new File(access.levelDirectory.path().toFile(), "iris");
if (!iris.exists()) return;
var logger = MinecraftServer.LOGGER;
if (!iris.exists() && !key.location().getPath().startsWith("iris/")) return;
ResourceKey<DimensionType> typeKey = ResourceKey.create(Registries.DIMENSION_TYPE, new ResourceLocation("iris", key.location().getPath()));
RegistryAccess registryAccess = server.registryAccess();
Registry<DimensionType> registry = registryAccess.registry(Registries.DIMENSION_TYPE).orElse(null);
if (registry == null) {
logger.warn("Unable to find registry for dimension type {}", typeKey);
return;
}
if (registry == null) throw new IllegalStateException("Unable to find registry for dimension type " + typeKey);
Holder<DimensionType> holder = registry.getHolder(typeKey).orElse(null);
if (holder == null) {
logger.warn("Unable to find dimension type {}", typeKey);
return;
}
if (holder == null) throw new IllegalStateException("Unable to find dimension type " + typeKey);
levelStem = new LevelStem(holder, levelStem.generator());
}
}

View File

@@ -6,6 +6,7 @@ import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
@@ -602,8 +603,25 @@ public class NMSBinding implements INMSBinding {
var biomeFiles = biome.listFiles(jsonFilter);
if (biomeFiles == null) continue;
for (File biomeFile : biomeFiles) {
String json = null;
int tries = 10;
while (json == null && tries-- > 0) {
try {
json = IO.readAll(biomeFile);
} catch (IOException e) {
Iris.error("Failed to read biome " + file.getName() + ":" + biomeFile.getName() + " tries left: " + tries);
if (tries == 0) {
e.printStackTrace();
}
try {
Thread.sleep(100);
} catch (InterruptedException ignored) {}
}
}
if (json == null) continue;
try {
var value = decode(net.minecraft.world.level.biome.Biome.CODEC, IO.readAll(file)).map(Holder::value).orElse(null);
var value = decode(net.minecraft.world.level.biome.Biome.CODEC, json).map(Holder::value).orElse(null);
register(Registries.BIOME, from(file.getName(), biomeFile), value, replace);
} catch (Throwable e) {
Iris.error("Failed to register biome " + file.getName() + ":" + biomeFile.getName());
@@ -642,28 +660,15 @@ public class NMSBinding implements INMSBinding {
field.setAccessible(true);
boolean frozen = field.getBoolean(registry);
field.setBoolean(registry, false);
Field holdersField = null;
boolean holders = false;
for (Field f : MappedRegistry.class.getDeclaredFields()) {
if (!f.getGenericType().getTypeName().startsWith("java.util.Map<T, "))
continue;
holdersField = f;
}
if (holdersField != null) {
holdersField.setAccessible(true);
holders = holdersField.get(registry) == null;
if (holders) holdersField.set(registry, new IdentityHashMap<>());
}
Field valueField = getField(Holder.Reference.class, "T");
valueField.setAccessible(true);
try {
registry.createIntrusiveHolder(value);
registry.register(key, value, Lifecycle.stable());
var holder = registry.register(key, value, Lifecycle.stable());
if (frozen) valueField.set(holder, value);
return true;
} finally {
field.setBoolean(registry, frozen);
if (holders) {
holdersField.set(registry, null);
}
}
} catch (Throwable e) {
throw new IllegalStateException(e);
@@ -784,20 +789,13 @@ public class NMSBinding implements INMSBinding {
@Advice.OnMethodEnter
static void enter(@Advice.Argument(0) MinecraftServer server, @Advice.Argument(2) LevelStorageSource.LevelStorageAccess access, @Advice.Argument(4) ResourceKey<Level> key, @Advice.Argument(value = 5, readOnly = false) LevelStem levelStem) {
File iris = new File(access.levelDirectory.path().toFile(), "iris");
if (!iris.exists()) return;
var logger = MinecraftServer.LOGGER;
if (!iris.exists() && !key.location().getPath().startsWith("iris/")) return;
ResourceKey<DimensionType> typeKey = ResourceKey.create(Registries.DIMENSION_TYPE, new ResourceLocation("iris", key.location().getPath()));
RegistryAccess registryAccess = server.registryAccess();
Registry<DimensionType> registry = registryAccess.registry(Registries.DIMENSION_TYPE).orElse(null);
if (registry == null) {
logger.warn("Unable to find registry for dimension type {}", typeKey);
return;
}
if (registry == null) throw new IllegalStateException("Unable to find registry for dimension type " + typeKey);
Holder<DimensionType> holder = registry.getHolder(typeKey).orElse(null);
if (holder == null) {
logger.warn("Unable to find dimension type {}", typeKey);
return;
}
if (holder == null) throw new IllegalStateException("Unable to find dimension type " + typeKey);
levelStem = new LevelStem(holder, levelStem.generator());
}
}

View File

@@ -7,21 +7,15 @@ import java.io.DataOutputStream;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.Instrumentation;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.nio.file.Files;
import java.util.*;
import java.util.concurrent.Executor;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Logger;
import com.google.common.base.Preconditions;
import com.google.common.base.Supplier;
import com.google.gson.JsonElement;
import com.google.gson.JsonNull;
import com.google.gson.JsonObject;
import com.mojang.datafixers.util.Pair;
import com.mojang.serialization.Codec;
@@ -29,27 +23,19 @@ import com.mojang.serialization.JsonOps;
import com.mojang.serialization.Lifecycle;
import com.volmit.iris.engine.object.IrisDimension;
import com.volmit.iris.util.format.C;
import com.volmit.iris.util.function.NastySupplier;
import com.volmit.iris.util.io.IO;
import it.unimi.dsi.fastutil.objects.Reference2IntMap;
import net.bytebuddy.ByteBuddy;
import net.bytebuddy.agent.builder.AgentBuilder;
import net.bytebuddy.asm.Advice;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.dynamic.DynamicType;
import net.bytebuddy.dynamic.loading.ClassReloadingStrategy;
import net.bytebuddy.matcher.ElementMatchers;
import net.bytebuddy.utility.JavaModule;
import net.minecraft.core.IdMapper;
import net.minecraft.core.MappedRegistry;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.progress.ChunkProgressListener;
import net.minecraft.util.GsonHelper;
import net.minecraft.util.worldupdate.WorldUpgrader;
import net.minecraft.world.RandomSequences;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.LevelHeightAccessor;
import net.minecraft.world.level.dimension.DimensionType;
import net.minecraft.world.level.dimension.LevelStem;
import net.minecraft.world.level.storage.LevelStorageSource;
@@ -615,8 +601,25 @@ public class NMSBinding implements INMSBinding {
var biomeFiles = biome.listFiles(jsonFilter);
if (biomeFiles == null) continue;
for (File biomeFile : biomeFiles) {
String json = null;
int tries = 10;
while (json == null && tries-- > 0) {
try {
json = IO.readAll(biomeFile);
} catch (IOException e) {
Iris.error("Failed to read biome " + file.getName() + ":" + biomeFile.getName() + " tries left: " + tries);
if (tries == 0) {
e.printStackTrace();
}
try {
Thread.sleep(100);
} catch (InterruptedException ignored) {}
}
}
if (json == null) continue;
try {
var value = decode(net.minecraft.world.level.biome.Biome.CODEC, IO.readAll(file)).map(Holder::value).orElse(null);
var value = decode(net.minecraft.world.level.biome.Biome.CODEC, json).map(Holder::value).orElse(null);
register(Registries.BIOME, from(file.getName(), biomeFile), value, replace);
} catch (Throwable e) {
Iris.error("Failed to register biome " + file.getName() + ":" + biomeFile.getName());
@@ -655,28 +658,15 @@ public class NMSBinding implements INMSBinding {
field.setAccessible(true);
boolean frozen = field.getBoolean(registry);
field.setBoolean(registry, false);
Field holdersField = null;
boolean holders = false;
for (Field f : MappedRegistry.class.getDeclaredFields()) {
if (!f.getGenericType().getTypeName().startsWith("java.util.Map<T, "))
continue;
holdersField = f;
}
if (holdersField != null) {
holdersField.setAccessible(true);
holders = holdersField.get(registry) == null;
if (holders) holdersField.set(registry, new IdentityHashMap<>());
}
Field valueField = getField(Holder.Reference.class, "T");
valueField.setAccessible(true);
try {
registry.createIntrusiveHolder(value);
registry.register(key, value, Lifecycle.stable());
var holder = registry.register(key, value, Lifecycle.stable());
if (frozen) valueField.set(holder, value);
return true;
} finally {
field.setBoolean(registry, frozen);
if (holders) {
holdersField.set(registry, null);
}
}
} catch (Throwable e) {
throw new IllegalStateException(e);
@@ -796,20 +786,13 @@ public class NMSBinding implements INMSBinding {
@Advice.OnMethodEnter
static void enter(@Advice.Argument(0) MinecraftServer server, @Advice.Argument(2) LevelStorageSource.LevelStorageAccess access, @Advice.Argument(4) ResourceKey<Level> key, @Advice.Argument(value = 5, readOnly = false) LevelStem levelStem) {
File iris = new File(access.levelDirectory.path().toFile(), "iris");
if (!iris.exists()) return;
var logger = MinecraftServer.LOGGER;
if (!iris.exists() && !key.location().getPath().startsWith("iris/")) return;
ResourceKey<DimensionType> typeKey = ResourceKey.create(Registries.DIMENSION_TYPE, new ResourceLocation("iris", key.location().getPath()));
RegistryAccess registryAccess = server.registryAccess();
Registry<DimensionType> registry = registryAccess.registry(Registries.DIMENSION_TYPE).orElse(null);
if (registry == null) {
logger.warn("Unable to find registry for dimension type {}", typeKey);
return;
}
if (registry == null) throw new IllegalStateException("Unable to find registry for dimension type " + typeKey);
Holder<DimensionType> holder = registry.getHolder(typeKey).orElse(null);
if (holder == null) {
logger.warn("Unable to find dimension type {}", typeKey);
return;
}
if (holder == null) throw new IllegalStateException("Unable to find dimension type " + typeKey);
levelStem = new LevelStem(holder, levelStem.generator());
}
}