Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
at master 72 lines 2.5 kB view raw
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}