tangled
alpha
login
or
join now
codexarchonic.nekoweb.org
/
ProjectInfinity
0
fork
atom
Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
0
fork
atom
overview
issues
6
pulls
pipelines
Further futureproofing
cassian.cc
9 months ago
5f7ef99d
073e226b
+130
-118
27 changed files
expand all
collapse all
unified
split
common
src
main
java
net
lerariemann
infinity
block
entity
BiomeBottleBlockEntity.java
InfinityPortalBlockEntity.java
compat
cloth
AmendmentConfigFactory.java
ClothConfigFactory.java
dimensions
RandomFeaturesList.java
RandomStructure.java
features
underground_ores
RandomDisk.java
RandomOre.java
vegetation
RandomTree.java
RandomVegetation.java
entity
custom
AntEntity.java
BishopEntity.java
ChaosCreeper.java
ChaosSkeleton.java
ChaosSlime.java
options
EffectGiver.java
InfinityOptions.java
IridescentMap.java
PortalColorApplier.java
RandomInfinityOptions.java
util
config
Amendment.java
DataCollection.java
SurfaceRuleScanner.java
core
Easterizer.java
NbtUtils.java
RandomProvider.java
WeighedStructure.java
+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
73
-
this.charge = tag.getInt("Charge");
74
74
-
this.biome = Identifier.of(tag.getString("Biome"));
75
75
-
this.color = tag.getInt("Color");
76
76
-
this.from_charge = NbtUtils.test(tag, "from_charge", 0);
73
73
+
this.charge = NbtUtils.getInt(tag, "Charge");
74
74
+
this.biome = Identifier.of(NbtUtils.getString(tag, "Biome"));
75
75
+
this.color = NbtUtils.getInt(tag, "Color");
76
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
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
157
-
this.portalColor = tag.getInt("Dimension") & 0xFFFFFF;
158
158
+
this.portalColor = NbtUtils.getInt(tag, "Dimension") & 0xFFFFFF;
158
159
if (tag.contains("DimensionName")) {
159
159
-
this.dimension = Identifier.of(tag.getString("DimensionName"));
160
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
164
-
this.dimension = Identifier.of(tag.getString("Dimension"));
165
165
-
this.portalColor = tag.contains("Color", NbtElement.INT_TYPE) ?
166
166
-
tag.getInt("Color") :
167
167
-
(world != null ? PortalColorApplier.of(dimension, world.getServer()) :
168
168
-
PortalColorApplier.of(dimension, new NbtCompound())).apply(pos) & 0xFFFFFF;
165
165
+
this.dimension = Identifier.of(NbtUtils.getString(tag, "Dimension"));
166
166
+
this.portalColor = NbtUtils.getInt(tag, "Color", (world != null ? PortalColorApplier.of(dimension, world.getServer()) :
167
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
173
-
this.isOpen = tag.getBoolean("Open");
172
172
+
this.isOpen = NbtUtils.getBoolean(tag, "Open", false);
174
173
if (tag.contains("other_side")) {
175
175
-
NbtCompound pos = tag.getCompound("other_side");
176
176
-
otherSidePos = new BlockPos(pos.getInt("x"), pos.getInt("y"), pos.getInt("z"));
174
174
+
NbtCompound pos = NbtUtils.getCompound(tag,"other_side");
175
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
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
117
-
if (!Objects.equals(amendment.getString(newValue), newValue)) {
118
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
127
-
if (amendment.getDouble(name) != newValue) {
128
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
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
299
-
configPath = rootConfig.getCompound(prevField);
300
300
+
configPath = NbtUtils.getCompound(rootConfig, prevField);
300
301
}
301
302
if (prevPrevField != null) {
302
302
-
configPath = rootConfig.getCompound(prevPrevField).getCompound(prevField);
303
303
+
configPath = NbtUtils.getCompound(NbtUtils.getCompound(rootConfig, prevPrevField), prevField);
303
304
}
304
305
305
306
return switch (type) {
306
306
-
case "string" -> configPath.getString(field.getKey());
307
307
-
case "boolean" -> configPath.getBoolean(field.getKey());
308
308
-
case "double" -> configPath.getDouble(field.getKey());
309
309
-
case "int" -> configPath.getInt(field.getKey());
307
307
+
case "string" -> NbtUtils.getString(configPath, field.getKey());
308
308
+
case "boolean" -> NbtUtils.getBoolean(configPath, field.getKey());
309
309
+
case "double" -> NbtUtils.getDouble(configPath, field.getKey());
310
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
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
155
-
if (parent.parent.default_fluid.getString("Name").contains("water")) {
156
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
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
34
-
type = data.getString("id");
35
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
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
17
-
target = daddy.underwater.get(parent.parent.fullname).getString("Name");
18
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
26
-
String s = daddy.default_fluid.getString("fluidName");
27
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
43
-
blocks.add(NbtString.of(blockProvider.getCompound("state").getString("Name")));
44
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
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
52
-
if (!awt) res.putString("block", block.getString("Name"));
53
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
29
-
NbtCompound predicate = matchingBlocks(parent.surface_block.getString("Name"));
29
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
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
36
-
NbtCompound c = CorePack.treePlacement(tree, parent.surface_block.getString("Name"));
37
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
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
95
-
this.dropsLoot = NbtUtils.test(nbt, "dropsLoot", true);
96
96
-
this.direction = switch(nbt.getString("direction")) {
94
94
+
this.dropsLoot = NbtUtils.getBoolean(nbt, "dropsLoot", true);
95
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
103
-
NbtCompound pos = nbt.getCompound("last_changed_pos");
104
104
-
this.lastChangedPos = new BlockPos(pos.getInt("x"), pos.getInt("y"), pos.getInt("z"));
102
102
+
NbtCompound pos = NbtUtils.getCompound(nbt, "last_changed_pos");
103
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
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
186
-
if (!effect.getString("Category").equals("harmful")
187
187
-
|| effect.getBoolean("Instant")) return Items.ARROW.getDefaultStack();
187
187
+
if (!NbtUtils.getString(effect, "Category").equals("harmful")
188
188
+
|| NbtUtils.getBoolean(effect, "Instant")) return Items.ARROW.getDefaultStack();
188
189
return ChaosSkeleton.setPotion(Items.TIPPED_ARROW.getDefaultStack(),
189
189
-
effect.getInt("Color"),
190
190
-
effect.getString("Name"),
190
190
+
NbtUtils.getInt(effect, "Color"),
191
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
58
-
this.setColor(NbtUtils.test(biome, "Color", 7842607));
58
58
+
this.setColor(NbtUtils.getInt(biome, "Color", 7842607));
59
59
this.setRandomCharge();
60
60
-
this.setBiome(biome.getString("Name"));
60
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
112
-
this.setRange(nbt.getFloat("range"));
113
113
-
this.setColor(nbt.getInt("color"));
114
114
-
this.setBiome(nbt.getString("biome"));
112
112
+
this.setRange(NbtUtils.getFloat(nbt, "range"));
113
113
+
this.setColor(NbtUtils.getInt(nbt, "color"));
114
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
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
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
144
-
setEffect(eff.getString("Name"), eff.getInt("Color"));
146
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
149
-
eff = newEffect.getString("Name");
150
150
-
c = newEffect.getInt("Color");
151
151
+
eff = NbtUtils.getString(newEffect, "Name");
152
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
179
-
this.setEffect(nbt.getString("effect"), nbt.getInt("color"));
180
180
-
this.setDuration(nbt.getInt("duration"));
181
181
+
this.setEffect(NbtUtils.getString(nbt, "effect"), NbtUtils.getInt(nbt, "color"));
182
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
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
125
-
this.setColor(nbt.getInt("color"));
126
126
-
Block b = Registries.BLOCK.get(Identifier.of(nbt.getString("core")));
126
126
+
this.setColor(NbtUtils.getInt(nbt, "color"));
127
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
23
-
if (data.contains("id")) return new EffectGiver(effectOf(data.getString("id")),
24
24
-
NbtUtils.test(data, "duration", 300),
25
25
-
NbtUtils.test(data, "amplifier", 0),
26
26
-
Math.min(NbtUtils.test(data, "cooldown", 100), 100));
23
23
+
if (data.contains("id")) return new EffectGiver(effectOf(NbtUtils.getString(data, "id")),
24
24
+
NbtUtils.getInt(data, "duration", 300),
25
25
+
NbtUtils.getInt(data, "amplifier", 0),
26
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
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
38
-
this.mavity = test(data, "mavity", 1.0);
39
39
-
this.timeScale = test(data, "time_scale", 1.0);
40
40
-
this.haunted = test(data, "haunted", false);
37
37
+
this.mavity = NbtUtils.getDouble(data, "mavity", 1.0);
38
38
+
this.timeScale = NbtUtils.getDouble(data, "time_scale", 1.0);
39
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
103
-
return random.nextBetween(test(data, "min_haunting_ticks", 20), test(data, "max_haunting_ticks", 200));
102
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
108
-
return test(data, "sky_type", "empty");
107
107
+
return NbtUtils.getString(data, "sky_type", "empty");
109
108
}
110
109
public float getHorizonShadingRatio() {
111
111
-
return test(data, "horizon_shading_ratio", 1.0f);
110
110
+
return NbtUtils.getFloat(data, "horizon_shading_ratio", 1.0f);
112
111
}
113
112
public boolean endSkyLike() {
114
114
-
return test(data, "end_sky_like", false);
113
113
+
return NbtUtils.getBoolean(data, "end_sky_like", false);
115
114
}
116
115
public boolean hasDawn() {
117
117
-
return test(data, "dawn", !getSkyType().equals("rainbow"));
116
116
+
return NbtUtils.getBoolean(data, "dawn", !getSkyType().equals("rainbow"));
118
117
}
119
118
120
119
//sun
121
120
public float getSolarSize() {
122
122
-
return test(data, "solar_size", 30.0f);
121
121
+
return NbtUtils.getFloat(data, "solar_size", 30.0f);
123
122
}
124
123
public float getSolarTilt() {
125
125
-
return test(data, "solar_tilt", -90.0f);
124
124
+
return NbtUtils.getFloat(data, "solar_tilt", -90.0f);
126
125
}
127
126
public Vector3f getSolarTint() {
128
128
-
int color = test(data, "solar_tint",16777215);
127
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
132
-
return Identifier.of(test(data, "solar_texture", "textures/environment/sun.png"));
131
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
137
-
return test(data, "num_stars", 1500);
136
136
+
return NbtUtils.getInt(data, "num_stars", 1500);
138
137
}
139
138
public float getStarSizeBase() {
140
140
-
return test(data, "star_size_base", 0.15f);
139
139
+
return NbtUtils.getFloat(data, "star_size_base", 0.15f);
141
140
}
142
141
public float getStarSizeModifier() {
143
143
-
return test(data, "star_size_modifier", 0.1f);
142
142
+
return NbtUtils.getFloat(data, "star_size_modifier", 0.1f);
144
143
}
145
144
public float getStellarTiltY() {
146
146
-
return test(data, "stellar_tilt_y", -90.0f);
145
145
+
return NbtUtils.getFloat(data, "stellar_tilt_y", -90.0f);
147
146
}
148
147
public float getStellarTiltZ() {
149
149
-
return test(data, "stellar_tilt_z", 0.0f);
148
148
+
return NbtUtils.getFloat(data, "stellar_tilt_z", 0.0f);
150
149
}
151
150
public float getStellarVelocity() {
152
152
-
return test(data, "stellar_velocity", 1.0f);
151
151
+
return NbtUtils.getFloat(data, "stellar_velocity", 1.0f);
153
152
}
154
153
public float getDayStarBrightness() {
155
155
-
return test(data, "star_brightness_day", 0.0f);
154
154
+
return NbtUtils.getFloat(data, "star_brightness_day", 0.0f);
156
155
}
157
156
public float getNightStarBrightness() {
158
158
-
return test(data, "star_brightness_night", 0.5f);
157
157
+
return NbtUtils.getFloat(data, "star_brightness_night", 0.5f);
159
158
}
160
159
public Vector3f getStellarColor() {
161
161
-
int color = test(data, "stellar_color",16777215);
160
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
23
-
return switch (data.getString("type")) {
23
23
+
return switch (NbtUtils.getString(data,"type", "")) {
24
24
case "linear" -> Linear.INSTANCE;
25
25
-
case "circles" -> new PrettyCircles(NbtUtils.test(data, "scale", num_models / 2.0f));
26
26
-
case "static" -> new Static(NbtUtils.test(data, "value", 0));
25
25
+
case "circles" -> new PrettyCircles(NbtUtils.getFloat(data, "scale", num_models / 2.0f));
26
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
27
-
if (data.contains("portal_color", NbtElement.INT_TYPE)) return new PortalColorApplier.Simple(data.getInt("portal_color"));
28
28
-
NbtCompound applierData = data.getCompound("portal_color");
29
29
-
return switch (applierData.getString("type")) {
30
30
-
case "simple" -> new PortalColorApplier.Simple(applierData.getInt("value"));
27
27
+
if (data.contains("portal_color", NbtElement.INT_TYPE)) return new PortalColorApplier.Simple(NbtUtils.getInt(data, "portal_color"));
28
28
+
NbtCompound applierData = NbtUtils.getCompound(data, "portal_color");
29
29
+
return switch (NbtUtils.getString(applierData, "type", "")) {
30
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
65
-
this(NbtUtils.test(applierData, "saturation", 1.0f),
66
66
-
NbtUtils.test(applierData, "brightness", 1.0f),
67
67
-
NbtUtils.test(applierData, "detail", 12.0f));
65
65
+
this(NbtUtils.getFloat(applierData, "saturation", 1.0f),
66
66
+
NbtUtils.getFloat(applierData, "brightness", 1.0f),
67
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
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
129
-
res.putString("id", effect.getString("Name"));
130
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
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
25
-
String areaName = data.getString("area");
26
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
32
-
String mod = data.getString("mod");
33
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
40
-
String selectorType = data.getString("selector");
41
41
+
String selectorType = NbtUtils.getString(data,"selector", "");
41
42
Selector selector = switch(selectorType) {
42
43
case "all" -> new UniversalSelector();
43
43
-
case "containing" -> new ContainingSelector(data.getString("containing"));
44
44
-
case "matching" -> new MatchingSelector(data.getString("matching"));
45
45
-
case "matching_block_tag" -> new MatchingBlockTagSelector(data.getString("matching"));
44
44
+
case "containing" -> new ContainingSelector(NbtUtils.getString(data, "containing"));
45
45
+
case "matching" -> new MatchingSelector(NbtUtils.getString(data, "matching"));
46
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
54
-
String resultType = data.getString("results");
55
55
+
String resultType = NbtUtils.getString(data, "results");
55
56
Results results = switch (resultType) {
56
56
-
case "set_value" -> new SetValue(data.getInt("value"));
57
57
+
case "set_value" -> new SetValue(NbtUtils.getInt(data, "value"));
57
58
case "erase" -> new SetValue(0);
58
58
-
case "set_field" -> new SetField(data.getString("field_name"), data.get("field"));
59
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
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
79
-
return compound.getString("key");
80
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
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
73
-
switch(rule.getString("type")) {
74
74
+
switch(NbtUtils.getString(rule,"type", "")) {
74
75
case "condition", "minecraft:condition" -> {
75
75
-
NbtCompound next = rule.getCompound("then_run");
76
76
-
NbtCompound c = rule.getCompound("if_true");
76
76
+
NbtCompound next = NbtUtils.getCompound(rule,"then_run");
77
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
105
-
return rule.getString("type").contains("block")
106
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
30
-
name = compound.getString("name");
30
30
+
name = NbtUtils.getString(compound, "name");
31
31
if (compound.contains("type"))
32
32
-
typeMap.put(name, compound.getString("type"));
32
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
42
-
aliasMap.put(compound.getString("aliases"), name);
42
42
+
aliasMap.put(NbtUtils.getString(compound, "aliases"), name);
43
43
if (compound.contains("options")) {
44
44
-
optionmap.put(name, compound.getCompound("options"));
44
44
+
optionmap.put(name, NbtUtils.getCompound(compound, "options"));
45
45
}
46
46
47
47
-
map.put(name, compound.getCompound("generator"));
47
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
12
-
static String test(NbtCompound data, String key, String def) {
12
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
18
-
static float test(NbtCompound data, String key, float def) {
18
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
21
-
static int test(NbtCompound data, String key, int def) {
21
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
24
-
static double test(NbtCompound data, String key, double def) {
24
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
27
-
static boolean test(NbtCompound data, String key, boolean def) {
27
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
51
-
if (e instanceof NbtCompound) return ((NbtCompound)e).getString("Name");
51
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
174
-
boolean res = NbtUtils.test(e, key, def);
174
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
61
-
name = comp.getString("key");
62
62
-
weight = comp.getDouble("weight");
61
61
+
name = NbtUtils.getString(comp, "key");
62
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
120
-
else for (NbtCompound d : data) add(d.getString("key"), d.getDouble("weight"));
120
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
168
-
if (comp.contains("data")) dataMap.put(str.name, comp.getCompound("data"));
168
168
+
if (comp.contains("data")) dataMap.put(str.name, NbtUtils.getCompound(comp, "data"));
169
169
return str;
170
170
}
171
171