46 lines
3.0 KiB
Diff
46 lines
3.0 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jason Penilla <11360596+jpenilla@users.noreply.github.com>
|
|
Date: Sat, 16 Oct 2021 17:38:35 -0700
|
|
Subject: [PATCH] Use correct LevelStem registry when loading default
|
|
end/nether
|
|
|
|
Co-authored-by: Jake Potrebic <jake.m.potrebic@gmail.com>
|
|
|
|
diff --git a/src/main/java/net/minecraft/resources/RegistryLoader.java b/src/main/java/net/minecraft/resources/RegistryLoader.java
|
|
index 8da1226a6c293abb038d10c7921a77ed71ad06cc..f958f0ae738a6fb26400e17e54c8d69e95268cdd 100644
|
|
--- a/src/main/java/net/minecraft/resources/RegistryLoader.java
|
|
+++ b/src/main/java/net/minecraft/resources/RegistryLoader.java
|
|
@@ -46,6 +46,12 @@ public class RegistryLoader {
|
|
RegistryLoader.ReadCache<E> readCache = this.readCache(registryRef);
|
|
DataResult<Holder<E>> dataResult = readCache.values.get(entryKey);
|
|
if (dataResult != null) {
|
|
+ // Paper start - register in registry due to craftbukkit running this 3 times instead of once
|
|
+ if (registryRef == (ResourceKey) Registry.LEVEL_STEM_REGISTRY && dataResult.result().isPresent()) {
|
|
+ // OptionalInt.empty() because the LevelStem registry is only loaded from the resource manager, not the InMemory resource access
|
|
+ registry.registerOrOverride(java.util.OptionalInt.empty(), entryKey, dataResult.result().get().value(), dataResult.lifecycle());
|
|
+ }
|
|
+ // Paper end
|
|
return dataResult;
|
|
} else {
|
|
Holder<E> holder = registry.getOrCreateHolderOrThrow(entryKey);
|
|
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
index 786eafffa9bc51399c7fdf0012dfdaa9c92e71b0..6279b843ad04769b202b74913e328c86f256ee13 100644
|
|
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
@@ -549,7 +549,14 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
|
long i = generatorsettings.seed();
|
|
long j = BiomeManager.obfuscateSeed(i);
|
|
List<CustomSpawner> list = ImmutableList.of(new PhantomSpawner(), new PatrolSpawner(), new CatSpawner(), new VillageSiege(), new WanderingTraderSpawner(iworlddataserver));
|
|
- LevelStem worlddimension = (LevelStem) iregistry.get(dimensionKey);
|
|
+ // Paper start - Use correct LevelStem registry
|
|
+ final LevelStem worlddimension;
|
|
+ if (dimensionKey == LevelStem.END || dimensionKey == LevelStem.NETHER) {
|
|
+ worlddimension = generatorsettings.dimensions().get(dimensionKey);
|
|
+ } else {
|
|
+ worlddimension = iregistry.get(dimensionKey);
|
|
+ }
|
|
+ // Paper end
|
|
|
|
org.bukkit.generator.WorldInfo worldInfo = new org.bukkit.craftbukkit.generator.CraftWorldInfo(iworlddataserver, worldSession, org.bukkit.World.Environment.getEnvironment(dimension), worlddimension.typeHolder().value());
|
|
if (biomeProvider == null && gen != null) {
|