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; } }