Skip to content

Commit f5bdab7

Browse files
committed
fix: experimental default biome reimplementation
1 parent a77afb7 commit f5bdab7

File tree

3 files changed

+54
-27
lines changed

3 files changed

+54
-27
lines changed

slimeworldmanager-nms-v1_16_R1/src/main/java/com/grinderwolf/swm/nms/v1_16_R1/v1_16_R1SlimeNMS.java

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,7 @@
6060
import java.io.IOException;
6161
import java.nio.file.Files;
6262
import java.nio.file.Path;
63-
import java.util.Arrays;
64-
import java.util.Collections;
65-
import java.util.Locale;
66-
import java.util.UUID;
63+
import java.util.*;
6764

6865
@Getter
6966
public class v1_16_R1SlimeNMS implements SlimeNMS {
@@ -132,7 +129,7 @@ public void setDefaultWorlds(SlimeWorld normalWorld, SlimeWorld netherWorld, Sli
132129
}
133130

134131
private CustomWorldServer createDefaultWorld(SlimeWorld world, ResourceKey<WorldDimension> dimensionKey, ResourceKey<net.minecraft.server.v1_16_R1.World> worldKey, ResourceKey<net.minecraft.server.v1_16_R1.DimensionManager> dmKey) {
135-
WorldDataServer worldDataServer = createWorldData(world.getName(), world.getExtraData());
132+
WorldDataServer worldDataServer = createWorldData(world);
136133

137134
RegistryMaterials<WorldDimension> registryMaterials = worldDataServer.getGeneratorSettings().e();
138135
WorldDimension worldDimension = registryMaterials.a(dimensionKey);
@@ -160,7 +157,7 @@ public void generateWorld(SlimeWorld world) {
160157
throw new IllegalArgumentException("World " + worldName + " already exists! Maybe it's an outdated SlimeWorld object?");
161158
}
162159

163-
WorldDataServer worldDataServer = createWorldData(world.getName(), world.getExtraData());
160+
WorldDataServer worldDataServer = createWorldData(world);
164161
RegistryMaterials<WorldDimension> materials = worldDataServer.getGeneratorSettings().e();
165162
WorldDimension worldDimension = materials.a(WorldDimension.OVERWORLD);
166163
DimensionManager dimensionManager = worldDimension.b();
@@ -201,18 +198,27 @@ private World.Environment getEnvironment(SlimeWorld world) {
201198
return World.Environment.valueOf(world.getPropertyMap().getString(SlimeProperties.ENVIRONMENT).toUpperCase());
202199
}
203200

204-
private WorldDataServer createWorldData(String worldName, CompoundTag extraData) {
201+
private WorldDataServer createWorldData(SlimeWorld world) {
205202
WorldDataServer worldDataServer;
206-
NBTTagCompound extraTag = (NBTTagCompound) Converter.convertTag(extraData);
203+
NBTTagCompound extraTag = (NBTTagCompound) Converter.convertTag(world.getExtraData());
207204
MinecraftServer mcServer = MinecraftServer.getServer();
208205

206+
SlimePropertyMap propertyMap = world.getPropertyMap();
207+
Properties properties = new Properties();
208+
String defaultBiome = propertyMap.getString(SlimeProperties.DEFAULT_BIOME);
209+
String generatorString = "{\"structures\":{\"structures\":{}},\"biome\":\"" + defaultBiome + "\",\"layers\":[]}";
210+
211+
properties.put("generator-settings", generatorString);
212+
properties.put("level-type", "FLAT");
213+
214+
GeneratorSettings generatorSettings = GeneratorSettings.a(properties);
215+
209216
if (extraTag.hasKeyOfType("LevelData", CraftMagicNumbers.NBT.TAG_COMPOUND)) {
210217
NBTTagCompound levelData = extraTag.getCompound("LevelData");
211218
int dataVersion = levelData.hasKeyOfType("DataVersion", 99) ? levelData.getInt("DataVersion") : -1;
212219
Dynamic<NBTBase> dynamic = mcServer.getDataFixer().update(DataFixTypes.LEVEL.a(),
213220
new Dynamic<>(DynamicOpsNBT.a, levelData), dataVersion, SharedConstants.getGameVersion()
214221
.getWorldVersion());
215-
GeneratorSettings generatorSettings = GeneratorSettings.a();
216222
Lifecycle lifecycle = Lifecycle.stable();
217223
LevelVersion levelVersion = LevelVersion.a(dynamic);
218224
WorldSettings worldSettings = WorldSettings.a(dynamic, mcServer.datapackconfiguration);
@@ -222,13 +228,12 @@ private WorldDataServer createWorldData(String worldName, CompoundTag extraData)
222228
} else {
223229
EnumDifficulty difficulty = ((DedicatedServer) mcServer).getDedicatedServerProperties().difficulty;
224230
EnumGamemode defaultGamemode = ((DedicatedServer) mcServer).getDedicatedServerProperties().gamemode;
225-
WorldSettings worldSettings = new WorldSettings(worldName, defaultGamemode, false,
231+
WorldSettings worldSettings = new WorldSettings(world.getName(), defaultGamemode, false,
226232
difficulty, false, new GameRules(), mcServer.datapackconfiguration);
227-
worldDataServer = new WorldDataServer(worldSettings, ((DedicatedServer) mcServer)
228-
.getDedicatedServerProperties().generatorSettings, Lifecycle.stable());
233+
worldDataServer = new WorldDataServer(worldSettings, generatorSettings, Lifecycle.stable());
229234
}
230235

231-
worldDataServer.checkName(worldName);
236+
worldDataServer.checkName(world.getName());
232237
worldDataServer.a(mcServer.getServerModName(), mcServer.getModded().isPresent());
233238
worldDataServer.c(true);
234239

slimeworldmanager-nms-v1_16_R2/src/main/java/com/grinderwolf/swm/nms/v1_16_R2/v1_16_R2SlimeNMS.java

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.flowpowered.nbt.CompoundTag;
44
import com.grinderwolf.swm.api.world.SlimeWorld;
55
import com.grinderwolf.swm.api.world.properties.SlimeProperties;
6+
import com.grinderwolf.swm.api.world.properties.SlimePropertyMap;
67
import com.grinderwolf.swm.nms.CraftSlimeWorld;
78
import com.grinderwolf.swm.nms.SlimeNMS;
89
import com.mojang.serialization.Dynamic;
@@ -24,6 +25,7 @@
2425
import java.io.IOException;
2526
import java.nio.file.Files;
2627
import java.nio.file.Path;
28+
import java.util.Properties;
2729
import java.util.UUID;
2830

2931
@Getter
@@ -94,7 +96,7 @@ public void setDefaultWorlds(SlimeWorld normalWorld, SlimeWorld netherWorld, Sli
9496

9597
private CustomWorldServer createDefaultWorld(SlimeWorld world, ResourceKey<WorldDimension> dimensionKey,
9698
ResourceKey<net.minecraft.server.v1_16_R2.World> worldKey) {
97-
WorldDataServer worldDataServer = createWorldData(world.getName(), world.getExtraData());
99+
WorldDataServer worldDataServer = createWorldData(world);
98100

99101
RegistryMaterials<WorldDimension> registryMaterials = worldDataServer.getGeneratorSettings().d();
100102
WorldDimension worldDimension = registryMaterials.a(dimensionKey);
@@ -123,7 +125,7 @@ public void generateWorld(SlimeWorld world) {
123125
throw new IllegalArgumentException("World " + worldName + " already exists! Maybe it's an outdated SlimeWorld object?");
124126
}
125127

126-
WorldDataServer worldDataServer = createWorldData(world.getName(), world.getExtraData());
128+
WorldDataServer worldDataServer = createWorldData(world);
127129
RegistryMaterials<WorldDimension> materials = worldDataServer.getGeneratorSettings().d();
128130
WorldDimension worldDimension = materials.a(WorldDimension.OVERWORLD);
129131
DimensionManager dimensionManager = worldDimension.b();
@@ -165,18 +167,27 @@ private World.Environment getEnvironment(SlimeWorld world) {
165167
return World.Environment.valueOf(world.getPropertyMap().getString(SlimeProperties.ENVIRONMENT).toUpperCase());
166168
}
167169

168-
private WorldDataServer createWorldData(String worldName, CompoundTag extraData) {
170+
private WorldDataServer createWorldData(SlimeWorld world) {
169171
WorldDataServer worldDataServer;
170-
NBTTagCompound extraTag = (NBTTagCompound) Converter.convertTag(extraData);
172+
NBTTagCompound extraTag = (NBTTagCompound) Converter.convertTag(world.getExtraData());
171173
MinecraftServer mcServer = MinecraftServer.getServer();
172174

175+
SlimePropertyMap propertyMap = world.getPropertyMap();
176+
Properties properties = new Properties();
177+
String defaultBiome = propertyMap.getString(SlimeProperties.DEFAULT_BIOME);
178+
String generatorString = "{\"structures\":{\"structures\":{}},\"biome\":\"" + defaultBiome + "\",\"layers\":[]}";
179+
180+
properties.put("generator-settings", generatorString);
181+
properties.put("level-type", "FLAT");
182+
183+
GeneratorSettings generatorSettings = GeneratorSettings.a(mcServer.getCustomRegistry(), properties);
184+
173185
if (extraTag.hasKeyOfType("LevelData", CraftMagicNumbers.NBT.TAG_COMPOUND)) {
174186
NBTTagCompound levelData = extraTag.getCompound("LevelData");
175187
int dataVersion = levelData.hasKeyOfType("DataVersion", 99) ? levelData.getInt("DataVersion") : -1;
176188
Dynamic<NBTBase> dynamic = mcServer.getDataFixer().update(DataFixTypes.LEVEL.a(),
177189
new Dynamic<>(DynamicOpsNBT.a, levelData), dataVersion, SharedConstants.getGameVersion()
178190
.getWorldVersion());
179-
GeneratorSettings generatorSettings = GeneratorSettings.a(mcServer.getCustomRegistry());
180191
Lifecycle lifecycle = Lifecycle.stable();
181192
LevelVersion levelVersion = LevelVersion.a(dynamic);
182193
WorldSettings worldSettings = WorldSettings.a(dynamic, mcServer.datapackconfiguration);
@@ -186,13 +197,13 @@ private WorldDataServer createWorldData(String worldName, CompoundTag extraData)
186197
} else {
187198
EnumDifficulty difficulty = ((DedicatedServer) mcServer).getDedicatedServerProperties().difficulty;
188199
EnumGamemode defaultGamemode = ((DedicatedServer) mcServer).getDedicatedServerProperties().gamemode;
189-
WorldSettings worldSettings = new WorldSettings(worldName, defaultGamemode, false,
200+
WorldSettings worldSettings = new WorldSettings(world.getName(), defaultGamemode, false,
190201
difficulty, false, new GameRules(), mcServer.datapackconfiguration);
191202
worldDataServer = new WorldDataServer(worldSettings, ((DedicatedServer) mcServer)
192203
.getDedicatedServerProperties().generatorSettings, Lifecycle.stable());
193204
}
194205

195-
worldDataServer.checkName(worldName);
206+
worldDataServer.checkName(world.getName());
196207
worldDataServer.a(mcServer.getServerModName(), mcServer.getModded().isPresent());
197208
worldDataServer.c(true);
198209

slimeworldmanager-nms-v1_16_R3/src/main/java/com/grinderwolf/swm/nms/v1_16_R3/v1_16_R3SlimeNMS.java

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.flowpowered.nbt.CompoundTag;
44
import com.grinderwolf.swm.api.world.SlimeWorld;
55
import com.grinderwolf.swm.api.world.properties.SlimeProperties;
6+
import com.grinderwolf.swm.api.world.properties.SlimePropertyMap;
67
import com.grinderwolf.swm.nms.CraftSlimeWorld;
78
import com.grinderwolf.swm.nms.SlimeNMS;
89
import com.mojang.serialization.Dynamic;
@@ -24,6 +25,7 @@
2425
import java.io.IOException;
2526
import java.nio.file.Files;
2627
import java.nio.file.Path;
28+
import java.util.Properties;
2729
import java.util.UUID;
2830

2931
@Getter
@@ -94,7 +96,7 @@ public void setDefaultWorlds(SlimeWorld normalWorld, SlimeWorld netherWorld, Sli
9496

9597
private CustomWorldServer createDefaultWorld(SlimeWorld world, ResourceKey<WorldDimension> dimensionKey,
9698
ResourceKey<net.minecraft.server.v1_16_R3.World> worldKey) {
97-
WorldDataServer worldDataServer = createWorldData(world.getName(), world.getExtraData());
99+
WorldDataServer worldDataServer = createWorldData(world);
98100

99101
RegistryMaterials<WorldDimension> registryMaterials = worldDataServer.getGeneratorSettings().d();
100102
WorldDimension worldDimension = registryMaterials.a(dimensionKey);
@@ -123,7 +125,7 @@ public void generateWorld(SlimeWorld world) {
123125
throw new IllegalArgumentException("World " + worldName + " already exists! Maybe it's an outdated SlimeWorld object?");
124126
}
125127

126-
WorldDataServer worldDataServer = createWorldData(world.getName(), world.getExtraData());
128+
WorldDataServer worldDataServer = createWorldData(world);
127129
RegistryMaterials<WorldDimension> materials = worldDataServer.getGeneratorSettings().d();
128130
WorldDimension worldDimension = materials.a(WorldDimension.OVERWORLD);
129131
DimensionManager dimensionManager = worldDimension.b();
@@ -165,18 +167,27 @@ private World.Environment getEnvironment(SlimeWorld world) {
165167
return World.Environment.valueOf(world.getPropertyMap().getString(SlimeProperties.ENVIRONMENT).toUpperCase());
166168
}
167169

168-
private WorldDataServer createWorldData(String worldName, CompoundTag extraData) {
170+
private WorldDataServer createWorldData(SlimeWorld world) {
169171
WorldDataServer worldDataServer;
170-
NBTTagCompound extraTag = (NBTTagCompound) Converter.convertTag(extraData);
172+
NBTTagCompound extraTag = (NBTTagCompound) Converter.convertTag(world.getExtraData());
171173
MinecraftServer mcServer = MinecraftServer.getServer();
172174

175+
SlimePropertyMap propertyMap = world.getPropertyMap();
176+
Properties properties = new Properties();
177+
String defaultBiome = propertyMap.getString(SlimeProperties.DEFAULT_BIOME);
178+
String generatorString = "{\"structures\":{\"structures\":{}},\"biome\":\"" + defaultBiome + "\",\"layers\":[]}";
179+
180+
properties.put("generator-settings", generatorString);
181+
properties.put("level-type", "FLAT");
182+
183+
GeneratorSettings generatorSettings = GeneratorSettings.a(mcServer.getCustomRegistry(), properties);
184+
173185
if (extraTag.hasKeyOfType("LevelData", CraftMagicNumbers.NBT.TAG_COMPOUND)) {
174186
NBTTagCompound levelData = extraTag.getCompound("LevelData");
175187
int dataVersion = levelData.hasKeyOfType("DataVersion", 99) ? levelData.getInt("DataVersion") : -1;
176188
Dynamic<NBTBase> dynamic = mcServer.getDataFixer().update(DataFixTypes.LEVEL.a(),
177189
new Dynamic<>(DynamicOpsNBT.a, levelData), dataVersion, SharedConstants.getGameVersion()
178190
.getWorldVersion());
179-
GeneratorSettings generatorSettings = GeneratorSettings.a(mcServer.getCustomRegistry());
180191
Lifecycle lifecycle = Lifecycle.stable();
181192
LevelVersion levelVersion = LevelVersion.a(dynamic);
182193
WorldSettings worldSettings = WorldSettings.a(dynamic, mcServer.datapackconfiguration);
@@ -186,13 +197,13 @@ private WorldDataServer createWorldData(String worldName, CompoundTag extraData)
186197
} else {
187198
EnumDifficulty difficulty = ((DedicatedServer) mcServer).getDedicatedServerProperties().difficulty;
188199
EnumGamemode defaultGamemode = ((DedicatedServer) mcServer).getDedicatedServerProperties().gamemode;
189-
WorldSettings worldSettings = new WorldSettings(worldName, defaultGamemode, false,
200+
WorldSettings worldSettings = new WorldSettings(world.getName(), defaultGamemode, false,
190201
difficulty, false, new GameRules(), mcServer.datapackconfiguration);
191202
worldDataServer = new WorldDataServer(worldSettings, ((DedicatedServer) mcServer)
192203
.getDedicatedServerProperties().generatorSettings, Lifecycle.stable());
193204
}
194205

195-
worldDataServer.checkName(worldName);
206+
worldDataServer.checkName(world.getName());
196207
worldDataServer.a(mcServer.getServerModName(), mcServer.getModded().isPresent());
197208
worldDataServer.c(true);
198209

0 commit comments

Comments
 (0)