From 5367921496d5ed90c1a759a8874ab50e69b40949 Mon Sep 17 00:00:00 2001 From: Hannes Greule Date: Tue, 7 Dec 2021 12:59:58 +0100 Subject: [PATCH] fix: Use WE PaperweightAdapter for seed replacement (#1440) * Use WE PaperweightAdapter for seed replacement also, only replace when necessary * fix comments * ci: Provide basic Jenkinsfile for ghprb pipeline (#1451) Co-authored-by: Alex --- Jenkinsfile | 10 +++++ .../adapter/ext/fawe/PaperweightAdapter.java | 8 +++- .../v1_17_R1_2/regen/PaperweightRegen.java | 42 +++---------------- 3 files changed, 22 insertions(+), 38 deletions(-) create mode 100644 Jenkinsfile diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 000000000..466a35458 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,10 @@ +pipeline { + agent any + stages { + stage('Build pull request') { + steps { + sh './gradlew clean build' + } + } + } +} diff --git a/worldedit-bukkit/adapters/adapter-1_17_1/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/PaperweightAdapter.java b/worldedit-bukkit/adapters/adapter-1_17_1/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/PaperweightAdapter.java index 9de853cdd..3cc940eb7 100644 --- a/worldedit-bukkit/adapters/adapter-1_17_1/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/PaperweightAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_17_1/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/PaperweightAdapter.java @@ -658,7 +658,9 @@ public final class PaperweightAdapter implements BukkitImplAdapter public static + public static WorldGenSettings replaceSeed(ServerLevel originalWorld, long seed, WorldGenSettings originalOpts) { + // FAWE end RegistryWriteOps nbtReadRegOps = RegistryWriteOps.create( NbtOps.INSTANCE, originalWorld.getServer().registryAccess() @@ -685,8 +687,10 @@ public final class PaperweightAdapter implements BukkitImplAdapter private static @SuppressWarnings("unchecked") - private Dynamic recursivelySetSeed( + private static Dynamic recursivelySetSeed( + // FAWE end Dynamic dynamic, long seed, Set> seen diff --git a/worldedit-bukkit/adapters/adapter-1_17_1/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_17_R1_2/regen/PaperweightRegen.java b/worldedit-bukkit/adapters/adapter-1_17_1/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_17_R1_2/regen/PaperweightRegen.java index b48678167..2e16b9f28 100644 --- a/worldedit-bukkit/adapters/adapter-1_17_1/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_17_R1_2/regen/PaperweightRegen.java +++ b/worldedit-bukkit/adapters/adapter-1_17_1/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_17_R1_2/regen/PaperweightRegen.java @@ -9,9 +9,9 @@ import com.fastasyncworldedit.core.util.TaskManager; import com.google.common.collect.ImmutableList; import com.mojang.datafixers.util.Either; import com.mojang.serialization.Codec; -import com.mojang.serialization.Dynamic; import com.mojang.serialization.Lifecycle; import com.sk89q.worldedit.bukkit.adapter.Refraction; +import com.sk89q.worldedit.bukkit.adapter.ext.fawe.PaperweightAdapter; import com.sk89q.worldedit.bukkit.adapter.impl.fawe.v1_17_R1_2.PaperweightGetBlocks; import com.sk89q.worldedit.extent.Extent; import com.sk89q.worldedit.internal.util.LogManagerCompat; @@ -21,12 +21,9 @@ import com.sk89q.worldedit.world.RegenOptions; import io.papermc.lib.PaperLib; import net.minecraft.core.MappedRegistry; import net.minecraft.core.Registry; -import net.minecraft.core.RegistryAccess; import net.minecraft.data.BuiltinRegistries; import net.minecraft.data.worldgen.biome.Biomes; import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtOps; -import net.minecraft.resources.RegistryReadOps; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; @@ -78,12 +75,10 @@ import java.lang.reflect.Field; import java.lang.reflect.Method; import java.nio.file.Path; import java.util.Collections; -import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Random; -import java.util.Set; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; import java.util.function.BooleanSupplier; @@ -220,19 +215,11 @@ public class PaperweightRegen extends Regenerator nbtRegOps = RegistryReadOps.createAndLoad( - NbtOps.INSTANCE, server.resources.getResourceManager(), - RegistryAccess.builtin() - ); - WorldGenSettings newOpts = WorldGenSettings.CODEC - .encodeStart(nbtRegOps, levelProperties.worldGenSettings()) - .flatMap(tag -> WorldGenSettings.CODEC.parse(this.recursivelySetSeed( - new Dynamic<>(nbtRegOps, tag), - seed, - new HashSet<>() - ))) - .result() - .orElseThrow(() -> new IllegalStateException("Unable to map GeneratorOptions")); + WorldGenSettings originalOpts = levelProperties.worldGenSettings(); + + WorldGenSettings newOpts = options.getSeed().isPresent() + ? PaperweightAdapter.replaceSeed(originalServerWorld, seed, originalOpts) + : originalOpts; LevelSettings newWorldSettings = new LevelSettings( "worldeditregentempworld", originalWorldData.settings.gameType(), @@ -438,23 +425,6 @@ public class PaperweightRegen extends Regenerator recursivelySetSeed( - Dynamic dynamic, - long seed, - Set> dynamicSet - ) { - return !dynamicSet.add(dynamic) ? dynamic : dynamic.updateMapValues((pair) -> { - if (pair.getFirst().asString("").equals("seed")) { - return pair.mapSecond((v) -> v.createLong(seed)); - } else { - return ((Dynamic) pair.getSecond()).getValue() instanceof CompoundTag - ? pair.mapSecond((v) -> this.recursivelySetSeed((Dynamic) v, seed, dynamicSet)) - : pair; - - } - }); - } - private BiomeSource fastOverworldBiomeSource(BiomeSource biomeSource) throws Exception { Field legacyBiomeInitLayerField = OverworldBiomeSource.class.getDeclaredField( Refraction.pickName("legacyBiomeInitLayer", "i"));