Skip to content

Commit 33fcadb

Browse files
committed
Fix first few bugs with veins, still getting a nullPointerException tho
1 parent 5989e31 commit 33fcadb

File tree

3 files changed

+32
-8
lines changed

3 files changed

+32
-8
lines changed

src/main/java/com/gregtechceu/gtceu/api/worldgen/generator/indicators/SurfaceIndicatorGenerator.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@ public SurfaceIndicatorGenerator(Either<BlockState, Material> block, IntProvider
7171
}
7272

7373
public SurfaceIndicatorGenerator surfaceRock(Material material) {
74+
if (material == null) {
75+
throw new IllegalArgumentException("Surface rock material is null");
76+
}
7477
validateSurfaceRockMaterial(material);
7578

7679
this.block = Either.right(material);
@@ -109,7 +112,14 @@ public SurfaceIndicatorGenerator placement(IndicatorPlacement placement) {
109112
return this;
110113
}
111114

115+
public void validateAfterBlocks() {
116+
block.ifRight(SurfaceIndicatorGenerator::validateSurfaceRockMaterial);
117+
}
118+
112119
private static void validateSurfaceRockMaterial(Material material) {
120+
if (GTMaterialBlocks.SURFACE_ROCK_BLOCKS == null) {
121+
return;
122+
}
113123
if (GTMaterialBlocks.SURFACE_ROCK_BLOCKS.get(material) == null)
114124
throw new IllegalArgumentException("No surface rock registered for material " + material.getName());
115125
}

src/main/java/com/gregtechceu/gtceu/common/data/loader/PostRegistryListener.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
import com.gregtechceu.gtceu.api.registry.GTRegistries;
44
import com.gregtechceu.gtceu.api.worldgen.OreVeinDefinition;
55
import com.gregtechceu.gtceu.api.worldgen.WorldGeneratorUtils;
6+
import com.gregtechceu.gtceu.api.worldgen.generator.indicators.SurfaceIndicatorGenerator;
67
import com.gregtechceu.gtceu.data.worldgen.GTOreVeins;
78
import com.gregtechceu.gtceu.integration.map.cache.server.ServerCache;
89

910
import net.minecraft.core.Registry;
11+
import net.minecraft.core.registries.Registries;
1012
import net.minecraft.server.packs.resources.PreparableReloadListener;
1113
import net.minecraft.server.packs.resources.ResourceManager;
1214
import net.minecraft.util.profiling.ProfilerFiller;
@@ -25,11 +27,22 @@ public class PostRegistryListener extends ContextAwareReloadListener implements
2527
private PostRegistryListener() {}
2628

2729
protected void apply() {
28-
var registry = GTRegistries.builtinRegistry().registryOrThrow(GTRegistries.ORE_VEIN_REGISTRY);
30+
// Apply and validate stuff that requires registry access that isn't finished yet during the Registry event
31+
var biomeLookup = GTRegistries.builtinRegistry().lookupOrThrow(Registries.BIOME);
2932

30-
buildVeinGenerators(registry);
31-
GTOreVeins.updateLargestVeinSize(registry);
32-
ServerCache.instance.oreVeinDefinitionsChanged(registry);
33+
var oreVeinRegistry = GTRegistries.builtinRegistry().registryOrThrow(GTRegistries.ORE_VEIN_REGISTRY);
34+
oreVeinRegistry.holders().forEach(holder -> {
35+
var definition = holder.value();
36+
definition.biomeLookup(biomeLookup);
37+
definition.indicatorGenerators().stream()
38+
.filter(SurfaceIndicatorGenerator.class::isInstance)
39+
.map(SurfaceIndicatorGenerator.class::cast)
40+
.forEach(SurfaceIndicatorGenerator::validateAfterBlocks);
41+
});
42+
43+
buildVeinGenerators(oreVeinRegistry);
44+
GTOreVeins.updateLargestVeinSize(oreVeinRegistry);
45+
ServerCache.instance.oreVeinDefinitionsChanged(oreVeinRegistry);
3346
WorldGeneratorUtils.invalidateOreVeinCache();
3447
}
3548

src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/worldgen/OreVeinDefinitionBuilder.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.mojang.datafixers.util.Pair;
2121
import dev.latvian.mods.kubejs.registry.BuilderBase;
2222
import dev.latvian.mods.kubejs.util.RegistryAccessContainer;
23+
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
2324
import lombok.Setter;
2425
import lombok.experimental.Accessors;
2526
import lombok.experimental.Tolerate;
@@ -42,7 +43,7 @@ public class OreVeinDefinitionBuilder extends BuilderBase<OreVeinDefinition> {
4243
private int weight;
4344
private IWorldGenLayer layer = WorldGenLayers.STONE;
4445
@Setter
45-
private Set<ResourceKey<Level>> dimensionFilter;
46+
private Set<ResourceKey<Level>> dimensionFilter = new HashSet<>();
4647
@Setter
4748
private HeightRangePlacement heightRange;
4849
@Setter
@@ -51,13 +52,13 @@ public class OreVeinDefinitionBuilder extends BuilderBase<OreVeinDefinition> {
5152
@Nullable
5253
private HolderSet<Biome> biomes;
5354
@Setter
54-
private BiomeWeightModifier biomeWeightModifier;
55+
private BiomeWeightModifier biomeWeightModifier = BiomeWeightModifier.EMPTY;
5556

5657
@Setter
5758
@Nullable
5859
private VeinGenerator veinGenerator;
5960
@Setter
60-
private List<IndicatorGenerator> indicatorGenerators;
61+
private List<IndicatorGenerator> indicatorGenerators = new ObjectArrayList<>();
6162

6263
public OreVeinDefinitionBuilder(ResourceLocation id) {
6364
super(id);
@@ -216,6 +217,6 @@ public OreVeinDefinition createObject() {
216217
return new OreVeinDefinition(clusterSize, density, weight, layer,
217218
Set.copyOf(dimensionFilter), heightRange, discardChanceOnAirExposure,
218219
biomes, biomeWeightModifier, veinGenerator, indicatorGenerators,
219-
RegistryAccessContainer.current.access().lookupOrThrow(Registries.BIOME));
220+
RegistryAccessContainer.current.access().lookup(Registries.BIOME).orElse(null));
220221
}
221222
}

0 commit comments

Comments
 (0)