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.InfinityMod;
4import net.lerariemann.infinity.util.VersionMethods;
5import net.lerariemann.infinity.util.core.CommonIO;
6import net.lerariemann.infinity.util.core.ConfigType;
7import net.lerariemann.infinity.util.core.NbtUtils;
8import net.minecraft.nbt.CompoundTag;
9import net.minecraft.nbt.ListTag;
10import java.util.HashMap;
11import java.util.Map;
12import java.util.Random;
13
14public class RandomStructure {
15 public RandomBiome parent;
16 public int id;
17 public String type;
18 public String name;
19 public String fullname;
20 public Random random;
21 public CompoundTag data;
22
23 RandomStructure(int i, RandomBiome b) {
24 id = i;
25 parent = b;
26 random = new Random(i);
27 addData();
28 fullname = InfinityMod.MOD_ID + ":" + name;
29 }
30
31 void addData() {
32 data = parent.PROVIDER.randomElement(random, ConfigType.STRUCTURES);
33 assert data.contains("id");
34 type = NbtUtils.getString(data,"id");
35 name = VersionMethods.id(type).getPath().replace("/", "_").replace("\\", "_") + "_" + id;
36
37 data.putString("type", "infinity:setupper");
38 data.putString("biomes", parent.fullname);
39 if (roll("spawn_override")) {
40 data.remove("spawn_overrides");
41 data.put("spawn_overrides", spawnOverrides());
42 }
43 }
44
45 void save() {
46 CommonIO.write(data, parent.parent.getStoragePath() + "/worldgen/structure", name + ".json");
47 (new RandomStructureSet(this)).save();
48 }
49
50 boolean roll(String key) {
51 return parent.PROVIDER.roll(random, key);
52 }
53
54 CompoundTag spawnOverrides() {
55 CompoundTag res = new CompoundTag();
56 Map<String, ListTag> moblist = new HashMap<>();
57 int nummobs = random.nextInt(1, 7);
58 for (int i = 0; i < nummobs; i++) {
59 String mobcategory = parent.PROVIDER.randomName(random, ConfigType.MOB_CATEGORIES);
60 CompoundTag mob = parent.addMob(mobcategory, false);
61 if (!moblist.containsKey(mobcategory)) moblist.put(mobcategory, new ListTag());
62 moblist.get(mobcategory).add(mob);
63 }
64 for (String i : moblist.keySet()) {
65 CompoundTag category = new CompoundTag();
66 category.putString("bounding_box", roll("full_box") ? "full" : "piece");
67 category.put("spawns", new ListTag());
68 res.put(i, category);
69 }
70 return res;
71 }
72}