Add slant locator (#413)

* Add slant locator addon

* Bump slant locator noise3d dependency version

* Fix slant locator dependency version range

* Actually fix slant locator dependency version range
This commit is contained in:
Astrashh 2023-10-10 11:35:47 +11:00 committed by GitHub
parent abd83e8278
commit 47f531089e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 109 additions and 0 deletions

View File

@ -0,0 +1,6 @@
version = version("1.0.0")
dependencies {
compileOnlyApi(project(":common:addons:manifest-addon-loader"))
compileOnlyApi(project(":common:addons:chunk-generator-noise-3d"))
}

View File

@ -0,0 +1,32 @@
package com.dfsek.terra.addon.feature.locator.slant;
import com.dfsek.terra.addons.chunkgenerator.generation.NoiseChunkGenerator3D;
import com.dfsek.terra.api.structure.feature.BinaryColumn;
import com.dfsek.terra.api.structure.feature.Locator;
import com.dfsek.terra.api.world.World;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.api.world.chunk.generation.util.Column;
import java.util.function.DoublePredicate;
public class SlantLocator implements Locator {
private final DoublePredicate predicate;
public SlantLocator(DoublePredicate predicate) {
this.predicate = predicate;
}
@Override
public BinaryColumn getSuitableCoordinates(Column<?> column) {
return column.newBinaryColumn(y -> {
int x = column.getX();
int z = column.getZ();
World world = column.getWorld();
NoiseChunkGenerator3D generator = (NoiseChunkGenerator3D) world.getGenerator();
BiomeProvider biomeProvider = world.getBiomeProvider();
return predicate.test(generator.getSlant(x, y, z, world, biomeProvider));
});
}
}

View File

@ -0,0 +1,37 @@
package com.dfsek.terra.addon.feature.locator.slant;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
import com.dfsek.terra.api.Platform;
import com.dfsek.terra.api.addon.BaseAddon;
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
import com.dfsek.terra.api.inject.annotations.Inject;
import com.dfsek.terra.api.structure.feature.Locator;
import com.dfsek.terra.api.util.reflection.TypeKey;
import java.util.function.Supplier;
public class SlantLocatorAddon implements AddonInitializer {
public static final TypeKey<Supplier<ObjectTemplate<Locator>>> LOCATOR_TOKEN = new TypeKey<>() {
};
@Inject
private Platform platform;
@Inject
private BaseAddon addon;
@Override
public void initialize() {
platform.getEventManager()
.getHandler(FunctionalEventHandler.class)
.register(addon, ConfigPackPreLoadEvent.class)
.priority(1)
.then(event -> event.getPack().getOrCreateRegistry(LOCATOR_TOKEN).register(addon.key("SLANT"), SlantLocatorTemplate::new))
.failThrough();
}
}

View File

@ -0,0 +1,20 @@
package com.dfsek.terra.addon.feature.locator.slant;
import com.dfsek.tectonic.api.config.template.annotations.Value;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import com.dfsek.terra.api.structure.feature.Locator;
import java.util.function.DoublePredicate;
public class SlantLocatorTemplate implements ObjectTemplate<Locator> {
@Value("condition")
private DoublePredicate predicate;
@Override
public Locator get() {
return new SlantLocator(predicate);
}
}

View File

@ -0,0 +1,14 @@
schema-version: 1
contributors:
- Terra contributors
id: locator-slant-noise-3d
version: @VERSION@
entrypoints:
- "com.dfsek.terra.addon.feature.locator.slant.SlantLocatorAddon"
website:
issues: https://github.com/PolyhedralDev/Terra/issues
source: https://github.com/PolyhedralDev/Terra
docs: https://terra.polydev.org
license: MIT License
depends:
chunk-generator-noise-3d: "[1.2.0,2.0.0)"