diff --git a/java/patchbukkit/src/main/java/org/patchbukkit/bridge/NativePatchBukkit.java b/java/patchbukkit/src/main/java/org/patchbukkit/bridge/NativePatchBukkit.java index d36780d..0952f52 100644 --- a/java/patchbukkit/src/main/java/org/patchbukkit/bridge/NativePatchBukkit.java +++ b/java/patchbukkit/src/main/java/org/patchbukkit/bridge/NativePatchBukkit.java @@ -182,7 +182,9 @@ public class NativePatchBukkit { long registerEventAddr, long getAbilitiesAddr, long setAbilitiesAddr, - long getLocationAddr + long getLocationAddr, + long freeStringAddr, + long getWorldAddr ) { // void rust_send_message(const char* uuid, const char* message) sendMessageNative = LINKER.downcallHandle( diff --git a/java/patchbukkit/src/main/java/org/patchbukkit/entity/PatchBukkitEntity.java b/java/patchbukkit/src/main/java/org/patchbukkit/entity/PatchBukkitEntity.java index f798612..d2ada73 100644 --- a/java/patchbukkit/src/main/java/org/patchbukkit/entity/PatchBukkitEntity.java +++ b/java/patchbukkit/src/main/java/org/patchbukkit/entity/PatchBukkitEntity.java @@ -38,6 +38,7 @@ import org.bukkit.util.Vector; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.patchbukkit.bridge.NativePatchBukkit; +import org.patchbukkit.world.PatchBukkitWorld; import io.papermc.paper.datacomponent.DataComponentType; import io.papermc.paper.datacomponent.DataComponentType.Valued; @@ -319,8 +320,11 @@ public class PatchBukkitEntity implements Entity { @Override public @NotNull World getWorld() { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'getWorld'"); + var world_uuid_str = NativePatchBukkit.getWorld(this.uuid); + UUID world_uuid = UUID.fromString(world_uuid_str); + var world = PatchBukkitWorld.getOrCreate(world_uuid); + + return world; } @Override diff --git a/java/patchbukkit/src/main/java/org/patchbukkit/registry/PatchBukkitRegistryAccess.java b/java/patchbukkit/src/main/java/org/patchbukkit/registry/PatchBukkitRegistryAccess.java new file mode 100644 index 0000000..039d4e4 --- /dev/null +++ b/java/patchbukkit/src/main/java/org/patchbukkit/registry/PatchBukkitRegistryAccess.java @@ -0,0 +1,22 @@ +package org.patchbukkit.registry; + +import io.papermc.paper.registry.RegistryAccess; +import io.papermc.paper.registry.RegistryKey; +import org.bukkit.Keyed; +import org.bukkit.Registry; +import org.jspecify.annotations.Nullable; + +public class PatchBukkitRegistryAccess implements RegistryAccess { + + @Override + public @Nullable Registry getRegistry(Class type) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'getRegistry'"); + } + + @Override + public Registry getRegistry(RegistryKey registryKey) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'getRegistry'"); + } +} diff --git a/java/patchbukkit/src/main/java/org/patchbukkit/world/PatchBukkitWorld.java b/java/patchbukkit/src/main/java/org/patchbukkit/world/PatchBukkitWorld.java index d14fdff..0fcf55f 100644 --- a/java/patchbukkit/src/main/java/org/patchbukkit/world/PatchBukkitWorld.java +++ b/java/patchbukkit/src/main/java/org/patchbukkit/world/PatchBukkitWorld.java @@ -33,6 +33,17 @@ public class PatchBukkitWorld extends PatchBukkitRegionAccessor implements World { + private static final Map instances = new HashMap<>(); + private UUID uuid; + + private PatchBukkitWorld(UUID uuid) { + this.uuid = uuid; + } + + public static PatchBukkitWorld getOrCreate(UUID uuid) { + return instances.computeIfAbsent(uuid, PatchBukkitWorld::new); + } + @Override public boolean isVoidDamageEnabled() { diff --git a/java/patchbukkit/src/main/resources/META-INF/services/io.papermc.paper.registry.RegistryAccess b/java/patchbukkit/src/main/resources/META-INF/services/io.papermc.paper.registry.RegistryAccess new file mode 100644 index 0000000..c835c02 --- /dev/null +++ b/java/patchbukkit/src/main/resources/META-INF/services/io.papermc.paper.registry.RegistryAccess @@ -0,0 +1 @@ +org.patchbukkit.registry.PatchBukkitRegistryAccess