Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.

Further futureproofing

+130 -118
+4 -4
common/src/main/java/net/lerariemann/infinity/block/entity/BiomeBottleBlockEntity.java
··· 70 70 71 71 public void readNbt(NbtCompound tag, RegistryWrapper.WrapperLookup registryLookup) { 72 72 super.readNbt(tag, registryLookup); 73 - this.charge = tag.getInt("Charge"); 74 - this.biome = Identifier.of(tag.getString("Biome")); 75 - this.color = tag.getInt("Color"); 76 - this.from_charge = NbtUtils.test(tag, "from_charge", 0); 73 + this.charge = NbtUtils.getInt(tag, "Charge"); 74 + this.biome = Identifier.of(NbtUtils.getString(tag, "Biome")); 75 + this.color = NbtUtils.getInt(tag, "Color"); 76 + this.from_charge = NbtUtils.getInt(tag, "from_charge", 0); 77 77 } 78 78 79 79 @Override
+9 -10
common/src/main/java/net/lerariemann/infinity/block/entity/InfinityPortalBlockEntity.java
··· 3 3 import net.lerariemann.infinity.options.PortalColorApplier; 4 4 import net.lerariemann.infinity.util.InfinityMethods; 5 5 import net.lerariemann.infinity.registry.core.ModBlockEntities; 6 + import net.lerariemann.infinity.util.core.NbtUtils; 6 7 import net.lerariemann.infinity.util.teleport.InfinityPortal; 7 8 import net.minecraft.block.BlockState; 8 9 import net.minecraft.nbt.NbtCompound; ··· 154 155 public void readNbt(NbtCompound tag, RegistryWrapper.WrapperLookup registryLookup) { 155 156 super.readNbt(tag, registryLookup); 156 157 if (tag.contains("Dimension", NbtElement.NUMBER_TYPE)) { //conversion from legacy formats 157 - this.portalColor = tag.getInt("Dimension") & 0xFFFFFF; 158 + this.portalColor = NbtUtils.getInt(tag, "Dimension") & 0xFFFFFF; 158 159 if (tag.contains("DimensionName")) { 159 - this.dimension = Identifier.of(tag.getString("DimensionName")); 160 + this.dimension = Identifier.of(NbtUtils.getString(tag, "DimensionName")); 160 161 } 161 162 else this.dimension = InfinityMethods.getDimId(this.portalColor); 162 163 } 163 164 else if (tag.contains("Dimension", NbtElement.STRING_TYPE)) { //new better format 164 - this.dimension = Identifier.of(tag.getString("Dimension")); 165 - this.portalColor = tag.contains("Color", NbtElement.INT_TYPE) ? 166 - tag.getInt("Color") : 167 - (world != null ? PortalColorApplier.of(dimension, world.getServer()) : 168 - PortalColorApplier.of(dimension, new NbtCompound())).apply(pos) & 0xFFFFFF; 165 + this.dimension = Identifier.of(NbtUtils.getString(tag, "Dimension")); 166 + this.portalColor = NbtUtils.getInt(tag, "Color", (world != null ? PortalColorApplier.of(dimension, world.getServer()) : 167 + PortalColorApplier.of(dimension, new NbtCompound())).apply(pos) & 0xFFFFFF); 169 168 } 170 169 else { 171 170 setDimension(InfinityMethods.getRandomSeed(new Random())); //random by default 172 171 } 173 - this.isOpen = tag.getBoolean("Open"); 172 + this.isOpen = NbtUtils.getBoolean(tag, "Open", false); 174 173 if (tag.contains("other_side")) { 175 - NbtCompound pos = tag.getCompound("other_side"); 176 - otherSidePos = new BlockPos(pos.getInt("x"), pos.getInt("y"), pos.getInt("z")); 174 + NbtCompound pos = NbtUtils.getCompound(tag,"other_side"); 175 + otherSidePos = new BlockPos(NbtUtils.getInt(pos, "x"), NbtUtils.getInt(pos, "y"), NbtUtils.getInt(pos, "z")); 177 176 } 178 177 } 179 178
+3 -2
common/src/main/java/net/lerariemann/infinity/compat/cloth/AmendmentConfigFactory.java
··· 9 9 import me.shedaniel.clothconfig2.impl.builders.DropdownMenuBuilder; 10 10 import me.shedaniel.clothconfig2.impl.builders.SubCategoryBuilder; 11 11 import net.lerariemann.infinity.util.core.CommonIO; 12 + import net.lerariemann.infinity.util.core.NbtUtils; 12 13 import net.minecraft.nbt.NbtCompound; 13 14 import net.minecraft.nbt.NbtElement; 14 15 import net.minecraft.nbt.NbtList; ··· 114 115 NbtCompound elements = readNbt(configPath()+("/amendments.json")); 115 116 NbtCompound amendment = elements.getList("elements", 10).getCompound(amendmentIndex); 116 117 // Check if an amendment should be changed before writing 117 - if (!Objects.equals(amendment.getString(newValue), newValue)) { 118 + if (!Objects.equals(NbtUtils.getString(amendment, name), newValue)) { 118 119 amendment.putString(name, newValue); 119 120 CommonIO.write(elements, configPath(), "amendments.json"); 120 121 } ··· 124 125 NbtCompound elements = readNbt(configPath()+("/amendments.json")); 125 126 NbtCompound amendment = elements.getList("elements", 10).getCompound(amendmentIndex); 126 127 // Check if an amendment should be changed before writing 127 - if (amendment.getDouble(name) != newValue) { 128 + if (NbtUtils.getDouble(amendment, name) != newValue) { 128 129 amendment.putDouble(name, newValue); 129 130 CommonIO.write(elements, configPath(), "amendments.json"); 130 131 }
+7 -6
common/src/main/java/net/lerariemann/infinity/compat/cloth/ClothConfigFactory.java
··· 14 14 import net.lerariemann.infinity.InfinityMod; 15 15 import net.lerariemann.infinity.util.core.CommonIO; 16 16 import net.lerariemann.infinity.util.InfinityMethods; 17 + import net.lerariemann.infinity.util.core.NbtUtils; 17 18 import net.minecraft.client.gui.screen.Screen; 18 19 import net.minecraft.client.resource.language.I18n; 19 20 import net.minecraft.nbt.NbtCompound; ··· 296 297 NbtCompound rootConfig = readDefaultConfig(); 297 298 NbtCompound configPath = rootConfig; 298 299 if (prevField != null) { 299 - configPath = rootConfig.getCompound(prevField); 300 + configPath = NbtUtils.getCompound(rootConfig, prevField); 300 301 } 301 302 if (prevPrevField != null) { 302 - configPath = rootConfig.getCompound(prevPrevField).getCompound(prevField); 303 + configPath = NbtUtils.getCompound(NbtUtils.getCompound(rootConfig, prevPrevField), prevField); 303 304 } 304 305 305 306 return switch (type) { 306 - case "string" -> configPath.getString(field.getKey()); 307 - case "boolean" -> configPath.getBoolean(field.getKey()); 308 - case "double" -> configPath.getDouble(field.getKey()); 309 - case "int" -> configPath.getInt(field.getKey()); 307 + case "string" -> NbtUtils.getString(configPath, field.getKey()); 308 + case "boolean" -> NbtUtils.getBoolean(configPath, field.getKey()); 309 + case "double" -> NbtUtils.getDouble(configPath, field.getKey()); 310 + case "int" -> NbtUtils.getInt(configPath, field.getKey()); 310 311 default -> false; 311 312 }; 312 313 }
+2 -1
common/src/main/java/net/lerariemann/infinity/dimensions/RandomFeaturesList.java
··· 18 18 import net.lerariemann.infinity.dimensions.features.underground_structures.RandomFossil; 19 19 import net.lerariemann.infinity.dimensions.features.vegetation.*; 20 20 import net.lerariemann.infinity.util.core.ConfigType; 21 + import net.lerariemann.infinity.util.core.NbtUtils; 21 22 import net.lerariemann.infinity.util.core.RandomProvider; 22 23 import net.minecraft.nbt.NbtCompound; 23 24 import net.minecraft.nbt.NbtList; ··· 152 153 res.addAll(getAllElements(ConfigType.VEG2)); 153 154 addRandomFeature("surface_patch", res, RandomSurfacePatch::new); 154 155 addRandomFeature("floating_patch", res, RandomFloatingPatch::new); 155 - if (parent.parent.default_fluid.getString("Name").contains("water")) { 156 + if (NbtUtils.getString(parent.parent.default_fluid, "Name").contains("water")) { 156 157 addRandomFeature("water_plants", res, RandomSeagrass::new); 157 158 addRandomFeature("water_plants", res, RandomPickle::new); 158 159 addRandomFeature("water_plants", res, RandomKelp::new);
+2 -1
common/src/main/java/net/lerariemann/infinity/dimensions/RandomStructure.java
··· 3 3 import net.lerariemann.infinity.InfinityMod; 4 4 import net.lerariemann.infinity.util.core.CommonIO; 5 5 import net.lerariemann.infinity.util.core.ConfigType; 6 + import net.lerariemann.infinity.util.core.NbtUtils; 6 7 import net.minecraft.nbt.NbtCompound; 7 8 import net.minecraft.nbt.NbtList; 8 9 import net.minecraft.util.Identifier; ··· 31 32 void addData() { 32 33 data = parent.PROVIDER.randomElement(random, ConfigType.STRUCTURES); 33 34 assert data.contains("id"); 34 - type = data.getString("id"); 35 + type = NbtUtils.getString(data,"id"); 35 36 name = Identifier.of(type).getPath().replace("/", "_").replace("\\", "_") + "_" + id; 36 37 37 38 data.putString("type", "infinity:setupper");
+4 -3
common/src/main/java/net/lerariemann/infinity/dimensions/features/underground_ores/RandomDisk.java
··· 4 4 import net.lerariemann.infinity.dimensions.features.Placement; 5 5 import net.lerariemann.infinity.dimensions.features.RandomisedFeature; 6 6 import net.lerariemann.infinity.util.core.ConfigType; 7 + import net.lerariemann.infinity.util.core.NbtUtils; 7 8 import net.minecraft.nbt.NbtCompound; 8 9 import net.minecraft.nbt.NbtList; 9 10 import net.minecraft.nbt.NbtString; ··· 14 15 String target; 15 16 public RandomDisk(RandomFeaturesList parent) { 16 17 super(parent, "disk"); 17 - target = daddy.underwater.get(parent.parent.fullname).getString("Name"); 18 + target = NbtUtils.getString(daddy.underwater.get(parent.parent.fullname), "Name"); 18 19 id = "disk"; 19 20 savePlacement(); 20 21 } ··· 23 24 Placement res = new Placement(); 24 25 res.addInSquare(); 25 26 res.addHeightmap("OCEAN_FLOOR_WG"); 26 - String s = daddy.default_fluid.getString("fluidName"); 27 + String s = NbtUtils.getString(daddy.default_fluid, "fluidName"); 27 28 if (!s.equals("minecraft:air")) res.addBlockPredicateFilter(matchingFluids(s)); 28 29 res.addBiome(); 29 30 return res.data; ··· 40 41 if (!awt) { 41 42 NbtList blocks = new NbtList(); 42 43 blocks.add(NbtString.of(target)); 43 - blocks.add(NbtString.of(blockProvider.getCompound("state").getString("Name"))); 44 + blocks.add(NbtString.of(NbtUtils.getString(NbtUtils.getCompound(blockProvider, "state"), "Name"))); 44 45 targets.put("blocks", blocks); 45 46 } 46 47 config.put("target", targets);
+2 -1
common/src/main/java/net/lerariemann/infinity/dimensions/features/underground_ores/RandomOre.java
··· 4 4 import net.lerariemann.infinity.dimensions.features.Placement; 5 5 import net.lerariemann.infinity.dimensions.features.RandomisedFeature; 6 6 import net.lerariemann.infinity.util.core.ConfigType; 7 + import net.lerariemann.infinity.util.core.NbtUtils; 7 8 import net.minecraft.nbt.NbtCompound; 8 9 import net.minecraft.nbt.NbtList; 9 10 ··· 49 50 static NbtCompound target(NbtCompound block, boolean awt) { 50 51 NbtCompound res = new NbtCompound(); 51 52 res.putString("predicate_type", awt ? "always_true" : "block_match"); 52 - if (!awt) res.putString("block", block.getString("Name")); 53 + if (!awt) res.putString("block", NbtUtils.getString(block, "Name")); 53 54 return res; 54 55 } 55 56 }
+1 -1
common/src/main/java/net/lerariemann/infinity/dimensions/features/vegetation/RandomTree.java
··· 26 26 27 27 public NbtList placement() { 28 28 Placement res = new Placement(); 29 - NbtCompound predicate = matchingBlocks(parent.surface_block.getString("Name")); 29 + NbtCompound predicate = matchingBlocks(NbtUtils.getString(parent.surface_block, "Name")); 30 30 predicate.put("offset", offsetToNbt(Arrays.asList(0, -1, 0))); 31 31 res.addCountEveryLayer(1); 32 32 res.addWaterDepthFilter((int) Math.floor(random.nextExponential()*4));
+2 -1
common/src/main/java/net/lerariemann/infinity/dimensions/features/vegetation/RandomVegetation.java
··· 6 6 import net.lerariemann.infinity.util.core.CommonIO; 7 7 import net.lerariemann.infinity.util.core.ConfigType; 8 8 import net.lerariemann.infinity.util.core.CorePack; 9 + import net.lerariemann.infinity.util.core.NbtUtils; 9 10 import net.minecraft.nbt.*; 10 11 11 12 public class RandomVegetation extends RandomisedFeature { ··· 33 34 String tree = ConfigType.TREES.getDef(); 34 35 if (parent.roll("use_vanilla_trees")) { 35 36 tree = PROVIDER.randomName(random, ConfigType.TREES); 36 - NbtCompound c = CorePack.treePlacement(tree, parent.surface_block.getString("Name")); 37 + NbtCompound c = CorePack.treePlacement(tree, NbtUtils.getString(parent.surface_block, "Name")); 37 38 String s = tree.substring(tree.lastIndexOf(':') + 1).replace("/", "_") + "_" + parent.parent.id; 38 39 s = s.replace("/", "_"); 39 40 CommonIO.write(c, parent.storagePath + "/worldgen/placed_feature", s + ".json");
+4 -5
common/src/main/java/net/lerariemann/infinity/entity/custom/AntEntity.java
··· 5 5 import net.lerariemann.infinity.util.var.BishopBattle; 6 6 import net.minecraft.block.Block; 7 7 import net.minecraft.block.BlockState; 8 - import net.minecraft.block.FluidBlock; 9 8 import net.minecraft.block.ShapeContext; 10 9 import net.minecraft.entity.*; 11 10 import net.minecraft.entity.ai.goal.*; ··· 92 91 @Override 93 92 public void readCustomDataFromNbt(NbtCompound nbt) { 94 93 super.readCustomDataFromNbt(nbt); 95 - this.dropsLoot = NbtUtils.test(nbt, "dropsLoot", true); 96 - this.direction = switch(nbt.getString("direction")) { 94 + this.dropsLoot = NbtUtils.getBoolean(nbt, "dropsLoot", true); 95 + this.direction = switch(NbtUtils.getString(nbt, "direction")) { 97 96 case "N" -> Direction.NORTH; 98 97 case "W" -> Direction.WEST; 99 98 case "S" -> Direction.SOUTH; 100 99 default -> Direction.EAST; 101 100 }; 102 101 if (nbt.contains("last_changed_pos")) { 103 - NbtCompound pos = nbt.getCompound("last_changed_pos"); 104 - this.lastChangedPos = new BlockPos(pos.getInt("x"), pos.getInt("y"), pos.getInt("z")); 102 + NbtCompound pos = NbtUtils.getCompound(nbt, "last_changed_pos"); 103 + this.lastChangedPos = new BlockPos(NbtUtils.getInt(pos, "x"), NbtUtils.getInt(nbt,"y"), NbtUtils.getInt(nbt, "z")); 105 104 } 106 105 } 107 106
+5 -4
common/src/main/java/net/lerariemann/infinity/entity/custom/BishopEntity.java
··· 2 2 3 3 import net.lerariemann.infinity.InfinityMod; 4 4 import net.lerariemann.infinity.util.core.ConfigType; 5 + import net.lerariemann.infinity.util.core.NbtUtils; 5 6 import net.lerariemann.infinity.util.var.BishopBattle; 6 7 import net.minecraft.entity.*; 7 8 import net.minecraft.entity.ai.RangedAttackMob; ··· 183 184 184 185 public ItemStack getProjectileType() { 185 186 NbtCompound effect = InfinityMod.provider.randomElement(random, ConfigType.EFFECTS); 186 - if (!effect.getString("Category").equals("harmful") 187 - || effect.getBoolean("Instant")) return Items.ARROW.getDefaultStack(); 187 + if (!NbtUtils.getString(effect, "Category").equals("harmful") 188 + || NbtUtils.getBoolean(effect, "Instant")) return Items.ARROW.getDefaultStack(); 188 189 return ChaosSkeleton.setPotion(Items.TIPPED_ARROW.getDefaultStack(), 189 - effect.getInt("Color"), 190 - effect.getString("Name"), 190 + NbtUtils.getInt(effect, "Color"), 191 + NbtUtils.getString(effect, "Name"), 191 192 200); 192 193 } 193 194 }
+5 -5
common/src/main/java/net/lerariemann/infinity/entity/custom/ChaosCreeper.java
··· 55 55 @Nullable 56 56 public EntityData initialize(ServerWorldAccess world, LocalDifficulty difficulty, SpawnReason spawnReason, @Nullable EntityData entityData) { 57 57 NbtCompound biome = InfinityMod.provider.randomElement(world.getRandom(), ConfigType.BIOMES); 58 - this.setColor(NbtUtils.test(biome, "Color", 7842607)); 58 + this.setColor(NbtUtils.getInt(biome, "Color", 7842607)); 59 59 this.setRandomCharge(); 60 - this.setBiome(biome.getString("Name")); 60 + this.setBiome(NbtUtils.getString(biome, "Name")); 61 61 return super.initialize(world, difficulty, spawnReason, entityData); 62 62 } 63 63 ··· 109 109 @Override 110 110 public void readCustomDataFromNbt(NbtCompound nbt) { 111 111 super.readCustomDataFromNbt(nbt); 112 - this.setRange(nbt.getFloat("range")); 113 - this.setColor(nbt.getInt("color")); 114 - this.setBiome(nbt.getString("biome")); 112 + this.setRange(NbtUtils.getFloat(nbt, "range")); 113 + this.setColor(NbtUtils.getInt(nbt, "color")); 114 + this.setBiome(NbtUtils.getString(nbt, "biome")); 115 115 } 116 116 117 117 public void blow_up() {
+7 -5
common/src/main/java/net/lerariemann/infinity/entity/custom/ChaosSkeleton.java
··· 3 3 import net.lerariemann.infinity.InfinityMod; 4 4 import net.lerariemann.infinity.registry.core.ModEntities; 5 5 import net.lerariemann.infinity.util.core.ConfigType; 6 + import net.lerariemann.infinity.util.core.NbtUtils; 6 7 import net.minecraft.component.DataComponentTypes; 7 8 import net.minecraft.component.type.PotionContentsComponent; 8 9 import net.minecraft.enchantment.Enchantment; 10 + import net.minecraft.enchantment.EnchantmentHelper; 9 11 import net.minecraft.enchantment.Enchantments; 10 12 import net.minecraft.entity.EntityData; 11 13 import net.minecraft.entity.EntityType; ··· 141 143 } 142 144 143 145 public void setEffect(NbtCompound eff) { 144 - setEffect(eff.getString("Name"), eff.getInt("Color")); 146 + setEffect(NbtUtils.getString(eff, "Name"), NbtUtils.getInt(eff, "Color")); 145 147 } 146 148 public void setEffect(String eff, int c) { 147 149 if (eff.isBlank()) { 148 150 NbtCompound newEffect = InfinityMod.provider.randomElement(random, ConfigType.EFFECTS); 149 - eff = newEffect.getString("Name"); 150 - c = newEffect.getInt("Color"); 151 + eff = NbtUtils.getString(newEffect, "Name"); 152 + c = NbtUtils.getInt(newEffect, "Color"); 151 153 } 152 154 this.dataTracker.set(effect, eff); 153 155 this.dataTracker.set(color, c); ··· 176 178 @Override 177 179 public void readCustomDataFromNbt(NbtCompound nbt) { 178 180 super.readCustomDataFromNbt(nbt); 179 - this.setEffect(nbt.getString("effect"), nbt.getInt("color")); 180 - this.setDuration(nbt.getInt("duration")); 181 + this.setEffect(NbtUtils.getString(nbt, "effect"), NbtUtils.getInt(nbt, "color")); 182 + this.setDuration(NbtUtils.getInt(nbt,"duration")); 181 183 } 182 184 183 185 public static ItemStack setPotion(ItemStack stack, int color, String effect, int duration) {
+3 -2
common/src/main/java/net/lerariemann/infinity/entity/custom/ChaosSlime.java
··· 3 3 import net.lerariemann.infinity.InfinityMod; 4 4 import net.lerariemann.infinity.util.InfinityMethods; 5 5 import net.lerariemann.infinity.util.core.ConfigType; 6 + import net.lerariemann.infinity.util.core.NbtUtils; 6 7 import net.minecraft.block.Block; 7 8 import net.minecraft.block.BlockState; 8 9 import net.minecraft.block.Blocks; ··· 122 123 @Override 123 124 public void readCustomDataFromNbt(NbtCompound nbt) { 124 125 super.readCustomDataFromNbt(nbt); 125 - this.setColor(nbt.getInt("color")); 126 - Block b = Registries.BLOCK.get(Identifier.of(nbt.getString("core"))); 126 + this.setColor(NbtUtils.getInt(nbt, "color")); 127 + Block b = Registries.BLOCK.get(Identifier.of(NbtUtils.getString(nbt,"core"))); 127 128 this.setCore(b.getDefaultState()); 128 129 } 129 130
+4 -4
common/src/main/java/net/lerariemann/infinity/options/EffectGiver.java
··· 20 20 } 21 21 22 22 public static EffectGiver of(NbtCompound data) { 23 - if (data.contains("id")) return new EffectGiver(effectOf(data.getString("id")), 24 - NbtUtils.test(data, "duration", 300), 25 - NbtUtils.test(data, "amplifier", 0), 26 - Math.min(NbtUtils.test(data, "cooldown", 100), 100)); 23 + if (data.contains("id")) return new EffectGiver(effectOf(NbtUtils.getString(data, "id")), 24 + NbtUtils.getInt(data, "duration", 300), 25 + NbtUtils.getInt(data, "amplifier", 0), 26 + Math.min(NbtUtils.getInt(data, "cooldown", 100), 100)); 27 27 return new EffectGiver(null, 0,0,200); 28 28 } 29 29
+21 -22
common/src/main/java/net/lerariemann/infinity/options/InfinityOptions.java
··· 18 18 19 19 import java.io.File; 20 20 import java.util.function.Function; 21 - import static net.lerariemann.infinity.util.core.NbtUtils.*; 22 21 23 22 public class InfinityOptions { 24 23 public NbtCompound data; ··· 35 34 this.shifter = PitchShifter.decode(NbtUtils.getCompound(data, "pitch_shift", new NbtCompound())); 36 35 this.effect = EffectGiver.of(NbtUtils.getCompound(data, "effect", new NbtCompound())); 37 36 this.iridMap = IridescentMap.decode(NbtUtils.getCompound(data, "iridescent_map", new NbtCompound())); 38 - this.mavity = test(data, "mavity", 1.0); 39 - this.timeScale = test(data, "time_scale", 1.0); 40 - this.haunted = test(data, "haunted", false); 37 + this.mavity = NbtUtils.getDouble(data, "mavity", 1.0); 38 + this.timeScale = NbtUtils.getDouble(data, "time_scale", 1.0); 39 + this.haunted = NbtUtils.getBoolean(data, "haunted", false); 41 40 } 42 41 43 42 public NbtCompound data() { ··· 100 99 public int getHauntingTicks(Random random) { 101 100 if (!isHaunted()) return -2; 102 101 if (data.contains("haunting_ticks")) return data.getInt("haunting_ticks"); 103 - return random.nextBetween(test(data, "min_haunting_ticks", 20), test(data, "max_haunting_ticks", 200)); 102 + return random.nextBetween(NbtUtils.getInt(data, "min_haunting_ticks", 20), NbtUtils.getInt(data, "max_haunting_ticks", 200)); 104 103 } 105 104 106 105 //sky - common 107 106 public String getSkyType() { 108 - return test(data, "sky_type", "empty"); 107 + return NbtUtils.getString(data, "sky_type", "empty"); 109 108 } 110 109 public float getHorizonShadingRatio() { 111 - return test(data, "horizon_shading_ratio", 1.0f); 110 + return NbtUtils.getFloat(data, "horizon_shading_ratio", 1.0f); 112 111 } 113 112 public boolean endSkyLike() { 114 - return test(data, "end_sky_like", false); 113 + return NbtUtils.getBoolean(data, "end_sky_like", false); 115 114 } 116 115 public boolean hasDawn() { 117 - return test(data, "dawn", !getSkyType().equals("rainbow")); 116 + return NbtUtils.getBoolean(data, "dawn", !getSkyType().equals("rainbow")); 118 117 } 119 118 120 119 //sun 121 120 public float getSolarSize() { 122 - return test(data, "solar_size", 30.0f); 121 + return NbtUtils.getFloat(data, "solar_size", 30.0f); 123 122 } 124 123 public float getSolarTilt() { 125 - return test(data, "solar_tilt", -90.0f); 124 + return NbtUtils.getFloat(data, "solar_tilt", -90.0f); 126 125 } 127 126 public Vector3f getSolarTint() { 128 - int color = test(data, "solar_tint",16777215); 127 + int color = NbtUtils.getInt(data, "solar_tint",16777215); 129 128 return new Vector3f((float)(color >> 16 & 0xFF) / 255.0f, (float)(color >> 8 & 0xFF) / 255.0f, (float)(color & 0xFF) / 255.0f); 130 129 } 131 130 public Identifier getSolarTexture() { 132 - return Identifier.of(test(data, "solar_texture", "textures/environment/sun.png")); 131 + return Identifier.of(NbtUtils.getString(data, "solar_texture", "textures/environment/sun.png")); 133 132 } 134 133 135 134 //stars 136 135 public int getNumStars() { 137 - return test(data, "num_stars", 1500); 136 + return NbtUtils.getInt(data, "num_stars", 1500); 138 137 } 139 138 public float getStarSizeBase() { 140 - return test(data, "star_size_base", 0.15f); 139 + return NbtUtils.getFloat(data, "star_size_base", 0.15f); 141 140 } 142 141 public float getStarSizeModifier() { 143 - return test(data, "star_size_modifier", 0.1f); 142 + return NbtUtils.getFloat(data, "star_size_modifier", 0.1f); 144 143 } 145 144 public float getStellarTiltY() { 146 - return test(data, "stellar_tilt_y", -90.0f); 145 + return NbtUtils.getFloat(data, "stellar_tilt_y", -90.0f); 147 146 } 148 147 public float getStellarTiltZ() { 149 - return test(data, "stellar_tilt_z", 0.0f); 148 + return NbtUtils.getFloat(data, "stellar_tilt_z", 0.0f); 150 149 } 151 150 public float getStellarVelocity() { 152 - return test(data, "stellar_velocity", 1.0f); 151 + return NbtUtils.getFloat(data, "stellar_velocity", 1.0f); 153 152 } 154 153 public float getDayStarBrightness() { 155 - return test(data, "star_brightness_day", 0.0f); 154 + return NbtUtils.getFloat(data, "star_brightness_day", 0.0f); 156 155 } 157 156 public float getNightStarBrightness() { 158 - return test(data, "star_brightness_night", 0.5f); 157 + return NbtUtils.getFloat(data, "star_brightness_night", 0.5f); 159 158 } 160 159 public Vector3f getStellarColor() { 161 - int color = test(data, "stellar_color",16777215); 160 + int color = NbtUtils.getInt(data, "stellar_color",16777215); 162 161 return new Vector3f((float)(color >> 16 & 0xFF) / 255.0f, (float)(color >> 8 & 0xFF) / 255.0f, (float)(color & 0xFF) / 255.0f); 163 162 } 164 163
+3 -3
common/src/main/java/net/lerariemann/infinity/options/IridescentMap.java
··· 20 20 21 21 static IridescentMap decode(NbtCompound data) { 22 22 if (!data.contains("type")) return Perliny.INSTANCE; 23 - return switch (data.getString("type")) { 23 + return switch (NbtUtils.getString(data,"type", "")) { 24 24 case "linear" -> Linear.INSTANCE; 25 - case "circles" -> new PrettyCircles(NbtUtils.test(data, "scale", num_models / 2.0f)); 26 - case "static" -> new Static(NbtUtils.test(data, "value", 0)); 25 + case "circles" -> new PrettyCircles(NbtUtils.getFloat(data, "scale", num_models / 2.0f)); 26 + case "static" -> new Static(NbtUtils.getInt(data, "value", 0)); 27 27 case "random" -> RandomMap.INSTANCE; 28 28 default -> Perliny.INSTANCE; 29 29 };
+7 -7
common/src/main/java/net/lerariemann/infinity/options/PortalColorApplier.java
··· 24 24 } 25 25 static PortalColorApplier of(NbtCompound data, int defaultColor) { 26 26 if (!data.contains("portal_color")) return new PortalColorApplier.Simple(defaultColor); 27 - if (data.contains("portal_color", NbtElement.INT_TYPE)) return new PortalColorApplier.Simple(data.getInt("portal_color")); 28 - NbtCompound applierData = data.getCompound("portal_color"); 29 - return switch (applierData.getString("type")) { 30 - case "simple" -> new PortalColorApplier.Simple(applierData.getInt("value")); 27 + if (data.contains("portal_color", NbtElement.INT_TYPE)) return new PortalColorApplier.Simple(NbtUtils.getInt(data, "portal_color")); 28 + NbtCompound applierData = NbtUtils.getCompound(data, "portal_color"); 29 + return switch (NbtUtils.getString(applierData, "type", "")) { 30 + case "simple" -> new PortalColorApplier.Simple(NbtUtils.getInt(applierData, "value")); 31 31 case "checker" -> new PortalColorApplier.Checker(applierData.getList("values", NbtElement.INT_TYPE)); 32 32 case "random_hue" -> new PortalColorApplier.RandomHue(applierData); 33 33 case "random" -> PortalColorApplier.RandomColor.INSTANCE; ··· 62 62 63 63 record RandomHue(float saturation, float brightness, float detail) implements PortalColorApplier { 64 64 public RandomHue(NbtCompound applierData) { 65 - this(NbtUtils.test(applierData, "saturation", 1.0f), 66 - NbtUtils.test(applierData, "brightness", 1.0f), 67 - NbtUtils.test(applierData, "detail", 12.0f)); 65 + this(NbtUtils.getFloat(applierData, "saturation", 1.0f), 66 + NbtUtils.getFloat(applierData, "brightness", 1.0f), 67 + NbtUtils.getFloat(applierData, "detail", 12.0f)); 68 68 } 69 69 70 70 @Override
+2 -1
common/src/main/java/net/lerariemann/infinity/options/RandomInfinityOptions.java
··· 3 3 import net.lerariemann.infinity.InfinityMod; 4 4 import net.lerariemann.infinity.dimensions.RandomDimension; 5 5 import net.lerariemann.infinity.util.core.ConfigType; 6 + import net.lerariemann.infinity.util.core.NbtUtils; 6 7 import net.lerariemann.infinity.util.core.RandomProvider; 7 8 import net.lerariemann.infinity.util.core.CommonIO; 8 9 import net.minecraft.nbt.NbtCompound; ··· 126 127 NbtCompound effect = provider.randomElement(r, ConfigType.EFFECTS); 127 128 if (effect.getBoolean("Instant")) return new NbtCompound(); 128 129 int amplifier = Math.min(5, (int)(0.5*r.nextExponential())); 129 - res.putString("id", effect.getString("Name")); 130 + res.putString("id", NbtUtils.getString(effect, "Name")); 130 131 res.putInt("amplifier", amplifier); 131 132 return res; 132 133 }
+10 -9
common/src/main/java/net/lerariemann/infinity/util/config/Amendment.java
··· 4 4 import net.lerariemann.infinity.InfinityMod; 5 5 import net.lerariemann.infinity.util.core.CommonIO; 6 6 import net.lerariemann.infinity.util.core.ConfigType; 7 + import net.lerariemann.infinity.util.core.NbtUtils; 7 8 import net.minecraft.block.Block; 8 9 import net.minecraft.nbt.NbtCompound; 9 10 import net.minecraft.nbt.NbtElement; ··· 22 23 23 24 public record Amendment(ConfigType area, ModSelector modSelector, Selector selector, Results results) { 24 25 public static Amendment of(NbtCompound data) { 25 - String areaName = data.getString("area"); 26 + String areaName = NbtUtils.getString(data, "area", ""); 26 27 ConfigType area = ConfigType.byName(areaName); 27 28 if (area == null) { 28 29 InfinityMod.LOGGER.warn("Unknown amendment area: {}", areaName); 29 30 return null; 30 31 } 31 32 32 - String mod = data.getString("mod"); 33 + String mod = NbtUtils.getString(data, "mod"); 33 34 ModSelector modSelector; 34 35 if (mod.equals("all")) { 35 36 modSelector = new UniversalModSelector(); ··· 37 38 else if (!Platform.isModLoaded(mod)) return null; 38 39 else modSelector = new MatchingModSelector(mod); 39 40 40 - String selectorType = data.getString("selector"); 41 + String selectorType = NbtUtils.getString(data,"selector", ""); 41 42 Selector selector = switch(selectorType) { 42 43 case "all" -> new UniversalSelector(); 43 - case "containing" -> new ContainingSelector(data.getString("containing")); 44 - case "matching" -> new MatchingSelector(data.getString("matching")); 45 - case "matching_block_tag" -> new MatchingBlockTagSelector(data.getString("matching")); 44 + case "containing" -> new ContainingSelector(NbtUtils.getString(data, "containing")); 45 + case "matching" -> new MatchingSelector(NbtUtils.getString(data, "matching")); 46 + case "matching_block_tag" -> new MatchingBlockTagSelector(NbtUtils.getString(data, "matching")); 46 47 case "matching_any" -> new MatchingAnySelector(data.getList("matching", NbtElement.STRING_TYPE) 47 48 .stream().map(e->(NbtString)e).map(NbtString::asString).toList()); 48 49 default -> { ··· 51 52 } 52 53 }; 53 54 54 - String resultType = data.getString("results"); 55 + String resultType = NbtUtils.getString(data, "results"); 55 56 Results results = switch (resultType) { 56 - case "set_value" -> new SetValue(data.getInt("value")); 57 + case "set_value" -> new SetValue(NbtUtils.getInt(data, "value")); 57 58 case "erase" -> new SetValue(0); 58 - case "set_field" -> new SetField(data.getString("field_name"), data.get("field")); 59 + case "set_field" -> new SetField(NbtUtils.getString(data, "field_name"), data.get("field")); 59 60 default -> { 60 61 InfinityMod.LOGGER.warn("Unknown amendment result type: {}", resultType); 61 62 yield null;
+2 -1
common/src/main/java/net/lerariemann/infinity/util/config/DataCollection.java
··· 3 3 import net.lerariemann.infinity.InfinityMod; 4 4 import net.lerariemann.infinity.util.core.CommonIO; 5 5 import net.lerariemann.infinity.util.core.ConfigType; 6 + import net.lerariemann.infinity.util.core.NbtUtils; 6 7 import net.lerariemann.infinity.util.core.WeighedStructure; 7 8 import net.minecraft.nbt.NbtCompound; 8 9 import net.minecraft.nbt.NbtList; ··· 76 77 range.sort(new Comparator<Integer>() { 77 78 public String extract(int i) { 78 79 NbtCompound compound = w.get(i); 79 - return compound.getString("key"); 80 + return NbtUtils.getString(compound, "key"); 80 81 } 81 82 @Override 82 83 public int compare(Integer i, Integer j) {
+5 -4
common/src/main/java/net/lerariemann/infinity/util/config/SurfaceRuleScanner.java
··· 3 3 import net.lerariemann.infinity.InfinityMod; 4 4 import net.lerariemann.infinity.dimensions.RandomNoisePreset; 5 5 import net.lerariemann.infinity.util.core.CommonIO; 6 + import net.lerariemann.infinity.util.core.NbtUtils; 6 7 import net.minecraft.nbt.*; 7 8 import net.minecraft.registry.Registry; 8 9 import net.minecraft.registry.RegistryKeys; ··· 70 71 } 71 72 72 73 void add(NbtCompound rule, TreeLeaf where) { 73 - switch(rule.getString("type")) { 74 + switch(NbtUtils.getString(rule,"type", "")) { 74 75 case "condition", "minecraft:condition" -> { 75 - NbtCompound next = rule.getCompound("then_run"); 76 - NbtCompound c = rule.getCompound("if_true"); 76 + NbtCompound next = NbtUtils.getCompound(rule,"then_run"); 77 + NbtCompound c = NbtUtils.getCompound(rule, "if_true"); 77 78 if (c.getString("type").contains("above_preliminary_surface")) { 78 79 add(next, where); 79 80 } ··· 102 103 } 103 104 104 105 static boolean checkUnneededParts(NbtCompound rule) { 105 - return rule.getString("type").contains("block") 106 + return NbtUtils.getString(rule, "type", "").contains("block") 106 107 && (rule.toString().contains("minecraft:bedrock") 107 108 || rule.toString().contains("minecraft:deepslate")); 108 109 }
+5 -5
common/src/main/java/net/lerariemann/infinity/util/core/Easterizer.java
··· 27 27 String name = p.getFileName().toString().replace(".json", ""); 28 28 NbtCompound compound = CommonIO.read(p.toFile()); 29 29 if (compound.contains("name")) 30 - name = compound.getString("name"); 30 + name = NbtUtils.getString(compound, "name"); 31 31 if (compound.contains("type")) 32 - typeMap.put(name, compound.getString("type")); 32 + typeMap.put(name, NbtUtils.getString(compound, "type")); 33 33 if (compound.contains("aliases", NbtElement.LIST_TYPE)) { 34 34 String finalName = name; 35 35 compound.getList("aliases", NbtElement.STRING_TYPE) ··· 39 39 .forEach(alias -> aliasMap.put(alias, finalName)); 40 40 } 41 41 else if (compound.contains("aliases", NbtElement.STRING_TYPE)) 42 - aliasMap.put(compound.getString("aliases"), name); 42 + aliasMap.put(NbtUtils.getString(compound, "aliases"), name); 43 43 if (compound.contains("options")) { 44 - optionmap.put(name, compound.getCompound("options")); 44 + optionmap.put(name, NbtUtils.getCompound(compound, "options")); 45 45 } 46 46 47 - map.put(name, compound.getCompound("generator")); 47 + map.put(name, NbtUtils.getCompound(compound, "generator")); 48 48 }); 49 49 } catch (IOException e) { 50 50 throw new RuntimeException(e);
+6 -6
common/src/main/java/net/lerariemann/infinity/util/core/NbtUtils.java
··· 9 9 10 10 /** Contains various common use methods for working with {@link NbtCompound} objects. */ 11 11 public interface NbtUtils { 12 - static String test(NbtCompound data, String key, String def) { 12 + static String getString(NbtCompound data, String key, String def) { 13 13 return data.contains(key, NbtElement.STRING_TYPE) ? data.getString(key) : def; 14 14 } 15 15 static NbtCompound getCompound(NbtCompound data, String key, NbtCompound def) { 16 16 return data.contains(key, NbtElement.COMPOUND_TYPE) ? data.getCompound(key) : def; 17 17 } 18 - static float test(NbtCompound data, String key, float def) { 18 + static float getFloat(NbtCompound data, String key, float def) { 19 19 return data.contains(key, NbtElement.DOUBLE_TYPE) ? data.getFloat(key) : def; 20 20 } 21 - static int test(NbtCompound data, String key, int def) { 21 + static int getInt(NbtCompound data, String key, int def) { 22 22 return data.contains(key, NbtElement.INT_TYPE) ? data.getInt(key) : def; 23 23 } 24 - static double test(NbtCompound data, String key, double def) { 24 + static double getDouble(NbtCompound data, String key, double def) { 25 25 return data.contains(key, NbtElement.DOUBLE_TYPE) ? data.getDouble(key) : def; 26 26 } 27 - static boolean test(NbtCompound data, String key, boolean def) { 27 + static boolean getBoolean(NbtCompound data, String key, boolean def) { 28 28 return data.contains(key) ? data.getBoolean(key) : def; 29 29 } 30 30 ··· 48 48 } 49 49 50 50 static String elementToName(NbtElement e) { 51 - if (e instanceof NbtCompound) return ((NbtCompound)e).getString("Name"); 51 + if (e instanceof NbtCompound compound) return NbtUtils.getString(compound, "Name"); 52 52 else return e.asString(); 53 53 } 54 54 static NbtCompound nameToElement(String block) {
+1 -1
common/src/main/java/net/lerariemann/infinity/util/core/RandomProvider.java
··· 171 171 registerCategory(ConfigType.TOP_BLOCKS, topBlocks); 172 172 } 173 173 static boolean popBlockData(NbtCompound e, String key, boolean def) { 174 - boolean res = NbtUtils.test(e, key, def); 174 + boolean res = NbtUtils.getBoolean(e, key, def); 175 175 e.remove(key); 176 176 return res; 177 177 }
+4 -4
common/src/main/java/net/lerariemann/infinity/util/core/WeighedStructure.java
··· 58 58 double weight; 59 59 60 60 public Leaf(NbtCompound comp) { 61 - name = comp.getString("key"); 62 - weight = comp.getDouble("weight"); 61 + name = NbtUtils.getString(comp, "key"); 62 + weight = NbtUtils.getDouble(comp,"weight"); 63 63 } 64 64 65 65 @Override ··· 117 117 weights = new ArrayList<>(); 118 118 statsum = 0; 119 119 if (data.isEmpty()) add(def, 1); 120 - else for (NbtCompound d : data) add(d.getString("key"), d.getDouble("weight")); 120 + else for (NbtCompound d : data) add(NbtUtils.getString(d, "key"), NbtUtils.getDouble(d, "weight")); 121 121 } 122 122 public void add(String key, double weight) { 123 123 statsum += weight; ··· 165 165 166 166 Leaf getLeaf(NbtCompound comp) { 167 167 Leaf str = new Leaf(comp); 168 - if (comp.contains("data")) dataMap.put(str.name, comp.getCompound("data")); 168 + if (comp.contains("data")) dataMap.put(str.name, NbtUtils.getCompound(comp, "data")); 169 169 return str; 170 170 } 171 171