Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
1package net.lerariemann.infinity.dimensions;
2
3import net.lerariemann.infinity.util.core.CommonIO;
4import net.minecraft.nbt.NbtCompound;
5import net.minecraft.nbt.NbtList;
6import net.minecraft.nbt.NbtString;
7
8public class DimensionData {
9 NbtCompound data;
10 String path;
11 DimensionData(RandomDimension parent) {
12 data = new NbtCompound();
13 path = parent.getStoragePath();
14 data.put("stats", stats(parent));
15 data.put("blocks", blocks(parent));
16 data.put("biomes", biomes(parent));
17 data.put("structures", structures(parent));
18 }
19
20 void save() {
21 CommonIO.write(data, path, "data.json");
22 }
23
24 NbtCompound stats(RandomDimension parent) {
25 NbtCompound res = new NbtCompound();
26 res.putString("type", parent.type_alike);
27 res.putInt("height", parent.height);
28 res.putInt("min_y", parent.min_y);
29 res.putInt("sea_level", parent.sea_level);
30 return res;
31 }
32
33 NbtCompound blocks(RandomDimension parent) {
34 NbtCompound res = new NbtCompound();
35 res.put("default", parent.default_block);
36 res.put("deepslate", parent.deepslate);
37 res.put("fluid", parent.default_fluid);
38 return res;
39 }
40
41 NbtCompound biomes(RandomDimension parent) {
42 NbtCompound res = new NbtCompound();
43 NbtList vanilla = new NbtList();
44 parent.vanilla_biomes.forEach(s -> vanilla.add(NbtString.of(s)));
45 res.put("vanilla", vanilla);
46 NbtList random = new NbtList();
47 parent.random_biomes.forEach(biome -> {
48 NbtCompound b = new NbtCompound();
49 String name = biome.fullname;
50 b.putString("name", name);
51 b.put("grass", parent.top_blocks.get(name));
52 b.put("dirt", parent.underwater.get(name));
53 b.put("colors", biome.colors);
54 NbtList mobs = new NbtList();
55 biome.mobs.forEach(mob -> mobs.add(NbtString.of(mob)));
56 b.put("mobs", mobs);
57 random.add(b);
58 });
59 res.put("random", random);
60 return res;
61 }
62
63 NbtCompound structures(RandomDimension parent) {
64 NbtCompound res = new NbtCompound();
65 parent.structure_ids.forEach((type, list) -> {
66 NbtList ids = new NbtList();
67 list.forEach(id -> ids.add(NbtString.of(id)));
68 res.put(type, ids);
69 });
70 return res;
71 }
72}