diff --git a/common/api/src/main/java/com/dfsek/terra/api/util/Column.java b/common/api/src/main/java/com/dfsek/terra/api/util/Column.java index 87c1d1416..4d99c331d 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/util/Column.java +++ b/common/api/src/main/java/com/dfsek/terra/api/util/Column.java @@ -1,5 +1,6 @@ package com.dfsek.terra.api.util; +import com.dfsek.terra.api.util.function.IntIntObjConsumer; import com.dfsek.terra.api.util.function.IntObjConsumer; import com.google.common.collect.ImmutableList; @@ -28,6 +29,22 @@ public interface Column { } } + default void forRanges(IntIntObjConsumer consumer) { + int y = getMinY(); + int runningMin = y; + T runningObj = get(runningMin); + do { + y++; + T current = get(y); + + if(!current.equals(runningObj)) { + consumer.accept(runningMin, y, runningObj); + runningMin = y; + runningObj = current; + } + } while(y < getMaxY()); + } + default List asList() { List list = new ArrayList<>(); forEach((Consumer) list::add); diff --git a/common/api/src/main/java/com/dfsek/terra/api/util/function/IntIntObjConsumer.java b/common/api/src/main/java/com/dfsek/terra/api/util/function/IntIntObjConsumer.java new file mode 100644 index 000000000..69af95224 --- /dev/null +++ b/common/api/src/main/java/com/dfsek/terra/api/util/function/IntIntObjConsumer.java @@ -0,0 +1,6 @@ +package com.dfsek.terra.api.util.function; + +@FunctionalInterface +public interface IntIntObjConsumer { + void accept(int i, int j, T obj); +}