Skip to content

Commit 34352d7

Browse files
authored
26.1 compiles (#3506)
1 parent cf06126 commit 34352d7

7 files changed

Lines changed: 73 additions & 46 deletions

File tree

build-logic/src/main/kotlin/buildlogic.adapter.gradle.kts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ plugins {
88
id("io.papermc.paperweight.userdev")
99
}
1010

11+
val requiresReobfJar = project.name.startsWith("adapter-1_")
12+
1113
paperweight {
1214
injectPaperRepository = false
1315
reobfArtifactConfiguration = io.papermc.paperweight.userdev.ReobfArtifactConfiguration.REOBF_PRODUCTION
@@ -58,7 +60,9 @@ java {
5860
}
5961

6062
tasks.named("assemble") {
61-
dependsOn("reobfJar")
63+
if (requiresReobfJar) {
64+
dependsOn("reobfJar")
65+
}
6266
}
6367

6468
tasks.named<Javadoc>("javadoc") {

worldedit-bukkit/adapters/adapter-26.1/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ plugins {
66

77
dependencies {
88
// https://artifactory.papermc.io/ui/native/universe/io/papermc/paper/dev-bundle/
9-
the<PaperweightUserDependenciesExtension>().paperDevBundle("26.1.1.build.20-alpha")
9+
the<PaperweightUserDependenciesExtension>().paperDevBundle("26.1.2.build.+")
1010
compileOnly(libs.paperLib)
1111
}

worldedit-bukkit/adapters/adapter-26.1/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v26_1/PaperweightLevelProxy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public class PaperweightLevelProxy extends ServerLevel {
3131

3232
@SuppressWarnings("DataFlowIssue")
3333
private PaperweightLevelProxy() {
34-
super(null, null, null, null, null, null, true, 0L, null, true, null, null, null, null);
34+
super(null, null, null, null, null, null, true, 0L, null, true, null, null, null, null, null, null);
3535
throw new IllegalStateException("Cannot be instantiated");
3636
}
3737

worldedit-bukkit/adapters/adapter-26.1/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v26_1/regen/PaperweightRegen.java

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,47 +6,53 @@
66
import com.fastasyncworldedit.core.queue.IChunkGet;
77
import com.fastasyncworldedit.core.queue.implementation.chunk.ChunkCache;
88
import com.google.common.collect.ImmutableList;
9-
import com.mojang.serialization.Lifecycle;
109
import com.sk89q.worldedit.bukkit.BukkitAdapter;
1110
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
1211
import com.sk89q.worldedit.bukkit.adapter.Refraction;
1312
import com.sk89q.worldedit.extent.Extent;
1413
import com.sk89q.worldedit.regions.Region;
1514
import com.sk89q.worldedit.util.io.file.SafeFiles;
1615
import com.sk89q.worldedit.world.RegenOptions;
16+
import io.papermc.lib.PaperLib;
17+
import io.papermc.paper.world.PaperWorldLoader;
18+
import io.papermc.paper.world.saveddata.PaperWorldPDC;
1719
import net.minecraft.core.Holder;
1820
import net.minecraft.resources.ResourceKey;
1921
import net.minecraft.server.MinecraftServer;
2022
import net.minecraft.server.dedicated.DedicatedServer;
2123
import net.minecraft.server.level.ServerLevel;
2224
import net.minecraft.util.ProgressListener;
2325
import net.minecraft.world.level.Level;
24-
import net.minecraft.world.level.LevelSettings;
2526
import net.minecraft.world.level.biome.Biome;
2627
import net.minecraft.world.level.dimension.LevelStem;
2728
import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator;
29+
import net.minecraft.world.level.levelgen.WorldGenSettings;
2830
import net.minecraft.world.level.levelgen.WorldOptions;
29-
import net.minecraft.world.level.storage.LevelData;
31+
import net.minecraft.world.level.storage.LevelResource;
3032
import net.minecraft.world.level.storage.LevelStorageSource;
31-
import net.minecraft.world.level.storage.PrimaryLevelData;
33+
import net.minecraft.world.level.storage.SavedDataStorage;
3234
import org.bukkit.Bukkit;
3335
import org.bukkit.World;
3436
import org.bukkit.craftbukkit.CraftServer;
3537
import org.bukkit.craftbukkit.CraftWorld;
38+
import org.bukkit.craftbukkit.persistence.CraftPersistentDataContainer;
3639
import org.bukkit.generator.BiomeProvider;
3740

3841
import javax.annotation.Nonnull;
3942
import java.lang.reflect.Field;
4043
import java.nio.file.Path;
4144
import java.util.Map;
4245
import java.util.OptionalLong;
46+
import java.util.UUID;
4347
import java.util.function.BooleanSupplier;
4448
import java.util.function.Supplier;
4549

4650
import static net.minecraft.core.registries.Registries.BIOME;
4751

4852
public class PaperweightRegen extends Regenerator {
4953

54+
private static final String REGEN_WORLD_NAME = "faweregentempworld";
55+
5056
private static final Field serverWorldsField;
5157
private static final Field paperConfigField;
5258
private static final Field generatorSettingBaseSupplierField;
@@ -108,6 +114,10 @@ protected boolean prepare() {
108114

109115
@Override
110116
protected boolean initNewWorld() throws Exception {
117+
if (!PaperLib.isPaper()) {
118+
throw new UnsupportedOperationException("Regen requires Paper");
119+
}
120+
111121
//world folder
112122
tempDir = java.nio.file.Files.createTempDirectory("FastAsyncWorldEditWorldGen");
113123

@@ -116,41 +126,36 @@ protected boolean initNewWorld() throws Exception {
116126
org.bukkit.generator.ChunkGenerator generator = originalBukkitWorld.getGenerator();
117127
LevelStorageSource levelStorageSource = LevelStorageSource.createDefault(tempDir);
118128
ResourceKey<LevelStem> levelStemResourceKey = getWorldDimKey(environment);
119-
session = levelStorageSource.createAccess("faweregentempworld", levelStemResourceKey);
120-
LevelData originalWorldData = originalServerWorld.serverLevelData;
129+
session = levelStorageSource.createAccess(REGEN_WORLD_NAME);
121130

122131
MinecraftServer server = originalServerWorld.getCraftServer().getServer();
123-
WorldOptions originalOpts = originalWorldData.worldGenOptions();
132+
WorldOptions originalOpts = originalServerWorld.worldGenSettings.options();
124133
WorldOptions newOpts = options.getSeed().isPresent()
125134
? originalOpts.withSeed(OptionalLong.of(seed))
126135
: originalOpts;
127-
LevelSettings newWorldSettings = new LevelSettings(
128-
"faweregentempworld",
129-
originalWorldData.settings.gameType(),
130-
originalWorldData.settings.hardcore(),
131-
originalWorldData.settings.difficulty(),
132-
originalWorldData.settings.allowCommands(),
133-
originalWorldData.settings.gameRules(),
134-
originalWorldData.settings.getDataConfiguration()
136+
WorldGenSettings newWorldGenSettings = new WorldGenSettings(
137+
newOpts,
138+
originalServerWorld.worldGenSettings.dimensions()
135139
);
136140

137-
PrimaryLevelData.SpecialWorldProperty specialWorldProperty =
138-
originalWorldData.isFlatWorld()
139-
? PrimaryLevelData.SpecialWorldProperty.FLAT
140-
: originalWorldData.isDebugWorld()
141-
? PrimaryLevelData.SpecialWorldProperty.DEBUG
142-
: PrimaryLevelData.SpecialWorldProperty.NONE;
143-
PrimaryLevelData newWorldData = new PrimaryLevelData(newWorldSettings, newOpts, specialWorldProperty, Lifecycle.stable());
141+
PaperWorldLoader.LoadedWorldData loadedWorldData = new PaperWorldLoader.LoadedWorldData(
142+
REGEN_WORLD_NAME,
143+
UUID.randomUUID(),
144+
new PaperWorldPDC((CraftPersistentDataContainer) originalBukkitWorld.getPersistentDataContainer()),
145+
originalServerWorld.serverLevelData
146+
);
144147

145148
BiomeProvider biomeProvider = getBiomeProvider();
146149

150+
SavedDataStorage savedDataStorage = new SavedDataStorage(session.getDimensionPath(originalServerWorld.dimension())
151+
.resolve(LevelResource.DATA.id()), server.getFixerUpper(), server.registryAccess());
147152

148153
//init world
149154
freshWorld = Fawe.instance().getQueueHandler().sync((Supplier<ServerLevel>) () -> new ServerLevel(
150155
server,
151156
server.executor,
152157
session,
153-
newWorldData,
158+
newWorldGenSettings,
154159
originalServerWorld.dimension(),
155160
new LevelStem(
156161
originalServerWorld.dimensionTypeRegistration(),
@@ -160,10 +165,12 @@ protected boolean initNewWorld() throws Exception {
160165
seed,
161166
ImmutableList.of(),
162167
false,
163-
originalServerWorld.getRandomSequences(),
168+
levelStemResourceKey,
164169
environment,
165170
generator,
166-
biomeProvider
171+
biomeProvider,
172+
savedDataStorage,
173+
loadedWorldData
167174
) {
168175

169176
private final Holder<Biome> singleBiome = options.hasBiomeType() ? DedicatedServer.getServer().registryAccess()
@@ -200,7 +207,6 @@ public void save(
200207
}).get();
201208
freshWorld.noSave = true;
202209
removeWorldFromWorldsMap();
203-
newWorldData.checkName(originalServerWorld.serverLevelData.getLevelName()); //rename to original world name
204210
if (paperConfigField != null) {
205211
paperConfigField.set(freshWorld, originalServerWorld.paperConfig());
206212
}
@@ -250,7 +256,7 @@ protected IChunkCache<IChunkGet> initSourceQueueCache() {
250256
private void removeWorldFromWorldsMap() {
251257
try {
252258
Map<String, World> map = (Map<String, World>) serverWorldsField.get(Bukkit.getServer());
253-
map.remove("faweregentempworld");
259+
map.remove(REGEN_WORLD_NAME);
254260
} catch (IllegalAccessException e) {
255261
throw new RuntimeException(e);
256262
}

worldedit-bukkit/adapters/adapter-26.1/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_1/PaperweightAdapter.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import com.google.common.cache.CacheBuilder;
2323
import com.google.common.cache.CacheLoader;
2424
import com.google.common.cache.LoadingCache;
25-
import com.google.common.collect.ImmutableList;
2625
import com.google.common.collect.Lists;
2726
import com.google.common.collect.Sets;
2827
import com.google.common.util.concurrent.Futures;
@@ -44,10 +43,6 @@
4443
import com.sk89q.worldedit.math.BlockVector2;
4544
import com.sk89q.worldedit.math.BlockVector3;
4645
import com.sk89q.worldedit.regions.Region;
47-
import com.sk89q.worldedit.registry.state.BooleanProperty;
48-
import com.sk89q.worldedit.registry.state.DirectionalProperty;
49-
import com.sk89q.worldedit.registry.state.EnumProperty;
50-
import com.sk89q.worldedit.registry.state.IntegerProperty;
5146
import com.sk89q.worldedit.registry.state.Property;
5247
import com.sk89q.worldedit.util.Direction;
5348
import com.sk89q.worldedit.util.SideEffect;
@@ -71,7 +66,7 @@
7166
import com.sk89q.worldedit.world.generation.StructureType;
7267
import com.sk89q.worldedit.world.generation.TreeType;
7368
import com.sk89q.worldedit.world.item.ItemType;
74-
import com.sk89q.worldedit.world.registry.BlockMaterial;
69+
import io.papermc.lib.PaperLib;
7570
import io.papermc.paper.world.PaperWorldLoader;
7671
import io.papermc.paper.world.saveddata.PaperWorldPDC;
7772
import net.minecraft.SharedConstants;
@@ -107,7 +102,6 @@
107102
import net.minecraft.server.level.ServerChunkCache;
108103
import net.minecraft.server.level.ServerLevel;
109104
import net.minecraft.util.RandomSource;
110-
import net.minecraft.util.StringRepresentable;
111105
import net.minecraft.util.Util;
112106
import net.minecraft.util.thread.BlockableEventLoop;
113107
import net.minecraft.world.Clearable;
@@ -188,7 +182,6 @@
188182
import java.util.Collection;
189183
import java.util.HashMap;
190184
import java.util.List;
191-
import java.util.Locale;
192185
import java.util.Map;
193186
import java.util.Objects;
194187
import java.util.OptionalInt;
@@ -735,6 +728,10 @@ public boolean regenerate(World bukkitWorld, Region region, Extent extent, Regen
735728
}
736729

737730
private void doRegen(World bukkitWorld, Region region, Extent extent, RegenOptions options) throws Exception {
731+
if (!PaperLib.isPaper()) {
732+
throw new UnsupportedOperationException("Regen requires Paper");
733+
}
734+
738735
Environment env = bukkitWorld.getEnvironment();
739736
ChunkGenerator gen = bukkitWorld.getGenerator();
740737

worldedit-bukkit/build.gradle.kts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ val adaptersReobf = configurations.create("adaptersReobf") {
7676
attributes {
7777
attribute(Obfuscation.OBFUSCATION_ATTRIBUTE, objects.named(Obfuscation.OBFUSCATED))
7878
}
79-
extendsFrom(adapters)
8079
}
8180

8281
allprojects {
@@ -117,6 +116,9 @@ dependencies {
117116

118117
project.project(":worldedit-bukkit:adapters").subprojects.forEach {
119118
"adapters"(project(it.path))
119+
if (it.name.startsWith("adapter-1_")) {
120+
"adaptersReobf"(project(it.path))
121+
}
120122
}
121123
compileOnly(libs.worldguard) {
122124
exclude("com.sk89q.worldedit", "worldedit-bukkit")

worldedit-bukkit/src/main/java/com/fastasyncworldedit/bukkit/util/MinecraftVersion.java

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -85,13 +85,23 @@ private static MinecraftVersion detectMinecraftVersion() {
8585
minor = Integer.parseInt(parts[1]);
8686
release = parts.length == 3 ? Integer.parseInt(parts[2]) : 0; // e.g. 1.18
8787
} else {
88-
String[] parts = getPackageVersion().split("_");
89-
if (parts.length != 3) {
90-
throw new IllegalStateException("Failed to determine minecraft version!");
88+
String packageVersion = getPackageVersion();
89+
String[] parts = packageVersion.split("_");
90+
if (parts.length == 3 && parts[0].startsWith("v") && parts[2].startsWith("R")) {
91+
major = Integer.parseInt(parts[0].substring(1));
92+
minor = Integer.parseInt(parts[1]);
93+
release = Integer.parseInt(parts[2].substring(1));
94+
} else {
95+
// Newer servers may expose unversioned CraftBukkit packages (e.g. "craftbukkit").
96+
String version = Bukkit.getServer().getBukkitVersion().split("-")[0];
97+
String[] dotted = version.split(Pattern.quote("."));
98+
if (dotted.length != 2 && dotted.length != 3) {
99+
throw new IllegalStateException("Failed to determine minecraft version!");
100+
}
101+
major = Integer.parseInt(dotted[0]);
102+
minor = Integer.parseInt(dotted[1]);
103+
release = dotted.length == 3 ? Integer.parseInt(dotted[2]) : 0;
91104
}
92-
major = Integer.parseInt(parts[0].substring(1));
93-
minor = Integer.parseInt(parts[1]);
94-
release = Integer.parseInt(parts[2].substring(1));
95105
}
96106
return new MinecraftVersion(major, minor, release);
97107
}
@@ -104,7 +114,15 @@ private static MinecraftVersion detectMinecraftVersion() {
104114
*/
105115
private static String getPackageVersion() {
106116
String fullPackagePath = Bukkit.getServer().getClass().getPackage().getName();
107-
return fullPackagePath.substring(fullPackagePath.lastIndexOf('.') + 1);
117+
if (fullPackagePath.contains(".")) {
118+
String token = fullPackagePath.substring(fullPackagePath.lastIndexOf('.') + 1);
119+
// Keep legacy behavior only for versioned CraftBukkit package names (e.g. v1_21_R7).
120+
if (token.startsWith("v") && token.contains("_R")) {
121+
return token;
122+
}
123+
}
124+
String version = Bukkit.getServer().getBukkitVersion();
125+
return version.split("-")[0];
108126
}
109127

110128
/**

0 commit comments

Comments
 (0)