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.CompoundTag;
5import net.minecraft.nbt.ListTag;
6import net.minecraft.nbt.StringTag;
7
8public class DimensionData {
9 CompoundTag data;
10 String path;
11 DimensionData(RandomDimension parent) {
12 data = new CompoundTag();
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 CompoundTag stats(RandomDimension parent) {
25 CompoundTag res = new CompoundTag();
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 CompoundTag blocks(RandomDimension parent) {
34 CompoundTag res = new CompoundTag();
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 CompoundTag biomes(RandomDimension parent) {
42 CompoundTag res = new CompoundTag();
43 ListTag vanilla = new ListTag();
44 parent.vanilla_biomes.forEach(s -> vanilla.add(StringTag.valueOf(s)));
45 res.put("vanilla", vanilla);
46 ListTag random = new ListTag();
47 parent.random_biomes.forEach(biome -> {
48 CompoundTag b = new CompoundTag();
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 ListTag mobs = new ListTag();
55 biome.mobs.forEach(mob -> mobs.add(StringTag.valueOf(mob)));
56 b.put("mobs", mobs);
57 random.add(b);
58 });
59 res.put("random", random);
60 return res;
61 }
62
63 CompoundTag structures(RandomDimension parent) {
64 CompoundTag res = new CompoundTag();
65 parent.structure_ids.forEach((type, list) -> {
66 ListTag ids = new ListTag();
67 list.forEach(id -> ids.add(StringTag.valueOf(id)));
68 res.put(type, ids);
69 });
70 return res;
71 }
72}