diff --git a/build.gradle.kts b/build.gradle.kts index f2d1fd6..04ed24d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,7 +1,7 @@ plugins { java id("com.github.johnrengelman.shadow") version "7.1.0" apply false - id("io.papermc.paperweight.patcher") version "1.3.2" + id("io.papermc.paperweight.patcher") version "1.3.6" } repositories { @@ -59,4 +59,4 @@ paperweight { serverOutputDir.set(layout.projectDirectory.dir("matter-server")) } } -} \ No newline at end of file +} diff --git a/gradle.properties b/gradle.properties index 374e1e7..7a47746 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ version = 1.18.2-R0.1-SNAPSHOT mcVersion = 1.18.2 packageVersion = 1_18_R2 -pufferfishRef = 9b5a4806811951c1eebf6013bc52eda85ad0ee7e +pufferfishRef = 3922e96e604c2a3cfd883e87c7d8f90fcef84f88 org.gradle.jvmargs=-Xmx2G diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 84d1f85..aa991fc 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/patches/server/0001-Feature-Secure-Seed.patch b/patches/server/0001-Feature-Secure-Seed.patch index 8f70fa4..19c4d3c 100644 --- a/patches/server/0001-Feature-Secure-Seed.patch +++ b/patches/server/0001-Feature-Secure-Seed.patch @@ -41,7 +41,7 @@ index ebfaa8d5de5b905bd2dd7778728b8c9939d01252..2bbbc973ddf2b67bdaa142bde67eb493 return this.generatorSettings; } diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index f33ae29fd86fbfb2a94748fbf9515e3b4ae01753..4f5dcff4a8c75a2297d71e3eda0ba441a52d0595 100644 +index b42e32bd1a6a669f498b577ec04661c4ba651198..004b7cb998716ce0b4f1a0ccb7dc502e45a5fa51 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -47,6 +47,7 @@ import net.minecraft.world.level.storage.DimensionDataStorage; @@ -52,7 +52,7 @@ index f33ae29fd86fbfb2a94748fbf9515e3b4ae01753..4f5dcff4a8c75a2297d71e3eda0ba441 public class ServerChunkCache extends ChunkSource { -@@ -1147,6 +1148,8 @@ public class ServerChunkCache extends ChunkSource { +@@ -1139,6 +1140,8 @@ public class ServerChunkCache extends ChunkSource { } public ChunkGenerator getGenerator() { @@ -62,7 +62,7 @@ index f33ae29fd86fbfb2a94748fbf9515e3b4ae01753..4f5dcff4a8c75a2297d71e3eda0ba441 } diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 5e9ad7c828a196e6fe85bb3e32aa23b95c83b39d..abf5cc83d0d2e508546fb8c1e814af48f15a17f1 100644 +index c63ee396e990d11e2f613f3b5a478b486076ed56..2b56040d2aa4504cd7db6990a689e0c4e2148f9d 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -162,6 +162,7 @@ import org.bukkit.event.weather.LightningStrikeEvent; @@ -82,10 +82,10 @@ index 5e9ad7c828a196e6fe85bb3e32aa23b95c83b39d..abf5cc83d0d2e508546fb8c1e814af48 boolean flag2 = minecraftserver.forceSynchronousWrites(); DataFixer datafixer = minecraftserver.getFixerUpper(); diff --git a/src/main/java/net/minecraft/world/entity/monster/Slime.java b/src/main/java/net/minecraft/world/entity/monster/Slime.java -index b6e78e8145ea78d532f22707c7525829c5778076..05317be6c91014a4e03bc7edc558a5ac742e7e50 100644 +index 2e819d32915941bd77034ce599eb787610a6d666..74eb3a0b696c6930bb85e84262b12dd17c9e471c 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Slime.java +++ b/src/main/java/net/minecraft/world/entity/monster/Slime.java -@@ -338,7 +338,7 @@ public class Slime extends Mob implements Enemy { +@@ -343,7 +343,7 @@ public class Slime extends Mob implements Enemy { } ChunkPos chunkcoordintpair = new ChunkPos(pos); @@ -137,7 +137,7 @@ index 08433670b54c67319ce13ac3ef0f24bd3f819ea0..c3e461019bda2a67e6ff8e34f58d625c for (int i = 0; i < sectionArray.length; ++i) { if (sectionArray[i] == null) { diff --git a/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java b/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java -index ab64f85de0051fdd4ff2eaa376eeabce2670b466..45c7d02647f8863216ed6ae88a6a2362805080ba 100644 +index daff5a9dd98e791b3f1dc898a082ff3e08adc92e..9effd4157b8765c7adccc84569d830d36002842c 100644 --- a/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java +++ b/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java @@ -86,6 +86,8 @@ import net.minecraft.world.level.levelgen.structure.placement.StructurePlacement @@ -149,16 +149,16 @@ index ab64f85de0051fdd4ff2eaa376eeabce2670b466..45c7d02647f8863216ed6ae88a6a2362 public abstract class ChunkGenerator implements BiomeManager.NoiseBiomeSource { -@@ -221,15 +223,9 @@ public abstract class ChunkGenerator implements BiomeManager.NoiseBiomeSource { - int i = placement.distance(); - int j = placement.count(); - int k = placement.spread(); +@@ -229,15 +231,9 @@ public abstract class ChunkGenerator implements BiomeManager.NoiseBiomeSource { + int i = concentricringsstructureplacement.distance(); + int j = concentricringsstructureplacement.count(); + int k = concentricringsstructureplacement.spread(); - Random random = new Random(); + // Matter + Random random = new WorldgenCryptoRandom(0, 0, Globals.Salt.STRONGHOLDS, 0); - // Paper start -- if (strongholdSet.is(net.minecraft.world.level.levelgen.structure.BuiltinStructureSets.STRONGHOLDS) && this.conf.strongholdSeed != null) { +- if (this.conf.strongholdSeed != null && this.structureSets.getResourceKey(holder).orElse(null) == net.minecraft.world.level.levelgen.structure.BuiltinStructureSets.STRONGHOLDS) { - random.setSeed(this.conf.strongholdSeed); - } else { - // Paper end @@ -167,7 +167,7 @@ index ab64f85de0051fdd4ff2eaa376eeabce2670b466..45c7d02647f8863216ed6ae88a6a2362 double d0 = random.nextDouble() * 3.141592653589793D * 2.0D; int l = 0; int i1 = 0; -@@ -503,8 +499,12 @@ public abstract class ChunkGenerator implements BiomeManager.NoiseBiomeSource { +@@ -511,8 +507,12 @@ public abstract class ChunkGenerator implements BiomeManager.NoiseBiomeSource { return structurefeature.feature.step().ordinal(); })); List list = this.biomeSource.featuresPerStep(); @@ -181,7 +181,7 @@ index ab64f85de0051fdd4ff2eaa376eeabce2670b466..45c7d02647f8863216ed6ae88a6a2362 Set set = new ObjectArraySet(); if (this instanceof FlatLevelSource) { -@@ -776,9 +776,11 @@ public abstract class ChunkGenerator implements BiomeManager.NoiseBiomeSource { +@@ -786,9 +786,11 @@ public abstract class ChunkGenerator implements BiomeManager.NoiseBiomeSource { ArrayList arraylist = new ArrayList(list.size()); arraylist.addAll(list); @@ -218,27 +218,29 @@ index 954e141e5617d6d52e2f3008c25fe9e2fe2f0f9a..3d097782a9d0f99f6dabc0a3603e1ef2 ProfiledDuration profiledduration = JvmProfiler.INSTANCE.onChunkGenerate(ichunkaccess.getPos(), world.dimension(), this.name); CompletableFuture> completablefuture = this.generationTask.doWork(this, executor, world, generator, structureManager, lightingProvider, fullChunkConverter, chunks, ichunkaccess, flag); diff --git a/src/main/java/net/minecraft/world/level/levelgen/WorldGenSettings.java b/src/main/java/net/minecraft/world/level/levelgen/WorldGenSettings.java -index f1aee097318f91d582aa143a77662ec12e812c93..f9c06365c0e9b95d1bb2b52b189ae958c9f74a9b 100644 +index 61dc7d594c4ee15f99fd531d1b2cbaffc63c372d..f13e3eaa2aab15a983679359d40285a22dab61a2 100644 --- a/src/main/java/net/minecraft/world/level/levelgen/WorldGenSettings.java +++ b/src/main/java/net/minecraft/world/level/levelgen/WorldGenSettings.java -@@ -14,6 +14,8 @@ import java.util.OptionalLong; +@@ -16,6 +16,8 @@ import java.util.Optional; + import java.util.OptionalLong; import java.util.Random; - import java.util.Map.Entry; import java.util.function.Function; +import java.util.stream.LongStream; + import net.minecraft.core.Holder; import net.minecraft.core.MappedRegistry; import net.minecraft.core.Registry; -@@ -33,15 +35,24 @@ import net.minecraft.world.level.levelgen.structure.StructureSet; +@@ -36,16 +38,24 @@ import net.minecraft.world.level.levelgen.structure.StructureSet; import net.minecraft.world.level.levelgen.synth.NormalNoise; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; +import su.plo.matter.Globals; public class WorldGenSettings { -- public static final Codec CODEC = RecordCodecBuilder.create((instance) -> { -- return instance.group(Codec.LONG.fieldOf("seed").stable().forGetter(WorldGenSettings::seed), Codec.BOOL.fieldOf("generate_features").orElse(true).stable().forGetter(WorldGenSettings::generateFeatures), Codec.BOOL.fieldOf("bonus_chest").orElse(false).stable().forGetter(WorldGenSettings::generateBonusChest), RegistryCodecs.dataPackAwareCodec(Registry.LEVEL_STEM_REGISTRY, Lifecycle.stable(), LevelStem.CODEC).xmap(LevelStem::sortMap, Function.identity()).fieldOf("dimensions").forGetter(WorldGenSettings::dimensions), Codec.STRING.optionalFieldOf("legacy_custom_options").stable().forGetter((worldGenSettings) -> { +- +- public static final Codec CODEC = RecordCodecBuilder.create((instance) -> { // CraftBukkit - decompile error +- return instance.group(Codec.LONG.fieldOf("seed").stable().forGetter(WorldGenSettings::seed), Codec.BOOL.fieldOf("generate_features").orElse(true).stable().forGetter(WorldGenSettings::generateFeatures), Codec.BOOL.fieldOf("bonus_chest").orElse(false).stable().forGetter(WorldGenSettings::generateBonusChest), RegistryCodecs.dataPackAwareCodec(Registry.LEVEL_STEM_REGISTRY, Lifecycle.stable(), LevelStem.CODEC).xmap(LevelStem::sortMap, Function.identity()).fieldOf("dimensions").forGetter(WorldGenSettings::dimensions), Codec.STRING.optionalFieldOf("legacy_custom_options").stable().forGetter((generatorsettings) -> { +- return generatorsettings.legacyCustomOptions; + public static final Codec CODEC = RecordCodecBuilder.create((instance) -> { + return instance.group(Codec.LONG.fieldOf("seed").stable().forGetter(WorldGenSettings::seed), + Codec.LONG_STREAM.fieldOf("feature_seed").stable().forGetter((settings) -> LongStream.of(settings.featureSeed())), // Matter @@ -246,7 +248,7 @@ index f1aee097318f91d582aa143a77662ec12e812c93..f9c06365c0e9b95d1bb2b52b189ae958 + Codec.BOOL.fieldOf("bonus_chest").orElse(false).stable().forGetter(WorldGenSettings::generateBonusChest), + RegistryCodecs.dataPackAwareCodec(Registry.LEVEL_STEM_REGISTRY, Lifecycle.stable(), LevelStem.CODEC).xmap(LevelStem::sortMap, Function.identity()).fieldOf("dimensions").forGetter(WorldGenSettings::dimensions), + Codec.STRING.optionalFieldOf("legacy_custom_options").stable().forGetter((WorldGenSettings worldGenSettings) -> { - return worldGenSettings.legacyCustomOptions; ++ return worldGenSettings.legacyCustomOptions; })).apply(instance, instance.stable(WorldGenSettings::new)); }).comapFlatMap(WorldGenSettings::guardExperimental, Function.identity()); + @@ -257,16 +259,19 @@ index f1aee097318f91d582aa143a77662ec12e812c93..f9c06365c0e9b95d1bb2b52b189ae958 private final boolean generateFeatures; private final boolean generateBonusChest; private final Registry dimensions; -@@ -60,30 +71,38 @@ public class WorldGenSettings { +@@ -61,33 +71,38 @@ public class WorldGenSettings { return LevelStem.stable(this.seed, this.dimensions); } - public WorldGenSettings(long seed, boolean generateStructures, boolean bonusChest, Registry options) { - this(seed, generateStructures, bonusChest, options, Optional.empty()); +- LevelStem worlddimension = (LevelStem) options.get(LevelStem.OVERWORLD); +- +- if (worlddimension == null) { + public WorldGenSettings(long seed, long[] featureSeed, boolean generateStructures, boolean bonusChest, Registry options) { + this(seed, featureSeed, generateStructures, bonusChest, options, Optional.empty()); - LevelStem levelStem = options.get(LevelStem.OVERWORLD); - if (levelStem == null) { ++ LevelStem levelStem = options.get(LevelStem.OVERWORLD); ++ if (levelStem == null) { throw new IllegalStateException("Overworld settings missing"); } } @@ -288,20 +293,22 @@ index f1aee097318f91d582aa143a77662ec12e812c93..f9c06365c0e9b95d1bb2b52b189ae958 public static WorldGenSettings demoSettings(RegistryAccess registryManager) { int i = "North Carolina".hashCode(); -- return new WorldGenSettings((long)i, true, true, withOverworld(registryManager.registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY), DimensionType.defaultDimensions(registryManager, (long)i), makeDefaultOverworld(registryManager, (long)i))); +- +- return new WorldGenSettings((long) i, true, true, WorldGenSettings.withOverworld(registryManager.registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY), DimensionType.defaultDimensions(registryManager, (long) i), WorldGenSettings.makeDefaultOverworld(registryManager, (long) i))); + // Matter -+ return new WorldGenSettings(i, Globals.parseSeed("North Carolina").get(), true, true, withOverworld(registryManager.registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY), DimensionType.defaultDimensions(registryManager, (long)i), makeDefaultOverworld(registryManager, (long)i))); ++ return new WorldGenSettings((long) i, Globals.parseSeed("North Carolina").get(), true, true, WorldGenSettings.withOverworld(registryManager.registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY), DimensionType.defaultDimensions(registryManager, (long) i), WorldGenSettings.makeDefaultOverworld(registryManager, (long) i))); } public static WorldGenSettings makeDefault(RegistryAccess registryManager) { - long l = (new Random()).nextLong(); -- return new WorldGenSettings(l, true, false, withOverworld(registryManager.registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY), DimensionType.defaultDimensions(registryManager, l), makeDefaultOverworld(registryManager, l))); + long i = (new Random()).nextLong(); +- +- return new WorldGenSettings(i, true, false, WorldGenSettings.withOverworld(registryManager.registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY), DimensionType.defaultDimensions(registryManager, i), WorldGenSettings.makeDefaultOverworld(registryManager, i))); + // Matter -+ return new WorldGenSettings(l, Globals.createRandomWorldSeed(), true, false, withOverworld(registryManager.registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY), DimensionType.defaultDimensions(registryManager, l), makeDefaultOverworld(registryManager, l))); ++ return new WorldGenSettings(i, Globals.createRandomWorldSeed(), true, false, WorldGenSettings.withOverworld(registryManager.registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY), DimensionType.defaultDimensions(registryManager, i), WorldGenSettings.makeDefaultOverworld(registryManager, i))); } public static NoiseBasedChunkGenerator makeDefaultOverworld(RegistryAccess registryManager, long seed) { -@@ -110,6 +129,12 @@ public class WorldGenSettings { +@@ -115,6 +130,12 @@ public class WorldGenSettings { return this.seed; } @@ -314,7 +321,7 @@ index f1aee097318f91d582aa143a77662ec12e812c93..f9c06365c0e9b95d1bb2b52b189ae958 public boolean generateFeatures() { return this.generateFeatures; } -@@ -176,19 +201,24 @@ public class WorldGenSettings { +@@ -187,18 +208,23 @@ public class WorldGenSettings { } public WorldGenSettings withBonusChest() { @@ -336,60 +343,60 @@ index f1aee097318f91d582aa143a77662ec12e812c93..f9c06365c0e9b95d1bb2b52b189ae958 } public static WorldGenSettings create(RegistryAccess registryManager, DedicatedServerProperties.WorldGenProperties worldGenProperties) { - long l = parseSeed(worldGenProperties.levelSeed()).orElse((new Random()).nextLong()); + // Matter + long[] featureSeed = Globals.parseSeed(worldGenProperties.featureSeed()).orElse(Globals.createRandomWorldSeed()); - Registry registry = registryManager.registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY); - Registry registry2 = registryManager.registryOrThrow(Registry.BIOME_REGISTRY); - Registry registry3 = registryManager.registryOrThrow(Registry.STRUCTURE_SET_REGISTRY); -@@ -197,22 +227,28 @@ public class WorldGenSettings { - switch(var8) { - case "flat": - Dynamic dynamic = new Dynamic<>(JsonOps.INSTANCE, worldGenProperties.generatorSettings()); -- return new WorldGenSettings(l, worldGenProperties.generateStructures(), false, withOverworld(registry, registry4, new FlatLevelSource(registry3, FlatLevelGeneratorSettings.CODEC.parse(dynamic).resultOrPartial(LOGGER::error).orElseGet(() -> { -+ return new WorldGenSettings(l, featureSeed, worldGenProperties.generateStructures(), false, withOverworld(registry, registry4, new FlatLevelSource(registry3, FlatLevelGeneratorSettings.CODEC.parse(dynamic).resultOrPartial(LOGGER::error).orElseGet(() -> { - return FlatLevelGeneratorSettings.getDefault(registry2, registry3); - })))); - case "debug_all_block_states": -- return new WorldGenSettings(l, worldGenProperties.generateStructures(), false, withOverworld(registry, registry4, new DebugLevelSource(registry3, registry2))); -+ // Matter -+ return new WorldGenSettings(l, featureSeed, worldGenProperties.generateStructures(), false, withOverworld(registry, registry4, new DebugLevelSource(registry3, registry2))); - case "amplified": -- return new WorldGenSettings(l, worldGenProperties.generateStructures(), false, withOverworld(registry, registry4, makeOverworld(registryManager, l, NoiseGeneratorSettings.AMPLIFIED))); -+ // Matter -+ return new WorldGenSettings(l, featureSeed, worldGenProperties.generateStructures(), false, withOverworld(registry, registry4, makeOverworld(registryManager, l, NoiseGeneratorSettings.AMPLIFIED))); - case "largebiomes": -- return new WorldGenSettings(l, worldGenProperties.generateStructures(), false, withOverworld(registry, registry4, makeOverworld(registryManager, l, NoiseGeneratorSettings.LARGE_BIOMES))); -+ // Matter -+ return new WorldGenSettings(l, featureSeed, worldGenProperties.generateStructures(), false, withOverworld(registry, registry4, makeOverworld(registryManager, l, NoiseGeneratorSettings.LARGE_BIOMES))); - default: -- return new WorldGenSettings(l, worldGenProperties.generateStructures(), false, withOverworld(registry, registry4, makeDefaultOverworld(registryManager, l))); -+ // Matter -+ return new WorldGenSettings(l, featureSeed, worldGenProperties.generateStructures(), false, withOverworld(registry, registry4, makeDefaultOverworld(registryManager, l))); + long i = WorldGenSettings.parseSeed(worldGenProperties.levelSeed()).orElse((new Random()).nextLong()); + Registry iregistry = registryManager.registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY); + Registry iregistry1 = registryManager.registryOrThrow(Registry.BIOME_REGISTRY); +@@ -237,24 +263,30 @@ public class WorldGenSettings { + Logger logger = WorldGenSettings.LOGGER; + + Objects.requireNonNull(logger); +- return new WorldGenSettings(i, flag, false, WorldGenSettings.withOverworld(iregistry, iregistry3, new FlatLevelSource(iregistry2, (FlatLevelGeneratorSettings) dataresult.resultOrPartial(s1 -> logger.error(String.valueOf(s1))).orElseGet(() -> { // CraftBukkit - decompile error ++ // Matter ++ return new WorldGenSettings(i, featureSeed, flag, false, WorldGenSettings.withOverworld(iregistry, iregistry3, new FlatLevelSource(iregistry2, (FlatLevelGeneratorSettings) dataresult.resultOrPartial(s1 -> logger.error(String.valueOf(s1))).orElseGet(() -> { // CraftBukkit - decompile error + return FlatLevelGeneratorSettings.getDefault(iregistry1, iregistry2); + })))); + case 1: +- return new WorldGenSettings(i, worldGenProperties.generateStructures(), false, WorldGenSettings.withOverworld(iregistry, iregistry3, new DebugLevelSource(iregistry2, iregistry1))); ++ // Matter ++ return new WorldGenSettings(i, featureSeed, worldGenProperties.generateStructures(), false, WorldGenSettings.withOverworld(iregistry, iregistry3, new DebugLevelSource(iregistry2, iregistry1))); + case 2: +- return new WorldGenSettings(i, worldGenProperties.generateStructures(), false, WorldGenSettings.withOverworld(iregistry, iregistry3, WorldGenSettings.makeOverworld(registryManager, i, NoiseGeneratorSettings.AMPLIFIED))); ++ // Matter ++ return new WorldGenSettings(i, featureSeed, worldGenProperties.generateStructures(), false, WorldGenSettings.withOverworld(iregistry, iregistry3, WorldGenSettings.makeOverworld(registryManager, i, NoiseGeneratorSettings.AMPLIFIED))); + case 3: +- return new WorldGenSettings(i, worldGenProperties.generateStructures(), false, WorldGenSettings.withOverworld(iregistry, iregistry3, WorldGenSettings.makeOverworld(registryManager, i, NoiseGeneratorSettings.LARGE_BIOMES))); ++ // Matter ++ return new WorldGenSettings(i, featureSeed, worldGenProperties.generateStructures(), false, WorldGenSettings.withOverworld(iregistry, iregistry3, WorldGenSettings.makeOverworld(registryManager, i, NoiseGeneratorSettings.LARGE_BIOMES))); + default: +- return new WorldGenSettings(i, worldGenProperties.generateStructures(), false, WorldGenSettings.withOverworld(iregistry, iregistry3, WorldGenSettings.makeDefaultOverworld(registryManager, i))); ++ // Matter ++ return new WorldGenSettings(i, featureSeed, worldGenProperties.generateStructures(), false, WorldGenSettings.withOverworld(iregistry, iregistry3, WorldGenSettings.makeDefaultOverworld(registryManager, i))); } } public WorldGenSettings withSeed(boolean hardcore, OptionalLong seed) { - long l = seed.orElse(this.seed); + long i = seed.orElse(this.seed); + Object object; +- + // Matter + long[] featureSeed = Globals.createRandomWorldSeed(); - Registry registry; if (seed.isPresent()) { - WritableRegistry writableRegistry = new MappedRegistry<>(Registry.LEVEL_STEM_REGISTRY, Lifecycle.experimental(), (Function>)null); -@@ -230,9 +266,11 @@ public class WorldGenSettings { + WritableRegistry iregistrywritable = new MappedRegistry<>(Registry.LEVEL_STEM_REGISTRY, Lifecycle.experimental(), (Function) null); + long j = seed.getAsLong(); +@@ -275,9 +307,9 @@ public class WorldGenSettings { + WorldGenSettings generatorsettings; - WorldGenSettings worldGenSettings; if (this.isDebug()) { -- worldGenSettings = new WorldGenSettings(l, false, false, registry); -+ // Matter -+ worldGenSettings = new WorldGenSettings(l, featureSeed, false, false, registry); +- generatorsettings = new WorldGenSettings(i, false, false, (Registry) object); ++ generatorsettings = new WorldGenSettings(i, featureSeed, false, false, (Registry) object); } else { -- worldGenSettings = new WorldGenSettings(l, this.generateFeatures(), this.generateBonusChest() && !hardcore, registry); -+ // Matter -+ worldGenSettings = new WorldGenSettings(l, featureSeed, this.generateFeatures(), this.generateBonusChest() && !hardcore, registry); +- generatorsettings = new WorldGenSettings(i, this.generateFeatures(), this.generateBonusChest() && !hardcore, (Registry) object); ++ generatorsettings = new WorldGenSettings(i, featureSeed, this.generateFeatures(), this.generateBonusChest() && !hardcore, (Registry) object); } - return worldGenSettings; + return generatorsettings; diff --git a/src/main/java/net/minecraft/world/level/levelgen/feature/BastionFeature.java b/src/main/java/net/minecraft/world/level/levelgen/feature/BastionFeature.java index 8204b39496e26baf9454b117f7a5d80735956d3e..415898770c08e30dc1b0ee26119d199991432740 100644 --- a/src/main/java/net/minecraft/world/level/levelgen/feature/BastionFeature.java @@ -792,7 +799,7 @@ index fc6ea073dda463a0d0fcdc2c40b1b6ef2339c6af..0fc9e49f314c963556474eda9d153b23 int j = context.chunkPos().getMinBlockZ() + worldgenRandom.nextInt(16); int k = context.chunkGenerator().getSeaLevel(); diff --git a/src/main/java/net/minecraft/world/level/levelgen/structure/placement/RandomSpreadStructurePlacement.java b/src/main/java/net/minecraft/world/level/levelgen/structure/placement/RandomSpreadStructurePlacement.java -index cc8784df741f6cbe51e50d5414f078676907af1b..e430bcdec3883f58d7ad32430d05a9f316355c59 100644 +index 42152827c5b1393c9b7efa88017435716eb585c0..5c528eb1ecaa7c21a131f8c5258c142b06d83bc7 100644 --- a/src/main/java/net/minecraft/world/level/levelgen/structure/placement/RandomSpreadStructurePlacement.java +++ b/src/main/java/net/minecraft/world/level/levelgen/structure/placement/RandomSpreadStructurePlacement.java @@ -9,9 +9,12 @@ import net.minecraft.world.level.ChunkPos; @@ -809,27 +816,7 @@ index cc8784df741f6cbe51e50d5414f078676907af1b..e430bcdec3883f58d7ad32430d05a9f3 return instance.group(Codec.intRange(0, 4096).fieldOf("spacing").forGetter(RandomSpreadStructurePlacement::spacing), Codec.intRange(0, 4096).fieldOf("separation").forGetter(RandomSpreadStructurePlacement::separation), RandomSpreadType.CODEC.optionalFieldOf("spread_type", RandomSpreadType.LINEAR).forGetter(RandomSpreadStructurePlacement::spreadType), ExtraCodecs.NON_NEGATIVE_INT.fieldOf("salt").forGetter(RandomSpreadStructurePlacement::salt), Vec3i.offsetCodec(16).optionalFieldOf("locate_offset", Vec3i.ZERO).forGetter(RandomSpreadStructurePlacement::locateOffset)).apply(instance, RandomSpreadStructurePlacement::new); }).flatXmap((placement) -> { return placement.spacing <= placement.separation ? DataResult.error("Spacing has to be larger than separation") : DataResult.success(placement); -@@ -21,12 +24,13 @@ public record RandomSpreadStructurePlacement(int spacing, int separation, Random - this(spacing, separation, spreadType, salt, Vec3i.ZERO); - } - -- public RandomSpreadStructurePlacement(int i, int j, RandomSpreadType randomSpreadType, int k, Vec3i vec3i) { -- this.spacing = i; -- this.separation = j; -- this.spreadType = randomSpreadType; -- this.salt = k; -- this.locateOffset = vec3i; -+ // Matter - compile fix -+ public RandomSpreadStructurePlacement(int spacing, int separation, RandomSpreadType spreadType, int salt, Vec3i locateOffset) { -+ this.spacing = spacing; -+ this.separation = separation; -+ this.spreadType = spreadType; -+ this.salt = salt; -+ this.locateOffset = locateOffset; - } - - public ChunkPos getPotentialFeatureChunk(long seed, int x, int z) { -@@ -34,8 +38,11 @@ public record RandomSpreadStructurePlacement(int spacing, int separation, Random +@@ -26,8 +29,11 @@ public record RandomSpreadStructurePlacement(int spacing, int separation, Random int j = this.separation(); int k = Math.floorDiv(x, i); int l = Math.floorDiv(z, i); @@ -909,10 +896,10 @@ index 403aba29347c779da75337531c3723632120e7c9..e4a468003744e6299d4a5c17af9d7fa3 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index cc88eb1247bafb65999e1ca5624c87b038b27866..9cf16088f3a632054c30216840df0c6c2174e1a6 100644 +index f4a82b1f2dc26f938d3dcb23ec32f135a1bfd163..07f082514a28118c5ab49ca68560f7e838abf3ea 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -243,6 +243,7 @@ import org.yaml.snakeyaml.constructor.SafeConstructor; +@@ -244,6 +244,7 @@ import org.yaml.snakeyaml.constructor.SafeConstructor; import org.yaml.snakeyaml.error.MarkedYAMLException; import net.md_5.bungee.api.chat.BaseComponent; // Spigot @@ -920,7 +907,7 @@ index cc88eb1247bafb65999e1ca5624c87b038b27866..9cf16088f3a632054c30216840df0c6c import javax.annotation.Nullable; // Paper import javax.annotation.Nonnull; // Paper -@@ -1192,7 +1193,8 @@ public final class CraftServer implements Server { +@@ -1193,7 +1194,8 @@ public final class CraftServer implements Server { LevelSettings worldSettings; // See MinecraftServer.a(String, String, long, WorldType, JsonElement) if (worlddata == null) { diff --git a/patches/server/0002-Matter-Branding.patch b/patches/server/0002-Matter-Branding.patch index 9b27ec4..f1a58e0 100644 --- a/patches/server/0002-Matter-Branding.patch +++ b/patches/server/0002-Matter-Branding.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Matter Branding diff --git a/build.gradle.kts b/build.gradle.kts -index b2bade12a76ef354a2d0c2e054cbf818751f71b3..cb78c47e014ce3687e684a73944ba4864efefebc 100644 +index 9521971e9e597834e785b36d1657064dc1621b9b..af040f475d8db1478bb778dee97262e95fb64349 100644 --- a/build.gradle.kts +++ b/build.gradle.kts -@@ -18,7 +18,7 @@ repositories { +@@ -9,7 +9,7 @@ plugins { } dependencies { @@ -17,7 +17,7 @@ index b2bade12a76ef354a2d0c2e054cbf818751f71b3..cb78c47e014ce3687e684a73944ba486 // Pufferfish start implementation("io.papermc.paper:paper-mojangapi:1.18.2-R0.1-SNAPSHOT") { exclude("io.papermc.paper", "paper-api") -@@ -87,7 +87,7 @@ tasks.jar { +@@ -78,7 +78,7 @@ tasks.jar { attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", "Implementation-Title" to "CraftBukkit", @@ -53,10 +53,10 @@ index 371b0f95b23d67c9913875a3dd7888e722551f18..9026f9c2bde769af2dc32e0909ad1c01 public SystemReport fillSystemReport(SystemReport details) { diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 0810ca4c657ac289607c92619edc7bd441b2768f..0b49989f46ffc1879275af2c884deaa26c7b4a03 100644 +index 07f082514a28118c5ab49ca68560f7e838abf3ea..e4f117239c46aea75370e152c95b092160c7ca05 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -249,7 +249,7 @@ import javax.annotation.Nullable; // Paper +@@ -250,7 +250,7 @@ import javax.annotation.Nullable; // Paper import javax.annotation.Nonnull; // Paper public final class CraftServer implements Server { @@ -65,6 +65,19 @@ index 0810ca4c657ac289607c92619edc7bd441b2768f..0b49989f46ffc1879275af2c884deaa2 private final String serverVersion; private final String bukkitVersion = Versioning.getBukkitVersion(); private final Logger logger = Logger.getLogger("Minecraft"); +diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java +index fbe68bd4739d9a0e7d9bc4c3d5ba8ecfd2d13954..dc8bf6907e69868b2f28c556c3ba35b3c8a5f705 100644 +--- a/src/main/java/org/bukkit/craftbukkit/Main.java ++++ b/src/main/java/org/bukkit/craftbukkit/Main.java +@@ -265,7 +265,7 @@ public class Main { + if (buildDate.before(deadline.getTime())) { + // Paper start - This is some stupid bullshit + System.err.println("*** Warning, you've not updated in a while! ***"); +- System.err.println("*** Please download a new build as per instructions from https://papermc.io/downloads ***"); // Paper ++ System.err.println("*** Please download a new build as per instructions from https://matter.plo.su/ ***"); // Paper // Matter + //System.err.println("*** Server will start in 20 seconds ***"); + //Thread.sleep(TimeUnit.SECONDS.toMillis(20)); + // Paper End diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java index 7e06f263cf618b82f77101ef86d819d5dc37a24e..cb5b5e36fa365607c19d49f3a4d81f142b6e0760 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java