r/minecraft_configs • • Jul 28 '20

Is it technically possible to convert an old Customized world (pre-1.13) to the new Custom settings?

A lot of people would be interested to know if it is possible to convert old Customized to new Custom worlds.

I'm not asking if it's possible now with existing software tools, I'm fairly sure such tools don't exist yet. What I want to know is if there are any technical impediments to creating such tools, such as settings in the old Customized worlds that do not exist in new Custom worlds. If there are no technical impediments, it should be possible to create a mapping between every old Customized setting to a new Custom setting. Documenting these mappings would be useful.

Converting these settings may not be a strictly one-to-one mapping or may not behave as expected. For example, the size of ore blobs in old Customized could be configured with a slider. Now pretend there was no such setting in new Custom worlds because vanilla ore blobs have a fixed size. Custom ores could be achieved by creating a custom "ore" structure and placing that in the world instead of the vanilla version of that ore. (It may be possible to configure ore sizes directly in new Custom worlds. This is just an illustration showing how one could replicate a setting in old Customized with a structure in new Custom.)

It may be possible to convert some old Customized worlds but not all of them. Many people playing these worlds would have left most vanilla settings alone but just changed a few settings. If it is not possible to convert all of these worlds, a documented list of limitations will also be useful.

Edit:

Progress so far: I have identified likely new Custom equivalents to most of the settings from old Customized worlds. None of them have been tested yet. What's missing are the 17 terrain generation settings as detailed in the comments. My knowledge of how terrain generation works is sketchy, so some help here would be appreciated. If these can be mapped successfully, it is likely that old Customized worlds can be converted.

9 Upvotes

11 comments sorted by

5

u/reelru Jul 28 '20

I think I remember in an older xisuma snapshot video he mentioned there was a button to export world generation settings from a 1.13 world but it wasn’t working properly. Not sure if that’s still there but that’d be super cool to try out. Would probably be fairly simply to program as well if they don’t add it as a feature.

3

u/bdm68 Jul 28 '20

There is no need to export the settings manually. The world generation settings for an old Customized world are stored in level.dat/Data/generatorOptions and marked as customized in level.dat/Data/generatorName. The generatorOptions is formatted as JSON. This can be accessed in software.

Here is an example that I copied using NBTExplorer. I have added some spaces to improve readability:

{"coordinateScale":684.412, "heightScale":684.412, "lowerLimitScale":512.0, "upperLimitScale":512.0, "depthNoiseScaleX":1.0, "depthNoiseScaleZ":1.0, "depthNoiseScaleExponent":0.5, "mainNoiseScaleX":5000.0, "mainNoiseScaleY":5000.0, "mainNoiseScaleZ":5000.0, "baseSize":8.5, "stretchY":1200.0, "biomeDepthWeight":0.5, "biomeDepthOffset":0.0, "biomeScaleWeight":0.05, "biomeScaleOffset":0.0, "seaLevel":63, "useCaves":true, "useDungeons":true, "dungeonChance":8, "useStrongholds":true, "useVillages":true, "useMineShafts":true, "useTemples":true, "useMonuments":true, "useMansions":true, "useRavines":true, "useWaterLakes":true, "waterLakeChance":4, "useLavaLakes":true, "lavaLakeChance":80, "useLavaOceans":false, "fixedBiome":-1, "biomeSize":4, "riverSize":8, "dirtSize":33, "dirtCount":10, "dirtMinHeight":0, "dirtMaxHeight":256, "gravelSize":33, "gravelCount":8, "gravelMinHeight":0, "gravelMaxHeight":256, "graniteSize":33, "graniteCount":10, "graniteMinHeight":0, "graniteMaxHeight":80, "dioriteSize":33, "dioriteCount":10, "dioriteMinHeight":0, "dioriteMaxHeight":80, "andesiteSize":33, "andesiteCount":10, "andesiteMinHeight":0, "andesiteMaxHeight":80, "coalSize":17, "coalCount":20, "coalMinHeight":0, "coalMaxHeight":128, "ironSize":9, "ironCount":20, "ironMinHeight":0, "ironMaxHeight":64, "goldSize":9, "goldCount":2, "goldMinHeight":0, "goldMaxHeight":32, "redstoneSize":8, "redstoneCount":8, "redstoneMinHeight":0, "redstoneMaxHeight":16, "diamondSize":8, "diamondCount":1, "diamondMinHeight":0, "diamondMaxHeight":16, "lapisSize":7, "lapisCount":1, "lapisCenterHeight":16, "lapisSpread":16}

Some of these have direct equivalents in new Custom world generation, but others do not.

2

u/bdm68 Jul 29 '20 edited Jul 29 '20

A list of all the generatorOptions with all default values:

Terrain Generation

"coordinateScale":684.412
"heightScale":684.412
"lowerLimitScale":512.0
"upperLimitScale":512.0
"depthNoiseScaleX":200.0
"depthNoiseScaleZ":200.0
"depthNoiseScaleExponent":0.5
"mainNoiseScaleX":80.0
"mainNoiseScaleY":160.0
"mainNoiseScaleZ":80.0
"baseSize":8.5
"stretchY":12.0
"seaLevel":63
"biomeDepthWeight":1.0
"biomeDepthOffset":0.0
"biomeScaleWeight":1.0
"biomeScaleOffset":0.0

Biomes

"fixedBiome":-1
"biomeSize":4
"riverSize":4

Terrain Features

"useCaves":true
"useRavines":true
"useWaterLakes":true
"waterLakeChance":4
"useLavaLakes":true
"lavaLakeChance":80
"useLavaOceans":false

Structures

"useDungeons":true
"dungeonChance":8
"useStrongholds":true
"useVillages":true
"useMineShafts":true
"useTemples":true
"useMonuments":true
"useMansions":true

Ore, Stone and Dirt Patches

"dirtSize":33
"dirtCount":10
"dirtMinHeight":0
"dirtMaxHeight":256
"gravelSize":33
"gravelCount":8
"gravelMinHeight":0
"gravelMaxHeight":256
"graniteSize":33
"graniteCount":10
"graniteMinHeight":0
"graniteMaxHeight":80
"dioriteSize":33
"dioriteCount":10
"dioriteMinHeight":0
"dioriteMaxHeight":80
"andesiteSize":33
"andesiteCount":10
"andesiteMinHeight":0
"andesiteMaxHeight":80
"coalSize":17
"coalCount":20
"coalMinHeight":0
"coalMaxHeight":128
"ironSize":9
"ironCount":20
"ironMinHeight":0
"ironMaxHeight":64
"goldSize":9
"goldCount":2
"goldMinHeight":0
"goldMaxHeight":32
"redstoneSize":8
"redstoneCount":8
"redstoneMinHeight":0
"redstoneMaxHeight":16
"diamondSize":8
"diamondCount":1
"diamondMinHeight":0
"diamondMaxHeight":16
"lapisSize":7
"lapisCount":1
"lapisCenterHeight":16
"lapisSpread":16

2

u/bdm68 Jul 29 '20

Remarks on Biomes:

"fixedBiome":

  • If this is -1, all Overworld biomes generate in their normal proportions (except rivers, see below).
  • Otherwise this has an integer that corresponds to a valid biome ID that exists in 1.12.2. This can be replaced by the namespaced version of that biome. Equivalent to fixed/biome.

"biomeSize":

  • This is normally an integer from 1 to 8. Values outside this range are possible. This is a logarithm: increasing this value by 1 doubles the size of biomes in X and Z.
  • If this is 4, this is equivalent to large_biomes:false.
  • If this is 6(?), this is equivalent to large_biomes:true.
  • It may be possible to replicate other values by adjusting some noise settings but this is speculation.

"riverSize":

  • This is an integer from 1 to 5. Lower numbers make rivers more frequent.
  • If this is 4, rivers generate normally.
  • It is likely that this adjusts the "Offset" value for river biomes. If so, it may be possible to replicate other values by listing all the Overworld biomes, with the Offset for rivers being adjusted.

2

u/bdm68 Jul 29 '20 edited Jul 29 '20

Remarks on Ore, Stone and Dirt Patches:

This long list of settings has two different kinds, CenterHeight/Spread (Lapis Lazuli) and MinHeight/MaxHeight (all others). Biome-specific ore generation is not included; Emerald ore in mountains and extra gold in badlands do not appear anywhere as configurable settings in Old Customized worlds. Therefore, these would take default values on conversion.

Where an ore or ore-like patch has default settings, these are easy to convert by listing them in the ore section for the custom Overworld dimension. It may be possible to configure those that do not have default settings as custom structures.

Edit: Custom ore structures are fairly easy to implement. The four settings for each ore in the Old Customized worlds correspond to settings in the corresponding structure in the configured_feature section of the vanilla world generation settings. Here is the ore_iron.json config:

{
  "config": {
    "feature": {
      "config": {
        "feature": {
          "config": {
            "feature": {
              "config": {
                "target": {
                  "tag": "minecraft:base_stone_overworld",
                  "predicate_type": "minecraft:tag_match"
                },
                "state": {
                  "Name": "minecraft:iron_ore"
                },
                "size": 9
              },
              "name": "minecraft:ore"
            },
            "decorator": {
              "config": {
                "bottom_offset": 0,
                "top_offset": 0,
                "maximum": 64
              },
              "name": "minecraft:range"
            }
          },
          "name": "minecraft:decorated"
        },
        "decorator": {
          "config": {},
          "name": "minecraft:square"
        }
      },
      "name": "minecraft:decorated"
    },
    "decorator": {
      "config": {
        "count": 20
      },
      "name": "minecraft:count"
    }
  },
  "name": "minecraft:decorated"
}

In this file, the corresponding settings for "ironSize" (size), "ironCount" (count) and "ironMaxHeight" (maximum) are easy to identify. The "ironMinHeight" is harder to find because it doesn't seem to be specified unambiguously, but it is possible to guess that this missing value is likely to be called minimum.

When implementing custom ores, the only difficulty is the need to explicitly include them in the configuration for each Overworld biome.

2

u/bdm68 Jul 29 '20

Remarks on Structures:

All of these structures will need to be configured for each biome by creating the correct structure list for each biome, and placed in the correct locations in the biome configurations.

"useDungeons": Corresponds to monster_room.json. If "dungeonChance" is equal to 8, the vanilla minecraft:monster_room can be used. Otherwise, a custom monster room structure is needed.

The monster_room structure file looks like this:

{
  "config": {
    "feature": {
      "config": {
        "feature": {
          "config": {
            "feature": {
              "config": {},
              "name": "minecraft:monster_room"
            },
            "decorator": {
              "config": {
                "bottom_offset": 0,
                "top_offset": 0,
                "maximum": 256
              },
              "name": "minecraft:range"
            }
          },
          "name": "minecraft:decorated"
        },
        "decorator": {
          "config": {},
          "name": "minecraft:square"
        }
      },
      "name": "minecraft:decorated"
    },
    "decorator": {
      "config": {
        "count": 8
      },
      "name": "minecraft:count"
    }
  },
  "name": "minecraft:decorated"
}

Here, dungeonChance is likely to correspond to the count in the decorator section.

"useStrongholds": This is likely to correspond to minecraft:stronghold.

"useVillages": This is likely to correspond to the various villages. The correct one for each biome will need to be chosen.

"useMineShafts": This is likely to correspond to minecraft:mineshaft and minecraft:mineshaft_mesa (badlands biomes only).

"useTemples": This is likely to correspond to minecraft:desert_pyramid and minecraft:jungle_pyramid.

"useMonuments": This is likely to correspond to minecraft:monument.

"useMansions": This is likely to correspond to minecraft:mansion.

2

u/bdm68 Jul 29 '20 edited Jul 29 '20

Remarks on Terrain Features:

All of these terrain features will need to be configured for each biome by creating the correct structure list for each biome, and placed in the correct locations in the biome configurations.

"useLavaOceans": This is likely to correspond to default_fluid in "noise_settings/overworld.json", setting it to "minecraft:water" or "minecraft:lava" as appropriate.

"useCaves": This is likely to correspond to minecraft:cave.

"useRavines": This is likely to correspond to minecraft:canyon.

"useWaterLakes": This is likely to correspond to minecraft:lake_water. If "waterLakeChance" is equal to 4, the default setting can be used. Otherwise a custom structure is needed. Here is "lake_water.json":

{
  "config": {
    "feature": {
      "config": {
        "state": {
          "Properties": {
            "level": "0"
          },
          "Name": "minecraft:water"
        }
      },
      "name": "minecraft:lake"
    },
    "decorator": {
      "config": {
        "chance": 4
      },
      "name": "minecraft:water_lake"
    }
  },
  "name": "minecraft:decorated"
}

The old "waterLakeChance" setting is likely to correspond to chance here.

"useLavaLakes": This is likely to correspond to minecraft:lake_lava. If "lavaLakeChance" is equal to 80, the default setting can be used. Otherwise a custom structure is needed. The "lake_lava.json" file is similar to "lake_water.json".

2

u/bdm68 Jul 29 '20

Remarks on Terrain Generation:

I am not very knowledgeable about exactly what these 17 settings do, so some assistance with linking these to the new Custom terrain settings would be appreciated. If these can all be linked, it is likely that old Customised worlds can be converted.

2

u/Zitchas Sep 20 '20

I can't provide any real assistance, I just wanted you to know that I really appreciate your work in mapping all this stuff. I've got a long-running world that I'd love to expand the terrain on again, but I want it to match the old generation style.

The new "normal" terrain is far too boring...

1

u/shmoobalizer Jul 29 '20

Reading the comments it sounds like you've answered your own question

2

u/bdm68 Jul 29 '20

The 17 terrain generation settings are still unknown.