diff --git a/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/ColumnImpl.java b/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/ColumnImpl.java deleted file mode 100644 index 3c3cd81df..000000000 --- a/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/ColumnImpl.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2020-2021 Polyhedral Development - * - * The Terra Core Addons are licensed under the terms of the MIT License. For more details, - * reference the LICENSE file in this module's root directory. - */ - -package com.dfsek.terra.addons.generation.feature; - -import java.util.function.IntConsumer; - -import com.dfsek.terra.api.block.state.BlockState; -import com.dfsek.terra.api.structure.feature.BinaryColumn; -import com.dfsek.terra.api.world.WritableWorld; -import com.dfsek.terra.api.world.chunk.generation.util.Column; - - -public class ColumnImpl implements Column { - private final int x; - private final int z; - private final T world; - - public ColumnImpl(int x, int z, T world) { - this.x = x; - this.z = z; - this.world = world; - } - - @Override - public int getX() { - return x; - } - - @Override - public int getZ() { - return z; - } - - @Override - public BlockState getBlock(int y) { - return world.getBlockState(x, y, z); - } - - @Override - public T getWorld() { - return world; - } - - @Override - public int getMinY() { - return world.getMinHeight(); - } - - @Override - public int getMaxY() { - return world.getMaxHeight(); - } - - @Override - public void forEach(IntConsumer function) { - for(int y = world.getMinHeight(); y < world.getMaxHeight(); y++) { - function.accept(y); - } - } - - @Override - public BinaryColumn newBinaryColumn() { - return new BinaryColumn(getMinY(), getMaxY()); - } -} diff --git a/common/api/src/main/java/com/dfsek/terra/api/world/chunk/generation/util/Column.java b/common/api/src/main/java/com/dfsek/terra/api/world/chunk/generation/util/Column.java index 3903fd577..4ed8f93a9 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/world/chunk/generation/util/Column.java +++ b/common/api/src/main/java/com/dfsek/terra/api/world/chunk/generation/util/Column.java @@ -17,20 +17,53 @@ import com.dfsek.terra.api.world.WritableWorld; /** * A single vertical column of a world. */ -public interface Column { - int getX(); +public class Column { + private final int x; + private final int z; + private final T world; - int getZ(); + public Column(int x, int z, T world) { + this.x = x; + this.z = z; + this.world = world; + } - BlockState getBlock(int y); + public int getX() { + return x; + } - T getWorld(); + public int getZ() { + return z; + } - int getMinY(); + public BlockState getBlock(int y) { + return world.getBlockState(x, y, z); + } - int getMaxY(); + public T getWorld() { + return world; + } - void forEach(IntConsumer function); + public int getMinY() { + return world.getMinHeight(); + } - BinaryColumn newBinaryColumn(); -} + public int getMaxY() { + return world.getMaxHeight(); + } + + public void forEach(IntConsumer function) { + for(int y = world.getMinHeight(); y < world.getMaxHeight(); y++) { + function.accept(y); + } + } + + public BinaryColumn newBinaryColumn() { + return new BinaryColumn(getMinY(), getMaxY()); + } + + @SuppressWarnings("unchecked") + public Column adjacent(int offsetX, int offsetZ) { + return (Column) world.column(x + offsetX, z + offsetZ); + } +} \ No newline at end of file