mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-29 12:27:59 +01:00
f6585dfe97
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing CraftBukkit Changes: 51e2981b #831: Reload unloaded main worlds correctly
111 lines
6.3 KiB
Diff
111 lines
6.3 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
|
Date: Wed, 6 Jan 2021 00:34:04 -0800
|
|
Subject: [PATCH] Implement Keyed on World
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/core/IRegistry.java b/src/main/java/net/minecraft/core/IRegistry.java
|
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
--- a/src/main/java/net/minecraft/core/IRegistry.java
|
|
+++ b/src/main/java/net/minecraft/core/IRegistry.java
|
|
@@ -0,0 +0,0 @@ public abstract class IRegistry<T> implements Codec<T>, Keyable, Registry<T> {
|
|
public static final ResourceKey<IRegistry<LootItemFunctionType>> I = a("loot_function_type");
|
|
public static final ResourceKey<IRegistry<LootItemConditionType>> J = a("loot_condition_type");
|
|
public static final ResourceKey<IRegistry<DimensionManager>> K = a("dimension_type");
|
|
- public static final ResourceKey<IRegistry<World>> L = a("dimension");
|
|
+ public static final ResourceKey<IRegistry<World>> L = a("dimension"); public static final ResourceKey<IRegistry<World>> getWorldRegistry() { return L; } // Paper - OBFHELPER
|
|
public static final ResourceKey<IRegistry<WorldDimension>> M = a("dimension");
|
|
public static final IRegistry<SoundEffect> SOUND_EVENT = a(IRegistry.g, () -> {
|
|
return SoundEffects.ENTITY_ITEM_PICKUP;
|
|
@@ -0,0 +0,0 @@ public abstract class IRegistry<T> implements Codec<T>, Keyable, Registry<T> {
|
|
MinecraftKey minecraftkey = resourcekey.a();
|
|
|
|
IRegistry.a.put(minecraftkey, supplier);
|
|
- IRegistryWritable<R> iregistrywritable = IRegistry.e;
|
|
+ IRegistryWritable iregistrywritable = IRegistry.e; // Paper - decompile fix
|
|
|
|
- return (IRegistryWritable) iregistrywritable.a(resourcekey, (Object) r0, lifecycle);
|
|
+ return (R) iregistrywritable.a(resourcekey, (Object) r0, lifecycle); // Paper - decompile fix
|
|
}
|
|
|
|
protected IRegistry(ResourceKey<? extends IRegistry<T>> resourcekey, Lifecycle lifecycle) {
|
|
@@ -0,0 +0,0 @@ public abstract class IRegistry<T> implements Codec<T>, Keyable, Registry<T> {
|
|
}
|
|
|
|
public static <V, T extends V> T a(IRegistry<V> iregistry, MinecraftKey minecraftkey, T t0) {
|
|
- return ((IRegistryWritable) iregistry).a(ResourceKey.a(iregistry.b, minecraftkey), t0, Lifecycle.stable());
|
|
+ return ((IRegistryWritable<V>) iregistry).a(ResourceKey.a(iregistry.b, minecraftkey), t0, Lifecycle.stable()); // Paper - decompile fix
|
|
}
|
|
|
|
public static <V, T extends V> T a(IRegistry<V> iregistry, int i, String s, T t0) {
|
|
- return ((IRegistryWritable) iregistry).a(i, ResourceKey.a(iregistry.b, new MinecraftKey(s)), t0, Lifecycle.stable());
|
|
+ return ((IRegistryWritable<V>) iregistry).a(i, ResourceKey.a(iregistry.b, new MinecraftKey(s)), t0, Lifecycle.stable()); // Paper - decompile fix
|
|
}
|
|
|
|
static {
|
|
diff --git a/src/main/java/net/minecraft/resources/ResourceKey.java b/src/main/java/net/minecraft/resources/ResourceKey.java
|
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
--- a/src/main/java/net/minecraft/resources/ResourceKey.java
|
|
+++ b/src/main/java/net/minecraft/resources/ResourceKey.java
|
|
@@ -0,0 +0,0 @@ public class ResourceKey<T> {
|
|
private final MinecraftKey b;
|
|
private final MinecraftKey c;
|
|
|
|
+ public static <T> ResourceKey<T> newResourceKey(ResourceKey<? extends IRegistry<T>> registryKey, MinecraftKey minecraftKey) { return a(registryKey, minecraftKey); } // Paper - OBFHELPER
|
|
public static <T> ResourceKey<T> a(ResourceKey<? extends IRegistry<T>> resourcekey, MinecraftKey minecraftkey) {
|
|
return a(resourcekey.c, minecraftkey);
|
|
}
|
|
@@ -0,0 +0,0 @@ public class ResourceKey<T> {
|
|
return this.b.equals(resourcekey.a());
|
|
}
|
|
|
|
+ public MinecraftKey getLocation() { return a(); } // Paper - OBFHELPER
|
|
public MinecraftKey a() {
|
|
return this.c;
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
|
|
} else if (name.equals(levelName + "_the_end")) {
|
|
worldKey = net.minecraft.world.level.World.THE_END;
|
|
} else {
|
|
- worldKey = ResourceKey.a(IRegistry.L, new MinecraftKey(name.toLowerCase(java.util.Locale.ENGLISH)));
|
|
+ worldKey = ResourceKey.newResourceKey(IRegistry.getWorldRegistry(), new net.minecraft.resources.MinecraftKey(creator.key().getNamespace().toLowerCase(java.util.Locale.ENGLISH), creator.key().getKey().toLowerCase(java.util.Locale.ENGLISH))); // Paper
|
|
}
|
|
|
|
WorldServer internal = (WorldServer) new WorldServer(console, console.executorService, worldSession, worlddata, worldKey, dimensionmanager, getServer().worldLoadListenerFactory.create(11),
|
|
@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
|
|
return null;
|
|
}
|
|
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public World getWorld(NamespacedKey worldKey) {
|
|
+ WorldServer worldServer = console.getWorldServer(ResourceKey.newResourceKey(IRegistry.getWorldRegistry(), CraftNamespacedKey.toMinecraft(worldKey)));
|
|
+ if (worldServer == null) return null;
|
|
+ return worldServer.getWorld();
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
public void addWorld(World world) {
|
|
// Check if a World already exists with the UID.
|
|
if (getWorld(world.getUID()) != null) {
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
@@ -0,0 +0,0 @@ public class CraftWorld implements World {
|
|
return CompletableFuture.completedFuture(chunk == null ? null : chunk.getBukkitChunk());
|
|
}, net.minecraft.server.MinecraftServer.getServer());
|
|
}
|
|
+
|
|
+ @Override
|
|
+ public org.bukkit.NamespacedKey getKey() {
|
|
+ return org.bukkit.craftbukkit.util.CraftNamespacedKey.fromMinecraft(world.getDimensionKey().getLocation());
|
|
+ }
|
|
// Paper end
|
|
|
|
// Spigot start
|