├── .github └── ISSUE_TEMPLATE │ ├── bug_report.yml │ ├── config.yml │ └── translation.yml ├── .gitignore ├── build.gradle ├── changelog.md ├── datapacks ├── default │ ├── data │ │ └── mining_dimension │ │ │ ├── dimension │ │ │ └── mining.json │ │ │ ├── dimension_type │ │ │ └── mining.json │ │ │ └── worldgen │ │ │ ├── biome │ │ │ └── mining.json │ │ │ ├── configured_surface_builder │ │ │ └── mining.json │ │ │ └── noise_settings │ │ │ └── mining.json │ └── pack.mcmeta ├── more_caves │ ├── data │ │ └── mining_dimension │ │ │ └── worldgen │ │ │ ├── biome │ │ │ └── mining.json │ │ │ └── configured_carver │ │ │ └── cave.json │ └── pack.mcmeta ├── more_caves_no_lava │ ├── data │ │ └── mining_dimension │ │ │ └── worldgen │ │ │ ├── biome │ │ │ └── mining.json │ │ │ └── configured_carver │ │ │ ├── canyon_no_lava.json │ │ │ └── cave_no_lava.json │ └── pack.mcmeta ├── more_ores │ ├── data │ │ └── mining_dimension │ │ │ └── worldgen │ │ │ ├── biome │ │ │ └── mining.json │ │ │ └── configured_feature │ │ │ ├── ore_coal.json │ │ │ ├── ore_diamond.json │ │ │ ├── ore_emerald.json │ │ │ ├── ore_gold.json │ │ │ ├── ore_iron.json │ │ │ ├── ore_lapis.json │ │ │ └── ore_redstone.json │ └── pack.mcmeta ├── no_canyons │ ├── data │ │ └── mining_dimension │ │ │ └── worldgen │ │ │ └── biome │ │ │ └── mining.json │ └── pack.mcmeta ├── no_lakes │ ├── data │ │ └── mining_dimension │ │ │ └── worldgen │ │ │ └── biome │ │ │ └── mining.json │ └── pack.mcmeta ├── no_lava │ ├── data │ │ └── mining_dimension │ │ │ └── worldgen │ │ │ ├── biome │ │ │ └── mining.json │ │ │ └── configured_carver │ │ │ ├── canyon_no_lava.json │ │ │ └── cave_no_lava.json │ └── pack.mcmeta ├── no_mobs │ ├── data │ │ └── mining_dimension │ │ │ └── worldgen │ │ │ └── biome │ │ │ └── mining.json │ └── pack.mcmeta ├── only_caves │ ├── data │ │ └── mining_dimension │ │ │ └── worldgen │ │ │ ├── biome │ │ │ └── mining.json │ │ │ └── configured_carver │ │ │ └── cave.json │ └── pack.mcmeta └── readme.md ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── readme.md ├── settings.gradle └── src └── main ├── java └── de │ └── maxhenkel │ └── miningdimension │ ├── Main.java │ ├── block │ └── BlockTeleporter.java │ ├── config │ ├── ClientConfig.java │ └── ServerConfig.java │ ├── dimension │ └── MiningDimensionTeleporter.java │ ├── events │ └── CreativeTabEvents.java │ ├── mixin │ ├── MixinConnector.java │ └── WorldOpenFlowsMixin.java │ └── tileentity │ └── TileentityTeleporter.java └── resources ├── META-INF └── neoforge.mods.toml ├── assets └── mining_dimension │ ├── blockstates │ └── teleporter.json │ ├── lang │ ├── de_de.json │ ├── en_us.json │ ├── es_es.json │ ├── fr_fr.json │ ├── ja_jp.json │ ├── pt_br.json │ ├── ru_ru.json │ ├── tr_tr.json │ └── zh_cn.json │ ├── models │ ├── block │ │ └── teleporter.json │ └── item │ │ └── teleporter.json │ └── textures │ └── block │ └── teleporter_side.png ├── data └── mining_dimension │ ├── advancements │ └── recipes │ │ └── decorations │ │ └── teleporter.json │ ├── dimension │ └── mining.json │ ├── dimension_type │ └── mining.json │ ├── loot_tables │ └── blocks │ │ └── teleporter.json │ ├── recipes │ └── teleporter.json │ └── worldgen │ ├── biome │ └── mining.json │ └── noise_settings │ └── mining.json ├── icon.png ├── mining_dimension.mixins.json └── pack.mcmeta /.github/ISSUE_TEMPLATE/bug_report.yml: -------------------------------------------------------------------------------- 1 | name: Bug report 2 | description: File a bug report 3 | labels: [triage] 4 | assignees: henkelmax 5 | body: 6 | - type: markdown 7 | attributes: 8 | value: | 9 | > [!WARNING] 10 | > This form is **only for bug reports**! 11 | > Please don't abuse this for feature requests or questions. 12 | > Forms that are not filled out properly will be closed without response! 13 | - type: textarea 14 | id: description 15 | attributes: 16 | label: Bug description 17 | description: A clear and concise description of what the bug is. 18 | validations: 19 | required: true 20 | - type: input 21 | id: mc_version 22 | attributes: 23 | label: Minecraft version 24 | description: The Minecraft version you are using. 25 | placeholder: 1.20.4 26 | validations: 27 | required: true 28 | - type: input 29 | id: mod_version 30 | attributes: 31 | label: Mod version 32 | description: The version of the mod. 33 | placeholder: 1.20.4-1.2.3 34 | validations: 35 | required: true 36 | - type: input 37 | id: mod_loader_version 38 | attributes: 39 | label: Mod loader and version 40 | description: The mod loader and mod loader version you are using. 41 | placeholder: Fabric Loader 0.15.6 / NeoForge 20.4.1 / Forge 48.1.0 42 | validations: 43 | required: true 44 | - type: textarea 45 | id: steps 46 | attributes: 47 | label: Steps to reproduce 48 | description: | 49 | Steps to reproduce the issue. 50 | Please **don't** report issues that are not reproducible. 51 | placeholder: | 52 | 1. Go to '...' 53 | 2. Click on '...' 54 | 3. Scroll down to '...' 55 | 4. See error 56 | validations: 57 | required: true 58 | - type: textarea 59 | id: expected 60 | attributes: 61 | label: Expected behavior 62 | description: A clear and concise description of what you expected to happen. 63 | validations: 64 | required: false 65 | - type: input 66 | id: logs 67 | attributes: 68 | label: Log files 69 | description: | 70 | Please provide log files of the game session in which the problem occurred. 71 | Don't paste the complete logs into the issue. 72 | You can use [https://gist.github.com/](https://gist.github.com/). 73 | placeholder: https://gist.github.com/exampleuser/example 74 | validations: 75 | required: true 76 | - type: textarea 77 | id: screenshots 78 | attributes: 79 | label: Screenshots 80 | description: Screenshots of the issue. 81 | validations: 82 | required: false 83 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: FAQ 4 | about: Frequently asked questions 5 | url: https://modrepo.de/minecraft/mining_dimension/faq 6 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/translation.yml: -------------------------------------------------------------------------------- 1 | name: Translation 2 | description: Submit a translation for this project 3 | labels: [translation] 4 | assignees: henkelmax 5 | body: 6 | - type: textarea 7 | id: notes 8 | attributes: 9 | label: Additional notes 10 | description: Additional information. 11 | validations: 12 | required: false 13 | - type: input 14 | id: locale_code 15 | attributes: 16 | label: Locale code 17 | description: The Minecraft locale code (See [this](https://minecraft.wiki/w/Language#Languages) for more information). 18 | placeholder: en_us 19 | validations: 20 | required: true 21 | - type: textarea 22 | id: translation 23 | attributes: 24 | label: Translation json 25 | description: The contents of your translation file. 26 | render: json 27 | placeholder: | 28 | { 29 | "translation.key": "Translated value" 30 | } 31 | validations: 32 | required: true 33 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # eclipse 2 | bin 3 | *.launch 4 | .settings 5 | .metadata 6 | .classpath 7 | .project 8 | 9 | # idea 10 | out 11 | *.ipr 12 | *.iws 13 | *.iml 14 | .idea 15 | 16 | # gradle 17 | build 18 | .gradle 19 | 20 | # other 21 | eclipse 22 | run 23 | logs 24 | 25 | # Files from Forge MDK 26 | forge*changelog.txt 27 | 28 | curseforge_api_key.txt 29 | mod_update_api_key.txt 30 | modrinth_token.txt -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'net.neoforged.gradle.userdev' version "${neogradle_version}" 3 | id 'net.neoforged.gradle.mixin' version "${neogradle_mixin_version}" 4 | id 'com.matthewprenger.cursegradle' version "${cursegradle_version}" 5 | id 'com.modrinth.minotaur' version "${minotaur_version}" 6 | id 'com.github.johnrengelman.shadow' version "${shadow_version}" 7 | id 'mod-update' version "${mod_update_version}" 8 | } 9 | 10 | apply from: "https://raw.githubusercontent.com/henkelmax/mod-gradle-scripts/${mod_gradle_script_version}/mod.gradle" 11 | 12 | dependencies { 13 | shadow "de.maxhenkel.corelib:corelib:${minecraft_version}-${corelib_version}:api" 14 | runtimeOnly "de.maxhenkel.corelib:corelib:${minecraft_version}-${corelib_version}" 15 | compileOnly "de.maxhenkel.corelib:corelib:${minecraft_version}-${corelib_version}:javadoc" 16 | } 17 | 18 | processResources { 19 | filesMatching('**/*.toml') { 20 | expand 'mod_version': mod_version, 21 | 'neoforge_dependency': neoforge_dependency, 22 | 'minecraft_version': minecraft_version 23 | } 24 | } 25 | 26 | shadowJar { 27 | relocate 'de.maxhenkel.corelib', 'de.maxhenkel.miningdimension.corelib' 28 | } -------------------------------------------------------------------------------- /changelog.md: -------------------------------------------------------------------------------- 1 | - Updated to 1.20.5 2 | -------------------------------------------------------------------------------- /datapacks/default/data/mining_dimension/dimension/mining.json: -------------------------------------------------------------------------------- 1 | { 2 | "generator": { 3 | "type": "minecraft:noise", 4 | "biome_source": { 5 | "type": "minecraft:fixed", 6 | "biome": "mining_dimension:mining" 7 | }, 8 | "seed": 0, 9 | "settings": "mining_dimension:mining" 10 | }, 11 | "type": "mining_dimension:mining" 12 | } -------------------------------------------------------------------------------- /datapacks/default/data/mining_dimension/dimension_type/mining.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mining_dimension:mining", 3 | "ultrawarm": false, 4 | "natural": false, 5 | "coordinate_scale": 1, 6 | "has_skylight": false, 7 | "has_ceiling": true, 8 | "ambient_light": 0.0, 9 | "fixed_time": 18000, 10 | "piglin_safe": false, 11 | "bed_works": false, 12 | "respawn_anchor_works": false, 13 | "has_raids": false, 14 | "logical_height": 256, 15 | "infiniburn": "minecraft:infiniburn_overworld", 16 | "effects": "minecraft:the_nether" 17 | } -------------------------------------------------------------------------------- /datapacks/default/data/mining_dimension/worldgen/biome/mining.json: -------------------------------------------------------------------------------- 1 | { 2 | "scale": 1, 3 | "effects": { 4 | "mood_sound": { 5 | "sound": "minecraft:ambient.cave", 6 | "tick_delay": 6000, 7 | "block_search_extent": 8, 8 | "offset": 2.0 9 | }, 10 | "sky_color": 0, 11 | "fog_color": 0, 12 | "water_color": 4159204, 13 | "water_fog_color": 329011 14 | }, 15 | "surface_builder": "mining_dimension:mining", 16 | "carvers": { 17 | "air": [ 18 | "minecraft:cave", 19 | "minecraft:canyon" 20 | ] 21 | }, 22 | "features": [ 23 | [ 24 | "minecraft:lake_water", 25 | "minecraft:lake_lava", 26 | "minecraft:monster_room", 27 | "minecraft:ore_dirt", 28 | "minecraft:ore_gravel", 29 | "minecraft:ore_granite", 30 | "minecraft:ore_diorite", 31 | "minecraft:ore_andesite", 32 | "minecraft:ore_coal", 33 | "minecraft:ore_iron", 34 | "minecraft:ore_gold", 35 | "minecraft:ore_redstone", 36 | "minecraft:ore_diamond", 37 | "minecraft:ore_lapis", 38 | "minecraft:disk_sand", 39 | "minecraft:disk_clay", 40 | "minecraft:disk_gravel" 41 | ] 42 | ], 43 | "starts": [ 44 | "minecraft:mineshaft", 45 | "minecraft:ruined_portal" 46 | ], 47 | "spawners": { 48 | "monster": [ 49 | { 50 | "type": "minecraft:spider", 51 | "weight": 100, 52 | "minCount": 4, 53 | "maxCount": 4 54 | }, 55 | { 56 | "type": "minecraft:zombie", 57 | "weight": 95, 58 | "minCount": 4, 59 | "maxCount": 4 60 | }, 61 | { 62 | "type": "minecraft:zombie_villager", 63 | "weight": 5, 64 | "minCount": 1, 65 | "maxCount": 1 66 | }, 67 | { 68 | "type": "minecraft:skeleton", 69 | "weight": 100, 70 | "minCount": 4, 71 | "maxCount": 4 72 | }, 73 | { 74 | "type": "minecraft:creeper", 75 | "weight": 100, 76 | "minCount": 4, 77 | "maxCount": 4 78 | }, 79 | { 80 | "type": "minecraft:slime", 81 | "weight": 100, 82 | "minCount": 4, 83 | "maxCount": 4 84 | }, 85 | { 86 | "type": "minecraft:enderman", 87 | "weight": 10, 88 | "minCount": 1, 89 | "maxCount": 4 90 | }, 91 | { 92 | "type": "minecraft:witch", 93 | "weight": 5, 94 | "minCount": 1, 95 | "maxCount": 1 96 | } 97 | ], 98 | "creature": [], 99 | "ambient": [ 100 | { 101 | "type": "minecraft:bat", 102 | "weight": 10, 103 | "minCount": 8, 104 | "maxCount": 8 105 | } 106 | ], 107 | "water_creature": [], 108 | "water_ambient": [], 109 | "misc": [] 110 | }, 111 | "spawn_costs": {}, 112 | "player_spawn_friendly": false, 113 | "precipitation": "none", 114 | "temperature": 0.6, 115 | "downfall": 0.0, 116 | "category": "none", 117 | "depth": 0.1 118 | } -------------------------------------------------------------------------------- /datapacks/default/data/mining_dimension/worldgen/configured_surface_builder/mining.json: -------------------------------------------------------------------------------- 1 | { 2 | "config": { 3 | "top_material": { 4 | "Name": "minecraft:stone" 5 | }, 6 | "under_material": { 7 | "Name": "minecraft:stone" 8 | }, 9 | "underwater_material": { 10 | "Name": "minecraft:stone" 11 | } 12 | }, 13 | "type": "minecraft:nether" 14 | } -------------------------------------------------------------------------------- /datapacks/default/data/mining_dimension/worldgen/noise_settings/mining.json: -------------------------------------------------------------------------------- 1 | { 2 | "bedrock_roof_position": 0, 3 | "bedrock_floor_position": 0, 4 | "sea_level": 0, 5 | "disable_mob_generation": false, 6 | "structures": { 7 | "structures": { 8 | "minecraft:nether_fossil": { 9 | "spacing": 2, 10 | "separation": 1, 11 | "salt": 14357921 12 | } 13 | } 14 | }, 15 | "noise": { 16 | "density_factor": 1.0, 17 | "density_offset": 2.0, 18 | "simplex_surface_noise": true, 19 | "bottom_slide": { 20 | "target": 0, 21 | "size": 0, 22 | "offset": 0 23 | }, 24 | "size_horizontal": 1, 25 | "size_vertical": 2, 26 | "height": 256, 27 | "sampling": { 28 | "xz_scale": 1.0, 29 | "y_scale": 1.0, 30 | "xz_factor": 1.0, 31 | "y_factor": 1.0 32 | }, 33 | "top_slide": { 34 | "target": 0, 35 | "size": 0, 36 | "offset": 0 37 | } 38 | }, 39 | "default_block": { 40 | "Name": "minecraft:stone" 41 | }, 42 | "default_fluid": { 43 | "Properties": { 44 | "level": "0" 45 | }, 46 | "Name": "minecraft:lava" 47 | } 48 | } -------------------------------------------------------------------------------- /datapacks/default/pack.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "pack": { 3 | "pack_format": 6, 4 | "description": [{"text":"Default","color":"green"},{"text":"\nAdvanced Mining Dimension","color":"yellow"}] 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /datapacks/more_caves/data/mining_dimension/worldgen/biome/mining.json: -------------------------------------------------------------------------------- 1 | { 2 | "scale": 1, 3 | "effects": { 4 | "mood_sound": { 5 | "sound": "minecraft:ambient.cave", 6 | "tick_delay": 6000, 7 | "block_search_extent": 8, 8 | "offset": 2.0 9 | }, 10 | "sky_color": 0, 11 | "fog_color": 0, 12 | "water_color": 4159204, 13 | "water_fog_color": 329011 14 | }, 15 | "surface_builder": "mining_dimension:mining", 16 | "carvers": { 17 | "air": [ 18 | "mining_dimension:cave", 19 | "minecraft:canyon" 20 | ] 21 | }, 22 | "features": [ 23 | [ 24 | "minecraft:lake_water", 25 | "minecraft:lake_lava", 26 | "minecraft:monster_room", 27 | "minecraft:ore_dirt", 28 | "minecraft:ore_gravel", 29 | "minecraft:ore_granite", 30 | "minecraft:ore_diorite", 31 | "minecraft:ore_andesite", 32 | "minecraft:ore_coal", 33 | "minecraft:ore_iron", 34 | "minecraft:ore_gold", 35 | "minecraft:ore_redstone", 36 | "minecraft:ore_diamond", 37 | "minecraft:ore_lapis", 38 | "minecraft:disk_sand", 39 | "minecraft:disk_clay", 40 | "minecraft:disk_gravel" 41 | ] 42 | ], 43 | "starts": [ 44 | "minecraft:mineshaft", 45 | "minecraft:ruined_portal" 46 | ], 47 | "spawners": { 48 | "monster": [ 49 | { 50 | "type": "minecraft:spider", 51 | "weight": 100, 52 | "minCount": 4, 53 | "maxCount": 4 54 | }, 55 | { 56 | "type": "minecraft:zombie", 57 | "weight": 95, 58 | "minCount": 4, 59 | "maxCount": 4 60 | }, 61 | { 62 | "type": "minecraft:zombie_villager", 63 | "weight": 5, 64 | "minCount": 1, 65 | "maxCount": 1 66 | }, 67 | { 68 | "type": "minecraft:skeleton", 69 | "weight": 100, 70 | "minCount": 4, 71 | "maxCount": 4 72 | }, 73 | { 74 | "type": "minecraft:creeper", 75 | "weight": 100, 76 | "minCount": 4, 77 | "maxCount": 4 78 | }, 79 | { 80 | "type": "minecraft:slime", 81 | "weight": 100, 82 | "minCount": 4, 83 | "maxCount": 4 84 | }, 85 | { 86 | "type": "minecraft:enderman", 87 | "weight": 10, 88 | "minCount": 1, 89 | "maxCount": 4 90 | }, 91 | { 92 | "type": "minecraft:witch", 93 | "weight": 5, 94 | "minCount": 1, 95 | "maxCount": 1 96 | } 97 | ], 98 | "creature": [], 99 | "ambient": [ 100 | { 101 | "type": "minecraft:bat", 102 | "weight": 10, 103 | "minCount": 8, 104 | "maxCount": 8 105 | } 106 | ], 107 | "water_creature": [], 108 | "water_ambient": [], 109 | "misc": [] 110 | }, 111 | "spawn_costs": {}, 112 | "player_spawn_friendly": false, 113 | "precipitation": "none", 114 | "temperature": 0.6, 115 | "downfall": 0.0, 116 | "category": "none", 117 | "depth": 0.1 118 | } -------------------------------------------------------------------------------- /datapacks/more_caves/data/mining_dimension/worldgen/configured_carver/cave.json: -------------------------------------------------------------------------------- 1 | { 2 | "config": { 3 | "probability": 0.3 4 | }, 5 | "type": "minecraft:cave" 6 | } -------------------------------------------------------------------------------- /datapacks/more_caves/pack.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "pack": { 3 | "pack_format": 6, 4 | "description": [{"text":"More Caves","color":"green"},{"text":"\nAdvanced Mining Dimension","color":"yellow"}] 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /datapacks/more_caves_no_lava/data/mining_dimension/worldgen/biome/mining.json: -------------------------------------------------------------------------------- 1 | { 2 | "scale": 1, 3 | "effects": { 4 | "mood_sound": { 5 | "sound": "minecraft:ambient.cave", 6 | "tick_delay": 6000, 7 | "block_search_extent": 8, 8 | "offset": 2.0 9 | }, 10 | "sky_color": 0, 11 | "fog_color": 0, 12 | "water_color": 4159204, 13 | "water_fog_color": 329011 14 | }, 15 | "surface_builder": "mining_dimension:mining", 16 | "carvers": { 17 | "air": [ 18 | "mining_dimension:cave_no_lava", 19 | "mining_dimension:canyon_no_lava" 20 | ] 21 | }, 22 | "features": [ 23 | [ 24 | "minecraft:lake_water", 25 | "minecraft:monster_room", 26 | "minecraft:ore_dirt", 27 | "minecraft:ore_gravel", 28 | "minecraft:ore_granite", 29 | "minecraft:ore_diorite", 30 | "minecraft:ore_andesite", 31 | "minecraft:ore_coal", 32 | "minecraft:ore_iron", 33 | "minecraft:ore_gold", 34 | "minecraft:ore_redstone", 35 | "minecraft:ore_diamond", 36 | "minecraft:ore_lapis", 37 | "minecraft:disk_sand", 38 | "minecraft:disk_clay", 39 | "minecraft:disk_gravel" 40 | ] 41 | ], 42 | "starts": [ 43 | "minecraft:mineshaft", 44 | "minecraft:ruined_portal" 45 | ], 46 | "spawners": { 47 | "monster": [ 48 | { 49 | "type": "minecraft:spider", 50 | "weight": 100, 51 | "minCount": 4, 52 | "maxCount": 4 53 | }, 54 | { 55 | "type": "minecraft:zombie", 56 | "weight": 95, 57 | "minCount": 4, 58 | "maxCount": 4 59 | }, 60 | { 61 | "type": "minecraft:zombie_villager", 62 | "weight": 5, 63 | "minCount": 1, 64 | "maxCount": 1 65 | }, 66 | { 67 | "type": "minecraft:skeleton", 68 | "weight": 100, 69 | "minCount": 4, 70 | "maxCount": 4 71 | }, 72 | { 73 | "type": "minecraft:creeper", 74 | "weight": 100, 75 | "minCount": 4, 76 | "maxCount": 4 77 | }, 78 | { 79 | "type": "minecraft:slime", 80 | "weight": 100, 81 | "minCount": 4, 82 | "maxCount": 4 83 | }, 84 | { 85 | "type": "minecraft:enderman", 86 | "weight": 10, 87 | "minCount": 1, 88 | "maxCount": 4 89 | }, 90 | { 91 | "type": "minecraft:witch", 92 | "weight": 5, 93 | "minCount": 1, 94 | "maxCount": 1 95 | } 96 | ], 97 | "creature": [], 98 | "ambient": [ 99 | { 100 | "type": "minecraft:bat", 101 | "weight": 10, 102 | "minCount": 8, 103 | "maxCount": 8 104 | } 105 | ], 106 | "water_creature": [], 107 | "water_ambient": [], 108 | "misc": [] 109 | }, 110 | "spawn_costs": {}, 111 | "player_spawn_friendly": false, 112 | "precipitation": "none", 113 | "temperature": 0.6, 114 | "downfall": 0.0, 115 | "category": "none", 116 | "depth": 0.1 117 | } -------------------------------------------------------------------------------- /datapacks/more_caves_no_lava/data/mining_dimension/worldgen/configured_carver/canyon_no_lava.json: -------------------------------------------------------------------------------- 1 | { 2 | "config": { 3 | "probability": 0.02 4 | }, 5 | "type": "mining_dimension:canyon_no_lava" 6 | } -------------------------------------------------------------------------------- /datapacks/more_caves_no_lava/data/mining_dimension/worldgen/configured_carver/cave_no_lava.json: -------------------------------------------------------------------------------- 1 | { 2 | "config": { 3 | "probability": 0.3 4 | }, 5 | "type": "mining_dimension:cave_no_lava" 6 | } -------------------------------------------------------------------------------- /datapacks/more_caves_no_lava/pack.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "pack": { 3 | "pack_format": 6, 4 | "description": [{"text":"More Caves and No Lava","color":"green"},{"text":"\nAdvanced Mining Dimension","color":"yellow"}] 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /datapacks/more_ores/data/mining_dimension/worldgen/biome/mining.json: -------------------------------------------------------------------------------- 1 | { 2 | "scale": 1, 3 | "effects": { 4 | "mood_sound": { 5 | "sound": "minecraft:ambient.cave", 6 | "tick_delay": 6000, 7 | "block_search_extent": 8, 8 | "offset": 2.0 9 | }, 10 | "sky_color": 0, 11 | "fog_color": 0, 12 | "water_color": 4159204, 13 | "water_fog_color": 329011 14 | }, 15 | "surface_builder": "mining_dimension:mining", 16 | "carvers": { 17 | "air": [ 18 | "minecraft:cave", 19 | "minecraft:canyon" 20 | ] 21 | }, 22 | "features": [ 23 | [ 24 | "minecraft:lake_water", 25 | "minecraft:lake_lava", 26 | "minecraft:monster_room", 27 | "minecraft:ore_dirt", 28 | "minecraft:ore_gravel", 29 | "minecraft:ore_granite", 30 | "minecraft:ore_diorite", 31 | "minecraft:ore_andesite", 32 | "mining_dimension:ore_coal", 33 | "mining_dimension:ore_iron", 34 | "mining_dimension:ore_gold", 35 | "mining_dimension:ore_redstone", 36 | "mining_dimension:ore_diamond", 37 | "mining_dimension:ore_lapis", 38 | "mining_dimension:ore_emerald", 39 | "minecraft:disk_sand", 40 | "minecraft:disk_clay", 41 | "minecraft:disk_gravel" 42 | ] 43 | ], 44 | "starts": [ 45 | "minecraft:mineshaft", 46 | "minecraft:ruined_portal" 47 | ], 48 | "spawners": { 49 | "monster": [ 50 | { 51 | "type": "minecraft:spider", 52 | "weight": 100, 53 | "minCount": 4, 54 | "maxCount": 4 55 | }, 56 | { 57 | "type": "minecraft:zombie", 58 | "weight": 95, 59 | "minCount": 4, 60 | "maxCount": 4 61 | }, 62 | { 63 | "type": "minecraft:zombie_villager", 64 | "weight": 5, 65 | "minCount": 1, 66 | "maxCount": 1 67 | }, 68 | { 69 | "type": "minecraft:skeleton", 70 | "weight": 100, 71 | "minCount": 4, 72 | "maxCount": 4 73 | }, 74 | { 75 | "type": "minecraft:creeper", 76 | "weight": 100, 77 | "minCount": 4, 78 | "maxCount": 4 79 | }, 80 | { 81 | "type": "minecraft:slime", 82 | "weight": 100, 83 | "minCount": 4, 84 | "maxCount": 4 85 | }, 86 | { 87 | "type": "minecraft:enderman", 88 | "weight": 10, 89 | "minCount": 1, 90 | "maxCount": 4 91 | }, 92 | { 93 | "type": "minecraft:witch", 94 | "weight": 5, 95 | "minCount": 1, 96 | "maxCount": 1 97 | } 98 | ], 99 | "creature": [], 100 | "ambient": [ 101 | { 102 | "type": "minecraft:bat", 103 | "weight": 10, 104 | "minCount": 8, 105 | "maxCount": 8 106 | } 107 | ], 108 | "water_creature": [], 109 | "water_ambient": [], 110 | "misc": [] 111 | }, 112 | "spawn_costs": {}, 113 | "player_spawn_friendly": false, 114 | "precipitation": "none", 115 | "temperature": 0.6, 116 | "downfall": 0.0, 117 | "category": "none", 118 | "depth": 0.1 119 | } -------------------------------------------------------------------------------- /datapacks/more_ores/data/mining_dimension/worldgen/configured_feature/ore_coal.json: -------------------------------------------------------------------------------- 1 | { 2 | "config": { 3 | "feature": { 4 | "config": { 5 | "feature": { 6 | "config": { 7 | "feature": { 8 | "config": { 9 | "target": { 10 | "tag": "minecraft:base_stone_overworld", 11 | "predicate_type": "minecraft:tag_match" 12 | }, 13 | "state": { 14 | "Name": "minecraft:coal_ore" 15 | }, 16 | "size": 34 17 | }, 18 | "type": "minecraft:ore" 19 | }, 20 | "decorator": { 21 | "config": { 22 | "bottom_offset": 0, 23 | "top_offset": 0, 24 | "maximum": 256 25 | }, 26 | "type": "minecraft:range" 27 | } 28 | }, 29 | "type": "minecraft:decorated" 30 | }, 31 | "decorator": { 32 | "config": {}, 33 | "type": "minecraft:square" 34 | } 35 | }, 36 | "type": "minecraft:decorated" 37 | }, 38 | "decorator": { 39 | "config": { 40 | "count": 40 41 | }, 42 | "type": "minecraft:count" 43 | } 44 | }, 45 | "type": "minecraft:decorated" 46 | } -------------------------------------------------------------------------------- /datapacks/more_ores/data/mining_dimension/worldgen/configured_feature/ore_diamond.json: -------------------------------------------------------------------------------- 1 | { 2 | "config": { 3 | "feature": { 4 | "config": { 5 | "feature": { 6 | "config": { 7 | "target": { 8 | "tag": "minecraft:base_stone_overworld", 9 | "predicate_type": "minecraft:tag_match" 10 | }, 11 | "state": { 12 | "Name": "minecraft:diamond_ore" 13 | }, 14 | "size": 16 15 | }, 16 | "type": "minecraft:ore" 17 | }, 18 | "decorator": { 19 | "config": { 20 | "bottom_offset": 0, 21 | "top_offset": 0, 22 | "maximum": 32 23 | }, 24 | "type": "minecraft:range" 25 | } 26 | }, 27 | "type": "minecraft:decorated" 28 | }, 29 | "decorator": { 30 | "config": {}, 31 | "type": "minecraft:square" 32 | } 33 | }, 34 | "type": "minecraft:decorated" 35 | } -------------------------------------------------------------------------------- /datapacks/more_ores/data/mining_dimension/worldgen/configured_feature/ore_emerald.json: -------------------------------------------------------------------------------- 1 | { 2 | "config": { 3 | "feature": { 4 | "config": { 5 | "target": { 6 | "Name": "minecraft:stone" 7 | }, 8 | "state": { 9 | "Name": "minecraft:emerald_ore" 10 | } 11 | }, 12 | "type": "minecraft:emerald_ore" 13 | }, 14 | "decorator": { 15 | "config": {}, 16 | "type": "minecraft:emerald_ore" 17 | } 18 | }, 19 | "type": "minecraft:decorated" 20 | } -------------------------------------------------------------------------------- /datapacks/more_ores/data/mining_dimension/worldgen/configured_feature/ore_gold.json: -------------------------------------------------------------------------------- 1 | { 2 | "config": { 3 | "feature": { 4 | "config": { 5 | "feature": { 6 | "config": { 7 | "feature": { 8 | "config": { 9 | "target": { 10 | "tag": "minecraft:base_stone_overworld", 11 | "predicate_type": "minecraft:tag_match" 12 | }, 13 | "state": { 14 | "Name": "minecraft:gold_ore" 15 | }, 16 | "size": 18 17 | }, 18 | "type": "minecraft:ore" 19 | }, 20 | "decorator": { 21 | "config": { 22 | "bottom_offset": 0, 23 | "top_offset": 0, 24 | "maximum": 64 25 | }, 26 | "type": "minecraft:range" 27 | } 28 | }, 29 | "type": "minecraft:decorated" 30 | }, 31 | "decorator": { 32 | "config": {}, 33 | "type": "minecraft:square" 34 | } 35 | }, 36 | "type": "minecraft:decorated" 37 | }, 38 | "decorator": { 39 | "config": { 40 | "count": 4 41 | }, 42 | "type": "minecraft:count" 43 | } 44 | }, 45 | "type": "minecraft:decorated" 46 | } -------------------------------------------------------------------------------- /datapacks/more_ores/data/mining_dimension/worldgen/configured_feature/ore_iron.json: -------------------------------------------------------------------------------- 1 | { 2 | "config": { 3 | "feature": { 4 | "config": { 5 | "feature": { 6 | "config": { 7 | "feature": { 8 | "config": { 9 | "target": { 10 | "tag": "minecraft:base_stone_overworld", 11 | "predicate_type": "minecraft:tag_match" 12 | }, 13 | "state": { 14 | "Name": "minecraft:iron_ore" 15 | }, 16 | "size": 18 17 | }, 18 | "type": "minecraft:ore" 19 | }, 20 | "decorator": { 21 | "config": { 22 | "bottom_offset": 0, 23 | "top_offset": 0, 24 | "maximum": 128 25 | }, 26 | "type": "minecraft:range" 27 | } 28 | }, 29 | "type": "minecraft:decorated" 30 | }, 31 | "decorator": { 32 | "config": {}, 33 | "type": "minecraft:square" 34 | } 35 | }, 36 | "type": "minecraft:decorated" 37 | }, 38 | "decorator": { 39 | "config": { 40 | "count": 40 41 | }, 42 | "type": "minecraft:count" 43 | } 44 | }, 45 | "type": "minecraft:decorated" 46 | } -------------------------------------------------------------------------------- /datapacks/more_ores/data/mining_dimension/worldgen/configured_feature/ore_lapis.json: -------------------------------------------------------------------------------- 1 | { 2 | "config": { 3 | "feature": { 4 | "config": { 5 | "feature": { 6 | "config": { 7 | "target": { 8 | "tag": "minecraft:base_stone_overworld", 9 | "predicate_type": "minecraft:tag_match" 10 | }, 11 | "state": { 12 | "Name": "minecraft:lapis_ore" 13 | }, 14 | "size": 7 15 | }, 16 | "type": "minecraft:ore" 17 | }, 18 | "decorator": { 19 | "config": { 20 | "baseline": 32, 21 | "spread": 32 22 | }, 23 | "type": "minecraft:depth_average" 24 | } 25 | }, 26 | "type": "minecraft:decorated" 27 | }, 28 | "decorator": { 29 | "config": {}, 30 | "type": "minecraft:square" 31 | } 32 | }, 33 | "type": "minecraft:decorated" 34 | } -------------------------------------------------------------------------------- /datapacks/more_ores/data/mining_dimension/worldgen/configured_feature/ore_redstone.json: -------------------------------------------------------------------------------- 1 | { 2 | "config": { 3 | "feature": { 4 | "config": { 5 | "feature": { 6 | "config": { 7 | "feature": { 8 | "config": { 9 | "target": { 10 | "tag": "minecraft:base_stone_overworld", 11 | "predicate_type": "minecraft:tag_match" 12 | }, 13 | "state": { 14 | "Properties": { 15 | "lit": "false" 16 | }, 17 | "Name": "minecraft:redstone_ore" 18 | }, 19 | "size": 16 20 | }, 21 | "type": "minecraft:ore" 22 | }, 23 | "decorator": { 24 | "config": { 25 | "bottom_offset": 0, 26 | "top_offset": 0, 27 | "maximum": 32 28 | }, 29 | "type": "minecraft:range" 30 | } 31 | }, 32 | "type": "minecraft:decorated" 33 | }, 34 | "decorator": { 35 | "config": {}, 36 | "type": "minecraft:square" 37 | } 38 | }, 39 | "type": "minecraft:decorated" 40 | }, 41 | "decorator": { 42 | "config": { 43 | "count": 16 44 | }, 45 | "type": "minecraft:count" 46 | } 47 | }, 48 | "type": "minecraft:decorated" 49 | } -------------------------------------------------------------------------------- /datapacks/more_ores/pack.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "pack": { 3 | "pack_format": 6, 4 | "description": [{"text":"More Ores","color":"green"},{"text":"\nAdvanced Mining Dimension","color":"yellow"}] 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /datapacks/no_canyons/data/mining_dimension/worldgen/biome/mining.json: -------------------------------------------------------------------------------- 1 | { 2 | "scale": 1, 3 | "effects": { 4 | "mood_sound": { 5 | "sound": "minecraft:ambient.cave", 6 | "tick_delay": 6000, 7 | "block_search_extent": 8, 8 | "offset": 2.0 9 | }, 10 | "sky_color": 0, 11 | "fog_color": 0, 12 | "water_color": 4159204, 13 | "water_fog_color": 329011 14 | }, 15 | "surface_builder": "mining_dimension:mining", 16 | "carvers": { 17 | "air": [ 18 | "minecraft:cave" 19 | ] 20 | }, 21 | "features": [ 22 | [ 23 | "minecraft:lake_water", 24 | "minecraft:lake_lava", 25 | "minecraft:monster_room", 26 | "minecraft:ore_dirt", 27 | "minecraft:ore_gravel", 28 | "minecraft:ore_granite", 29 | "minecraft:ore_diorite", 30 | "minecraft:ore_andesite", 31 | "minecraft:ore_coal", 32 | "minecraft:ore_iron", 33 | "minecraft:ore_gold", 34 | "minecraft:ore_redstone", 35 | "minecraft:ore_diamond", 36 | "minecraft:ore_lapis", 37 | "minecraft:disk_sand", 38 | "minecraft:disk_clay", 39 | "minecraft:disk_gravel" 40 | ] 41 | ], 42 | "starts": [ 43 | "minecraft:mineshaft", 44 | "minecraft:ruined_portal" 45 | ], 46 | "spawners": { 47 | "monster": [ 48 | { 49 | "type": "minecraft:spider", 50 | "weight": 100, 51 | "minCount": 4, 52 | "maxCount": 4 53 | }, 54 | { 55 | "type": "minecraft:zombie", 56 | "weight": 95, 57 | "minCount": 4, 58 | "maxCount": 4 59 | }, 60 | { 61 | "type": "minecraft:zombie_villager", 62 | "weight": 5, 63 | "minCount": 1, 64 | "maxCount": 1 65 | }, 66 | { 67 | "type": "minecraft:skeleton", 68 | "weight": 100, 69 | "minCount": 4, 70 | "maxCount": 4 71 | }, 72 | { 73 | "type": "minecraft:creeper", 74 | "weight": 100, 75 | "minCount": 4, 76 | "maxCount": 4 77 | }, 78 | { 79 | "type": "minecraft:slime", 80 | "weight": 100, 81 | "minCount": 4, 82 | "maxCount": 4 83 | }, 84 | { 85 | "type": "minecraft:enderman", 86 | "weight": 10, 87 | "minCount": 1, 88 | "maxCount": 4 89 | }, 90 | { 91 | "type": "minecraft:witch", 92 | "weight": 5, 93 | "minCount": 1, 94 | "maxCount": 1 95 | } 96 | ], 97 | "creature": [], 98 | "ambient": [ 99 | { 100 | "type": "minecraft:bat", 101 | "weight": 10, 102 | "minCount": 8, 103 | "maxCount": 8 104 | } 105 | ], 106 | "water_creature": [], 107 | "water_ambient": [], 108 | "misc": [] 109 | }, 110 | "spawn_costs": {}, 111 | "player_spawn_friendly": false, 112 | "precipitation": "none", 113 | "temperature": 0.6, 114 | "downfall": 0.0, 115 | "category": "none", 116 | "depth": 0.1 117 | } -------------------------------------------------------------------------------- /datapacks/no_canyons/pack.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "pack": { 3 | "pack_format": 6, 4 | "description": [{"text":"No Canyons","color":"green"},{"text":"\nAdvanced Mining Dimension","color":"yellow"}] 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /datapacks/no_lakes/data/mining_dimension/worldgen/biome/mining.json: -------------------------------------------------------------------------------- 1 | { 2 | "scale": 1, 3 | "effects": { 4 | "mood_sound": { 5 | "sound": "minecraft:ambient.cave", 6 | "tick_delay": 6000, 7 | "block_search_extent": 8, 8 | "offset": 2.0 9 | }, 10 | "sky_color": 0, 11 | "fog_color": 0, 12 | "water_color": 4159204, 13 | "water_fog_color": 329011 14 | }, 15 | "surface_builder": "mining_dimension:mining", 16 | "carvers": { 17 | "air": [ 18 | "minecraft:cave", 19 | "minecraft:canyon" 20 | ] 21 | }, 22 | "features": [ 23 | [ 24 | "minecraft:monster_room", 25 | "minecraft:ore_dirt", 26 | "minecraft:ore_gravel", 27 | "minecraft:ore_granite", 28 | "minecraft:ore_diorite", 29 | "minecraft:ore_andesite", 30 | "minecraft:ore_coal", 31 | "minecraft:ore_iron", 32 | "minecraft:ore_gold", 33 | "minecraft:ore_redstone", 34 | "minecraft:ore_diamond", 35 | "minecraft:ore_lapis", 36 | "minecraft:disk_sand", 37 | "minecraft:disk_clay", 38 | "minecraft:disk_gravel" 39 | ] 40 | ], 41 | "starts": [ 42 | "minecraft:mineshaft", 43 | "minecraft:ruined_portal" 44 | ], 45 | "spawners": { 46 | "monster": [ 47 | { 48 | "type": "minecraft:spider", 49 | "weight": 100, 50 | "minCount": 4, 51 | "maxCount": 4 52 | }, 53 | { 54 | "type": "minecraft:zombie", 55 | "weight": 95, 56 | "minCount": 4, 57 | "maxCount": 4 58 | }, 59 | { 60 | "type": "minecraft:zombie_villager", 61 | "weight": 5, 62 | "minCount": 1, 63 | "maxCount": 1 64 | }, 65 | { 66 | "type": "minecraft:skeleton", 67 | "weight": 100, 68 | "minCount": 4, 69 | "maxCount": 4 70 | }, 71 | { 72 | "type": "minecraft:creeper", 73 | "weight": 100, 74 | "minCount": 4, 75 | "maxCount": 4 76 | }, 77 | { 78 | "type": "minecraft:slime", 79 | "weight": 100, 80 | "minCount": 4, 81 | "maxCount": 4 82 | }, 83 | { 84 | "type": "minecraft:enderman", 85 | "weight": 10, 86 | "minCount": 1, 87 | "maxCount": 4 88 | }, 89 | { 90 | "type": "minecraft:witch", 91 | "weight": 5, 92 | "minCount": 1, 93 | "maxCount": 1 94 | } 95 | ], 96 | "creature": [], 97 | "ambient": [ 98 | { 99 | "type": "minecraft:bat", 100 | "weight": 10, 101 | "minCount": 8, 102 | "maxCount": 8 103 | } 104 | ], 105 | "water_creature": [], 106 | "water_ambient": [], 107 | "misc": [] 108 | }, 109 | "spawn_costs": {}, 110 | "player_spawn_friendly": false, 111 | "precipitation": "none", 112 | "temperature": 0.6, 113 | "downfall": 0.0, 114 | "category": "none", 115 | "depth": 0.1 116 | } -------------------------------------------------------------------------------- /datapacks/no_lakes/pack.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "pack": { 3 | "pack_format": 6, 4 | "description": [{"text":"No Lakes","color":"green"},{"text":"\nAdvanced Mining Dimension","color":"yellow"}] 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /datapacks/no_lava/data/mining_dimension/worldgen/biome/mining.json: -------------------------------------------------------------------------------- 1 | { 2 | "scale": 1, 3 | "effects": { 4 | "mood_sound": { 5 | "sound": "minecraft:ambient.cave", 6 | "tick_delay": 6000, 7 | "block_search_extent": 8, 8 | "offset": 2.0 9 | }, 10 | "sky_color": 0, 11 | "fog_color": 0, 12 | "water_color": 4159204, 13 | "water_fog_color": 329011 14 | }, 15 | "surface_builder": "mining_dimension:mining", 16 | "carvers": { 17 | "air": [ 18 | "mining_dimension:cave_no_lava", 19 | "mining_dimension:canyon_no_lava" 20 | ] 21 | }, 22 | "features": [ 23 | [ 24 | "minecraft:lake_water", 25 | "minecraft:monster_room", 26 | "minecraft:ore_dirt", 27 | "minecraft:ore_gravel", 28 | "minecraft:ore_granite", 29 | "minecraft:ore_diorite", 30 | "minecraft:ore_andesite", 31 | "minecraft:ore_coal", 32 | "minecraft:ore_iron", 33 | "minecraft:ore_gold", 34 | "minecraft:ore_redstone", 35 | "minecraft:ore_diamond", 36 | "minecraft:ore_lapis", 37 | "minecraft:disk_sand", 38 | "minecraft:disk_clay", 39 | "minecraft:disk_gravel" 40 | ] 41 | ], 42 | "starts": [ 43 | "minecraft:mineshaft", 44 | "minecraft:ruined_portal" 45 | ], 46 | "spawners": { 47 | "monster": [ 48 | { 49 | "type": "minecraft:spider", 50 | "weight": 100, 51 | "minCount": 4, 52 | "maxCount": 4 53 | }, 54 | { 55 | "type": "minecraft:zombie", 56 | "weight": 95, 57 | "minCount": 4, 58 | "maxCount": 4 59 | }, 60 | { 61 | "type": "minecraft:zombie_villager", 62 | "weight": 5, 63 | "minCount": 1, 64 | "maxCount": 1 65 | }, 66 | { 67 | "type": "minecraft:skeleton", 68 | "weight": 100, 69 | "minCount": 4, 70 | "maxCount": 4 71 | }, 72 | { 73 | "type": "minecraft:creeper", 74 | "weight": 100, 75 | "minCount": 4, 76 | "maxCount": 4 77 | }, 78 | { 79 | "type": "minecraft:slime", 80 | "weight": 100, 81 | "minCount": 4, 82 | "maxCount": 4 83 | }, 84 | { 85 | "type": "minecraft:enderman", 86 | "weight": 10, 87 | "minCount": 1, 88 | "maxCount": 4 89 | }, 90 | { 91 | "type": "minecraft:witch", 92 | "weight": 5, 93 | "minCount": 1, 94 | "maxCount": 1 95 | } 96 | ], 97 | "creature": [], 98 | "ambient": [ 99 | { 100 | "type": "minecraft:bat", 101 | "weight": 10, 102 | "minCount": 8, 103 | "maxCount": 8 104 | } 105 | ], 106 | "water_creature": [], 107 | "water_ambient": [], 108 | "misc": [] 109 | }, 110 | "spawn_costs": {}, 111 | "player_spawn_friendly": false, 112 | "precipitation": "none", 113 | "temperature": 0.6, 114 | "downfall": 0.0, 115 | "category": "none", 116 | "depth": 0.1 117 | } -------------------------------------------------------------------------------- /datapacks/no_lava/data/mining_dimension/worldgen/configured_carver/canyon_no_lava.json: -------------------------------------------------------------------------------- 1 | { 2 | "config": { 3 | "probability": 0.02 4 | }, 5 | "type": "mining_dimension:canyon_no_lava" 6 | } -------------------------------------------------------------------------------- /datapacks/no_lava/data/mining_dimension/worldgen/configured_carver/cave_no_lava.json: -------------------------------------------------------------------------------- 1 | { 2 | "config": { 3 | "probability": 0.14285715 4 | }, 5 | "type": "mining_dimension:cave_no_lava" 6 | } -------------------------------------------------------------------------------- /datapacks/no_lava/pack.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "pack": { 3 | "pack_format": 6, 4 | "description": [{"text":"No Lava","color":"green"},{"text":"\nAdvanced Mining Dimension","color":"yellow"}] 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /datapacks/no_mobs/data/mining_dimension/worldgen/biome/mining.json: -------------------------------------------------------------------------------- 1 | { 2 | "scale": 1, 3 | "effects": { 4 | "mood_sound": { 5 | "sound": "minecraft:ambient.cave", 6 | "tick_delay": 6000, 7 | "block_search_extent": 8, 8 | "offset": 2.0 9 | }, 10 | "sky_color": 0, 11 | "fog_color": 0, 12 | "water_color": 4159204, 13 | "water_fog_color": 329011 14 | }, 15 | "surface_builder": "mining_dimension:mining", 16 | "carvers": { 17 | "air": [ 18 | "minecraft:cave", 19 | "minecraft:canyon" 20 | ] 21 | }, 22 | "features": [ 23 | [ 24 | "minecraft:lake_water", 25 | "minecraft:lake_lava", 26 | "minecraft:monster_room", 27 | "minecraft:ore_dirt", 28 | "minecraft:ore_gravel", 29 | "minecraft:ore_granite", 30 | "minecraft:ore_diorite", 31 | "minecraft:ore_andesite", 32 | "minecraft:ore_coal", 33 | "minecraft:ore_iron", 34 | "minecraft:ore_gold", 35 | "minecraft:ore_redstone", 36 | "minecraft:ore_diamond", 37 | "minecraft:ore_lapis", 38 | "minecraft:disk_sand", 39 | "minecraft:disk_clay", 40 | "minecraft:disk_gravel" 41 | ] 42 | ], 43 | "starts": [ 44 | "minecraft:mineshaft", 45 | "minecraft:ruined_portal" 46 | ], 47 | "spawners": { 48 | "monster": [], 49 | "creature": [], 50 | "ambient": [ 51 | { 52 | "type": "minecraft:bat", 53 | "weight": 10, 54 | "minCount": 8, 55 | "maxCount": 8 56 | } 57 | ], 58 | "water_creature": [], 59 | "water_ambient": [], 60 | "misc": [] 61 | }, 62 | "spawn_costs": {}, 63 | "player_spawn_friendly": false, 64 | "precipitation": "none", 65 | "temperature": 0.6, 66 | "downfall": 0.0, 67 | "category": "none", 68 | "depth": 0.1 69 | } -------------------------------------------------------------------------------- /datapacks/no_mobs/pack.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "pack": { 3 | "pack_format": 6, 4 | "description": [{"text":"No Mobs","color":"green"},{"text":"\nAdvanced Mining Dimension","color":"yellow"}] 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /datapacks/only_caves/data/mining_dimension/worldgen/biome/mining.json: -------------------------------------------------------------------------------- 1 | { 2 | "scale": 1, 3 | "effects": { 4 | "mood_sound": { 5 | "sound": "minecraft:ambient.cave", 6 | "tick_delay": 6000, 7 | "block_search_extent": 8, 8 | "offset": 2.0 9 | }, 10 | "sky_color": 0, 11 | "fog_color": 0, 12 | "water_color": 4159204, 13 | "water_fog_color": 329011 14 | }, 15 | "surface_builder": "mining_dimension:mining", 16 | "carvers": { 17 | "air": [ 18 | "mining_dimension:cave" 19 | ] 20 | }, 21 | "features": [ 22 | [ 23 | "minecraft:monster_room", 24 | "minecraft:ore_dirt", 25 | "minecraft:ore_gravel", 26 | "minecraft:ore_granite", 27 | "minecraft:ore_diorite", 28 | "minecraft:ore_andesite", 29 | "minecraft:ore_coal", 30 | "minecraft:ore_iron", 31 | "minecraft:ore_gold", 32 | "minecraft:ore_redstone", 33 | "minecraft:ore_diamond", 34 | "minecraft:ore_lapis", 35 | "minecraft:disk_sand", 36 | "minecraft:disk_clay", 37 | "minecraft:disk_gravel" 38 | ] 39 | ], 40 | "starts": [ 41 | "minecraft:mineshaft", 42 | "minecraft:ruined_portal" 43 | ], 44 | "spawners": { 45 | "monster": [ 46 | { 47 | "type": "minecraft:spider", 48 | "weight": 100, 49 | "minCount": 4, 50 | "maxCount": 4 51 | }, 52 | { 53 | "type": "minecraft:zombie", 54 | "weight": 95, 55 | "minCount": 4, 56 | "maxCount": 4 57 | }, 58 | { 59 | "type": "minecraft:zombie_villager", 60 | "weight": 5, 61 | "minCount": 1, 62 | "maxCount": 1 63 | }, 64 | { 65 | "type": "minecraft:skeleton", 66 | "weight": 100, 67 | "minCount": 4, 68 | "maxCount": 4 69 | }, 70 | { 71 | "type": "minecraft:creeper", 72 | "weight": 100, 73 | "minCount": 4, 74 | "maxCount": 4 75 | }, 76 | { 77 | "type": "minecraft:slime", 78 | "weight": 100, 79 | "minCount": 4, 80 | "maxCount": 4 81 | }, 82 | { 83 | "type": "minecraft:enderman", 84 | "weight": 10, 85 | "minCount": 1, 86 | "maxCount": 4 87 | }, 88 | { 89 | "type": "minecraft:witch", 90 | "weight": 5, 91 | "minCount": 1, 92 | "maxCount": 1 93 | } 94 | ], 95 | "creature": [], 96 | "ambient": [ 97 | { 98 | "type": "minecraft:bat", 99 | "weight": 10, 100 | "minCount": 8, 101 | "maxCount": 8 102 | } 103 | ], 104 | "water_creature": [], 105 | "water_ambient": [], 106 | "misc": [] 107 | }, 108 | "spawn_costs": {}, 109 | "player_spawn_friendly": false, 110 | "precipitation": "none", 111 | "temperature": 0.6, 112 | "downfall": 0.0, 113 | "category": "none", 114 | "depth": 0.1 115 | } -------------------------------------------------------------------------------- /datapacks/only_caves/data/mining_dimension/worldgen/configured_carver/cave.json: -------------------------------------------------------------------------------- 1 | { 2 | "config": { 3 | "probability": 1.0 4 | }, 5 | "type": "minecraft:cave" 6 | } -------------------------------------------------------------------------------- /datapacks/only_caves/pack.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "pack": { 3 | "pack_format": 6, 4 | "description": [{"text":"Only Caves","color":"green"},{"text":"\nAdvanced Mining Dimension","color":"yellow"}] 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /datapacks/readme.md: -------------------------------------------------------------------------------- 1 | # Example Customization Data Packs 2 | 3 | > **NOTE**: These datapacks are still for the 1.16.5 version of the mod! 4 | 5 | This directory contains example data packs, that demonstrate the customization of the mining dimension. 6 | 7 | ## How to Install 8 | 9 | 1. Download the folder of the data pack you want. 10 | 2. Open Minecraft. 11 | 3. Create a new world. 12 | 4. Select `Data Packs` in the world creation screen. 13 | 5. Click on `Open Pack Folder`. 14 | 6. Put the data pack folder into the directory that you opened in step 5. 15 | 7. Activate the added resource pack. 16 | 8. Click on `Done`. 17 | 9. Click on `Create New World`. 18 | 19 | ## Example Data Packs 20 | 21 | ### [default](default/) 22 | 23 | The unmodified data pack structure of the mining dimension. 24 | You can use this as a reference or base when creating your own data packs. 25 | 26 | ### [more_caves](more_caves/) 27 | 28 | This data pack increases the amount of caves a little bit. This doesn't affect canyons, lakes and dungeons. 29 | 30 | ### [more_caves_no_lava](more_caves_no_lava/) 31 | 32 | This data pack is similar to the [more_caves](more_caves/) data pack, except that the caves and canyons don't have lava at the lower levels. 33 | 34 | ### [more_ores](more_ores/) 35 | 36 | Doubles the amount and size of ore veins. It also adds emerald ore to the dimension. 37 | 38 | ### [no_canyons](no_canyons/) 39 | 40 | Removes canyons from the mining dimension. 41 | 42 | ### [no_lakes](no_lakes/) 43 | 44 | Removes lava and water lakes from the mining dimension. 45 | 46 | ### [no_lava](no_lava/) 47 | 48 | Removes lava from the lower levels of caves and canyons. 49 | 50 | ### [no_mobs](no_mobs/) 51 | 52 | Disables all monster spawning. 53 | 54 | ### [only_caves](only_caves/) 55 | 56 | Removes canyons and increases the amount of caves massively. 57 | 58 | ## Compatibility 59 | 60 | These data packs are compatible with version `1.16.2-1.0.1` up to `1.16.5-1.0.6`. 61 | 62 | --- 63 | 64 | *If you have any suggestions for new data packs or improvements of existing data packs, feel free to create a [feature request](https://github.com/henkelmax/advanced-mining-dimension/issues/new?assignees=henkelmax&labels=enhancement&template=feature_request.md).* 65 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx4G 2 | org.gradle.daemon=false 3 | 4 | java_version=21 5 | 6 | mod_loader=neoforge 7 | minecraft_version=1.20.5 8 | neoforge_version=20.5.5-beta 9 | neoforge_dependency=[20.5.5-beta,) 10 | corelib_version=2.1.3 11 | 12 | # Mod information 13 | mod_version=1.20.5-1.1.1 14 | mod_id=mining_dimension 15 | mod_display_name=Advanced Mining Dimension 16 | 17 | # Script configuration 18 | use_mixins=true 19 | 20 | # Project upload 21 | curseforge_upload_id=332640 22 | modrinth_upload_id=XRETyQl3 23 | upload_release_type=alpha 24 | upload_recommended=false 25 | 26 | # Gradle plugins 27 | mod_gradle_script_version=1.0.25 28 | neogradle_version=7.0.+ 29 | mod_update_version=2.0.0 30 | cursegradle_version=1.4.0 31 | shadow_version=8.1.1 32 | minotaur_version=2.+ 33 | neogradle_mixin_version=7.0.+ 34 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/henkelmax/advanced-mining-dimension/6ab667a9ebaf228a7560e41b36e49a9362b4d8c4/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # 4 | # Copyright © 2015-2021 the original authors. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # https://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | ############################################################################## 20 | # 21 | # Gradle start up script for POSIX generated by Gradle. 22 | # 23 | # Important for running: 24 | # 25 | # (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is 26 | # noncompliant, but you have some other compliant shell such as ksh or 27 | # bash, then to run this script, type that shell name before the whole 28 | # command line, like: 29 | # 30 | # ksh Gradle 31 | # 32 | # Busybox and similar reduced shells will NOT work, because this script 33 | # requires all of these POSIX shell features: 34 | # * functions; 35 | # * expansions «$var», «${var}», «${var:-default}», «${var+SET}», 36 | # «${var#prefix}», «${var%suffix}», and «$( cmd )»; 37 | # * compound commands having a testable exit status, especially «case»; 38 | # * various built-in commands including «command», «set», and «ulimit». 39 | # 40 | # Important for patching: 41 | # 42 | # (2) This script targets any POSIX shell, so it avoids extensions provided 43 | # by Bash, Ksh, etc; in particular arrays are avoided. 44 | # 45 | # The "traditional" practice of packing multiple parameters into a 46 | # space-separated string is a well documented source of bugs and security 47 | # problems, so this is (mostly) avoided, by progressively accumulating 48 | # options in "$@", and eventually passing that to Java. 49 | # 50 | # Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, 51 | # and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; 52 | # see the in-line comments for details. 53 | # 54 | # There are tweaks for specific operating systems such as AIX, CygWin, 55 | # Darwin, MinGW, and NonStop. 56 | # 57 | # (3) This script is generated from the Groovy template 58 | # https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt 59 | # within the Gradle project. 60 | # 61 | # You can find Gradle at https://github.com/gradle/gradle/. 62 | # 63 | ############################################################################## 64 | 65 | # Attempt to set APP_HOME 66 | 67 | # Resolve links: $0 may be a link 68 | app_path=$0 69 | 70 | # Need this for daisy-chained symlinks. 71 | while 72 | APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path 73 | [ -h "$app_path" ] 74 | do 75 | ls=$( ls -ld "$app_path" ) 76 | link=${ls#*' -> '} 77 | case $link in #( 78 | /*) app_path=$link ;; #( 79 | *) app_path=$APP_HOME$link ;; 80 | esac 81 | done 82 | 83 | # This is normally unused 84 | # shellcheck disable=SC2034 85 | APP_BASE_NAME=${0##*/} 86 | # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) 87 | APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit 88 | 89 | # Use the maximum available, or set MAX_FD != -1 to use that value. 90 | MAX_FD=maximum 91 | 92 | warn () { 93 | echo "$*" 94 | } >&2 95 | 96 | die () { 97 | echo 98 | echo "$*" 99 | echo 100 | exit 1 101 | } >&2 102 | 103 | # OS specific support (must be 'true' or 'false'). 104 | cygwin=false 105 | msys=false 106 | darwin=false 107 | nonstop=false 108 | case "$( uname )" in #( 109 | CYGWIN* ) cygwin=true ;; #( 110 | Darwin* ) darwin=true ;; #( 111 | MSYS* | MINGW* ) msys=true ;; #( 112 | NONSTOP* ) nonstop=true ;; 113 | esac 114 | 115 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 116 | 117 | 118 | # Determine the Java command to use to start the JVM. 119 | if [ -n "$JAVA_HOME" ] ; then 120 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 121 | # IBM's JDK on AIX uses strange locations for the executables 122 | JAVACMD=$JAVA_HOME/jre/sh/java 123 | else 124 | JAVACMD=$JAVA_HOME/bin/java 125 | fi 126 | if [ ! -x "$JAVACMD" ] ; then 127 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 128 | 129 | Please set the JAVA_HOME variable in your environment to match the 130 | location of your Java installation." 131 | fi 132 | else 133 | JAVACMD=java 134 | if ! command -v java >/dev/null 2>&1 135 | then 136 | die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 137 | 138 | Please set the JAVA_HOME variable in your environment to match the 139 | location of your Java installation." 140 | fi 141 | fi 142 | 143 | # Increase the maximum file descriptors if we can. 144 | if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then 145 | case $MAX_FD in #( 146 | max*) 147 | # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. 148 | # shellcheck disable=SC2039,SC3045 149 | MAX_FD=$( ulimit -H -n ) || 150 | warn "Could not query maximum file descriptor limit" 151 | esac 152 | case $MAX_FD in #( 153 | '' | soft) :;; #( 154 | *) 155 | # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. 156 | # shellcheck disable=SC2039,SC3045 157 | ulimit -n "$MAX_FD" || 158 | warn "Could not set maximum file descriptor limit to $MAX_FD" 159 | esac 160 | fi 161 | 162 | # Collect all arguments for the java command, stacking in reverse order: 163 | # * args from the command line 164 | # * the main class name 165 | # * -classpath 166 | # * -D...appname settings 167 | # * --module-path (only if needed) 168 | # * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. 169 | 170 | # For Cygwin or MSYS, switch paths to Windows format before running java 171 | if "$cygwin" || "$msys" ; then 172 | APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) 173 | CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) 174 | 175 | JAVACMD=$( cygpath --unix "$JAVACMD" ) 176 | 177 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 178 | for arg do 179 | if 180 | case $arg in #( 181 | -*) false ;; # don't mess with options #( 182 | /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath 183 | [ -e "$t" ] ;; #( 184 | *) false ;; 185 | esac 186 | then 187 | arg=$( cygpath --path --ignore --mixed "$arg" ) 188 | fi 189 | # Roll the args list around exactly as many times as the number of 190 | # args, so each arg winds up back in the position where it started, but 191 | # possibly modified. 192 | # 193 | # NB: a `for` loop captures its iteration list before it begins, so 194 | # changing the positional parameters here affects neither the number of 195 | # iterations, nor the values presented in `arg`. 196 | shift # remove old arg 197 | set -- "$@" "$arg" # push replacement arg 198 | done 199 | fi 200 | 201 | 202 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 203 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' 204 | 205 | # Collect all arguments for the java command: 206 | # * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, 207 | # and any embedded shellness will be escaped. 208 | # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be 209 | # treated as '${Hostname}' itself on the command line. 210 | 211 | set -- \ 212 | "-Dorg.gradle.appname=$APP_BASE_NAME" \ 213 | -classpath "$CLASSPATH" \ 214 | org.gradle.wrapper.GradleWrapperMain \ 215 | "$@" 216 | 217 | # Stop when "xargs" is not available. 218 | if ! command -v xargs >/dev/null 2>&1 219 | then 220 | die "xargs is not available" 221 | fi 222 | 223 | # Use "xargs" to parse quoted args. 224 | # 225 | # With -n1 it outputs one arg per line, with the quotes and backslashes removed. 226 | # 227 | # In Bash we could simply go: 228 | # 229 | # readarray ARGS < <( xargs -n1 <<<"$var" ) && 230 | # set -- "${ARGS[@]}" "$@" 231 | # 232 | # but POSIX shell has neither arrays nor command substitution, so instead we 233 | # post-process each arg (as a line of input to sed) to backslash-escape any 234 | # character that might be a shell metacharacter, then use eval to reverse 235 | # that process (while maintaining the separation between arguments), and wrap 236 | # the whole thing up as a single "set" statement. 237 | # 238 | # This will of course break if any of these variables contains a newline or 239 | # an unmatched quote. 240 | # 241 | 242 | eval "set -- $( 243 | printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | 244 | xargs -n1 | 245 | sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | 246 | tr '\n' ' ' 247 | )" '"$@"' 248 | 249 | exec "$JAVACMD" "$@" 250 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @rem 2 | @rem Copyright 2015 the original author or authors. 3 | @rem 4 | @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 | @rem you may not use this file except in compliance with the License. 6 | @rem You may obtain a copy of the License at 7 | @rem 8 | @rem https://www.apache.org/licenses/LICENSE-2.0 9 | @rem 10 | @rem Unless required by applicable law or agreed to in writing, software 11 | @rem distributed under the License is distributed on an "AS IS" BASIS, 12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | @rem See the License for the specific language governing permissions and 14 | @rem limitations under the License. 15 | @rem 16 | 17 | @if "%DEBUG%"=="" @echo off 18 | @rem ########################################################################## 19 | @rem 20 | @rem Gradle startup script for Windows 21 | @rem 22 | @rem ########################################################################## 23 | 24 | @rem Set local scope for the variables with windows NT shell 25 | if "%OS%"=="Windows_NT" setlocal 26 | 27 | set DIRNAME=%~dp0 28 | if "%DIRNAME%"=="" set DIRNAME=. 29 | @rem This is normally unused 30 | set APP_BASE_NAME=%~n0 31 | set APP_HOME=%DIRNAME% 32 | 33 | @rem Resolve any "." and ".." in APP_HOME to make it shorter. 34 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi 35 | 36 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 37 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 38 | 39 | @rem Find java.exe 40 | if defined JAVA_HOME goto findJavaFromJavaHome 41 | 42 | set JAVA_EXE=java.exe 43 | %JAVA_EXE% -version >NUL 2>&1 44 | if %ERRORLEVEL% equ 0 goto execute 45 | 46 | echo. 1>&2 47 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 48 | echo. 1>&2 49 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2 50 | echo location of your Java installation. 1>&2 51 | 52 | goto fail 53 | 54 | :findJavaFromJavaHome 55 | set JAVA_HOME=%JAVA_HOME:"=% 56 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 57 | 58 | if exist "%JAVA_EXE%" goto execute 59 | 60 | echo. 1>&2 61 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 62 | echo. 1>&2 63 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2 64 | echo location of your Java installation. 1>&2 65 | 66 | goto fail 67 | 68 | :execute 69 | @rem Setup the command line 70 | 71 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 72 | 73 | 74 | @rem Execute Gradle 75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* 76 | 77 | :end 78 | @rem End local scope for the variables with windows NT shell 79 | if %ERRORLEVEL% equ 0 goto mainEnd 80 | 81 | :fail 82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 83 | rem the _cmd.exe /c_ return code! 84 | set EXIT_CODE=%ERRORLEVEL% 85 | if %EXIT_CODE% equ 0 set EXIT_CODE=1 86 | if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% 87 | exit /b %EXIT_CODE% 88 | 89 | :mainEnd 90 | if "%OS%"=="Windows_NT" endlocal 91 | 92 | :omega 93 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Advanced Mining Dimension 4 | 5 | ## Links 6 | - [Modrinth](https://modrinth.com/mod/advanced-mining-dimension) 7 | - [CurseForge](https://www.curseforge.com/minecraft/mc-mods/advanced-mining-dimension) 8 | - [Credits](https://modrepo.de/minecraft/mining_dimension/credits) 9 | - [Example Data Packs](datapacks/) 10 | 11 | --- 12 | 13 | 14 | 15 | This mod adds a highly configurable dimension that only consists of caves. 16 | Creating the teleporter only requires very basic resources to make it accessible very early in game. 17 | 18 | ## Teleporter 19 | The teleporter is your door to the mining dimension. 20 | 21 | Just place it down and right-click it. 22 | 23 | ![](https://media.giphy.com/media/ZbfKJiRFxeBF20S8YT/giphy.gif) 24 | 25 | ![](https://media.giphy.com/media/Mc70zzAuiGCN1oy6LD/giphy.gif) 26 | 27 | ![](https://media.giphy.com/media/cLe14o6V4xaph9l8dQ/giphy.gif) 28 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | gradlePluginPortal() 4 | maven { url = 'https://maven.neoforged.net/releases' } 5 | maven { url = 'https://maven.maxhenkel.de/repository/public' } 6 | } 7 | } 8 | 9 | plugins { 10 | id 'org.gradle.toolchains.foojay-resolver-convention' version '0.5.0' 11 | } -------------------------------------------------------------------------------- /src/main/java/de/maxhenkel/miningdimension/Main.java: -------------------------------------------------------------------------------- 1 | package de.maxhenkel.miningdimension; 2 | 3 | import de.maxhenkel.corelib.CommonRegistry; 4 | import de.maxhenkel.miningdimension.block.BlockTeleporter; 5 | import de.maxhenkel.miningdimension.config.ClientConfig; 6 | import de.maxhenkel.miningdimension.config.ServerConfig; 7 | import de.maxhenkel.miningdimension.events.CreativeTabEvents; 8 | import de.maxhenkel.miningdimension.tileentity.TileentityTeleporter; 9 | import net.minecraft.core.registries.BuiltInRegistries; 10 | import net.minecraft.core.registries.Registries; 11 | import net.minecraft.resources.ResourceKey; 12 | import net.minecraft.resources.ResourceLocation; 13 | import net.minecraft.world.item.Item; 14 | import net.minecraft.world.level.Level; 15 | import net.minecraft.world.level.block.Block; 16 | import net.minecraft.world.level.block.entity.BlockEntityType; 17 | import net.neoforged.bus.api.IEventBus; 18 | import net.neoforged.fml.common.Mod; 19 | import net.neoforged.fml.config.ModConfig; 20 | import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; 21 | import net.neoforged.neoforge.registries.DeferredHolder; 22 | import net.neoforged.neoforge.registries.DeferredRegister; 23 | import org.apache.logging.log4j.LogManager; 24 | import org.apache.logging.log4j.Logger; 25 | 26 | @Mod(Main.MODID) 27 | public class Main { 28 | 29 | public static final String MODID = "mining_dimension"; 30 | 31 | public static final Logger LOGGER = LogManager.getLogger(MODID); 32 | 33 | private static final DeferredRegister BLOCK_REGISTER = DeferredRegister.create(BuiltInRegistries.BLOCK, Main.MODID); 34 | private static final DeferredRegister ITEM_REGISTER = DeferredRegister.create(BuiltInRegistries.ITEM, Main.MODID); 35 | public static final DeferredHolder TELEPORTER = BLOCK_REGISTER.register("teleporter", BlockTeleporter::new); 36 | public static final DeferredHolder TELEPORTER_ITEM = ITEM_REGISTER.register("teleporter", () -> TELEPORTER.get().toItem()); 37 | 38 | private static final DeferredRegister> BLOCK_ENTITY_REGISTER = DeferredRegister.create(BuiltInRegistries.BLOCK_ENTITY_TYPE, Main.MODID); 39 | public static final DeferredHolder, BlockEntityType> TELEPORTER_TILEENTITY = BLOCK_ENTITY_REGISTER.register("teleporter", () -> BlockEntityType.Builder.of(TileentityTeleporter::new, TELEPORTER.get()).build(null)); 40 | 41 | public static ResourceKey MINING_DIMENSION; 42 | 43 | public static ServerConfig SERVER_CONFIG; 44 | public static ClientConfig CLIENT_CONFIG; 45 | 46 | public Main(IEventBus eventBus) { 47 | eventBus.addListener(this::commonSetup); 48 | eventBus.addListener(CreativeTabEvents::onCreativeModeTabBuildContents); 49 | 50 | SERVER_CONFIG = CommonRegistry.registerConfig(MODID, ModConfig.Type.SERVER, ServerConfig.class, true); 51 | CLIENT_CONFIG = CommonRegistry.registerConfig(MODID, ModConfig.Type.CLIENT, ClientConfig.class); 52 | 53 | BLOCK_REGISTER.register(eventBus); 54 | ITEM_REGISTER.register(eventBus); 55 | BLOCK_ENTITY_REGISTER.register(eventBus); 56 | } 57 | 58 | public void commonSetup(FMLCommonSetupEvent event) { 59 | MINING_DIMENSION = ResourceKey.create(Registries.DIMENSION, new ResourceLocation(Main.MODID, "mining")); 60 | } 61 | 62 | 63 | } -------------------------------------------------------------------------------- /src/main/java/de/maxhenkel/miningdimension/block/BlockTeleporter.java: -------------------------------------------------------------------------------- 1 | package de.maxhenkel.miningdimension.block; 2 | 3 | import de.maxhenkel.corelib.block.IItemBlock; 4 | import de.maxhenkel.miningdimension.Main; 5 | import de.maxhenkel.miningdimension.dimension.MiningDimensionTeleporter; 6 | import de.maxhenkel.miningdimension.tileentity.TileentityTeleporter; 7 | import net.minecraft.core.BlockPos; 8 | import net.minecraft.network.chat.Component; 9 | import net.minecraft.server.level.ServerLevel; 10 | import net.minecraft.server.level.ServerPlayer; 11 | import net.minecraft.world.InteractionResult; 12 | import net.minecraft.world.entity.player.Player; 13 | import net.minecraft.world.item.BlockItem; 14 | import net.minecraft.world.item.Item; 15 | import net.minecraft.world.level.Level; 16 | import net.minecraft.world.level.block.Block; 17 | import net.minecraft.world.level.block.EntityBlock; 18 | import net.minecraft.world.level.block.RenderShape; 19 | import net.minecraft.world.level.block.SoundType; 20 | import net.minecraft.world.level.block.entity.BlockEntity; 21 | import net.minecraft.world.level.block.state.BlockState; 22 | import net.minecraft.world.level.material.MapColor; 23 | import net.minecraft.world.phys.BlockHitResult; 24 | 25 | public class BlockTeleporter extends Block implements EntityBlock, IItemBlock { 26 | 27 | public BlockTeleporter() { 28 | super(Properties.of().mapColor(MapColor.WOOD).strength(3F).sound(SoundType.WOOD)); 29 | } 30 | 31 | @Override 32 | public Item toItem() { 33 | return new BlockItem(this, new Item.Properties()); 34 | } 35 | 36 | @Override 37 | protected InteractionResult useWithoutItem(BlockState state, Level world, BlockPos pos, Player player, BlockHitResult result) { 38 | if (player instanceof ServerPlayer) { 39 | transferPlayer((ServerPlayer) player, pos); 40 | } 41 | return InteractionResult.SUCCESS; 42 | } 43 | 44 | public boolean transferPlayer(ServerPlayer player, BlockPos pos) { 45 | if (player.getVehicle() != null || player.isVehicle()) { 46 | return false; 47 | } 48 | 49 | if (player.level().dimension().equals(Main.MINING_DIMENSION)) { 50 | ServerLevel teleportWorld = player.server.getLevel(Main.SERVER_CONFIG.overworldDimension); 51 | if (teleportWorld == null) { 52 | Main.LOGGER.error("Could not find overworld dimension '{}'.", Main.SERVER_CONFIG.overworldDimension.registry()); 53 | return false; 54 | } 55 | player.changeDimension(teleportWorld, new MiningDimensionTeleporter(pos)); 56 | } else if (player.level().dimension().equals(Main.SERVER_CONFIG.overworldDimension)) { 57 | ServerLevel teleportWorld = player.server.getLevel(Main.MINING_DIMENSION); 58 | if (teleportWorld == null) { 59 | Main.LOGGER.error("Could not find mining dimension."); 60 | return false; 61 | } 62 | player.changeDimension(teleportWorld, new MiningDimensionTeleporter(pos)); 63 | } else { 64 | player.displayClientMessage(Component.translatable("message.wrong_dimension"), true); 65 | } 66 | 67 | return true; 68 | } 69 | 70 | @Override 71 | public RenderShape getRenderShape(BlockState state) { 72 | return RenderShape.MODEL; 73 | } 74 | 75 | @Override 76 | public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { 77 | return new TileentityTeleporter(pos, state); 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/main/java/de/maxhenkel/miningdimension/config/ClientConfig.java: -------------------------------------------------------------------------------- 1 | package de.maxhenkel.miningdimension.config; 2 | 3 | import de.maxhenkel.corelib.config.ConfigBase; 4 | import net.neoforged.neoforge.common.ModConfigSpec; 5 | 6 | public class ClientConfig extends ConfigBase { 7 | 8 | public final ModConfigSpec.BooleanValue showCustomWorldWarning; 9 | 10 | public ClientConfig(ModConfigSpec.Builder builder) { 11 | super(builder); 12 | showCustomWorldWarning = builder 13 | .comment("If the game should show the custom world warning when loading a world") 14 | .define("show_custom_world_warning", false); 15 | } 16 | 17 | } -------------------------------------------------------------------------------- /src/main/java/de/maxhenkel/miningdimension/config/ServerConfig.java: -------------------------------------------------------------------------------- 1 | package de.maxhenkel.miningdimension.config; 2 | 3 | import de.maxhenkel.corelib.config.ConfigBase; 4 | import net.minecraft.core.registries.Registries; 5 | import net.minecraft.resources.ResourceKey; 6 | import net.minecraft.resources.ResourceLocation; 7 | import net.minecraft.world.level.Level; 8 | import net.neoforged.fml.event.config.ModConfigEvent; 9 | import net.neoforged.neoforge.common.ModConfigSpec; 10 | 11 | public class ServerConfig extends ConfigBase { 12 | 13 | private final ModConfigSpec.ConfigValue overworldDimensionSpec; 14 | public final ModConfigSpec.BooleanValue spawnDeep; 15 | 16 | public ResourceKey overworldDimension; 17 | 18 | public ServerConfig(ModConfigSpec.Builder builder) { 19 | super(builder); 20 | overworldDimensionSpec = builder 21 | .comment("The dimension from where you can teleport to the mining dimension and back") 22 | .define("overworld_dimension", "minecraft:overworld"); 23 | spawnDeep = builder 24 | .comment("If the teleporter should bring you to the lowest free space in the mining dimension") 25 | .define("spawn_deep", true); 26 | } 27 | 28 | @Override 29 | public void onReload(ModConfigEvent event) { 30 | super.onReload(event); 31 | overworldDimension = ResourceKey.create(Registries.DIMENSION, new ResourceLocation(overworldDimensionSpec.get())); 32 | } 33 | 34 | } -------------------------------------------------------------------------------- /src/main/java/de/maxhenkel/miningdimension/dimension/MiningDimensionTeleporter.java: -------------------------------------------------------------------------------- 1 | package de.maxhenkel.miningdimension.dimension; 2 | 3 | import de.maxhenkel.miningdimension.Main; 4 | import de.maxhenkel.miningdimension.tileentity.TileentityTeleporter; 5 | import net.minecraft.core.BlockPos; 6 | import net.minecraft.core.Direction; 7 | import net.minecraft.server.level.ServerLevel; 8 | import net.minecraft.server.level.ServerPlayer; 9 | import net.minecraft.world.entity.Entity; 10 | import net.minecraft.world.entity.EntityType; 11 | import net.minecraft.world.entity.vehicle.DismountHelper; 12 | import net.minecraft.world.level.Level; 13 | import net.minecraft.world.level.block.Blocks; 14 | import net.minecraft.world.level.block.state.BlockState; 15 | import net.minecraft.world.level.chunk.LevelChunk; 16 | import net.minecraft.world.phys.Vec3; 17 | import net.neoforged.neoforge.common.util.ITeleporter; 18 | import javax.annotation.Nullable; 19 | import java.util.Map; 20 | import java.util.Objects; 21 | import java.util.function.Function; 22 | 23 | public class MiningDimensionTeleporter implements ITeleporter { 24 | 25 | private BlockPos pos; 26 | 27 | public MiningDimensionTeleporter(BlockPos pos) { 28 | this.pos = pos; 29 | } 30 | 31 | @Override 32 | public Entity placeEntity(Entity entity, ServerLevel currentWorld, ServerLevel destWorld, float yaw, Function repositionEntity) { 33 | Entity e = repositionEntity.apply(false); 34 | if (!(e instanceof ServerPlayer)) { 35 | return e; 36 | } 37 | ServerPlayer player = (ServerPlayer) e; 38 | LevelChunk chunk = (LevelChunk) destWorld.getChunk(pos); 39 | Vec3 spawnPos = findPortalInChunk(chunk); 40 | 41 | if (spawnPos == null) { 42 | if (destWorld.dimension().equals(Main.MINING_DIMENSION)) { 43 | spawnPos = placeTeleporterMining(destWorld, chunk); 44 | } else { 45 | spawnPos = placeTeleporterOverworld(destWorld, chunk); 46 | } 47 | } 48 | if (spawnPos == null) { 49 | return e; 50 | } 51 | 52 | player.giveExperienceLevels(0); 53 | player.teleportTo(spawnPos.x(), spawnPos.y(), spawnPos.z()); 54 | return e; 55 | } 56 | 57 | @Nullable 58 | private Vec3 findPortalInChunk(LevelChunk chunk) { 59 | return chunk.getBlockEntities() 60 | .entrySet() 61 | .stream() 62 | .filter(entry -> entry.getValue() instanceof TileentityTeleporter) 63 | .sorted((o1, o2) -> { 64 | if (Main.SERVER_CONFIG.spawnDeep.get()) { 65 | return Integer.compare(o1.getKey().getY(), o2.getKey().getY()); 66 | } else { 67 | return o2.getKey().getY() - o1.getKey().getY(); 68 | } 69 | }) 70 | .map(Map.Entry::getKey) 71 | .map(pos -> getTeleporterSpawnPos(chunk.getLevel(), pos)) 72 | .filter(Objects::nonNull) 73 | .findFirst() 74 | .orElse(null); 75 | } 76 | 77 | private static Vec3 getTeleporterSpawnPos(Level level, BlockPos blockPos) { 78 | return DismountHelper.findSafeDismountLocation(EntityType.PLAYER, level, blockPos.above(), false); 79 | } 80 | 81 | private Vec3 placeTeleporterMining(ServerLevel world, LevelChunk chunk) { 82 | boolean deep = Main.SERVER_CONFIG.spawnDeep.get(); 83 | BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); 84 | int min = world.getMinBuildHeight(); 85 | int max = world.getMaxBuildHeight(); 86 | for (int y = deep ? min : max - 1; (deep ? y < max - 1 : y >= min); y = (deep ? y + 1 : y - 1)) { 87 | for (int x = 0; x < 16; x++) { 88 | for (int z = 0; z < 16; z++) { 89 | pos.set(x, y, z); 90 | if (chunk.getBlockState(pos).isAir() && chunk.getBlockState(pos.above(1)).isAir() && chunk.getBlockState(pos.above(2)).isAir()) { 91 | BlockPos absolutePos = chunk.getPos().getWorldPosition().offset(pos.getX(), pos.getY(), pos.getZ()); 92 | world.setBlockAndUpdate(absolutePos, Main.TELEPORTER.get().defaultBlockState()); 93 | return new Vec3(absolutePos.getX() + 0.5, absolutePos.getY() + 1, absolutePos.getZ() + 0.5); 94 | } 95 | } 96 | } 97 | } 98 | 99 | for (int y = deep ? min : max - 1; (deep ? y < max - 1 : y >= min); y = (deep ? y + 1 : y - 1)) { 100 | for (int x = 0; x < 16; x++) { 101 | for (int z = 0; z < 16; z++) { 102 | pos.set(x, y, z); 103 | if (isAirOrStone(chunk, pos) && isAirOrStone(chunk, pos.above(1)) && isAirOrStone(chunk, pos.above(2))) { 104 | BlockPos absolutePos = chunk.getPos().getWorldPosition().offset(pos.getX(), pos.getY(), pos.getZ()); 105 | if (isReplaceable(world, absolutePos.above(3)) && 106 | isReplaceable(world, absolutePos.above(1).relative(Direction.NORTH)) && 107 | isReplaceable(world, absolutePos.above(1).relative(Direction.NORTH)) && 108 | isReplaceable(world, absolutePos.above(1).relative(Direction.SOUTH)) && 109 | isReplaceable(world, absolutePos.above(1).relative(Direction.EAST)) && 110 | isReplaceable(world, absolutePos.above(1).relative(Direction.WEST)) && 111 | isReplaceable(world, absolutePos.above(2).relative(Direction.NORTH)) && 112 | isReplaceable(world, absolutePos.above(2).relative(Direction.SOUTH)) && 113 | isReplaceable(world, absolutePos.above(2).relative(Direction.EAST)) && 114 | isReplaceable(world, absolutePos.above(2).relative(Direction.WEST)) 115 | ) { 116 | world.setBlockAndUpdate(absolutePos, Main.TELEPORTER.get().defaultBlockState()); 117 | world.setBlockAndUpdate(absolutePos.above(1), Blocks.AIR.defaultBlockState()); 118 | world.setBlockAndUpdate(absolutePos.above(2), Blocks.AIR.defaultBlockState()); 119 | world.setBlockAndUpdate(absolutePos.above(3), Blocks.STONE.defaultBlockState()); 120 | world.setBlockAndUpdate(absolutePos.above(1).relative(Direction.NORTH), Blocks.STONE.defaultBlockState()); 121 | world.setBlockAndUpdate(absolutePos.above(1).relative(Direction.SOUTH), Blocks.STONE.defaultBlockState()); 122 | world.setBlockAndUpdate(absolutePos.above(1).relative(Direction.EAST), Blocks.STONE.defaultBlockState()); 123 | world.setBlockAndUpdate(absolutePos.above(1).relative(Direction.WEST), Blocks.STONE.defaultBlockState()); 124 | world.setBlockAndUpdate(absolutePos.above(2).relative(Direction.NORTH), Blocks.STONE.defaultBlockState()); 125 | world.setBlockAndUpdate(absolutePos.above(2).relative(Direction.SOUTH), Blocks.STONE.defaultBlockState()); 126 | world.setBlockAndUpdate(absolutePos.above(2).relative(Direction.EAST), Blocks.STONE.defaultBlockState()); 127 | world.setBlockAndUpdate(absolutePos.above(2).relative(Direction.WEST), Blocks.STONE.defaultBlockState()); 128 | return new Vec3(absolutePos.getX() + 0.5, absolutePos.getY() + 1, absolutePos.getZ() + 0.5); 129 | } 130 | } 131 | } 132 | } 133 | } 134 | 135 | return null; 136 | } 137 | 138 | private boolean isAirOrStone(LevelChunk chunk, BlockPos pos) { 139 | BlockState state = chunk.getBlockState(pos); 140 | return state.getBlock().equals(Blocks.STONE) || state.isAir(); 141 | } 142 | 143 | private boolean isReplaceable(Level world, BlockPos pos) { 144 | BlockState state = world.getBlockState(pos); 145 | return state.getBlock().equals(Blocks.STONE) || 146 | state.getBlock().equals(Blocks.GRANITE) || 147 | state.getBlock().equals(Blocks.ANDESITE) || 148 | state.getBlock().equals(Blocks.DIORITE) || 149 | state.getBlock().equals(Blocks.DIRT) || 150 | state.getBlock().equals(Blocks.GRAVEL) || 151 | state.getBlock().equals(Blocks.LAVA) || 152 | state.isAir(); 153 | } 154 | 155 | private Vec3 placeTeleporterOverworld(ServerLevel world, LevelChunk chunk) { 156 | BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); 157 | for (int x = 0; x < 16; x++) { 158 | for (int z = 0; z < 16; z++) { 159 | for (int y = world.getMaxBuildHeight(); y >= world.getMinBuildHeight(); y--) { 160 | pos.set(x, y, z); 161 | if (chunk.getBlockState(pos).isAir() && 162 | chunk.getBlockState(pos.above(1)).isAir() && 163 | chunk.getBlockState(pos.above(2)).isAir() && 164 | !chunk.getBlockState(pos.below()).isAir()) { 165 | BlockPos absolutePos = chunk.getPos().getWorldPosition().offset(pos.getX(), pos.getY(), pos.getZ()); 166 | world.setBlockAndUpdate(absolutePos, Main.TELEPORTER.get().defaultBlockState()); 167 | return new Vec3(absolutePos.getX() + 0.5, absolutePos.getY() + 1, absolutePos.getZ() + 0.5); 168 | } 169 | } 170 | } 171 | } 172 | return null; 173 | } 174 | 175 | } 176 | -------------------------------------------------------------------------------- /src/main/java/de/maxhenkel/miningdimension/events/CreativeTabEvents.java: -------------------------------------------------------------------------------- 1 | package de.maxhenkel.miningdimension.events; 2 | 3 | import de.maxhenkel.miningdimension.Main; 4 | import net.minecraft.world.item.CreativeModeTabs; 5 | import net.minecraft.world.item.ItemStack; 6 | import net.neoforged.bus.api.SubscribeEvent; 7 | import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent; 8 | 9 | public class CreativeTabEvents { 10 | 11 | @SubscribeEvent 12 | public static void onCreativeModeTabBuildContents(BuildCreativeModeTabContentsEvent event) { 13 | if (event.getTabKey().equals(CreativeModeTabs.FUNCTIONAL_BLOCKS)) { 14 | event.accept(new ItemStack(Main.TELEPORTER.get())); 15 | } 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/de/maxhenkel/miningdimension/mixin/MixinConnector.java: -------------------------------------------------------------------------------- 1 | package de.maxhenkel.miningdimension.mixin; 2 | 3 | import de.maxhenkel.miningdimension.Main; 4 | import org.spongepowered.asm.mixin.Mixins; 5 | import org.spongepowered.asm.mixin.connect.IMixinConnector; 6 | 7 | public class MixinConnector implements IMixinConnector { 8 | 9 | @Override 10 | public void connect() { 11 | Mixins.addConfiguration("assets/" + Main.MODID + "/mining_dimension.mixins.json"); 12 | } 13 | 14 | } 15 | 16 | -------------------------------------------------------------------------------- /src/main/java/de/maxhenkel/miningdimension/mixin/WorldOpenFlowsMixin.java: -------------------------------------------------------------------------------- 1 | package de.maxhenkel.miningdimension.mixin; 2 | 3 | import com.mojang.serialization.Lifecycle; 4 | import de.maxhenkel.miningdimension.Main; 5 | import net.minecraft.client.gui.screens.worldselection.WorldOpenFlows; 6 | import org.spongepowered.asm.mixin.Mixin; 7 | import org.spongepowered.asm.mixin.injection.At; 8 | import org.spongepowered.asm.mixin.injection.ModifyVariable; 9 | 10 | @Mixin(WorldOpenFlows.class) 11 | public class WorldOpenFlowsMixin { 12 | 13 | @ModifyVariable(method = "confirmWorldCreation", at = @At("HEAD"), ordinal = 0, argsOnly = true) 14 | private static Lifecycle confirmWorldCreation(Lifecycle lifecycle) { 15 | if (!Main.CLIENT_CONFIG.showCustomWorldWarning.get()) { 16 | if (lifecycle.equals(Lifecycle.experimental())) { 17 | return Lifecycle.stable(); 18 | } 19 | } 20 | return lifecycle; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/de/maxhenkel/miningdimension/tileentity/TileentityTeleporter.java: -------------------------------------------------------------------------------- 1 | package de.maxhenkel.miningdimension.tileentity; 2 | 3 | import de.maxhenkel.miningdimension.Main; 4 | import net.minecraft.core.BlockPos; 5 | import net.minecraft.world.level.block.entity.BlockEntity; 6 | import net.minecraft.world.level.block.state.BlockState; 7 | 8 | public class TileentityTeleporter extends BlockEntity { 9 | 10 | public TileentityTeleporter(BlockPos pos, BlockState state) { 11 | super(Main.TELEPORTER_TILEENTITY.get(), pos, state); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/META-INF/neoforge.mods.toml: -------------------------------------------------------------------------------- 1 | modLoader = "javafml" 2 | loaderVersion = "*" 3 | license = "All rights reserved" 4 | issueTrackerURL = "https://github.com/henkelmax/advanced-mining-dimension/issues" 5 | [[mods]] 6 | modId = "mining_dimension" 7 | version = "${mod_version}" 8 | displayName = "Advanced Mining Dimension" 9 | updateJSONURL = "https://update.maxhenkel.de/neoforge/mining_dimension" 10 | displayURL = "https://www.curseforge.com/minecraft/mc-mods/advanced-mining-dimension" 11 | logoFile = "icon.png" 12 | authors = "Max Henkel" 13 | description = '''A dimension consisting just of caves''' 14 | [[dependencies.mining_dimension]] 15 | modId = "neoforge" 16 | type = "required" 17 | versionRange = "${neoforge_dependency}" 18 | ordering = "NONE" 19 | side = "BOTH" 20 | [[dependencies.mining_dimension]] 21 | modId = "minecraft" 22 | type = "required" 23 | versionRange = "[${minecraft_version}]" 24 | ordering = "NONE" 25 | side = "BOTH" -------------------------------------------------------------------------------- /src/main/resources/assets/mining_dimension/blockstates/teleporter.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { "model": "mining_dimension:block/teleporter" } 4 | } 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/mining_dimension/lang/de_de.json: -------------------------------------------------------------------------------- 1 | { 2 | "block.mining_dimension.teleporter": "Minendimension Teleporter", 3 | "biome.mining_dimension.mining_biome": "Minendimension", 4 | "message.wrong_dimension": "Der Teleporter funktioniert in dieser Dimension nicht" 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/mining_dimension/lang/en_us.json: -------------------------------------------------------------------------------- 1 | { 2 | "block.mining_dimension.teleporter": "Mining Dimension Teleporter", 3 | "biome.mining_dimension.mining_biome": "Mining Dimension", 4 | "message.wrong_dimension": "The teleporter does not work in this dimension" 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/mining_dimension/lang/es_es.json: -------------------------------------------------------------------------------- 1 | { 2 | "block.mining_dimension.teleporter": "Teletransportador de la Dimensión de Minería", 3 | "biome.mining_dimension.mining_biome": "Dimensión de Minería", 4 | "message.wrong_dimension": "El teletransportador no funciona en esta dimensión" 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/mining_dimension/lang/fr_fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "block.mining_dimension.teleporter": "Téléporteur dans la dimension de minage", 3 | "biome.mining_dimension.mining_biome": "Dimension de minage", 4 | "message.wrong_dimension": "Le téléporteur ne fonctionne pas dans cette dimension" 5 | } 6 | -------------------------------------------------------------------------------- /src/main/resources/assets/mining_dimension/lang/ja_jp.json: -------------------------------------------------------------------------------- 1 | { 2 | "block.mining_dimension.teleporter": "採掘ディメンションテレポーター", 3 | "biome.mining_dimension.mining_biome": "採掘ディメンション", 4 | "message.wrong_dimension": "このディメンションではテレポーターを利用できません" 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/mining_dimension/lang/pt_br.json: -------------------------------------------------------------------------------- 1 | { 2 | "block.mining_dimension.teleporter": "Teletransportador para Dimensão de Mineração", 3 | "biome.mining_dimension.mining_biome": "Dimensão de Mineração", 4 | "message.wrong_dimension": "O teletransportador não funciona nesta dimensão" 5 | } 6 | -------------------------------------------------------------------------------- /src/main/resources/assets/mining_dimension/lang/ru_ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "block.mining_dimension.teleporter": "Телепортер измерении добычи", 3 | "biome.mining_dimension.mining_biome": "Измерение добычи", 4 | "message.wrong_dimension": "Телепортер не работает в этом измернии." 5 | } 6 | -------------------------------------------------------------------------------- /src/main/resources/assets/mining_dimension/lang/tr_tr.json: -------------------------------------------------------------------------------- 1 | { 2 | "block.mining_dimension.teleporter": "Madencilik Boyutu Işınlayıcısı", 3 | "biome.mining_dimension.mining_biome": "Madencilik Boyutu", 4 | "message.wrong_dimension": "Işınlayıcı bu boyutta çalışmıyor." 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/mining_dimension/lang/zh_cn.json: -------------------------------------------------------------------------------- 1 | { 2 | "block.mining_dimension.teleporter": "挖矿维度传送器", 3 | "biome.mining_dimension.mining_biome": "挖矿维度", 4 | "message.wrong_dimension": "传送器不能在当前维度工作" 5 | } 6 | -------------------------------------------------------------------------------- /src/main/resources/assets/mining_dimension/models/block/teleporter.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "block/cube_all", 3 | "textures": { 4 | "up": "block/oak_log_top", 5 | "down": "block/oak_log_top", 6 | "north": "mining_dimension:block/teleporter_side", 7 | "south": "mining_dimension:block/teleporter_side", 8 | "east": "mining_dimension:block/teleporter_side", 9 | "west": "mining_dimension:block/teleporter_side", 10 | "particle": "mining_dimension:block/teleporter_side" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/resources/assets/mining_dimension/models/item/teleporter.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "mining_dimension:block/teleporter" 3 | } 4 | -------------------------------------------------------------------------------- /src/main/resources/assets/mining_dimension/textures/block/teleporter_side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/henkelmax/advanced-mining-dimension/6ab667a9ebaf228a7560e41b36e49a9362b4d8c4/src/main/resources/assets/mining_dimension/textures/block/teleporter_side.png -------------------------------------------------------------------------------- /src/main/resources/data/mining_dimension/advancements/recipes/decorations/teleporter.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "mining_dimension:teleporter" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_log": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "tag": "minecraft:logs" 15 | } 16 | ] 17 | } 18 | } 19 | }, 20 | "requirements": [ 21 | [ 22 | "has_log" 23 | ] 24 | ] 25 | } -------------------------------------------------------------------------------- /src/main/resources/data/mining_dimension/dimension/mining.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "mining_dimension:mining", 3 | "generator": { 4 | "biome_source": { 5 | "type": "minecraft:fixed", 6 | "biome": "mining_dimension:mining" 7 | }, 8 | "settings": "mining_dimension:mining", 9 | "type": "minecraft:noise" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/main/resources/data/mining_dimension/dimension_type/mining.json: -------------------------------------------------------------------------------- 1 | { 2 | "ultrawarm": false, 3 | "natural": false, 4 | "piglin_safe": false, 5 | "respawn_anchor_works": false, 6 | "bed_works": false, 7 | "has_raids": false, 8 | "has_skylight": false, 9 | "has_ceiling": true, 10 | "coordinate_scale": 1, 11 | "ambient_light": 0, 12 | "fixed_time": 18000, 13 | "logical_height": 320, 14 | "effects": "minecraft:overworld", 15 | "infiniburn": "#minecraft:infiniburn_overworld", 16 | "min_y": -64, 17 | "height": 384, 18 | "monster_spawn_block_light_limit": 0, 19 | "monster_spawn_light_level": { 20 | "type": "minecraft:uniform", 21 | "value": { 22 | "min_inclusive": 0, 23 | "max_inclusive": 7 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/resources/data/mining_dimension/loot_tables/blocks/teleporter.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "name": "teleporter", 6 | "rolls": 1, 7 | "entries": [ 8 | { 9 | "type": "minecraft:item", 10 | "name": "mining_dimension:teleporter" 11 | } 12 | ] 13 | } 14 | ] 15 | } -------------------------------------------------------------------------------- /src/main/resources/data/mining_dimension/recipes/teleporter.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "pattern": [ 4 | "LPL", 5 | "PIP", 6 | "LPL" 7 | ], 8 | "key": { 9 | "L": { 10 | "tag": "minecraft:logs" 11 | }, 12 | "P": { 13 | "tag": "minecraft:planks" 14 | }, 15 | "I": { 16 | "item": "minecraft:stone_pickaxe" 17 | } 18 | }, 19 | "result": { 20 | "id": "mining_dimension:teleporter", 21 | "count": 1 22 | }, 23 | "mirrored": true 24 | } 25 | -------------------------------------------------------------------------------- /src/main/resources/data/mining_dimension/worldgen/biome/mining.json: -------------------------------------------------------------------------------- 1 | { 2 | "temperature": 0.6, 3 | "downfall": 0, 4 | "has_precipitation": false, 5 | "effects": { 6 | "sky_color": 0, 7 | "fog_color": 0, 8 | "water_color": 4159204, 9 | "water_fog_color": 329011, 10 | "mood_sound": { 11 | "sound": "minecraft:ambient.cave", 12 | "tick_delay": 6000, 13 | "block_search_extent": 8, 14 | "offset": 2 15 | } 16 | }, 17 | "spawners": { 18 | "monster": [ 19 | { 20 | "type": "minecraft:spider", 21 | "weight": 100, 22 | "minCount": 4, 23 | "maxCount": 4 24 | }, 25 | { 26 | "type": "minecraft:zombie", 27 | "weight": 95, 28 | "minCount": 4, 29 | "maxCount": 4 30 | }, 31 | { 32 | "type": "minecraft:zombie_villager", 33 | "weight": 5, 34 | "minCount": 1, 35 | "maxCount": 1 36 | }, 37 | { 38 | "type": "minecraft:skeleton", 39 | "weight": 100, 40 | "minCount": 4, 41 | "maxCount": 4 42 | }, 43 | { 44 | "type": "minecraft:creeper", 45 | "weight": 100, 46 | "minCount": 4, 47 | "maxCount": 4 48 | }, 49 | { 50 | "type": "minecraft:slime", 51 | "weight": 100, 52 | "minCount": 4, 53 | "maxCount": 4 54 | }, 55 | { 56 | "type": "minecraft:enderman", 57 | "weight": 10, 58 | "minCount": 1, 59 | "maxCount": 4 60 | }, 61 | { 62 | "type": "minecraft:witch", 63 | "weight": 5, 64 | "minCount": 1, 65 | "maxCount": 1 66 | } 67 | ], 68 | "creature": [], 69 | "ambient": [ 70 | { 71 | "type": "minecraft:bat", 72 | "weight": 10, 73 | "minCount": 8, 74 | "maxCount": 8 75 | } 76 | ], 77 | "axolotls": [], 78 | "underground_water_creature": [ 79 | { 80 | "type": "minecraft:glow_squid", 81 | "weight": 10, 82 | "minCount": 4, 83 | "maxCount": 6 84 | } 85 | ], 86 | "water_creature": [], 87 | "water_ambient": [], 88 | "misc": [] 89 | }, 90 | "spawn_costs": {}, 91 | "carvers": { 92 | "air": [ 93 | "minecraft:cave", 94 | "minecraft:cave_extra_underground", 95 | "minecraft:canyon" 96 | ] 97 | }, 98 | "features": [ 99 | [ 100 | "minecraft:lake_lava_underground", 101 | "minecraft:amethyst_geode", 102 | "minecraft:monster_room", 103 | "minecraft:monster_room_deep", 104 | "minecraft:ore_dirt", 105 | "minecraft:ore_gravel", 106 | "minecraft:ore_granite_upper", 107 | "minecraft:ore_granite_lower", 108 | "minecraft:ore_diorite_upper", 109 | "minecraft:ore_diorite_lower", 110 | "minecraft:ore_andesite_upper", 111 | "minecraft:ore_andesite_lower", 112 | "minecraft:ore_tuff", 113 | "minecraft:ore_coal_upper", 114 | "minecraft:ore_coal_lower", 115 | "minecraft:ore_iron_upper", 116 | "minecraft:ore_iron_middle", 117 | "minecraft:ore_iron_small", 118 | "minecraft:ore_gold", 119 | "minecraft:ore_gold_lower", 120 | "minecraft:ore_redstone", 121 | "minecraft:ore_redstone_lower", 122 | "minecraft:ore_diamond", 123 | "minecraft:ore_diamond_large", 124 | "minecraft:ore_diamond_buried", 125 | "minecraft:ore_lapis", 126 | "minecraft:ore_lapis_buried", 127 | "minecraft:ore_copper", 128 | "minecraft:underwater_magma", 129 | "minecraft:disk_sand", 130 | "minecraft:disk_clay", 131 | "minecraft:disk_gravel", 132 | "minecraft:glow_lichen", 133 | "minecraft:ore_emerald" 134 | ] 135 | ] 136 | } 137 | -------------------------------------------------------------------------------- /src/main/resources/data/mining_dimension/worldgen/noise_settings/mining.json: -------------------------------------------------------------------------------- 1 | { 2 | "sea_level": -48, 3 | "disable_mob_generation": false, 4 | "aquifers_enabled": true, 5 | "ore_veins_enabled": true, 6 | "legacy_random_source": false, 7 | "default_block": { 8 | "Name": "minecraft:stone" 9 | }, 10 | "default_fluid": { 11 | "Name": "minecraft:lava", 12 | "Properties": { 13 | "level": "0" 14 | } 15 | }, 16 | "noise": { 17 | "min_y": -64, 18 | "height": 384, 19 | "size_horizontal": 1, 20 | "size_vertical": 2 21 | }, 22 | "noise_router": { 23 | "barrier": 0, 24 | "fluid_level_floodedness": 0, 25 | "fluid_level_spread": 0, 26 | "lava": 0, 27 | "temperature": { 28 | "type": "minecraft:shifted_noise", 29 | "noise": "minecraft:temperature", 30 | "xz_scale": 0.25, 31 | "y_scale": 0, 32 | "shift_x": "minecraft:shift_x", 33 | "shift_y": 0, 34 | "shift_z": "minecraft:shift_z" 35 | }, 36 | "vegetation": { 37 | "type": "minecraft:shifted_noise", 38 | "noise": "minecraft:vegetation", 39 | "xz_scale": 0.25, 40 | "y_scale": 0, 41 | "shift_x": "minecraft:shift_x", 42 | "shift_y": 0, 43 | "shift_z": "minecraft:shift_z" 44 | }, 45 | "continents": "minecraft:overworld/continents", 46 | "erosion": "minecraft:overworld/erosion", 47 | "depth": "minecraft:overworld/depth", 48 | "ridges": "minecraft:overworld/ridges", 49 | "initial_density_without_jaggedness": { 50 | "type": "minecraft:mul", 51 | "argument1": 4, 52 | "argument2": { 53 | "type": "minecraft:quarter_negative", 54 | "argument": { 55 | "type": "minecraft:mul", 56 | "argument1": "minecraft:overworld/depth", 57 | "argument2": { 58 | "type": "minecraft:cache_2d", 59 | "argument": "minecraft:overworld/factor" 60 | } 61 | } 62 | } 63 | }, 64 | "final_density": { 65 | "type": "minecraft:squeeze", 66 | "argument": { 67 | "type": "minecraft:mul", 68 | "argument1": 0.64, 69 | "argument2": { 70 | "type": "minecraft:interpolated", 71 | "argument": { 72 | "type": "minecraft:blend_density", 73 | "argument": { 74 | "type": "minecraft:add", 75 | "argument1": { 76 | "type": "minecraft:mul", 77 | "argument1": { 78 | "type": "minecraft:y_clamped_gradient", 79 | "from_y": -72, 80 | "to_y": -40, 81 | "from_value": 0, 82 | "to_value": 1 83 | }, 84 | "argument2": { 85 | "type": "minecraft:add", 86 | "argument1": { 87 | "type": "minecraft:add", 88 | "argument1": { 89 | "type": "minecraft:mul", 90 | "argument1": { 91 | "type": "minecraft:y_clamped_gradient", 92 | "from_y": 296, 93 | "to_y": 320, 94 | "from_value": 1, 95 | "to_value": 0 96 | }, 97 | "argument2": { 98 | "type": "minecraft:add", 99 | "argument1": "minecraft:overworld/caves/spaghetti_2d", 100 | "argument2": -0.9375 101 | } 102 | }, 103 | "argument2": 0.9375 104 | }, 105 | "argument2": -2.5 106 | } 107 | }, 108 | "argument2": 2.5 109 | } 110 | } 111 | } 112 | } 113 | }, 114 | "vein_toggle": 0, 115 | "vein_ridged": 0, 116 | "vein_gap": 0 117 | }, 118 | "surface_rule": { 119 | "type": "minecraft:sequence", 120 | "sequence": [ 121 | { 122 | "type": "minecraft:condition", 123 | "if_true": { 124 | "type": "minecraft:not", 125 | "invert": { 126 | "type": "minecraft:vertical_gradient", 127 | "random_name": "minecraft:bedrock_roof", 128 | "true_at_and_below": { 129 | "below_top": 5 130 | }, 131 | "false_at_and_above": { 132 | "below_top": 0 133 | } 134 | } 135 | }, 136 | "then_run": { 137 | "type": "minecraft:block", 138 | "result_state": { 139 | "Name": "minecraft:bedrock" 140 | } 141 | } 142 | }, 143 | { 144 | "type": "minecraft:condition", 145 | "if_true": { 146 | "type": "minecraft:vertical_gradient", 147 | "random_name": "minecraft:bedrock_floor", 148 | "true_at_and_below": { 149 | "above_bottom": 0 150 | }, 151 | "false_at_and_above": { 152 | "above_bottom": 5 153 | } 154 | }, 155 | "then_run": { 156 | "type": "minecraft:block", 157 | "result_state": { 158 | "Name": "minecraft:bedrock" 159 | } 160 | } 161 | }, 162 | { 163 | "type": "minecraft:condition", 164 | "if_true": { 165 | "type": "minecraft:vertical_gradient", 166 | "random_name": "minecraft:deepslate", 167 | "true_at_and_below": { 168 | "absolute": 0 169 | }, 170 | "false_at_and_above": { 171 | "absolute": 8 172 | } 173 | }, 174 | "then_run": { 175 | "type": "minecraft:block", 176 | "result_state": { 177 | "Name": "minecraft:deepslate", 178 | "Properties": { 179 | "axis": "y" 180 | } 181 | } 182 | } 183 | } 184 | ] 185 | }, 186 | "spawn_target": [ 187 | { 188 | "erosion": [ 189 | -1, 190 | 1 191 | ], 192 | "depth": 0, 193 | "weirdness": [ 194 | -1, 195 | -0.16 196 | ], 197 | "offset": 0, 198 | "temperature": [ 199 | -1, 200 | 1 201 | ], 202 | "humidity": [ 203 | -1, 204 | 1 205 | ], 206 | "continentalness": [ 207 | -0.11, 208 | 1 209 | ] 210 | }, 211 | { 212 | "erosion": [ 213 | -1, 214 | 1 215 | ], 216 | "depth": 0, 217 | "weirdness": [ 218 | 0.16, 219 | 1 220 | ], 221 | "offset": 0, 222 | "temperature": [ 223 | -1, 224 | 1 225 | ], 226 | "humidity": [ 227 | -1, 228 | 1 229 | ], 230 | "continentalness": [ 231 | -0.11, 232 | 1 233 | ] 234 | } 235 | ] 236 | } 237 | -------------------------------------------------------------------------------- /src/main/resources/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/henkelmax/advanced-mining-dimension/6ab667a9ebaf228a7560e41b36e49a9362b4d8c4/src/main/resources/icon.png -------------------------------------------------------------------------------- /src/main/resources/mining_dimension.mixins.json: -------------------------------------------------------------------------------- 1 | { 2 | "required": true, 3 | "package": "de.maxhenkel.miningdimension.mixin", 4 | "compatibilityLevel": "JAVA_17", 5 | "refmap": "mining_dimension.refmap.json", 6 | "minVersion": "0.8", 7 | "client": [ 8 | "WorldOpenFlowsMixin" 9 | ], 10 | "injectors": { 11 | "defaultRequire": 1 12 | } 13 | } -------------------------------------------------------------------------------- /src/main/resources/pack.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "pack": { 3 | "description": "mining_dimension resources", 4 | "pack_format": 32 5 | } 6 | } 7 | --------------------------------------------------------------------------------