aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches/0691-Implement-Keyed-on-World.patch
blob: 138f3341bbf79f8a445ed83174fd0707d73445ee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
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 3e9ebeffdf66f8a959630b344149d17137c6901c..4f04d8081912e0fe771f0db9e086c789328f246f 100644
--- a/src/main/java/net/minecraft/core/IRegistry.java
+++ b/src/main/java/net/minecraft/core/IRegistry.java
@@ -130,7 +130,7 @@ 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;
@@ -339,9 +339,9 @@ 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) {
@@ -428,11 +428,11 @@ 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 760579921927b4c8b0f20b2611b95fd626e4b27f..3075700dfa992da81b10246fcf7c7ad1115c4ba3 100644
--- a/src/main/java/net/minecraft/resources/ResourceKey.java
+++ b/src/main/java/net/minecraft/resources/ResourceKey.java
@@ -12,6 +12,7 @@ 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);
     }
@@ -41,6 +42,7 @@ 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 cbac3c96c5d3c1551912f5769bfc50d690519495..03b8d67a5f0088c0254b2099f27e8dcae32a6221 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -1154,7 +1154,7 @@ public final class CraftServer implements Server {
             chunkgenerator = worlddimension.c();
         }
 
-        ResourceKey<net.minecraft.world.level.World> worldKey = ResourceKey.a(IRegistry.L, new MinecraftKey(name.toLowerCase(java.util.Locale.ENGLISH)));
+        ResourceKey<net.minecraft.world.level.World> worldKey = ResourceKey.newResourceKey(IRegistry.getWorldRegistry(), new 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),
                 chunkgenerator, worlddata.getGeneratorSettings().isDebugWorld(), j, creator.environment() == Environment.NORMAL ? list : ImmutableList.of(), true, creator.environment(), generator);
@@ -1245,6 +1245,15 @@ 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 ef353e21f7e04162d886e70012f845334962459b..05098332d83b1abfaa0a6d3bd4a9e801ea90d2ad 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
@@ -2584,6 +2584,11 @@ 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