create noise distributor

This commit is contained in:
dfsek
2021-07-18 15:38:40 -07:00
parent 46f64b5434
commit 1a3a7df3f7
3 changed files with 49 additions and 0 deletions

View File

@@ -1,17 +1,27 @@
package com.dfsek.terra.addons.feature.distributor;
import com.dfsek.tectonic.loading.object.ObjectTemplate;
import com.dfsek.terra.addons.feature.distributor.config.NoiseDistributorTemplate;
import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.addon.TerraAddon;
import com.dfsek.terra.api.addon.annotations.Addon;
import com.dfsek.terra.api.addon.annotations.Author;
import com.dfsek.terra.api.addon.annotations.Version;
import com.dfsek.terra.api.event.EventListener;
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
import com.dfsek.terra.api.injection.annotations.Inject;
import com.dfsek.terra.api.registry.CheckedRegistry;
import com.dfsek.terra.api.structure.feature.Distributor;
import com.dfsek.terra.api.util.reflection.TypeKey;
import com.dfsek.terra.api.util.seeded.SeededBuilder;
import java.util.function.Supplier;
@Addon("config-distributors")
@Version("1.0.0")
@Author("Terra")
public class DistributorAddon extends TerraAddon implements EventListener {
public static final TypeKey<Supplier<ObjectTemplate<SeededBuilder<Distributor>>>> DISTRIBUTOR_TOKEN = new TypeKey<>() {};
@Inject
private TerraPlugin main;
@@ -21,4 +31,8 @@ public class DistributorAddon extends TerraAddon implements EventListener {
}
public void packPreLoad(ConfigPackPreLoadEvent event) {
CheckedRegistry<Supplier<ObjectTemplate<SeededBuilder<Distributor>>>> distributorRegistry = event.getPack().getOrCreateRegistry(DISTRIBUTOR_TOKEN);
distributorRegistry.register("NOISE", NoiseDistributorTemplate::new);
}
}

View File

@@ -0,0 +1,18 @@
package com.dfsek.terra.addons.feature.distributor.config;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.tectonic.loading.object.ObjectTemplate;
import com.dfsek.terra.addons.feature.distributor.distributors.NoiseDistributor;
import com.dfsek.terra.api.structure.feature.Distributor;
import com.dfsek.terra.api.util.seeded.SeededBuilder;
import com.dfsek.terra.api.util.seeded.SeededNoiseSampler;
public class NoiseDistributorTemplate implements ObjectTemplate<SeededBuilder<Distributor>> {
@Value("distribution")
private SeededNoiseSampler noise;
@Override
public SeededBuilder<Distributor> get() {
return seed -> new NoiseDistributor(noise.build(seed));
}
}

View File

@@ -0,0 +1,17 @@
package com.dfsek.terra.addons.feature.distributor.distributors;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.structure.feature.Distributor;
public class NoiseDistributor implements Distributor {
private final NoiseSampler sampler;
public NoiseDistributor(NoiseSampler sampler) {
this.sampler = sampler;
}
@Override
public boolean matches(int x, int z) {
return sampler.getNoise(x, z) > 0;
}
}