property-ify Chunk Generator addon

This commit is contained in:
dfsek
2021-07-17 10:34:14 -07:00
parent a66641cb8a
commit a673f961b3
3 changed files with 10 additions and 26 deletions
@@ -3,7 +3,6 @@ package com.dfsek.terra.addons.chunkgenerator;
import com.dfsek.terra.addons.chunkgenerator.generation.generators.NoiseChunkGenerator3D; import com.dfsek.terra.addons.chunkgenerator.generation.generators.NoiseChunkGenerator3D;
import com.dfsek.terra.addons.chunkgenerator.palette.PaletteHolder; import com.dfsek.terra.addons.chunkgenerator.palette.PaletteHolder;
import com.dfsek.terra.addons.chunkgenerator.palette.PaletteHolderLoader; import com.dfsek.terra.addons.chunkgenerator.palette.PaletteHolderLoader;
import com.dfsek.terra.addons.chunkgenerator.palette.PaletteInfo;
import com.dfsek.terra.addons.chunkgenerator.palette.SlantHolder; import com.dfsek.terra.addons.chunkgenerator.palette.SlantHolder;
import com.dfsek.terra.addons.chunkgenerator.palette.SlantHolderLoader; import com.dfsek.terra.addons.chunkgenerator.palette.SlantHolderLoader;
import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.TerraPlugin;
@@ -17,12 +16,8 @@ import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
import com.dfsek.terra.api.injection.annotations.Inject; import com.dfsek.terra.api.injection.annotations.Inject;
import com.dfsek.terra.api.registry.exception.DuplicateEntryException; import com.dfsek.terra.api.registry.exception.DuplicateEntryException;
import com.dfsek.terra.api.util.seeded.BiomeBuilder; import com.dfsek.terra.api.util.seeded.BiomeBuilder;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.generator.ChunkGeneratorProvider; import com.dfsek.terra.api.world.generator.ChunkGeneratorProvider;
import java.util.HashMap;
import java.util.Map;
@Addon("chunk-generator-noise-3d") @Addon("chunk-generator-noise-3d")
@Author("Terra") @Author("Terra")
@Version("1.0.0") @Version("1.0.0")
@@ -30,26 +25,20 @@ public class NoiseChunkGenerator3DAddon extends TerraAddon implements EventListe
@Inject @Inject
private TerraPlugin main; private TerraPlugin main;
private final Map<String, PaletteInfo> palettes = new HashMap<>();
@Override @Override
public void initialize() { public void initialize() {
main.getEventManager().registerListener(this, this); main.getEventManager().registerListener(this, this);
} }
public void onPackLoad(ConfigPackPreLoadEvent event) throws DuplicateEntryException { public void onPackLoad(ConfigPackPreLoadEvent event) throws DuplicateEntryException {
event.getPack().getOrCreateRegistry(ChunkGeneratorProvider.class).register("NOISE_3D", pack -> new NoiseChunkGenerator3D(pack, main, this)); event.getPack().getOrCreateRegistry(ChunkGeneratorProvider.class).register("NOISE_3D", pack -> new NoiseChunkGenerator3D(pack, main));
event.getPack().applyLoader(SlantHolder.class, new SlantHolderLoader()) event.getPack().applyLoader(SlantHolder.class, new SlantHolderLoader())
.applyLoader(PaletteHolder.class, new PaletteHolderLoader()); .applyLoader(PaletteHolder.class, new PaletteHolderLoader());
} }
public void onBiomeLoad(ConfigurationLoadEvent event) { public void onBiomeLoad(ConfigurationLoadEvent event) {
if(event.is(BiomeBuilder.class)) { if(event.is(BiomeBuilder.class)) {
palettes.put(event.getConfiguration().getID(), event.load(new BiomePaletteTemplate()).get()); event.getLoadedObject(BiomeBuilder.class).getContext().put(event.load(new BiomePaletteTemplate()).get());
} }
} }
public PaletteInfo getPalette(TerraBiome biome) {
return palettes.get(biome.getID());
}
} }
@@ -1,17 +1,14 @@
package com.dfsek.terra.addons.chunkgenerator.generation.generators; package com.dfsek.terra.addons.chunkgenerator.generation.generators;
import com.dfsek.terra.addons.chunkgenerator.NoiseChunkGenerator3DAddon;
import com.dfsek.terra.addons.chunkgenerator.PaletteUtil; import com.dfsek.terra.addons.chunkgenerator.PaletteUtil;
import com.dfsek.terra.addons.chunkgenerator.generation.math.samplers.Sampler3D; import com.dfsek.terra.addons.chunkgenerator.generation.math.samplers.Sampler3D;
import com.dfsek.terra.addons.chunkgenerator.palette.PaletteInfo; import com.dfsek.terra.addons.chunkgenerator.palette.PaletteInfo;
import com.dfsek.terra.addons.chunkgenerator.palette.SlantHolder;
import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.block.state.BlockState; import com.dfsek.terra.api.block.state.BlockState;
import com.dfsek.terra.api.block.state.properties.base.Properties; import com.dfsek.terra.api.block.state.properties.base.Properties;
import com.dfsek.terra.api.block.state.properties.enums.Direction; import com.dfsek.terra.api.block.state.properties.enums.Direction;
import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.api.profiler.ProfileFrame; import com.dfsek.terra.api.profiler.ProfileFrame;
import com.dfsek.terra.api.util.MathUtil;
import com.dfsek.terra.api.vector.Vector3; import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.api.world.BiomeGrid; import com.dfsek.terra.api.world.BiomeGrid;
import com.dfsek.terra.api.world.TerraWorld; import com.dfsek.terra.api.world.TerraWorld;
@@ -34,18 +31,15 @@ import java.util.Random;
public class NoiseChunkGenerator3D implements TerraChunkGenerator { public class NoiseChunkGenerator3D implements TerraChunkGenerator {
private final ConfigPack configPack; private final ConfigPack configPack;
private final TerraPlugin main; private final TerraPlugin main;
private final List<TerraGenerationStage> generationStages = new ArrayList<>();
private final NoiseChunkGenerator3DAddon addon;
private final List<TerraGenerationStage> blockPopulators = new ArrayList<>();
private final BlockState air; private final BlockState air;
public NoiseChunkGenerator3D(ConfigPack c, TerraPlugin main, NoiseChunkGenerator3DAddon addon) { public NoiseChunkGenerator3D(ConfigPack c, TerraPlugin main) {
this.configPack = c; this.configPack = c;
this.main = main; this.main = main;
this.air = main.getWorldHandle().air(); this.air = main.getWorldHandle().air();
this.addon = addon; c.getStages().forEach(stage -> generationStages.add(stage.newInstance(c)));
c.getStages().forEach(stage -> blockPopulators.add(stage.newInstance(c)));
} }
@SuppressWarnings({"try"}) @SuppressWarnings({"try"})
@@ -97,7 +91,7 @@ public class NoiseChunkGenerator3D implements TerraChunkGenerator {
TerraBiome biome = grid.getBiome(cx, cz); TerraBiome biome = grid.getBiome(cx, cz);
PaletteInfo paletteInfo = addon.getPalette(biome); PaletteInfo paletteInfo = biome.getContext().get(PaletteInfo.class);
if(paletteInfo == null) { if(paletteInfo == null) {
main.logger().info("null palette: " + biome.getID()); main.logger().info("null palette: " + biome.getID());
@@ -166,7 +160,7 @@ public class NoiseChunkGenerator3D implements TerraChunkGenerator {
@Override @Override
public List<TerraGenerationStage> getGenerationStages() { public List<TerraGenerationStage> getGenerationStages() {
return blockPopulators; return generationStages;
} }
@Override @Override
@@ -176,7 +170,7 @@ public class NoiseChunkGenerator3D implements TerraChunkGenerator {
TerraBiome biome = provider.getBiome(x, z); TerraBiome biome = provider.getBiome(x, z);
Sampler sampler = terraWorld.getConfig().getSamplerCache().get(x, z); Sampler sampler = terraWorld.getConfig().getSamplerCache().get(x, z);
PaletteInfo paletteInfo = addon.getPalette(biome); PaletteInfo paletteInfo = biome.getContext().get(PaletteInfo.class);
Palette palette = PaletteUtil.getPalette(x, y, z, biome.getGenerator(world), sampler, paletteInfo); Palette palette = PaletteUtil.getPalette(x, y, z, biome.getGenerator(world), sampler, paletteInfo);
int fdX = FastMath.floorMod(x, 16); int fdX = FastMath.floorMod(x, 16);
int fdZ = FastMath.floorMod(z, 16); int fdZ = FastMath.floorMod(z, 16);
@@ -1,8 +1,9 @@
package com.dfsek.terra.addons.chunkgenerator.palette; package com.dfsek.terra.addons.chunkgenerator.palette;
import com.dfsek.terra.api.properties.Properties;
import com.dfsek.terra.api.world.generator.Palette; import com.dfsek.terra.api.world.generator.Palette;
public class PaletteInfo { public class PaletteInfo implements Properties {
private final PaletteHolder paletteHolder; private final PaletteHolder paletteHolder;
private final SlantHolder slantHolder; private final SlantHolder slantHolder;
private final Palette ocean; private final Palette ocean;