Skip to content

Commit cfcc9e5

Browse files
committed
Add world system merging
1 parent 1843979 commit cfcc9e5

File tree

5 files changed

+54
-13
lines changed

5 files changed

+54
-13
lines changed

patches/minecraft/net/minecraft/server/Main.java.patch

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262

6363
Path path = optionset.valueOf(optionspec14);
6464
if (path != null) {
65-
@@ -102,29 +_,52 @@
65+
@@ -102,29 +_,53 @@
6666
JvmProfiler.INSTANCE.start(Environment.SERVER);
6767
}
6868

@@ -121,6 +121,7 @@
121121
LevelStorageSource levelstoragesource = LevelStorageSource.createDefault(file1.toPath());
122122
- LevelStorageSource.LevelStorageAccess levelstoragesource$levelstorageaccess = levelstoragesource.validateAndCreateAccess(s);
123123
+ LevelStorageSource.LevelStorageAccess levelstoragesource$levelstorageaccess = levelstoragesource.validateAndCreateAccess(s, LevelStem.OVERWORLD);
124+
+ levelstoragesource$levelstorageaccess.setReference(levelstoragesource); //Ketting
124125
+ levelstoragesource$levelstorageaccess.readAdditionalLevelSaveData();
125126
LevelSummary levelsummary = levelstoragesource$levelstorageaccess.getSummary();
126127
if (levelsummary != null) {

patches/minecraft/net/minecraft/server/MinecraftServer.java.patch

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@
139139
if (!serverleveldata.isInitialized()) {
140140
try {
141141
setInitialSpawn(serverlevel, serverleveldata, worldoptions.generateBonusChest(), flag);
142-
@@ -373,9 +_,54 @@
142+
@@ -373,9 +_,57 @@
143143
if (resourcekey != LevelStem.OVERWORLD) {
144144
ResourceKey<Level> resourcekey1 = ResourceKey.create(Registries.DIMENSION, resourcekey.location());
145145
DerivedLevelData derivedleveldata = new DerivedLevelData(this.worldData, serverleveldata);
@@ -172,7 +172,10 @@
172172
+
173173
+ LevelStorageSource.LevelStorageAccess source;
174174
+ try {
175-
+ source = LevelStorageSource.createDefault(server.getWorldContainer().toPath()).validateAndCreateAccess(name, resourcekey);
175+
+ if (org.kettingpowered.ketting.config.KettingConfig.getInstance().MERGE_WORLD_SYSTEMS.getValue())
176+
+ source = this.storageSource.reference.deriveFromSource(this.storageSource, resourcekey);
177+
+ else
178+
+ source = LevelStorageSource.createDefault(server.getWorldContainer().toPath()).validateAndCreateAccess(name, resourcekey);
176179
+ } catch (IOException | net.minecraft.world.level.validation.ContentValidationException e) {
177180
+ throw new RuntimeException(e);
178181
+ }

patches/minecraft/net/minecraft/server/level/ServerLevel.java.patch

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
super(p_215002_, p_215003_, p_214999_.registryAccess(), p_215004_.type(), p_214999_::getProfiler, false, p_215006_, p_215007_, p_214999_.getMaxChainedNeighborUpdates());
4444
+ this.pvpMode = p_214999_.isPvpAllowed();
4545
+ convertable = p_215001_;
46-
+ uuid = org.bukkit.craftbukkit.v1_20_R1.util.WorldUUID.getUUID((p_215002_ instanceof net.minecraft.world.level.storage.DerivedLevelData ? p_215001_.levelDirectory.path() : p_215001_.getDimensionPath(p_215003_)).toFile()); //Ketting
46+
+ uuid = org.bukkit.craftbukkit.v1_20_R1.util.WorldUUID.getUUID(p_215001_.getDimensionPath(p_215003_).toFile());
4747
+ // CraftBukkit end
4848
this.tickTime = p_215009_;
4949
this.server = p_214999_;

patches/minecraft/net/minecraft/world/level/storage/LevelStorageSource.java.patch

Lines changed: 44 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
return Pair.of(primaryleveldata, worlddimensions$complete);
1010
};
1111
}
12-
@@ -334,24 +_,46 @@
12+
@@ -334,24 +_,52 @@
1313
}
1414

1515
public LevelStorageSource.LevelStorageAccess validateAndCreateAccess(String p_289980_) throws IOException, ContentValidationException {
@@ -26,6 +26,12 @@
2626
+ return new LevelStorageSource.LevelStorageAccess(p_289980_, path, dimensionType); // CraftBukkit
2727
}
2828
}
29+
+
30+
+ //Ketting start - try merging both world systems
31+
+ public LevelStorageSource.LevelStorageAccess deriveFromSource(LevelStorageSource.LevelStorageAccess source, ResourceKey<LevelStem> dimensionType) throws IOException {
32+
+ return new LevelStorageSource.LevelStorageAccess(source, dimensionType);
33+
+ }
34+
+ //Ketting end
2935

3036
public LevelStorageSource.LevelStorageAccess createAccess(String p_78261_) throws IOException {
3137
+ return this.createAccess(p_78261_, null);
@@ -58,7 +64,7 @@
5864
public static record LevelCandidates(List<LevelStorageSource.LevelDirectory> levels) implements Iterable<LevelStorageSource.LevelDirectory> {
5965
public boolean isEmpty() {
6066
return this.levels.isEmpty();
61-
@@ -397,8 +_,18 @@
67+
@@ -397,9 +_,34 @@
6268
public final LevelStorageSource.LevelDirectory levelDirectory;
6369
private final String levelId;
6470
private final Map<LevelResource, Path> resources = Maps.newHashMap();
@@ -68,17 +74,33 @@
6874
+ public ResourceKey<LevelStem> dimensionType;
6975
+
7076
+ //Ketting start
77+
+ public final Path dimensionPath;
78+
+
7179
+ public void setDimensionType(ResourceKey<LevelStem> dimensionType) {
7280
+ this.dimensionType = dimensionType;
7381
+ }
7482
+ //Ketting end
7583
+
84+
+ //Ketting start
85+
+ LevelStorageAccess(LevelStorageAccess original, ResourceKey<LevelStem> dimensionType) {
86+
+ this.dimensionType = dimensionType;
87+
+
88+
+ this.levelId = original.levelId;
89+
+ this.dimensionPath = original.dimensionPath;
90+
+ this.levelDirectory = original.levelDirectory;
91+
+ this.lock = original.lock;
92+
+ this.resources.putAll(original.resources);
93+
+ }
94+
+ //Ketting end
95+
+
7696
+ LevelStorageAccess(String p_289967_, Path p_289988_, ResourceKey<LevelStem> dimensionType) throws IOException {
7797
+ this.dimensionType = dimensionType;
7898
+ // CraftBukkit end
7999
this.levelId = p_289967_;
100+
+ this.dimensionPath = p_289988_; //Ketting
80101
this.levelDirectory = new LevelStorageSource.LevelDirectory(p_289988_);
81102
this.lock = DirectoryLock.create(p_289988_);
103+
}
82104
@@ -413,7 +_,7 @@
83105
}
84106

@@ -117,14 +139,27 @@
117139
try {
118140
File file2 = File.createTempFile("level", ".dat", file1);
119141
NbtIo.writeCompressed(compoundtag1, file2);
120-
@@ -469,6 +_,10 @@
121-
122-
public Optional<Path> getIconFile() {
142+
@@ -471,6 +_,10 @@
123143
return !this.lock.isValid() ? Optional.empty() : Optional.of(this.levelDirectory.iconFile());
124-
+ }
125-
+
126-
+ public Path getWorldDir() {
127-
+ return baseDir;
128144
}
129145

146+
+ public Path getWorldDir() {
147+
+ return baseDir;
148+
+ }
149+
+
130150
public void deleteLevel() throws IOException {
151+
this.checkLock();
152+
final Path path = this.levelDirectory.lockFile();
153+
@@ -569,6 +_,12 @@
154+
155+
public void close() throws IOException {
156+
this.lock.close();
157+
+ }
158+
+
159+
+ //Ketting start
160+
+ public @Nullable LevelStorageSource reference;
161+
+ public void setReference(LevelStorageSource levelstoragesource) {
162+
+ this.reference = levelstoragesource;
163+
}
164+
}
165+
}

src/main/java/org/kettingpowered/ketting/config/KettingConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,5 +40,7 @@ public KettingConfig(@NotNull String fileName) {
4040
public final BooleanValue WARN_ON_NULL_NBT = new BooleanValue("debug.warn_on_null_nbt", true, "Print a warning to the console when something tries to set a null NBT tag.");
4141

4242
public final BooleanValue OVERWRITE_FORGE_PERMISSIONS = new BooleanValue("forge.overwrite_forge_permissions", false, "--- WARNING - THIS WILL COMPLETELY DISABLE FORGE PERMISSION CHECKS --- Overwrite Forge permissions with Bukkit permissions, makes it possible to use a permission manager plugin for modded commands. If true, Forge permissions will be set to 'forge.command.MODDEDCOMMAND' where MODDEDCOMMAND is the name of the modded command.");
43+
44+
public final BooleanValue MERGE_WORLD_SYSTEMS = new BooleanValue("ketting.merge_world_systems", false, "--- WARNING - THIS WILL BREAK EXISTING WORLDS --- If true, this will attempt to merge both the Forge and Bukkit world system into one, making dimensions exist in the world folder, and Bukkit worlds in their own folder.");
4345
//End of config values
4446
}

0 commit comments

Comments
 (0)