diff --git a/build.gradle b/build.gradle
index d54b9048..d60944fa 100644
--- a/build.gradle
+++ b/build.gradle
@@ -11,7 +11,8 @@ plugins {
if (project.file('../gradletools.gradle').exists()) {
apply from: '../gradletools.gradle'
} else {
- apply from: 'https://raw.githubusercontent.com/McJtyMods/MultiWorkspace/1.21_neo/gradletools.gradle'
+ apply from: 'gradletools.gradle'
+ // apply from: 'https://raw.githubusercontent.com/McJtyMods/MultiWorkspace/1.21_neo/gradletools.gradle'
}
group = "com.github.mcjty"
diff --git a/gradle.properties b/gradle.properties
index 993785c9..63190b60 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,6 +1,6 @@
mod_id=lostcities
mod_name=LostCities
-version=1.21-8.2.5
+version=1.21.3-8.2.5
curse_type=beta
projectId=269024
projectSlug=the-lost-cities
diff --git a/gradletools.gradle b/gradletools.gradle
new file mode 100644
index 00000000..c18fac3c
--- /dev/null
+++ b/gradletools.gradle
@@ -0,0 +1,264 @@
+project.ext.set("mod_group_id", 'com.github.mcjty')
+project.ext.set("mod_authors", 'McJty')
+project.ext.set("minecraft_version", '1.21.3')
+project.ext.set("minecraft_version_range", '[1.21,1.22)')
+project.ext.set("parchment_version", '2024.07.28')
+project.ext.set("parchment_minecraft_version", '1.21')
+project.ext.set("neo_version", '21.3.58')
+project.ext.set("neo_version_range", '[21.1,)')
+project.ext.set("loader_version_range", '[4,)')
+project.ext.set("jei_version", '19.9.1.125')
+project.ext.set("patchouli_version", '1.21-87-NEOFORGE')
+project.ext.set("top_version", '1.21_neo-12.0.3-5')
+project.ext.set("mcjtylib_version", '1.21-9.0.5.8')
+project.ext.set("rftoolsbase_version", '1.21-6.0.2-5')
+project.ext.set("curios_version", '5.2.0-beta.3+1.20.1')
+project.ext.set("lostcities_version", '1.21-8.2.2-6')
+project.ext.set("bookshelf_version", '1.20.1:20.0.2')
+project.ext.set("gamestages_version", '1.20.1:15.0.1')
+project.ext.set("sereneseasons_version", '1.21-10.0.0.2')
+
+ext.getChangelogText = {
+ def changelogFile = file('changelog.txt')
+ String str = ''
+ int lineCount = 0
+ boolean done = false
+ changelogFile.eachLine {
+ if (done || it == null) {
+ return
+ }
+ if (it.size() > 1) {
+ def temp = it
+ if (lineCount == 0) {
+ temp = "${mod_name} ${version}"
+ temp = "
$temp
"
+ } else if (it.startsWith('-')) {
+ temp = " $temp"
+ temp = temp.replaceAll("(\\S+\\/\\S+)#([0-9]+)\\b", "\$0");
+ temp = temp.replaceAll("#([0-9]+)\\b(?!<\\/a>)", "\$0");
+ } else {
+ temp = "$temp
"
+ }
+ str += "$temp
"
+ lineCount++
+ return
+ } else {
+ done = true
+ }
+ }
+ return str
+}
+
+ext.repos = {
+ repositories {
+ mavenLocal()
+ maven { url "https://maven.blamejared.com" } // Patchouli, bookshelf, gamestages, JEI
+ //maven { url "https://dvs1.progwml6.com/files/maven" } // JEI
+ maven { url "https://maven.k-4u.nl" } // McJtyLib, TOP
+ maven { url 'https://maven.minecraftforge.net/' } // Serene Seasons
+ maven { url "https://maven.theillusivec4.top/" } // Curios
+ }
+}
+
+ext.parch = {
+ dependencies {
+ subsystems {
+ parchment {
+ minecraftVersion = ${parchment_minecraft_version}
+ mappingsVersion = ${parchment_version}
+ }
+ }
+ }
+}
+
+ext.mc = {
+ dependencies.implementation "net.neoforged:neoforge:${neo_version}"
+}
+
+ext.jei = {
+ dependencies.compileOnly "mezz.jei:jei-${minecraft_version}-common-api:${jei_version}"
+ dependencies.compileOnly "mezz.jei:jei-${minecraft_version}-neoforge-api:${jei_version}"
+ dependencies.runtimeOnly "mezz.jei:jei-${minecraft_version}-neoforge:${jei_version}"
+}
+
+ext.patchouli = {
+ dependencies.implementation "vazkii.patchouli:Patchouli:${patchouli_version}"
+}
+
+ext.gamestages = {
+ dependencies.implementation "net.darkhax.bookshelf:Bookshelf-Forge-${bookshelf_version}"
+ dependencies.implementation "net.darkhax.gamestages:GameStages-Forge-${gamestages_version}"
+}
+
+ext.sereneseasons = {
+ dependencies.compileOnly "com.github.glitchfiend:SereneSeasons-neoforge:${sereneseasons_version}"
+}
+
+ext.top = {
+ if (findProject(':TheOneProbe') != null) {
+ dependencies.implementation project(':TheOneProbe')
+ } else {
+ dependencies.implementation "mcjty.theoneprobe:theoneprobe:${top_version}"
+ }
+}
+
+ext.mcjtylib = {
+ if (findProject(':McJtyLib') != null) {
+ dependencies.implementation project(':McJtyLib')
+ } else {
+ dependencies.implementation "com.github.mcjty:mcjtylib:${mcjtylib_version}"
+ }
+}
+
+ext.rftoolsbase = {
+ if (findProject(':RFToolsBase') != null) {
+ dependencies.implementation project(':RFToolsBase')
+ } else {
+ dependencies.implementation "com.github.mcjty:rftoolsbase:${rftoolsbase_version}"
+ }
+}
+
+ext.curios = {
+ dependencies.runtimeOnly "top.theillusivec4.curios:curios-forge:${curios_version}"
+ dependencies.compileOnly "top.theillusivec4.curios:curios-forge:${curios_version}:api"
+}
+
+ext.lostcities = {
+ if (findProject(':LostCities') != null) {
+ dependencies.implementation project(':LostCities')
+ } else {
+ dependencies.implementation "com.github.mcjty:lostcities:${lostcities_version}"
+ }
+}
+
+ext.modrinth = { opt, req, versions ->
+ tasks.modrinth.enabled = project.hasProperty('modrinth_token')
+ modrinth {
+ if (project.hasProperty('modrinth_token')) {
+ token = project.modrinth_token
+ }
+ projectId = project.projectSlug
+ versionType = project.curse_type
+ versionName = "${mod_name} - ${version}"
+ uploadFile = jar
+ gameVersions = [project.minecraft_version] + versions
+ changelog = System.getenv('CHANGELOG') == null || System.getenv('CHANGELOG').equals('none') ? getChangelogText() : System.getenv('CHANGELOG')
+ dependencies {
+ opt.each { lib ->
+ optional.project lib
+ }
+ req.each { lib ->
+ required.project lib
+ }
+ }
+ }
+}
+
+ext.cfdeps = { optional, required, versions ->
+ tasks.curseforge.enabled = project.hasProperty('curseforge_key')
+ curseforge {
+ if (project.hasProperty('curseforge_key')) {
+ apiKey = project.curseforge_key
+ }
+
+ project {
+ id = project.projectId
+ changelog = System.getenv('CHANGELOG') == null || System.getenv('CHANGELOG').equals('none') ? getChangelogText() : System.getenv('CHANGELOG')
+ changelogType = 'html'
+ releaseType = project.curse_type
+ addGameVersion project.minecraft_version
+ versions.each { v ->
+ addGameVersion v
+ }
+ mainArtifact(jar) {
+ displayName = "${mod_name} - ${version}"
+ }
+ if (optional.size() > 0 || required.size() > 0) {
+ relations {
+ optional.each { lib ->
+ optionalLibrary lib
+ }
+ required.each { lib ->
+ requiredDependency lib
+ }
+ }
+ }
+ }
+ }
+}
+
+ext.at = {
+ minecraft {
+ accessTransformers {
+ file('src/main/resources/META-INF/accesstransformer.cfg')
+ }
+ }
+}
+
+ext.runs = {
+ runs {
+ configureEach {
+ systemProperty 'forge.logging.markers', 'REGISTRIES'
+ systemProperty 'forge.logging.console.level', 'debug'
+ modSource project.sourceSets.main
+ }
+
+ client {
+ systemProperty 'forge.enabledGameTestNamespaces', project.mod_id
+ }
+
+ server {
+ systemProperty 'forge.enabledGameTestNamespaces', project.mod_id
+ argument '--nogui'
+ }
+
+ gameTestServer {
+ systemProperty 'forge.enabledGameTestNamespaces', project.mod_id
+ }
+
+ data {
+ arguments.addAll '--mod', project.mod_id, '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath()
+ }
+ }
+}
+
+ext.jars = {
+ jar {
+ duplicatesStrategy = DuplicatesStrategy.INCLUDE
+ manifest {
+ attributes([
+ "Specification-Title" : project.mod_id,
+ "Specification-Vendor" : project.mod_authors,
+ "Specification-Version" : "1", // We are version 1 of ourselves
+ "Implementation-Title" : project.name,
+ "Implementation-Version" : project.jar.archiveVersion,
+ "Implementation-Vendor" : project.mod_authors,
+ "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
+ ])
+ }
+ }
+}
+
+ext.publish = {
+ // Example configuration to allow publishing using the maven-publish task
+ // we define a custom artifact that is sourced from the reobfJar output task
+ // and then declare that to be published
+ // Note you'll need to add a repository here
+ def reobfFile = file("$buildDir/reobfJar/output.jar")
+ def reobfArtifact = artifacts.add('default', reobfFile) {
+ type 'jar'
+ builtBy 'reobfJar'
+ }
+ publishing {
+ publications {
+ mavenJava(MavenPublication) {
+ artifact reobfArtifact
+ }
+ }
+ repositories {
+ maven {
+ url "file:///${project.projectDir}/mcmodsrepo"
+ }
+ }
+ }
+}
diff --git a/src/main/java/mcjty/lostcities/commands/CommandCreateBuilding.java b/src/main/java/mcjty/lostcities/commands/CommandCreateBuilding.java
index 97cc45d4..906952f7 100644
--- a/src/main/java/mcjty/lostcities/commands/CommandCreateBuilding.java
+++ b/src/main/java/mcjty/lostcities/commands/CommandCreateBuilding.java
@@ -73,7 +73,7 @@ public int run(CommandContext context) throws CommandSyntaxE
ChunkPos cp = new ChunkPos(bottom);
int height = bottom.getY();
- for (int y = height ; y < level.getMaxBuildHeight() ; y++) {
+ for (int y = height ; y < level.getMaxY()+1; y++) {
for (int x = 0; x < 16; x++) {
for (int z = 0; z < 16; z++) {
level.setBlock(cp.getBlockAt(x, y, z), Blocks.AIR.defaultBlockState(), Block.UPDATE_CLIENTS);
diff --git a/src/main/java/mcjty/lostcities/config/LostCityProfile.java b/src/main/java/mcjty/lostcities/config/LostCityProfile.java
index 914a1a67..e7f8f404 100644
--- a/src/main/java/mcjty/lostcities/config/LostCityProfile.java
+++ b/src/main/java/mcjty/lostcities/config/LostCityProfile.java
@@ -529,7 +529,7 @@ public boolean isSpheres() {
public BlockState getLiquidBlock() {
if (liquidBlock == null) {
- Block b = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(LIQUID_BLOCK));
+ Block b = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(LIQUID_BLOCK)).get().value();
if (b == null) {
ModSetup.getLogger().error("Bad liquid block: {}!", LIQUID_BLOCK);
liquidBlock = Blocks.WATER.defaultBlockState();
@@ -542,7 +542,7 @@ public BlockState getLiquidBlock() {
public BlockState getBaseBlock() {
if (baseBlock == null) {
- Block b = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(BASE_BLOCK));
+ Block b = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(BASE_BLOCK)).get().value();
if (b == null) {
ModSetup.getLogger().error("Bad base block: {}!", BASE_BLOCK);
baseBlock = Blocks.STONE.defaultBlockState();
diff --git a/src/main/java/mcjty/lostcities/config/ProfileSetup.java b/src/main/java/mcjty/lostcities/config/ProfileSetup.java
index e40417f5..19511c76 100644
--- a/src/main/java/mcjty/lostcities/config/ProfileSetup.java
+++ b/src/main/java/mcjty/lostcities/config/ProfileSetup.java
@@ -377,6 +377,15 @@ private static void initStandardProfiles() {
profile.BUILDING_MAXFLOORS_CHANCE = 7;
profile.BUILDING_CHANCE = .4f;
STANDARD_PROFILES.put(profile.getName(), profile);
+
+ profile = new LostCityProfile("safeandrare", true);
+ profile.setDescription("Safe mode: no spawners, lighting and rare");
+ profile.setIconFile("textures/gui/icon_safe.png");
+ profile.CITY_CHANCE = 0.005;
+ profile.GENERATE_SPAWNERS = false;
+ profile.GENERATE_LIGHTING = true;
+ STANDARD_PROFILES.put(profile.getName(), profile);
+
}
public static void setupProfiles() {
@@ -422,6 +431,7 @@ private static void readProfiles(Path profileDir) {
String[] split = name.split("\\.");
LostCityProfile profile = new LostCityProfile(split[0], json);
STANDARD_PROFILES.put(split[0], profile);
+ LostCities.getLogger().info("Profile "+split[0]+" from "+name);
} catch (IOException e) {
LostCities.getLogger().error("Couldn't read profile '{}'!", name);
return;
diff --git a/src/main/java/mcjty/lostcities/gui/NullDimensionInfo.java b/src/main/java/mcjty/lostcities/gui/NullDimensionInfo.java
index 52e6b2c6..41104923 100644
--- a/src/main/java/mcjty/lostcities/gui/NullDimensionInfo.java
+++ b/src/main/java/mcjty/lostcities/gui/NullDimensionInfo.java
@@ -234,7 +234,7 @@ public Holder getBiome(BlockPos pos) {
case 'd' -> Biomes.DESERT;
default -> Biomes.PLAINS;
};
- return biomeRegistry.getHolderOrThrow(biome);
+ return biomeRegistry.getOrThrow(biome);
}
@Override
diff --git a/src/main/java/mcjty/lostcities/setup/ClientEventHandlers.java b/src/main/java/mcjty/lostcities/setup/ClientEventHandlers.java
index 0f2ff158..e571ab2f 100644
--- a/src/main/java/mcjty/lostcities/setup/ClientEventHandlers.java
+++ b/src/main/java/mcjty/lostcities/setup/ClientEventHandlers.java
@@ -9,6 +9,7 @@
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.screens.worldselection.CreateWorldScreen;
+import net.minecraft.client.renderer.RenderType;
import net.minecraft.resources.ResourceLocation;
import net.neoforged.neoforge.client.event.ScreenEvent;
import net.neoforged.neoforge.event.entity.player.PlayerEvent;
@@ -53,7 +54,7 @@ public void onGuiDraw(ScreenEvent.Render.Post event) {
if (event.getScreen() instanceof CreateWorldScreen screen && lostCitiesButton != null) {
lostCitiesButton.visible = screen.tabManager.getCurrentTab() instanceof CreateWorldScreen.MoreTab;
if (lostCitiesButton.visible) {
- event.getGuiGraphics().blit(txt, screen.width - 100, 60, 70, 70, 256, 256, 256, 256, 256, 256);
+ event.getGuiGraphics().blit(RenderType::guiTextured, txt, screen.width - 100, 60, 70, 70, 256, 256, 256, 256, 256, 256);
}
}
}
diff --git a/src/main/java/mcjty/lostcities/setup/Config.java b/src/main/java/mcjty/lostcities/setup/Config.java
index 39515e6d..08b2b030 100644
--- a/src/main/java/mcjty/lostcities/setup/Config.java
+++ b/src/main/java/mcjty/lostcities/setup/Config.java
@@ -72,13 +72,16 @@ public static void registerLostCityDimension(ServerLevel level, ResourceKey type) {
if (dimensionProfileCache == null) {
dimensionProfileCache = new HashMap<>();
+ LostCities.getLogger().info("Creating profile cache...");
for (String dp : DIMENSION_PROFILES.get()) {
+ LostCities.getLogger().info("Creating profile cache: "+dp);
String[] split = dp.split("=");
if (split.length != 2) {
LostCities.getLogger().error("Bad format for config value: '{}'!", dp);
} else {
ResourceKey dimensionType = ResourceKey.create(Registries.DIMENSION, ResourceLocation.parse(split[0]));
String profileName = split[1];
+ LostCities.getLogger().info("Looking up : "+profileName);
LostCityProfile profile = ProfileSetup.STANDARD_PROFILES.get(profileName);
if (profile != null) {
dimensionProfileCache.put(dimensionType, profileName);
@@ -88,6 +91,8 @@ public static String getProfileForDimension(ServerLevel level, ResourceKey> getBlocksForTag(TagKey rl) {
public static boolean hasTag(Block block, TagKey tag) {
//noinspection deprecation
- return BuiltInRegistries.BLOCK.getHolderOrThrow(block.builtInRegistryHolder().key()).is(tag);
+ return BuiltInRegistries.BLOCK.getOrThrow(block.builtInRegistryHolder().key()).is(tag);
}
public static int getSeaLevel(LevelReader level) {
diff --git a/src/main/java/mcjty/lostcities/worldgen/ChunkDriver.java b/src/main/java/mcjty/lostcities/worldgen/ChunkDriver.java
index f1c0a2df..214afff9 100644
--- a/src/main/java/mcjty/lostcities/worldgen/ChunkDriver.java
+++ b/src/main/java/mcjty/lostcities/worldgen/ChunkDriver.java
@@ -2,6 +2,7 @@
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
+import net.minecraft.util.RandomSource;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.block.*;
import net.minecraft.world.level.block.state.BlockState;
@@ -196,7 +197,9 @@ private BlockState updateAdjacent(BlockState state, Direction direction, BlockPo
}
BlockState newAdjacent = null;
try {
- newAdjacent = adjacent.updateShape(direction, state, region, pos, pos.relative(direction));
+ // newAdjacent = adjacent.updateShape(direction, state, region, pos, pos.relative(direction));
+
+ newAdjacent = adjacent.updateShape(region, region, pos, direction, pos.relative(direction), state, RandomSource.create());
} catch (Exception e) {
// We got an exception. For example for beehives there can potentially be a problem so in this case we just ignore it
return adjacent;
@@ -367,8 +370,8 @@ private static class SectionCache {
private final int[][] heightmap = new int[16][16];
private SectionCache(LevelAccessor level, int cx, int cz) {
- minY = level.getMinBuildHeight();
- maxY = level.getMaxBuildHeight();
+ minY = level.getMinY();
+ maxY = level.getMaxY()+1;
this.cx = cx;
this.cz = cz;
cache = new S[(maxY - minY) / SECTION_HEIGHT];
diff --git a/src/main/java/mcjty/lostcities/worldgen/DefaultDimensionInfo.java b/src/main/java/mcjty/lostcities/worldgen/DefaultDimensionInfo.java
index 6bfb51d8..33dc5e29 100644
--- a/src/main/java/mcjty/lostcities/worldgen/DefaultDimensionInfo.java
+++ b/src/main/java/mcjty/lostcities/worldgen/DefaultDimensionInfo.java
@@ -46,7 +46,7 @@ public DefaultDimensionInfo(WorldGenLevel world, LostCityProfile profile, LostCi
RandomSource randomSource = new LegacyRandomSource(world.getSeed());
feature = new LostCityTerrainFeature(this, profile, randomSource);
feature.setupStates(profile);
- biomeRegistry = world.registryAccess().registryOrThrow(Registries.BIOME);
+ biomeRegistry = world.registryAccess().lookupOrThrow(Registries.BIOME);
}
@Override
@@ -123,7 +123,7 @@ public Holder getBiome(BlockPos pos) {
Climate.Sampler sampler = ((ServerChunkCache) chunkProvider).randomState().sampler();
return biomeProvider.getNoiseBiome(pos.getX() >> 2, pos.getY() >> 2, pos.getZ() >> 2, sampler);
}
- return biomeRegistry.getHolderOrThrow(Biomes.PLAINS);
+ return biomeRegistry.getOrThrow(Biomes.PLAINS);
}
@Nullable
diff --git a/src/main/java/mcjty/lostcities/worldgen/LostCityFeature.java b/src/main/java/mcjty/lostcities/worldgen/LostCityFeature.java
index 62afa01d..0e19d820 100644
--- a/src/main/java/mcjty/lostcities/worldgen/LostCityFeature.java
+++ b/src/main/java/mcjty/lostcities/worldgen/LostCityFeature.java
@@ -80,6 +80,7 @@ public IDimensionInfo getDimensionInfo(WorldGenLevel world) {
}
ResourceKey type = world.getLevel().dimension();
String profileName = Config.getProfileForDimension(world.getLevel(), type);
+ // LostCities.getLogger().info("Profile name for "+world.getLevel()+" / "+type+" is "+profileName);
if (profileName != null) {
if (!dimensionInfo.containsKey(type)) {
LostCityProfile profile = ProfileSetup.STANDARD_PROFILES.get(profileName);
diff --git a/src/main/java/mcjty/lostcities/worldgen/LostCityTerrainFeature.java b/src/main/java/mcjty/lostcities/worldgen/LostCityTerrainFeature.java
index 215e106e..c908a509 100644
--- a/src/main/java/mcjty/lostcities/worldgen/LostCityTerrainFeature.java
+++ b/src/main/java/mcjty/lostcities/worldgen/LostCityTerrainFeature.java
@@ -1,5 +1,19 @@
package mcjty.lostcities.worldgen;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Random;
+import java.util.Set;
+import java.util.function.BiFunction;
+import java.util.function.Predicate;
+import java.util.function.Supplier;
+
+import javax.annotation.Nonnull;
+
import mcjty.lostcities.LostCities;
import mcjty.lostcities.api.ILostCities;
import mcjty.lostcities.api.LostCityEvent;
@@ -12,9 +26,28 @@
import mcjty.lostcities.varia.NoiseGeneratorPerlin;
import mcjty.lostcities.varia.Statistics;
import mcjty.lostcities.varia.Tools;
-import mcjty.lostcities.worldgen.gen.*;
-import mcjty.lostcities.worldgen.lost.*;
-import mcjty.lostcities.worldgen.lost.cityassets.*;
+import mcjty.lostcities.worldgen.gen.Bridges;
+import mcjty.lostcities.worldgen.gen.Corridors;
+import mcjty.lostcities.worldgen.gen.Doors;
+import mcjty.lostcities.worldgen.gen.Highways;
+import mcjty.lostcities.worldgen.gen.Railways;
+import mcjty.lostcities.worldgen.gen.Scattered;
+import mcjty.lostcities.worldgen.gen.Stuff;
+import mcjty.lostcities.worldgen.lost.BiomeInfo;
+import mcjty.lostcities.worldgen.lost.BuildingInfo;
+import mcjty.lostcities.worldgen.lost.CitySphere;
+import mcjty.lostcities.worldgen.lost.DamageArea;
+import mcjty.lostcities.worldgen.lost.Direction;
+import mcjty.lostcities.worldgen.lost.Railway;
+import mcjty.lostcities.worldgen.lost.Transform;
+import mcjty.lostcities.worldgen.lost.cityassets.AssetRegistries;
+import mcjty.lostcities.worldgen.lost.cityassets.BuildingPart;
+import mcjty.lostcities.worldgen.lost.cityassets.CityStyle;
+import mcjty.lostcities.worldgen.lost.cityassets.CompiledPalette;
+import mcjty.lostcities.worldgen.lost.cityassets.Condition;
+import mcjty.lostcities.worldgen.lost.cityassets.ConditionContext;
+import mcjty.lostcities.worldgen.lost.cityassets.IBuildingPart;
+import mcjty.lostcities.worldgen.lost.cityassets.Palette;
import mcjty.lostcities.worldgen.lost.regassets.data.CitySphereSettings;
import mcjty.lostcities.worldgen.lost.regassets.data.ScatteredSettings;
import mcjty.lostcities.worldgen.lost.regassets.data.StreetParts;
@@ -37,7 +70,14 @@
import net.minecraft.world.level.SpawnData;
import net.minecraft.world.level.WorldGenLevel;
import net.minecraft.world.level.biome.Biome;
-import net.minecraft.world.level.block.*;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.block.Blocks;
+import net.minecraft.world.level.block.FlowerBlock;
+import net.minecraft.world.level.block.LeavesBlock;
+import net.minecraft.world.level.block.PoweredRailBlock;
+import net.minecraft.world.level.block.RailBlock;
+import net.minecraft.world.level.block.SaplingBlock;
+import net.minecraft.world.level.block.WallTorchBlock;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity;
@@ -52,12 +92,6 @@
import net.minecraft.world.level.levelgen.structure.Structure;
import net.neoforged.neoforge.common.NeoForge;
-import javax.annotation.Nonnull;
-import java.util.*;
-import java.util.function.BiFunction;
-import java.util.function.Predicate;
-import java.util.function.Supplier;
-
public class LostCityTerrainFeature {
public static final int FLOORHEIGHT = 6;
@@ -250,7 +284,7 @@ public static int fastrand128() {
private boolean isVoid(int x, int z) {
driver.current(x, 255, z);
- int minHeight = provider.getWorld().getMinBuildHeight();
+ int minHeight = provider.getWorld().getMinY();
while (driver.getBlock() == air && driver.getY() > minHeight) {
driver.decY();
}
@@ -408,13 +442,13 @@ private static AvoidChunk hasBlacklistedStructure(WorldGenLevel level, int chunk
private static boolean testBlacklistedStructure(WorldGenLevel level, ChunkAccess ch, boolean center) {
if (ch.hasAnyStructureReferences()) {
- var structures = level.registryAccess().registryOrThrow(Registries.STRUCTURE);
+ var structures = level.registryAccess().lookupOrThrow(Registries.STRUCTURE);
var references = ch.getAllReferences();
for (var entry : references.entrySet()) {
if (!entry.getValue().isEmpty()) {
Optional> key = structures.getResourceKey(entry.getKey());
if (center || Config.AVOID_VILLAGES_ADJACENT.get()) {
- if (key.map(k -> structures.getHolderOrThrow(k).is(StructureTags.VILLAGE)).orElse(false)) {
+ if (key.map(k -> structures.getOrThrow(k).is(StructureTags.VILLAGE)).orElse(false)) {
return true;
}
}
@@ -636,7 +670,7 @@ private void correctTerrainShape(WorldGenLevel level, ChunkCoord coord, ChunkHei
BuildingInfo.MinMax mm01 = info.getZmax().getDesiredMaxHeightL2();
BuildingInfo.MinMax mm11 = info.getXmax().getZmax().getDesiredMaxHeightL2();
- int max = level.getMaxBuildHeight();
+ int max = level.getMaxY()+1;
int heightmapH = Short.MIN_VALUE;
float min00 = mm00.min;
@@ -730,7 +764,7 @@ private int moveUp(int x, int z, int height, boolean dowater) {
int maxYTouched = Short.MIN_VALUE; // Max Y that we touched
// Find the first non-empty block starting at the given height
driver.current(x, height, z);
- int minHeight = provider.getWorld().getMinBuildHeight();
+ int minHeight = provider.getWorld().getMinY();
// We assume here we are not in a void chunk
while (isFoliageOrEmpty(driver.getBlock()) && driver.getY() > minHeight) {
driver.decY();
@@ -874,7 +908,7 @@ private void doCityChunk(BuildingInfo info, ChunkHeightmap heightmap) {
boolean building = info.hasBuilding;
if (info.profile.isDefault() || info.profile.isSpheres()) {
- int minHeight = info.provider.getWorld().getMinBuildHeight();
+ int minHeight = info.provider.getWorld().getMinY();
BlockState bedrock = Blocks.BEDROCK.defaultBlockState();
for (int x = 0; x < 16; ++x) {
for (int z = 0; z < 16; ++z) {
@@ -898,7 +932,7 @@ private void doCityChunk(BuildingInfo info, ChunkHeightmap heightmap) {
int ground = info.getCityGroundLevel();
for (int x = 0; x < 16; x++) {
for (int z = 0; z < 16; z++) {
- int maxTouchedY = moveDown(x, z, ground + 1, provider.getWorld().getMaxBuildHeight());
+ int maxTouchedY = moveDown(x, z, ground + 1, provider.getWorld().getMaxY()+1);
if (maxTouchedY == Short.MIN_VALUE) {
moveUp(x, z, ground, info.waterLevel > info.groundLevel);
}
@@ -1121,7 +1155,7 @@ private void generateRuins(BuildingInfo info) {
Predicate checkIronbars = infobarsChar == null ? s -> s == ironbarsState : infoBarSet::contains;
Character rubbleBlock = info.getBuilding().getRubbleBlock();
- int maxBuildHeight = info.provider.getWorld().getMaxBuildHeight();
+ int maxBuildHeight = info.provider.getWorld().getMaxY()+1;
for (int x = 0; x < 16; ++x) {
for (int z = 0; z < 16; ++z) {
double v = ruinBuffer[x + z * 16];
@@ -1273,7 +1307,7 @@ private void generateBorders(BuildingInfo info, boolean canDoParks, ChunkHeightm
*/
private void fillToBedrockStreetBlock(BuildingInfo info) {
// Base blocks below streets
- int minHeight = info.provider.getWorld().getMinBuildHeight();
+ int minHeight = info.provider.getWorld().getMinY();
for (int x = 0; x < 16; ++x) {
for (int z = 0; z < 16; ++z) {
int y = info.getCityGroundLevel() - 1;
@@ -1792,7 +1826,7 @@ private BlockState handleSpawner(BuildingInfo info, IBuildingPart part, int oy,
tag.putInt("x", pos.getX());
tag.putInt("y", pos.getY());
tag.putInt("z", pos.getZ());
- tag.putString("id", "minecraft:mob_spawner");
+ tag.putString("id", "minecraft:spawner"); // changed name from minecraft:mob_spawner
ResourceLocation randomValue = getRandomSpawnerMob(world.getLevel(), rand, provider, info,
new BuildingInfo.ConditionTodo(mobid, part.getName(), info), pos);
CompoundTag sd = new CompoundTag();
@@ -1882,7 +1916,7 @@ public boolean isSphere() {
@Override
public ResourceLocation getBiome() {
- return world.getBiome(pos).unwrap().map(ResourceKey::location, biome -> world.registryAccess().registryOrThrow(Registries.BIOME).getKey(biome));
+ return world.getBiome(pos).unwrap().map(ResourceKey::location, biome -> world.registryAccess().lookupOrThrow(Registries.BIOME).getKey(biome));
}
};
String randomValue = cnd.getRandomValue(random, conditionContext);
@@ -1923,7 +1957,7 @@ public boolean isSphere() {
@Override
public ResourceLocation getBiome() {
- return world.getBiome(pos).unwrap().map(ResourceKey::location, biome -> world.registryAccess().registryOrThrow(Registries.BIOME).getKey(biome));
+ return world.getBiome(pos).unwrap().map(ResourceKey::location, biome -> world.registryAccess().lookupOrThrow(Registries.BIOME).getKey(biome));
}
};
String randomValue = AssetRegistries.CONDITIONS.getOrThrow(world, lootTable).getRandomValue(random, conditionContext);
@@ -1965,9 +1999,9 @@ private void generateDebrisFromChunk(BuildingInfo info, BuildingInfo adjacentInf
// How many go this direction (approx, based on cardinal directions from building as well as number that simply fall down)
destroyedBlocks /= info.profile.DEBRIS_TO_NEARBYCHUNK_FACTOR;
int h = adjacentInfo.getMaxHeight() + 10;
- int maxBuildHeight = info.provider.getWorld().getMaxBuildHeight();
+ int maxBuildHeight = info.provider.getWorld().getMaxY()+1;
if (h > maxBuildHeight - 1) {
- int minBuildHeight = info.provider.getWorld().getMinBuildHeight();
+ int minBuildHeight = info.provider.getWorld().getMinY();
h = minBuildHeight - 1;
}
@@ -2046,8 +2080,8 @@ private void setBlocksFromPalette(int x, int y, int z, int y2, CompiledPalette p
}
private void generateBuilding(BuildingInfo info, ChunkHeightmap heightmap) {
- int min = info.provider.getWorld().getMinBuildHeight() + 2;
- int max = info.provider.getWorld().getMaxBuildHeight() - 2 - FLOORHEIGHT;
+ int min = info.provider.getWorld().getMinY() + 2;
+ int max = info.provider.getWorld().getMaxY()+1 - 2 - FLOORHEIGHT;
int cellars = info.cellars;
int floors = info.getNumFloors();
@@ -2130,8 +2164,8 @@ private void makeRoomForBuilding(BuildingInfo info, int lowestLevel, ChunkHeight
// We also remove all blocks from the inside because we generate buildings on top of
// generated chunks as opposed to blank chunks with non-floating worlds
this.bottomLayerBuffer = this.bottomLayerNoise.getRegion(this.bottomLayerBuffer, (info.coord.chunkX() << 4), (info.coord.chunkZ() << 4), 16, 16, 8.0 / 16.0, 8.0 / 16.0, 1.0D);
- int minBuildHeight = info.provider.getWorld().getMinBuildHeight();
- int maxBuildHeight = info.provider.getWorld().getMaxBuildHeight();
+ int minBuildHeight = info.provider.getWorld().getMinY();
+ int maxBuildHeight = info.provider.getWorld().getMaxY()+1;
for (int x = 0; x < 16; ++x) {
for (int z = 0; z < 16; ++z) {
double vr = bottomLayerBuffer[x + z * 16] / 4.0f;
diff --git a/src/main/java/mcjty/lostcities/worldgen/gen/Scattered.java b/src/main/java/mcjty/lostcities/worldgen/gen/Scattered.java
index 0cba51f1..c05c81b8 100644
--- a/src/main/java/mcjty/lostcities/worldgen/gen/Scattered.java
+++ b/src/main/java/mcjty/lostcities/worldgen/gen/Scattered.java
@@ -106,7 +106,7 @@ public static void generateScattered(LostCityTerrainFeature feature, BuildingInf
if (!reference.isAllowVoid()) {
if (!(feature.profile.isDefault() || feature.profile.isCavern())) {
// We are in a world that can have void chunks. Check if this chunk is a void chunk
- if (hm.getHeight() <= feature.provider.getWorld().getMinBuildHeight() + 3) {
+ if (hm.getHeight() <= feature.provider.getWorld().getMinY() + 3) {
return;
}
}
@@ -225,7 +225,7 @@ public boolean isSphere() {
@Override
public ResourceLocation getBiome() {
Holder biome = provider.getWorld().getBiome(info.getCenter(0));
- return biome.unwrap().map(ResourceKey::location, b -> provider.getWorld().registryAccess().registryOrThrow(Registries.BIOME).getKey(b));
+ return biome.unwrap().map(ResourceKey::location, b -> provider.getWorld().registryAccess().lookupOrThrow(Registries.BIOME).getKey(b));
}
};
ChunkDriver driver = feature.driver;
diff --git a/src/main/java/mcjty/lostcities/worldgen/gen/Spheres.java b/src/main/java/mcjty/lostcities/worldgen/gen/Spheres.java
index f0d197de..1b834906 100644
--- a/src/main/java/mcjty/lostcities/worldgen/gen/Spheres.java
+++ b/src/main/java/mcjty/lostcities/worldgen/gen/Spheres.java
@@ -67,8 +67,8 @@ private static void fillSphere(LostCityTerrainFeature feature, int centerx, int
double sqradiusOffset = (radius - 2) * (radius - 2);
double sqradiusOuter = (radius + 2) * (radius + 2);
- int minY = Math.max(provider.getWorld().getMinBuildHeight(), centery - radius - 1);
- int maxY = Math.min(provider.getWorld().getMaxBuildHeight(), centery + radius + 1);
+ int minY = Math.max(provider.getWorld().getMinY(), centery - radius - 1);
+ int maxY = Math.min(provider.getWorld().getMaxY()+1, centery + radius + 1);
int seaLevel = Tools.getSeaLevel(provider.getWorld());
ChunkGenerator generator;
if (provider.getWorld() instanceof WorldGenRegion region) {
@@ -113,7 +113,7 @@ private static void fillSphere(LostCityTerrainFeature feature, int centerx, int
// Optionally clear above the sphere
int yy = y;
if (profile.CITYSPHERE_CLEARABOVE > 0) {
- int mY = Math.min(provider.getWorld().getMaxBuildHeight(), y + profile.CITYSPHERE_CLEARABOVE);
+ int mY = Math.min(provider.getWorld().getMaxY()+1, y + profile.CITYSPHERE_CLEARABOVE);
while (yy <= mY) {
driver.block(yy <= outerSeaLevel ? feature.liquid : air);
driver.incY();
@@ -132,7 +132,7 @@ private static void fillSphere(LostCityTerrainFeature feature, int centerx, int
yy = bottom;
if (profile.CITYSPHERE_CLEARBELOW > 0 && bottom != Integer.MAX_VALUE) {
driver.current(x, yy, z);
- int mY = Math.max(provider.getWorld().getMinBuildHeight(), bottom - profile.CITYSPHERE_CLEARBELOW);
+ int mY = Math.max(provider.getWorld().getMinY(), bottom - profile.CITYSPHERE_CLEARBELOW);
while (yy >= mY) {
driver.block(yy <= outerSeaLevel ? feature.liquid : air);
driver.decY();
@@ -142,7 +142,7 @@ private static void fillSphere(LostCityTerrainFeature feature, int centerx, int
if (profile.CITYSPHERE_CLEARBELOW_UNTIL_AIR && bottom != Integer.MAX_VALUE) {
// Clear until we hit air or go below build limit
driver.current(x, yy, z);
- while (driver.getBlock() != (yy <= seaLevel ? feature.liquid : air) && yy > provider.getWorld().getMinBuildHeight()) {
+ while (driver.getBlock() != (yy <= seaLevel ? feature.liquid : air) && yy > provider.getWorld().getMinY()) {
driver.block(yy <= outerSeaLevel ? feature.liquid : air);
driver.decY();
yy--;
diff --git a/src/main/java/mcjty/lostcities/worldgen/lost/BuildingInfo.java b/src/main/java/mcjty/lostcities/worldgen/lost/BuildingInfo.java
index 9df6ff1f..8cd9d074 100644
--- a/src/main/java/mcjty/lostcities/worldgen/lost/BuildingInfo.java
+++ b/src/main/java/mcjty/lostcities/worldgen/lost/BuildingInfo.java
@@ -645,7 +645,7 @@ public boolean isSphere() {
@Override
public ResourceLocation getBiome() {
Holder biome = provider.getWorld().getBiome(getCenter(0));
- return biome.unwrap().map(ResourceKey::location, b -> provider.getWorld().registryAccess().registry(Registries.BIOME).orElseThrow().getKey(b));
+ return biome.unwrap().map(ResourceKey::location, b -> provider.getWorld().registryAccess().lookup(Registries.BIOME).orElseThrow().getKey(b));
}
};
String randomPart = building.getRandomPart(rand, conditionContext);
@@ -779,7 +779,7 @@ private BuildingInfo(ChunkCoord key, IDimensionInfo provider) {
}
}
- int max = provider.getWorld().getMaxBuildHeight() - 2 - FLOORHEIGHT;
+ int max = provider.getWorld().getMaxY()+1 - 2 - FLOORHEIGHT;
while (getCityGroundLevel() + f * FLOORHEIGHT >= max) {
f--;
}
@@ -859,7 +859,7 @@ public boolean isSphere() {
@Override
public ResourceLocation getBiome() {
Holder biome = provider.getWorld().getBiome(getCenter(0));
- return biome.unwrap().map(ResourceKey::location, b -> provider.getWorld().registryAccess().registry(Registries.BIOME).orElseThrow().getKey(b));
+ return biome.unwrap().map(ResourceKey::location, b -> provider.getWorld().registryAccess().lookup(Registries.BIOME).orElseThrow().getKey(b));
}
};
String randomPart = building.getRandomPart(rand, conditionContext);
diff --git a/src/main/java/mcjty/lostcities/worldgen/lost/cityassets/RegistryAssetRegistry.java b/src/main/java/mcjty/lostcities/worldgen/lost/cityassets/RegistryAssetRegistry.java
index 07954062..ea08090d 100644
--- a/src/main/java/mcjty/lostcities/worldgen/lost/cityassets/RegistryAssetRegistry.java
+++ b/src/main/java/mcjty/lostcities/worldgen/lost/cityassets/RegistryAssetRegistry.java
@@ -57,8 +57,8 @@ public T get(CommonLevelAccessor level, ResourceLocation name) {
T t = assets.get(name);
if (t == null) {
try {
- Registry registry = level.registryAccess().registryOrThrow(registryKey);
- R value = registry.get(ResourceKey.create(registryKey, name));
+ Registry registry = level.registryAccess().lookupOrThrow(registryKey);
+ R value = registry.get(ResourceKey.create(registryKey, name)).get().value();
if (value instanceof IAsset asset) {
asset.setRegistryName(name);
}
@@ -75,7 +75,7 @@ public T get(CommonLevelAccessor level, ResourceLocation name) {
}
public void loadAll(CommonLevelAccessor level) {
- Registry registry = level.registryAccess().registryOrThrow(registryKey);
+ Registry registry = level.registryAccess().lookupOrThrow(registryKey);
for (R r : registry) {
ResourceLocation name = registry.getKey(r);
if (!assets.containsKey(name)) {
@@ -94,7 +94,7 @@ public Iterable getIterable() {
}
public int getNumAssets(CommonLevelAccessor level) {
- return level.registryAccess().registryOrThrow(registryKey).size();
+ return level.registryAccess().lookupOrThrow(registryKey).size();
}
public void reset() {
diff --git a/src/main/java/mcjty/lostcities/worldgen/lost/regassets/data/BlockMatcher.java b/src/main/java/mcjty/lostcities/worldgen/lost/regassets/data/BlockMatcher.java
index 76a86032..38aab97f 100644
--- a/src/main/java/mcjty/lostcities/worldgen/lost/regassets/data/BlockMatcher.java
+++ b/src/main/java/mcjty/lostcities/worldgen/lost/regassets/data/BlockMatcher.java
@@ -32,7 +32,7 @@ private Predicate getStatePredicate(String matcher) {
TagKey tagKey = TagKey.create(Registries.BLOCK, ResourceLocation.parse(matcher.substring(1)));
return state -> state.is(tagKey);
} else {
- Block b = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(matcher));
+ Block b = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(matcher)).get().value();
return state -> state.getBlock() == b;
}
}
@@ -46,7 +46,7 @@ private Predicate getNotStatePredicate(String matcher) {
TagKey tagKey = TagKey.create(Registries.BLOCK, ResourceLocation.parse(matcher.substring(1)));
return state -> !state.is(tagKey);
} else {
- Block b = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(matcher));
+ Block b = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(matcher)).get().value();
return state -> state.getBlock() != b;
}
}