9797import net .minecraft .world .level .chunk .PalettedContainer ;
9898import net .minecraft .world .level .chunk .status .ChunkStatus ;
9999import net .minecraft .world .level .dimension .LevelStem ;
100- import net .minecraft .world .level .levelgen .WorldOptions ;
101100import net .minecraft .world .level .levelgen .feature .ConfiguredFeature ;
102101import net .minecraft .world .level .levelgen .placement .PlacedFeature ;
103102import net .minecraft .world .level .levelgen .structure .BoundingBox ;
104103import net .minecraft .world .level .levelgen .structure .Structure ;
105104import net .minecraft .world .level .levelgen .structure .StructureStart ;
106- import net .minecraft .world .level .storage . LevelData ;
105+ import net .minecraft .world .level .saveddata . WeatherData ;
107106import net .minecraft .world .level .storage .LevelStorageSource ;
108- import net .minecraft .world .level .storage .PrimaryLevelData ;
109107import net .minecraft .world .level .storage .ServerLevelData ;
110108import net .minecraft .world .level .storage .TagValueOutput ;
111109import net .minecraft .world .phys .AABB ;
122120import java .util .Map ;
123121import java .util .Objects ;
124122import java .util .Optional ;
125- import java .util .OptionalLong ;
126123import java .util .Set ;
127124import java .util .concurrent .CompletableFuture ;
128125import java .util .concurrent .ExecutionException ;
@@ -313,6 +310,10 @@ public boolean canPlaceAt(BlockVector3 position, BlockState blockState) {
313310
314311 @ Override
315312 public boolean regenerate (Region region , Extent extent , RegenOptions options ) {
313+ if (options .getSeed ().isPresent ()) {
314+ throw new UnsupportedOperationException ("26.1+ worldgen does not support overriding the seed for regen" );
315+ }
316+
316317 try {
317318 doRegen (region , extent , options );
318319 } catch (Exception e ) {
@@ -327,15 +328,6 @@ private void doRegen(Region region, Extent extent, RegenOptions options) throws
327328 LevelStorageSource levelStorage = LevelStorageSource .createDefault (tempDir );
328329 try (LevelStorageSource .LevelStorageAccess session = levelStorage .createAccess ("WorldEditTempGen" )) {
329330 ServerLevel originalWorld = getWorld ();
330- PrimaryLevelData levelProperties = (PrimaryLevelData ) originalWorld .getServer ()
331- .getWorldData ().overworldData ();
332- WorldOptions originalOpts = levelProperties .worldGenOptions ();
333-
334- long seed = options .getSeed ().orElse (originalWorld .getSeed ());
335-
336- levelProperties .worldOptions = options .getSeed ().isPresent ()
337- ? originalOpts .withSeed (OptionalLong .of (seed ))
338- : originalOpts ;
339331
340332 ResourceKey <Level > worldRegKey = originalWorld .dimension ();
341333 try (ServerLevel serverWorld = new ServerLevel (
@@ -347,19 +339,16 @@ private void doRegen(Region region, Extent extent, RegenOptions options) throws
347339 originalWorld .getChunkSource ().getGenerator ()
348340 ),
349341 originalWorld .isDebug (),
350- seed ,
342+ originalWorld . getSeed () ,
351343 // No spawners are needed for this world.
352344 ImmutableList .of (),
353345 // This controls ticking, we don't need it so set it to false.
354- false ,
355- originalWorld .getRandomSequences ()
346+ false
356347 )) {
357348 regenForWorld (region , extent , serverWorld , options );
358349
359350 // drive the server executor until all tasks are popped off
360351 originalWorld .getServer ().managedBlock (() -> originalWorld .getServer ().getPendingTasksCount () == 0 );
361- } finally {
362- levelProperties .worldOptions = originalOpts ;
363352 }
364353 } finally {
365354 SafeFiles .tryHardToDeleteDir (tempDir );
@@ -392,7 +381,7 @@ private void regenForWorld(Region region, Extent extent, ServerLevel serverWorld
392381
393382 for (BlockVector3 vec : region ) {
394383 BlockPos pos = NeoForgeAdapter .toBlockPos (vec );
395- ChunkAccess chunk = chunks .get (new ChunkPos (pos ));
384+ ChunkAccess chunk = chunks .get (ChunkPos . containing (pos ));
396385 BlockStateHolder <?> state = NeoForgeAdapter .adapt (chunk .getBlockState (pos ));
397386 BlockEntity blockEntity = chunk .getBlockEntity (pos );
398387 if (blockEntity != null ) {
@@ -516,7 +505,7 @@ public boolean generateStructure(StructureType type, EditSession editSession, Bl
516505 ServerChunkCache chunkManager = world .getChunkSource ();
517506 try (NeoForgeServerLevelDelegateProxy .LevelAndProxy levelProxy =
518507 NeoForgeServerLevelDelegateProxy .newInstance (editSession , world )) {
519- ChunkPos chunkPos = new ChunkPos (new BlockPos (position .x (), position .y (), position .z ()));
508+ ChunkPos chunkPos = ChunkPos . containing (new BlockPos (position .x (), position .y (), position .z ()));
520509 StructureStart structureStart = structure .generate (
521510 structureRegistry .wrapAsHolder (structure ), world .dimension (), world .registryAccess (),
522511 chunkManager .getGenerator (), chunkManager .getGenerator ().getBiomeSource (), chunkManager .randomState (),
@@ -583,26 +572,26 @@ public void fixLighting(Iterable<BlockVector2> chunks) {
583572
584573 @ Override
585574 public WeatherType getWeather () {
586- LevelData info = getWorld ().getLevelData ();
587- if (info .isThundering ()) {
575+ WeatherData weatherData = getWorld ().getServer (). getWeatherData ();
576+ if (weatherData .isThundering ()) {
588577 return WeatherTypes .THUNDER_STORM ;
589578 }
590- if (info .isRaining ()) {
579+ if (weatherData .isRaining ()) {
591580 return WeatherTypes .RAIN ;
592581 }
593582 return WeatherTypes .CLEAR ;
594583 }
595584
596585 @ Override
597586 public long getRemainingWeatherDuration () {
598- ServerLevelData info = ( ServerLevelData ) getWorld ().getLevelData ();
599- if (info .isThundering ()) {
600- return info .getThunderTime ();
587+ WeatherData weatherData = getWorld (). getServer ().getWeatherData ();
588+ if (weatherData .isThundering ()) {
589+ return weatherData .getThunderTime ();
601590 }
602- if (info .isRaining ()) {
603- return info .getRainTime ();
591+ if (weatherData .isRaining ()) {
592+ return weatherData .getRainTime ();
604593 }
605- return info .getClearWeatherTime ();
594+ return weatherData .getClearWeatherTime ();
606595 }
607596
608597 @ Override
@@ -612,19 +601,19 @@ public void setWeather(WeatherType weatherType) {
612601
613602 @ Override
614603 public void setWeather (WeatherType weatherType , long duration ) {
615- ServerLevelData info = ( ServerLevelData ) getWorld ().getLevelData ();
604+ WeatherData weatherData = getWorld (). getServer ().getWeatherData ();
616605 if (weatherType == WeatherTypes .THUNDER_STORM ) {
617- info .setClearWeatherTime (0 );
618- info .setThundering (true );
619- info .setThunderTime ((int ) duration );
606+ weatherData .setClearWeatherTime (0 );
607+ weatherData .setThundering (true );
608+ weatherData .setThunderTime ((int ) duration );
620609 } else if (weatherType == WeatherTypes .RAIN ) {
621- info .setClearWeatherTime (0 );
622- info .setRaining (true );
623- info .setRainTime ((int ) duration );
610+ weatherData .setClearWeatherTime (0 );
611+ weatherData .setRaining (true );
612+ weatherData .setRainTime ((int ) duration );
624613 } else if (weatherType == WeatherTypes .CLEAR ) {
625- info .setRaining (false );
626- info .setThundering (false );
627- info .setClearWeatherTime ((int ) duration );
614+ weatherData .setRaining (false );
615+ weatherData .setThundering (false );
616+ weatherData .setClearWeatherTime ((int ) duration );
628617 }
629618 }
630619
0 commit comments