From 62756d27843abbac7a87239513bc624ef51195b0 Mon Sep 17 00:00:00 2001 From: OakLoaf Date: Fri, 25 Oct 2024 19:36:18 +0100 Subject: [PATCH] Updated Bukkit to support 1.21.3 --- buildSrc/src/main/kotlin/Versions.kt | 4 ++-- .../terra/bukkit/nms/v1_21/AwfulBukkitHacks.java | 9 ++++----- .../terra/bukkit/nms/v1_21/NMSBiomeInjector.java | 2 +- .../terra/bukkit/nms/v1_21/NMSBiomeProvider.java | 4 ++-- .../nms/v1_21/NMSChunkGeneratorDelegate.java | 3 +-- .../terra/bukkit/nms/v1_21/NMSInjectListener.java | 5 +++-- .../terra/bukkit/nms/v1_21/NMSWorldProperties.java | 4 ++-- .../dfsek/terra/bukkit/nms/v1_21/Reflection.java | 14 ++++++++++++++ .../terra/bukkit/nms/v1_21/RegistryFetcher.java | 4 +++- 9 files changed, 32 insertions(+), 17 deletions(-) diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index e507febd5..25021e9c1 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -56,8 +56,8 @@ object Versions { // } object Bukkit { - const val minecraft = "1.21.1" - const val paperBuild = "$minecraft-R0.1-20240917.151311-80" + const val minecraft = "1.21.3" + const val paperBuild = "$minecraft-R0.1-20241025.163321-1" const val paper = paperBuild const val paperLib = "1.0.8" const val reflectionRemapper = "0.1.1" diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/AwfulBukkitHacks.java b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/AwfulBukkitHacks.java index 42d683394..2523e534e 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/AwfulBukkitHacks.java +++ b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/AwfulBukkitHacks.java @@ -19,7 +19,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Objects; import com.dfsek.terra.bukkit.world.BukkitPlatformBiome; import com.dfsek.terra.registry.master.ConfigRegistry; @@ -43,7 +42,7 @@ public class AwfulBukkitHacks { NamespacedKey vanillaBukkitKey = platformBiome.getHandle().getKey(); ResourceLocation vanillaMinecraftKey = ResourceLocation.fromNamespaceAndPath(vanillaBukkitKey.getNamespace(), vanillaBukkitKey.getKey()); - Biome platform = NMSBiomeInjector.createBiome(biome, Objects.requireNonNull(biomeRegistry.get(vanillaMinecraftKey))); + Biome platform = NMSBiomeInjector.createBiome(biome, biomeRegistry.get(vanillaMinecraftKey).orElseThrow().value()); ResourceKey delegateKey = ResourceKey.create( Registries.BIOME, @@ -70,7 +69,7 @@ public class AwfulBukkitHacks { .getTags() // streamKeysAndEntries .collect(HashMap::new, (map, pair) -> - map.put(pair.getFirst(), new ArrayList<>(pair.getSecond().stream().toList())), + map.put(pair.key(), new ArrayList<>(Reflection.HOLDER_SET.invokeContents(pair).stream().toList())), HashMap::putAll); terraBiomeMap @@ -91,8 +90,8 @@ public class AwfulBukkitHacks { () -> LOGGER.error("No such biome: {}", tb))), () -> LOGGER.error("No vanilla biome: {}", vb))); - biomeRegistry.resetTags(); - biomeRegistry.bindTags(ImmutableMap.copyOf(collect)); + ((MappedRegistry) biomeRegistry).bindAllTagsToEmpty(); + ImmutableMap.copyOf(collect).forEach(biomeRegistry::bindTag); } catch(SecurityException | IllegalArgumentException exception) { throw new RuntimeException(exception); diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSBiomeInjector.java b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSBiomeInjector.java index e6d1f7869..8dea43a32 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSBiomeInjector.java +++ b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSBiomeInjector.java @@ -19,7 +19,7 @@ public class NMSBiomeInjector { public static Optional> getEntry(Registry registry, ResourceLocation identifier) { return registry.getOptional(identifier) .flatMap(registry::getResourceKey) - .flatMap(registry::getHolder); + .flatMap(registry::get); } public static Biome createBiome(com.dfsek.terra.api.world.biome.Biome biome, Biome vanilla) diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSBiomeProvider.java b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSBiomeProvider.java index 8abe26a51..ca2b0e8da 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSBiomeProvider.java +++ b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSBiomeProvider.java @@ -29,7 +29,7 @@ public class NMSBiomeProvider extends BiomeSource { protected Stream> collectPossibleBiomes() { return delegate.stream() .map(biome -> RegistryFetcher.biomeRegistry() - .getHolderOrThrow(((BukkitPlatformBiome) biome.getPlatformBiome()).getContext() + .getOrThrow(((BukkitPlatformBiome) biome.getPlatformBiome()).getContext() .get(NMSBiomeInfo.class) .biomeKey())); } @@ -45,7 +45,7 @@ public class NMSBiomeProvider extends BiomeSource { @Override public @NotNull Holder getNoiseBiome(int x, int y, int z, @NotNull Sampler sampler) { - return biomeRegistry.getHolderOrThrow(((BukkitPlatformBiome) delegate.getBiome(x << 2, y << 2, z << 2, seed) + return biomeRegistry.getOrThrow(((BukkitPlatformBiome) delegate.getBiome(x << 2, y << 2, z << 2, seed) .getPlatformBiome()).getContext() .get(NMSBiomeInfo.class) .biomeKey()); diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSChunkGeneratorDelegate.java b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSChunkGeneratorDelegate.java index 16097df27..fe4fa6a59 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSChunkGeneratorDelegate.java +++ b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSChunkGeneratorDelegate.java @@ -15,7 +15,6 @@ import net.minecraft.world.level.chunk.ChunkAccess; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Beardifier; import net.minecraft.world.level.levelgen.DensityFunction.SinglePointContext; -import net.minecraft.world.level.levelgen.GenerationStep.Carving; import net.minecraft.world.level.levelgen.Heightmap.Types; import net.minecraft.world.level.levelgen.RandomState; import net.minecraft.world.level.levelgen.blending.Blender; @@ -59,7 +58,7 @@ public class NMSChunkGeneratorDelegate extends ChunkGenerator { @Override public void applyCarvers(@NotNull WorldGenRegion chunkRegion, long seed, @NotNull RandomState noiseConfig, @NotNull BiomeManager world, - @NotNull StructureManager structureAccessor, @NotNull ChunkAccess chunk, @NotNull Carving carverStep) { + @NotNull StructureManager structureAccessor, @NotNull ChunkAccess chunk) { // no-op } diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSInjectListener.java b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSInjectListener.java index a25638594..9d73a9e98 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSInjectListener.java +++ b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSInjectListener.java @@ -41,13 +41,14 @@ public class NMSInjectListener implements Listener { ChunkGenerator vanilla = serverWorld.getChunkSource().getGenerator(); NMSBiomeProvider provider = new NMSBiomeProvider(pack.getBiomeProvider(), craftWorld.getSeed()); ChunkMap chunkMap = serverWorld.getChunkSource().chunkMap; - WorldGenContext worldGenContext = chunkMap.worldGenContext; + WorldGenContext worldGenContext = Reflection.CHUNKMAP.getWorldGenContext(chunkMap); Reflection.CHUNKMAP.setWorldGenContext(chunkMap, new WorldGenContext( worldGenContext.level(), new NMSChunkGeneratorDelegate(vanilla, pack, provider, craftWorld.getSeed()), worldGenContext.structureManager(), worldGenContext.lightEngine(), - worldGenContext.mainThreadMailBox() + worldGenContext.mainThreadExecutor(), + worldGenContext.unsavedListener() )); LOGGER.info("Successfully injected into world."); diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSWorldProperties.java b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSWorldProperties.java index 7860cf530..f0651cc54 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSWorldProperties.java +++ b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSWorldProperties.java @@ -26,11 +26,11 @@ public class NMSWorldProperties implements WorldProperties { @Override public int getMaxHeight() { - return height.getMaxBuildHeight(); + return height.getMaxY(); } @Override public int getMinHeight() { - return height.getMinBuildHeight(); + return height.getMinY(); } } diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/Reflection.java b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/Reflection.java index a6f4ea9ba..13078e94d 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/Reflection.java +++ b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/Reflection.java @@ -2,6 +2,7 @@ package com.dfsek.terra.bukkit.nms.v1_21; import net.minecraft.core.Holder; import net.minecraft.core.Holder.Reference; +import net.minecraft.core.HolderSet; import net.minecraft.core.MappedRegistry; import net.minecraft.server.level.ChunkMap; import net.minecraft.world.level.LevelAccessor; @@ -14,6 +15,8 @@ import xyz.jpenilla.reflectionremapper.proxy.annotation.FieldSetter; import xyz.jpenilla.reflectionremapper.proxy.annotation.MethodName; import xyz.jpenilla.reflectionremapper.proxy.annotation.Proxies; +import java.util.List; + public class Reflection { public static final MappedRegistryProxy MAPPED_REGISTRY; @@ -22,6 +25,7 @@ public class Reflection { public static final ReferenceProxy REFERENCE; public static final ChunkMapProxy CHUNKMAP; + public static final HolderSetProxy HOLDER_SET; static { ReflectionRemapper reflectionRemapper = ReflectionRemapper.forReobfMappingsInPaperJar(); @@ -32,6 +36,7 @@ public class Reflection { STRUCTURE_MANAGER = reflectionProxyFactory.reflectionProxy(StructureManagerProxy.class); REFERENCE = reflectionProxyFactory.reflectionProxy(ReferenceProxy.class); CHUNKMAP = reflectionProxyFactory.reflectionProxy(ChunkMapProxy.class); + HOLDER_SET = reflectionProxyFactory.reflectionProxy(HolderSetProxy.class); } @@ -57,7 +62,16 @@ public class Reflection { @Proxies(ChunkMap.class) public interface ChunkMapProxy { + @FieldGetter("worldGenContext") + WorldGenContext getWorldGenContext(ChunkMap instance); + @FieldSetter("worldGenContext") void setWorldGenContext(ChunkMap instance, WorldGenContext worldGenContext); } + + @Proxies(HolderSet.class) + public interface HolderSetProxy { + @MethodName("contents") + List> invokeContents(HolderSet instance); + } } diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/RegistryFetcher.java b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/RegistryFetcher.java index 0377eea0f..eecc28047 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/RegistryFetcher.java +++ b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/RegistryFetcher.java @@ -15,7 +15,9 @@ public class RegistryFetcher { DedicatedServer dedicatedserver = craftserver.getServer(); return dedicatedserver .registryAccess() - .registryOrThrow(key); + .get(key) + .orElseThrow() + .value(); } public static Registry biomeRegistry() {