- use maven-publish plugin

- provide context with setup events
This commit is contained in:
dags- 2020-02-26 14:57:37 +00:00
parent 179965fc9c
commit dfb3a4c7b2
7 changed files with 69 additions and 46 deletions

View File

@ -25,7 +25,7 @@
package com.terraforged.api.biome.modifier; package com.terraforged.api.biome.modifier;
public interface BiomeModifierRegistrar { public interface ModifierManager {
void register(BiomeModifier modifier);
} }

View File

@ -35,8 +35,6 @@ import net.minecraft.world.chunk.IChunk;
public interface ColumnDecorator { public interface ColumnDecorator {
FastSource variance = (FastSource) Source.perlin(0, 100, 1); FastSource variance = (FastSource) Source.perlin(0, 100, 1);
ThreadLocal<BlockPos.Mutable> pos = ThreadLocal.withInitial(BlockPos.Mutable::new);
ThreadLocal<BlockPos.Mutable> pos1 = ThreadLocal.withInitial(BlockPos.Mutable::new);
void decorate(IChunk chunk, ProcessorContext context, int x, int y, int z); void decorate(IChunk chunk, ProcessorContext context, int x, int y, int z);
@ -44,9 +42,15 @@ public interface ColumnDecorator {
decorate(buffer.getDelegate(), context, x, y, z); decorate(buffer.getDelegate(), context, x, y, z);
} }
default void setState(IChunk chunk, int x, int y, int z, BlockState state, boolean moving) {
chunk.setBlockState(new BlockPos(x, y, z), state, moving);
}
default void fillDown(IChunk chunk, int x, int z, int from, int to, BlockState state) { default void fillDown(IChunk chunk, int x, int z, int from, int to, BlockState state) {
for (int dy = from; dy > to; dy--) { try (BlockPos.PooledMutable pos = pos()) {
chunk.setBlockState(pos.get().setPos(x, dy, z), state, false); for (int dy = from; dy > to; dy--) {
chunk.setBlockState(pos.setPos(x, dy, z), state, false);
}
} }
} }
@ -57,4 +61,8 @@ public interface ColumnDecorator {
static float getNoise(float x, float z, int seed, int scale, int bias) { static float getNoise(float x, float z, int seed, int scale, int bias) {
return getNoise(x, z, seed, scale / 255F, bias / 255F); return getNoise(x, z, seed, scale / 255F, bias / 255F);
} }
static BlockPos.PooledMutable pos() {
return BlockPos.PooledMutable.retain();
}
} }

View File

@ -33,18 +33,18 @@ import net.minecraft.world.chunk.IChunk;
public interface Surface { public interface Surface {
BlockPos.Mutable pos = new BlockPos.Mutable();
void buildSurface(int x, int z, int height, SurfaceContext ctx); void buildSurface(int x, int z, int height, SurfaceContext ctx);
default void fill(int x, int z, int start, int end, IChunk chunk, BlockState state) { default void fill(int x, int z, int start, int end, IChunk chunk, BlockState state) {
if (start < end) { try (BlockPos.PooledMutable pos = BlockPos.PooledMutable.retain()) {
for (int y = start; y < end; y++) { if (start < end) {
chunk.setBlockState(pos.setPos(x, y, z), state, false); for (int y = start; y < end; y++) {
} chunk.setBlockState(pos.setPos(x, y, z), state, false);
} else if (start > end) { }
for (int y = start; y > end; y--) { } else if (start > end) {
chunk.setBlockState(pos.setPos(x, y, z), state, false); for (int y = start; y > end; y--) {
chunk.setBlockState(pos.setPos(x, y, z), state, false);
}
} }
} }
} }

View File

@ -25,73 +25,97 @@
package com.terraforged.api.event; package com.terraforged.api.event;
import com.terraforged.api.biome.modifier.ModifierManager;
import com.terraforged.api.chunk.column.DecoratorManager; import com.terraforged.api.chunk.column.DecoratorManager;
import com.terraforged.api.chunk.surface.SurfaceManager; import com.terraforged.api.chunk.surface.SurfaceManager;
import com.terraforged.api.material.geology.GeologyManager; import com.terraforged.api.material.geology.GeologyManager;
import com.terraforged.api.material.layer.LayerManager; import com.terraforged.api.material.layer.LayerManager;
import com.terraforged.core.world.GeneratorContext;
import com.terraforged.core.world.terrain.provider.TerrainProvider; import com.terraforged.core.world.terrain.provider.TerrainProvider;
import com.terraforged.feature.modifier.FeatureModifiers; import com.terraforged.feature.modifier.FeatureModifiers;
import net.minecraftforge.eventbus.api.Event; import net.minecraftforge.eventbus.api.Event;
public abstract class TerraEvent<T> extends Event { public abstract class SetupEvent<T> extends Event {
private final T manager; private final T manager;
private final GeneratorContext context;
public TerraEvent(T manager) { public SetupEvent(T manager, GeneratorContext context) {
this.manager = manager; this.manager = manager;
this.context = context;
} }
/**
* Returns the Manager/Service being setup
*/
public T getManager() { public T getManager() {
return manager; return manager;
} }
/**
* Returns the generator setup context
*/
public GeneratorContext getContext() {
return context;
}
/** /**
* Can be used to register custom biome Surface decorators * Can be used to register custom biome Surface decorators
*/ */
public static class Surface extends TerraEvent<SurfaceManager> { public static class Surface extends SetupEvent<SurfaceManager> {
public Surface(SurfaceManager manager) { public Surface(SurfaceManager manager, GeneratorContext context) {
super(manager); super(manager, context);
} }
} }
/** /**
* Register additional layer blocks (such as Snow Layers) * Register additional layer blocks (such as Snow Layers)
*/ */
public static class Layers extends TerraEvent<LayerManager> { public static class Layers extends SetupEvent<LayerManager> {
public Layers(LayerManager manager) { public Layers(LayerManager manager, GeneratorContext context) {
super(manager); super(manager, context);
} }
} }
/** /**
* Register custom Strata and Geologies * Register custom Strata and Geologies
*/ */
public static class Geology extends TerraEvent<GeologyManager> { public static class Geology extends SetupEvent<GeologyManager> {
public Geology(GeologyManager manager) { public Geology(GeologyManager manager, GeneratorContext context) {
super(manager); super(manager, context);
}
}
/**
* Register custom BiomeModifiers
*/
public static class BiomeModifier extends SetupEvent<ModifierManager> {
public BiomeModifier(ModifierManager manager, GeneratorContext context) {
super(manager, context);
} }
} }
/** /**
* Register custom FeatureModifiers * Register custom FeatureModifiers
*/ */
public static class Features extends TerraEvent<FeatureModifiers> { public static class Features extends SetupEvent<FeatureModifiers> {
public Features(FeatureModifiers manager) { public Features(FeatureModifiers manager, GeneratorContext context) {
super(manager); super(manager, context);
} }
} }
/** /**
* Register custom Terrain Populators * Register custom Terrain Populators
*/ */
public static class Terrain extends TerraEvent<TerrainProvider> { public static class Terrain extends SetupEvent<TerrainProvider> {
public Terrain(TerrainProvider provider) { public Terrain(TerrainProvider provider, GeneratorContext context) {
super(provider); super(provider, context);
} }
} }
@ -100,10 +124,10 @@ public abstract class TerraEvent<T> extends Event {
* - base decorators process chunk columns early in the generation process (before biome surfaces etc) * - base decorators process chunk columns early in the generation process (before biome surfaces etc)
* - feature decorators process chunk columns late in the generation process (after all features have been placed) * - feature decorators process chunk columns late in the generation process (after all features have been placed)
*/ */
public static class Decorators extends TerraEvent<DecoratorManager> { public static class Decorators extends SetupEvent<DecoratorManager> {
public Decorators(DecoratorManager manager) { public Decorators(DecoratorManager manager, GeneratorContext context) {
super(manager); super(manager, context);
} }
} }
} }

View File

@ -32,7 +32,6 @@ import com.terraforged.core.world.heightmap.RegionConfig;
import com.terraforged.core.world.terrain.LandForms; import com.terraforged.core.world.terrain.LandForms;
import com.terraforged.core.world.terrain.Terrain; import com.terraforged.core.world.terrain.Terrain;
import com.terraforged.core.world.terrain.TerrainPopulator; import com.terraforged.core.world.terrain.TerrainPopulator;
import com.terraforged.core.world.terrain.Terrains;
import com.terraforged.core.world.terrain.VolcanoPopulator; import com.terraforged.core.world.terrain.VolcanoPopulator;
import me.dags.noise.Module; import me.dags.noise.Module;
import me.dags.noise.Source; import me.dags.noise.Source;
@ -78,11 +77,6 @@ public class StandardTerrainProvider implements TerrainProvider {
registerUnMixable(context.terrain.mountains, landForms.mountains3(context.seed)); registerUnMixable(context.terrain.mountains, landForms.mountains3(context.seed));
} }
@Override
public Terrains getTerrain() {
return context.terrain;
}
@Override @Override
public void registerMixable(TerrainPopulator populator) { public void registerMixable(TerrainPopulator populator) {
populators.putIfAbsent(populator.getType(), populator); populators.putIfAbsent(populator.getType(), populator);

View File

@ -29,7 +29,6 @@ import com.terraforged.core.cell.Populator;
import com.terraforged.core.world.terrain.LandForms; import com.terraforged.core.world.terrain.LandForms;
import com.terraforged.core.world.terrain.Terrain; import com.terraforged.core.world.terrain.Terrain;
import com.terraforged.core.world.terrain.TerrainPopulator; import com.terraforged.core.world.terrain.TerrainPopulator;
import com.terraforged.core.world.terrain.Terrains;
import me.dags.noise.Module; import me.dags.noise.Module;
import java.util.List; import java.util.List;
@ -39,8 +38,6 @@ import java.util.List;
*/ */
public interface TerrainProvider { public interface TerrainProvider {
Terrains getTerrain();
LandForms getLandforms(); LandForms getLandforms();
/** /**

@ -1 +1 @@
Subproject commit f7e27c70a2a2b30225a85137688d2014f9ad1b6f Subproject commit 0cd63563bdc0fad258d78c21dfed1b14c975bdfd