From 12d78e0b731a9d7e0e16dda1782e70902cb90357 Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 28 Jul 2021 07:27:31 -0700 Subject: [PATCH 01/26] equation -> expression --- .../config/templates/noise/ExpressionFunctionTemplate.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/config/templates/noise/ExpressionFunctionTemplate.java b/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/config/templates/noise/ExpressionFunctionTemplate.java index 758320cca..7be032c03 100644 --- a/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/config/templates/noise/ExpressionFunctionTemplate.java +++ b/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/config/templates/noise/ExpressionFunctionTemplate.java @@ -30,7 +30,7 @@ public class ExpressionFunctionTemplate extends SamplerTemplate vars = new HashMap<>(); - @Value("equation") + @Value("expression") private @Meta String equation; @Value("functions") From e356291bbab175e79558cf1cab23bd107265129e Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 28 Jul 2021 07:27:51 -0700 Subject: [PATCH 02/26] expressions -> functions --- .../config/templates/noise/ExpressionFunctionTemplate.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/config/templates/noise/ExpressionFunctionTemplate.java b/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/config/templates/noise/ExpressionFunctionTemplate.java index 7be032c03..2db025d2f 100644 --- a/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/config/templates/noise/ExpressionFunctionTemplate.java +++ b/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/config/templates/noise/ExpressionFunctionTemplate.java @@ -37,7 +37,7 @@ public class ExpressionFunctionTemplate extends SamplerTemplate functions = new LinkedHashMap<>(); - @Value("expressions") + @Value("functions") @Default private @Meta LinkedHashMap expressions = new LinkedHashMap<>(); From 987de074c68cf41358fab4b55c4b3c08d5d00d21 Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 28 Jul 2021 07:28:17 -0700 Subject: [PATCH 03/26] refactor MatchPattern --- .../locator/config/pattern/AirMatchPatternTemplate.java | 3 +-- .../locator/config/pattern/BlockSetMatchPatternTemplate.java | 2 +- .../config/pattern/SingleBlockMatchPatternTemplate.java | 2 +- .../locator/config/pattern/SolidMatchPatternTemplate.java | 2 +- .../feature/locator/patterns/{match => }/MatchPattern.java | 2 +- 5 files changed, 5 insertions(+), 6 deletions(-) rename common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/patterns/{match => }/MatchPattern.java (91%) diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/AirMatchPatternTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/AirMatchPatternTemplate.java index 45324936a..d54e4c49c 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/AirMatchPatternTemplate.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/AirMatchPatternTemplate.java @@ -3,8 +3,7 @@ package com.dfsek.terra.addons.feature.locator.config.pattern; import com.dfsek.tectonic.annotations.Value; import com.dfsek.tectonic.loading.object.ObjectTemplate; import com.dfsek.terra.addons.feature.locator.patterns.Pattern; -import com.dfsek.terra.addons.feature.locator.patterns.match.MatchPattern; -import com.dfsek.terra.api.TerraPlugin; +import com.dfsek.terra.addons.feature.locator.patterns.MatchPattern; import com.dfsek.terra.api.block.state.BlockState; import com.dfsek.terra.api.config.meta.Meta; import com.dfsek.terra.api.util.Range; diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/BlockSetMatchPatternTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/BlockSetMatchPatternTemplate.java index 00caa88e3..83c9e429d 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/BlockSetMatchPatternTemplate.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/BlockSetMatchPatternTemplate.java @@ -3,7 +3,7 @@ package com.dfsek.terra.addons.feature.locator.config.pattern; import com.dfsek.tectonic.annotations.Value; import com.dfsek.tectonic.loading.object.ObjectTemplate; import com.dfsek.terra.addons.feature.locator.patterns.Pattern; -import com.dfsek.terra.addons.feature.locator.patterns.match.MatchPattern; +import com.dfsek.terra.addons.feature.locator.patterns.MatchPattern; import com.dfsek.terra.api.config.meta.Meta; import com.dfsek.terra.api.util.Range; import com.dfsek.terra.api.util.collection.MaterialSet; diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/SingleBlockMatchPatternTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/SingleBlockMatchPatternTemplate.java index 2dfaba3f9..2a40ce285 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/SingleBlockMatchPatternTemplate.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/SingleBlockMatchPatternTemplate.java @@ -3,7 +3,7 @@ package com.dfsek.terra.addons.feature.locator.config.pattern; import com.dfsek.tectonic.annotations.Value; import com.dfsek.tectonic.loading.object.ObjectTemplate; import com.dfsek.terra.addons.feature.locator.patterns.Pattern; -import com.dfsek.terra.addons.feature.locator.patterns.match.MatchPattern; +import com.dfsek.terra.addons.feature.locator.patterns.MatchPattern; import com.dfsek.terra.api.block.state.BlockState; import com.dfsek.terra.api.config.meta.Meta; import com.dfsek.terra.api.util.Range; diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/SolidMatchPatternTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/SolidMatchPatternTemplate.java index 79ecfa497..800def8ef 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/SolidMatchPatternTemplate.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/SolidMatchPatternTemplate.java @@ -3,7 +3,7 @@ package com.dfsek.terra.addons.feature.locator.config.pattern; import com.dfsek.tectonic.annotations.Value; import com.dfsek.tectonic.loading.object.ObjectTemplate; import com.dfsek.terra.addons.feature.locator.patterns.Pattern; -import com.dfsek.terra.addons.feature.locator.patterns.match.MatchPattern; +import com.dfsek.terra.addons.feature.locator.patterns.MatchPattern; import com.dfsek.terra.api.util.Range; public class SolidMatchPatternTemplate implements ObjectTemplate { diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/patterns/match/MatchPattern.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/patterns/MatchPattern.java similarity index 91% rename from common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/patterns/match/MatchPattern.java rename to common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/patterns/MatchPattern.java index f2ec98e89..da85e8605 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/patterns/match/MatchPattern.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/patterns/MatchPattern.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.addons.feature.locator.patterns.match; +package com.dfsek.terra.addons.feature.locator.patterns; import com.dfsek.terra.addons.feature.locator.patterns.Pattern; import com.dfsek.terra.api.block.state.BlockState; From 220a981b0544f221c9b0c8cda565fea8da962850 Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 28 Jul 2021 08:08:03 -0700 Subject: [PATCH 04/26] implement BinaryColumn --- .../api/structure/feature/BinaryColumn.java | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 common/api/src/main/java/com/dfsek/terra/api/structure/feature/BinaryColumn.java diff --git a/common/api/src/main/java/com/dfsek/terra/api/structure/feature/BinaryColumn.java b/common/api/src/main/java/com/dfsek/terra/api/structure/feature/BinaryColumn.java new file mode 100644 index 000000000..e2d5ad655 --- /dev/null +++ b/common/api/src/main/java/com/dfsek/terra/api/structure/feature/BinaryColumn.java @@ -0,0 +1,54 @@ +package com.dfsek.terra.api.structure.feature; + +import java.util.function.IntConsumer; + +public class BinaryColumn { + private final boolean[] data; + private final int minY; + + public BinaryColumn(int minY, int maxY) { + this.minY = minY; + if(maxY <= minY) throw new IllegalArgumentException("Max y must be greater than min y"); + this.data = new boolean[maxY-minY]; + } + + public void set(int y) { + data[y - minY] = true; + } + + public boolean get(int y) { + return data[y - minY]; + } + + public void forEach(IntConsumer consumer) { + for(int y = 0; y < data.length; y++) { + if(data[y]) { + consumer.accept(y - minY); + } + } + } + + public BinaryColumn and(BinaryColumn that) { + if(that.minY != this.minY) throw new IllegalArgumentException("Must share same min Y"); + if(that.data.length != this.data.length) throw new IllegalArgumentException("Must share same max Y"); + BinaryColumn next = new BinaryColumn(minY, data.length - minY); + + for(int i = 0; i < this.data.length; i++) { + next.data[i] = this.data[i] && that.data[i]; + } + + return next; + } + + public BinaryColumn or(BinaryColumn that) { + if(that.minY != this.minY) throw new IllegalArgumentException("Must share same min Y"); + if(that.data.length != this.data.length) throw new IllegalArgumentException("Must share same max Y"); + BinaryColumn next = new BinaryColumn(minY, data.length - minY); + + for(int i = 0; i < this.data.length; i++) { + next.data[i] = this.data[i] || that.data[i]; + } + + return next; + } +} From 7a44b74b616a1b1a3324ae223d11242ba83354d6 Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 28 Jul 2021 08:12:38 -0700 Subject: [PATCH 05/26] use binarycolumn in locator --- .../addons/feature/locator/locators/PatternLocator.java | 3 ++- .../terra/addons/feature/locator/locators/RandomLocator.java | 3 ++- .../addons/feature/locator/locators/SurfaceLocator.java | 5 ++--- .../java/com/dfsek/terra/api/structure/feature/Locator.java | 4 +--- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/PatternLocator.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/PatternLocator.java index 3f71fe28b..ec76bdf1e 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/PatternLocator.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/PatternLocator.java @@ -1,6 +1,7 @@ package com.dfsek.terra.addons.feature.locator.locators; import com.dfsek.terra.addons.feature.locator.patterns.Pattern; +import com.dfsek.terra.api.structure.feature.BinaryColumn; import com.dfsek.terra.api.structure.feature.Locator; import com.dfsek.terra.api.util.Range; import com.dfsek.terra.api.world.Column; @@ -18,7 +19,7 @@ public class PatternLocator implements Locator { } @Override - public List getSuitableCoordinates(Column column) { + public BinaryColumn getSuitableCoordinates(Column column) { List locations = new ArrayList<>(); for(int y : search) { diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/RandomLocator.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/RandomLocator.java index 792e5b88f..6bff33d82 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/RandomLocator.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/RandomLocator.java @@ -1,5 +1,6 @@ package com.dfsek.terra.addons.feature.locator.locators; +import com.dfsek.terra.api.structure.feature.BinaryColumn; import com.dfsek.terra.api.structure.feature.Locator; import com.dfsek.terra.api.util.Range; import com.dfsek.terra.api.world.Column; @@ -19,7 +20,7 @@ public class RandomLocator implements Locator { } @Override - public List getSuitableCoordinates(Column column) { + public BinaryColumn getSuitableCoordinates(Column column) { long seed = column.getWorld().getSeed(); seed = 31 * seed + column.getX(); seed = 31 * seed + column.getZ(); diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/SurfaceLocator.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/SurfaceLocator.java index 8bcbde459..2555f2e03 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/SurfaceLocator.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/SurfaceLocator.java @@ -2,13 +2,12 @@ package com.dfsek.terra.addons.feature.locator.locators; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.block.state.BlockState; +import com.dfsek.terra.api.structure.feature.BinaryColumn; import com.dfsek.terra.api.structure.feature.Locator; -import com.dfsek.terra.api.util.ConstantRange; import com.dfsek.terra.api.util.Range; import com.dfsek.terra.api.world.Column; import java.util.Collections; -import java.util.List; public class SurfaceLocator implements Locator { private final Range search; @@ -21,7 +20,7 @@ public class SurfaceLocator implements Locator { } @Override - public List getSuitableCoordinates(Column column) { + public BinaryColumn getSuitableCoordinates(Column column) { for(int y : search) { if(column.getBlock(y).matches(air) && !column.getBlock(y-1).matches(air)) { return Collections.singletonList(y); diff --git a/common/api/src/main/java/com/dfsek/terra/api/structure/feature/Locator.java b/common/api/src/main/java/com/dfsek/terra/api/structure/feature/Locator.java index c49ebd2f5..a16262be7 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/structure/feature/Locator.java +++ b/common/api/src/main/java/com/dfsek/terra/api/structure/feature/Locator.java @@ -2,8 +2,6 @@ package com.dfsek.terra.api.structure.feature; import com.dfsek.terra.api.world.Column; -import java.util.List; - public interface Locator { - List getSuitableCoordinates(Column column); + BinaryColumn getSuitableCoordinates(Column column); } From d43eccc442cb8e12de968c65a3bcb757e1ebb80c Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 28 Jul 2021 08:16:59 -0700 Subject: [PATCH 06/26] column min/max y --- .../terra/addons/generation/feature/ColumnImpl.java | 10 ++++++++++ .../main/java/com/dfsek/terra/api/world/Column.java | 4 ++++ 2 files changed, 14 insertions(+) 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 index ed18a9b96..4aefa0982 100644 --- 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 @@ -34,4 +34,14 @@ public class ColumnImpl implements Column { public World getWorld() { return world; } + + @Override + public int getMinY() { + return world.getMinHeight(); + } + + @Override + public int getMaxY() { + return world.getMaxHeight(); + } } diff --git a/common/api/src/main/java/com/dfsek/terra/api/world/Column.java b/common/api/src/main/java/com/dfsek/terra/api/world/Column.java index 7f2ed0b43..c2b27fba9 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/world/Column.java +++ b/common/api/src/main/java/com/dfsek/terra/api/world/Column.java @@ -13,4 +13,8 @@ public interface Column { BlockState getBlock(int y); World getWorld(); + + int getMinY(); + + int getMaxY(); } From 1624c999accf200365715b647d0b4b04936978bc Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 28 Jul 2021 08:19:03 -0700 Subject: [PATCH 07/26] PatternLocator binarycolumn --- .../terra/addons/feature/locator/locators/PatternLocator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/PatternLocator.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/PatternLocator.java index ec76bdf1e..64dcc7bbb 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/PatternLocator.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/PatternLocator.java @@ -20,10 +20,10 @@ public class PatternLocator implements Locator { @Override public BinaryColumn getSuitableCoordinates(Column column) { - List locations = new ArrayList<>(); + BinaryColumn locations = new BinaryColumn(column.getMinY(), column.getMaxY()); for(int y : search) { - if(pattern.matches(y, column)) locations.add(y); + if(pattern.matches(y, column)) locations.set(y); } return locations; From fda44b8e99233967dff7ebc82e01417d88f687b6 Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 28 Jul 2021 08:33:36 -0700 Subject: [PATCH 08/26] RandomLocator binary column --- .../terra/addons/feature/locator/locators/RandomLocator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/RandomLocator.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/RandomLocator.java index 6bff33d82..7dd0672b2 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/RandomLocator.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/RandomLocator.java @@ -29,9 +29,9 @@ public class RandomLocator implements Locator { int size = points.get(r); - List results = new ArrayList<>(size); + BinaryColumn results = new BinaryColumn(column.getMinY(), column.getMaxY()); for(int i = 0; i < size; i++) { - results.set(i, height.get(r)); + results.set(height.get(r)); } return results; From 19861ec27b033c4a735fe347422f118e33f5122b Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 28 Jul 2021 08:40:48 -0700 Subject: [PATCH 09/26] binary column SurfaceLocator --- .../addons/feature/locator/locators/SurfaceLocator.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/SurfaceLocator.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/SurfaceLocator.java index 2555f2e03..85da18385 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/SurfaceLocator.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/SurfaceLocator.java @@ -21,11 +21,13 @@ public class SurfaceLocator implements Locator { @Override public BinaryColumn getSuitableCoordinates(Column column) { + BinaryColumn location = new BinaryColumn(column.getMinY(), column.getMaxY()); for(int y : search) { if(column.getBlock(y).matches(air) && !column.getBlock(y-1).matches(air)) { - return Collections.singletonList(y); + location.set(y); + return location; } } - return Collections.emptyList(); + return location; } } From 26152ec94e8d8f19611d867f95cacdb50aab6d17 Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 28 Jul 2021 08:58:10 -0700 Subject: [PATCH 10/26] add boolean methods to Locator --- .../com/dfsek/terra/api/structure/feature/Locator.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/common/api/src/main/java/com/dfsek/terra/api/structure/feature/Locator.java b/common/api/src/main/java/com/dfsek/terra/api/structure/feature/Locator.java index a16262be7..a6e07420e 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/structure/feature/Locator.java +++ b/common/api/src/main/java/com/dfsek/terra/api/structure/feature/Locator.java @@ -4,4 +4,12 @@ import com.dfsek.terra.api.world.Column; public interface Locator { BinaryColumn getSuitableCoordinates(Column column); + + default Locator and(Locator that) { + return column -> this.getSuitableCoordinates(column).and(that.getSuitableCoordinates(column)); + } + + default Locator or(Locator that) { + return column -> this.getSuitableCoordinates(column).or(that.getSuitableCoordinates(column)); + } } From 12c068b2520d39fb867327a5cd392c5641665a61 Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 28 Jul 2021 09:02:37 -0700 Subject: [PATCH 11/26] AndLocatorTemplate --- .../locator/config/AndLocatorTemplate.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/AndLocatorTemplate.java diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/AndLocatorTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/AndLocatorTemplate.java new file mode 100644 index 000000000..a26486370 --- /dev/null +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/AndLocatorTemplate.java @@ -0,0 +1,31 @@ +package com.dfsek.terra.addons.feature.locator.config; + +import com.dfsek.tectonic.annotations.Value; +import com.dfsek.tectonic.config.ValidatedConfigTemplate; +import com.dfsek.tectonic.exception.ValidationException; +import com.dfsek.tectonic.loading.object.ObjectTemplate; +import com.dfsek.terra.addons.feature.locator.patterns.Pattern; +import com.dfsek.terra.api.config.meta.Meta; +import com.dfsek.terra.api.structure.feature.Locator; + +import java.util.List; + +public class AndLocatorTemplate implements ObjectTemplate, ValidatedConfigTemplate { + @Value("locators") + private @Meta List<@Meta Locator> locators; + + @Override + public Locator get() { + Locator current = locators.remove(0); + while(!locators.isEmpty()) { + current = current.and(locators.remove(0)); + } + return current; + } + + @Override + public boolean validate() throws ValidationException { + if(locators.isEmpty()) throw new ValidationException("AND Pattern must specify at least 1 pattern."); + return true; + } +} From d6b36f4d3fada0d19e60e75588fa04fc76fe6d21 Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 28 Jul 2021 09:03:08 -0700 Subject: [PATCH 12/26] OrLocatorTemplate --- .../locator/config/OrLocatorTemplate.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/OrLocatorTemplate.java diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/OrLocatorTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/OrLocatorTemplate.java new file mode 100644 index 000000000..2ea4c6641 --- /dev/null +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/OrLocatorTemplate.java @@ -0,0 +1,30 @@ +package com.dfsek.terra.addons.feature.locator.config; + +import com.dfsek.tectonic.annotations.Value; +import com.dfsek.tectonic.config.ValidatedConfigTemplate; +import com.dfsek.tectonic.exception.ValidationException; +import com.dfsek.tectonic.loading.object.ObjectTemplate; +import com.dfsek.terra.api.config.meta.Meta; +import com.dfsek.terra.api.structure.feature.Locator; + +import java.util.List; + +public class OrLocatorTemplate implements ObjectTemplate, ValidatedConfigTemplate { + @Value("locators") + private @Meta List<@Meta Locator> locators; + + @Override + public Locator get() { + Locator current = locators.remove(0); + while(!locators.isEmpty()) { + current = current.or(locators.remove(0)); + } + return current; + } + + @Override + public boolean validate() throws ValidationException { + if(locators.isEmpty()) throw new ValidationException("AND Pattern must specify at least 1 pattern."); + return true; + } +} From cefa4369f2171d05d836a9b79d3166de702837c1 Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 28 Jul 2021 09:04:10 -0700 Subject: [PATCH 13/26] register and/or locator templates --- .../com/dfsek/terra/addons/feature/locator/LocatorAddon.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/LocatorAddon.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/LocatorAddon.java index 371fde55b..4755cd02b 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/LocatorAddon.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/LocatorAddon.java @@ -1,6 +1,8 @@ package com.dfsek.terra.addons.feature.locator; import com.dfsek.tectonic.loading.object.ObjectTemplate; +import com.dfsek.terra.addons.feature.locator.config.AndLocatorTemplate; +import com.dfsek.terra.addons.feature.locator.config.OrLocatorTemplate; import com.dfsek.terra.addons.feature.locator.config.PatternLocatorTemplate; import com.dfsek.terra.addons.feature.locator.config.RandomLocatorTemplate; import com.dfsek.terra.addons.feature.locator.config.SurfaceLocatorTemplate; @@ -46,6 +48,9 @@ public class LocatorAddon extends TerraAddon { locatorRegistry.register("SURFACE", () -> new SurfaceLocatorTemplate(main)); locatorRegistry.register("RANDOM", RandomLocatorTemplate::new); locatorRegistry.register("PATTERN", PatternLocatorTemplate::new); + + locatorRegistry.register("AND", AndLocatorTemplate::new); + locatorRegistry.register("OR", OrLocatorTemplate::new); }) .then(event -> { CheckedRegistry>> patternRegistry = event.getPack().getOrCreateRegistry(PATTERN_TOKEN); From 1522e6b57dcdd6af8ec6170ca9b613c16d1d818c Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 28 Jul 2021 09:12:22 -0700 Subject: [PATCH 14/26] implement NoiseLocator --- .../locator/locators/NoiseLocator.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/NoiseLocator.java diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/NoiseLocator.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/NoiseLocator.java new file mode 100644 index 000000000..addeaa10b --- /dev/null +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/NoiseLocator.java @@ -0,0 +1,31 @@ +package com.dfsek.terra.addons.feature.locator.locators; + +import com.dfsek.terra.api.noise.NoiseSampler; +import com.dfsek.terra.api.structure.feature.BinaryColumn; +import com.dfsek.terra.api.structure.feature.Locator; +import com.dfsek.terra.api.world.Column; +import net.jafama.FastMath; + +import java.util.List; + +public class NoiseLocator implements Locator { + private final List samplers; + + public NoiseLocator(List samplers) { + this.samplers = samplers; + } + + @Override + public BinaryColumn getSuitableCoordinates(Column column) { + BinaryColumn results = new BinaryColumn(column.getMinY(), column.getMaxY()); + + long seed = column.getWorld().getSeed(); + samplers.forEach(sampler -> { + int y = FastMath.floorToInt(sampler.getNoiseSeeded(seed, column.getX(), column.getX())); + if(y >= column.getMaxY() || y < column.getMinY()) return; + results.set(y); + }); + + return results; + } +} From dd0c6b557d9af324b4e1cd5e77498aff72d240b6 Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 28 Jul 2021 09:14:37 -0700 Subject: [PATCH 15/26] implement NoiseLocatorTemplate --- .../locator/config/NoiseLocatorTemplate.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/NoiseLocatorTemplate.java diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/NoiseLocatorTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/NoiseLocatorTemplate.java new file mode 100644 index 000000000..835dbdd34 --- /dev/null +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/NoiseLocatorTemplate.java @@ -0,0 +1,20 @@ +package com.dfsek.terra.addons.feature.locator.config; + +import com.dfsek.tectonic.annotations.Value; +import com.dfsek.tectonic.loading.object.ObjectTemplate; +import com.dfsek.terra.addons.feature.locator.locators.NoiseLocator; +import com.dfsek.terra.api.config.meta.Meta; +import com.dfsek.terra.api.noise.NoiseSampler; +import com.dfsek.terra.api.structure.feature.Locator; + +import java.util.List; + +public class NoiseLocatorTemplate implements ObjectTemplate { + @Value("samplers") + private @Meta List<@Meta NoiseSampler> samplers; + + @Override + public Locator get() { + return new NoiseLocator(samplers); + } +} From 6df5aa112a94144baa1c942897e38ea0c2c8e46d Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 28 Jul 2021 09:15:02 -0700 Subject: [PATCH 16/26] register noise locator --- .../com/dfsek/terra/addons/feature/locator/LocatorAddon.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/LocatorAddon.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/LocatorAddon.java index 4755cd02b..46a9f62e4 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/LocatorAddon.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/LocatorAddon.java @@ -2,6 +2,7 @@ package com.dfsek.terra.addons.feature.locator; import com.dfsek.tectonic.loading.object.ObjectTemplate; import com.dfsek.terra.addons.feature.locator.config.AndLocatorTemplate; +import com.dfsek.terra.addons.feature.locator.config.NoiseLocatorTemplate; import com.dfsek.terra.addons.feature.locator.config.OrLocatorTemplate; import com.dfsek.terra.addons.feature.locator.config.PatternLocatorTemplate; import com.dfsek.terra.addons.feature.locator.config.RandomLocatorTemplate; @@ -48,6 +49,7 @@ public class LocatorAddon extends TerraAddon { locatorRegistry.register("SURFACE", () -> new SurfaceLocatorTemplate(main)); locatorRegistry.register("RANDOM", RandomLocatorTemplate::new); locatorRegistry.register("PATTERN", PatternLocatorTemplate::new); + locatorRegistry.register("NOISE", NoiseLocatorTemplate::new); locatorRegistry.register("AND", AndLocatorTemplate::new); locatorRegistry.register("OR", OrLocatorTemplate::new); From 9d24e8a282673f4b55e5bc0fb0bc8a8060263c92 Mon Sep 17 00:00:00 2001 From: dfsek Date: Thu, 29 Jul 2021 07:23:05 -0700 Subject: [PATCH 17/26] remove unneeded TypeKeys --- .../terra/addons/biome/pipeline/BiomePipelineAddon.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java index e1bec650b..b5e06c0fe 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java @@ -39,15 +39,12 @@ public class BiomePipelineAddon extends TerraAddon { @Inject private TerraPlugin main; - public static final TypeKey BIOME_PROVIDER_BUILDER_TOKEN = new TypeKey<>(){}; - public static final TypeKey BIOME_SOURCE_BUILDER_TOKEN = new TypeKey<>(){}; - @Override public void initialize() { main.getEventManager() .getHandler(FunctionalEventHandler.class) .register(this, ConfigPackPreLoadEvent.class) - .then(event -> event.getPack().applyLoader(BIOME_SOURCE_BUILDER_TOKEN.getType(), new SourceLoader()) + .then(event -> event.getPack().applyLoader(BiomeSource.class, new SourceLoader()) .applyLoader(Stage.class, new StageLoader()) .applyLoader(ExpanderStage.Type.class, (c, o, l) -> ExpanderStage.Type.valueOf((String) o)) .applyLoader(MutatorStage.Type.class, (c, o, l) -> MutatorStage.Type.valueOf((String) o)) @@ -59,7 +56,7 @@ public class BiomePipelineAddon extends TerraAddon { .applyLoader(SmoothMutator.class, SmoothMutatorTemplate::new) .applyLoader(ExpanderStage.class, ExpanderStageTemplate::new) .applyLoader(BiomePipelineProvider.class, () -> new BiomePipelineTemplate(main)) - .applyLoader(BIOME_PROVIDER_BUILDER_TOKEN.getType(), new BiomeProviderLoader()) + .applyLoader(BiomeProvider.class, new BiomeProviderLoader()) .applyLoader(BiomeSource.Type.class, (t, object, cf) -> BiomeSource.Type.valueOf((String) object))) .failThrough(); } From fa8a66833ea5cf982c2350009e88cfffd4f1840b Mon Sep 17 00:00:00 2001 From: dfsek Date: Thu, 29 Jul 2021 07:27:00 -0700 Subject: [PATCH 18/26] register biome sources --- .../addons/biome/pipeline/BiomePipelineAddon.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java index b5e06c0fe..c27d0145e 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java @@ -1,5 +1,6 @@ package com.dfsek.terra.addons.biome.pipeline; +import com.dfsek.tectonic.loading.object.ObjectTemplate; import com.dfsek.terra.addons.biome.pipeline.api.Stage; import com.dfsek.terra.addons.biome.pipeline.config.BiomePipelineTemplate; import com.dfsek.terra.addons.biome.pipeline.config.BiomeProviderLoader; @@ -28,14 +29,20 @@ import com.dfsek.terra.api.addon.annotations.Version; import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent; import com.dfsek.terra.api.event.functional.FunctionalEventHandler; import com.dfsek.terra.api.injection.annotations.Inject; +import com.dfsek.terra.api.registry.CheckedRegistry; import com.dfsek.terra.api.util.reflection.TypeKey; import com.dfsek.terra.api.world.biome.generation.BiomeProvider; import com.dfsek.terra.addons.biome.pipeline.source.BiomeSource; +import java.util.function.Supplier; + @Addon("biome-provider-pipeline") @Author("Terra") @Version("1.0.0") public class BiomePipelineAddon extends TerraAddon { + + public static final TypeKey>> SOURCE_REGISTRY_KEY = new TypeKey<>() {}; + @Inject private TerraPlugin main; @@ -44,11 +51,9 @@ public class BiomePipelineAddon extends TerraAddon { main.getEventManager() .getHandler(FunctionalEventHandler.class) .register(this, ConfigPackPreLoadEvent.class) - .then(event -> event.getPack().applyLoader(BiomeSource.class, new SourceLoader()) - .applyLoader(Stage.class, new StageLoader()) + .then(event -> event.getPack().applyLoader(Stage.class, new StageLoader()) .applyLoader(ExpanderStage.Type.class, (c, o, l) -> ExpanderStage.Type.valueOf((String) o)) .applyLoader(MutatorStage.Type.class, (c, o, l) -> MutatorStage.Type.valueOf((String) o)) - .applyLoader(NoiseSource.class, NoiseSourceTemplate::new) .applyLoader(ReplaceMutator.class, ReplaceMutatorTemplate::new) .applyLoader(BorderMutator.class, BorderMutatorTemplate::new) .applyLoader(BorderListMutator.class, BorderListMutatorTemplate::new) @@ -58,6 +63,10 @@ public class BiomePipelineAddon extends TerraAddon { .applyLoader(BiomePipelineProvider.class, () -> new BiomePipelineTemplate(main)) .applyLoader(BiomeProvider.class, new BiomeProviderLoader()) .applyLoader(BiomeSource.Type.class, (t, object, cf) -> BiomeSource.Type.valueOf((String) object))) + .then(event -> { + CheckedRegistry>> sourceRegistry = event.getPack().getOrCreateRegistry(SOURCE_REGISTRY_KEY); + sourceRegistry.register("NOISE", NoiseSourceTemplate::new); + }) .failThrough(); } } From 13ab02984b9f045d8885121f022891f83e93ef6b Mon Sep 17 00:00:00 2001 From: dfsek Date: Thu, 29 Jul 2021 07:27:30 -0700 Subject: [PATCH 19/26] remove SourceLoader --- .../biome/pipeline/BiomePipelineAddon.java | 2 -- .../biome/pipeline/config/SourceLoader.java | 25 ------------------- 2 files changed, 27 deletions(-) delete mode 100644 common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/SourceLoader.java diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java index c27d0145e..572e308ce 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java @@ -5,7 +5,6 @@ import com.dfsek.terra.addons.biome.pipeline.api.Stage; import com.dfsek.terra.addons.biome.pipeline.config.BiomePipelineTemplate; import com.dfsek.terra.addons.biome.pipeline.config.BiomeProviderLoader; import com.dfsek.terra.addons.biome.pipeline.config.NoiseSourceTemplate; -import com.dfsek.terra.addons.biome.pipeline.config.SourceLoader; import com.dfsek.terra.addons.biome.pipeline.config.stage.StageLoader; import com.dfsek.terra.addons.biome.pipeline.config.stage.expander.ExpanderStageTemplate; import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.BorderListMutatorTemplate; @@ -18,7 +17,6 @@ import com.dfsek.terra.addons.biome.pipeline.mutator.BorderMutator; import com.dfsek.terra.addons.biome.pipeline.mutator.ReplaceListMutator; import com.dfsek.terra.addons.biome.pipeline.mutator.ReplaceMutator; import com.dfsek.terra.addons.biome.pipeline.mutator.SmoothMutator; -import com.dfsek.terra.addons.biome.pipeline.source.NoiseSource; import com.dfsek.terra.addons.biome.pipeline.stages.ExpanderStage; import com.dfsek.terra.addons.biome.pipeline.stages.MutatorStage; import com.dfsek.terra.api.TerraPlugin; diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/SourceLoader.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/SourceLoader.java deleted file mode 100644 index 4a3aa65fd..000000000 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/SourceLoader.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.dfsek.terra.addons.biome.pipeline.config; - -import com.dfsek.tectonic.exception.LoadException; -import com.dfsek.tectonic.loading.ConfigLoader; -import com.dfsek.tectonic.loading.TypeLoader; -import com.dfsek.terra.addons.biome.pipeline.source.NoiseSource; -import com.dfsek.terra.addons.biome.pipeline.source.BiomeSource; - -import java.lang.reflect.AnnotatedType; -import java.util.Map; - -@SuppressWarnings("unchecked") -public class SourceLoader implements TypeLoader { - @Override - public BiomeSource load(AnnotatedType t, Object c, ConfigLoader loader) throws LoadException { - Map source = (Map) c; - - BiomeSource.Type type = loader.loadType(BiomeSource.Type.class, source.get("type")); - - if(type == BiomeSource.Type.NOISE) { - return loader.loadType(NoiseSource.class, source); - } - throw new LoadException("No such loader type: " + type); - } -} From 6da14f58dfced3168242f6bab12f16c39d483bc5 Mon Sep 17 00:00:00 2001 From: dfsek Date: Thu, 29 Jul 2021 07:28:09 -0700 Subject: [PATCH 20/26] remove BiomeSource.Type --- .../dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java | 3 +-- .../dfsek/terra/addons/biome/pipeline/source/BiomeSource.java | 4 ---- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java index 572e308ce..cc373bf09 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java @@ -59,8 +59,7 @@ public class BiomePipelineAddon extends TerraAddon { .applyLoader(SmoothMutator.class, SmoothMutatorTemplate::new) .applyLoader(ExpanderStage.class, ExpanderStageTemplate::new) .applyLoader(BiomePipelineProvider.class, () -> new BiomePipelineTemplate(main)) - .applyLoader(BiomeProvider.class, new BiomeProviderLoader()) - .applyLoader(BiomeSource.Type.class, (t, object, cf) -> BiomeSource.Type.valueOf((String) object))) + .applyLoader(BiomeProvider.class, new BiomeProviderLoader())) .then(event -> { CheckedRegistry>> sourceRegistry = event.getPack().getOrCreateRegistry(SOURCE_REGISTRY_KEY); sourceRegistry.register("NOISE", NoiseSourceTemplate::new); diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/source/BiomeSource.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/source/BiomeSource.java index fc8df18b0..f1cf927c3 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/source/BiomeSource.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/source/BiomeSource.java @@ -4,8 +4,4 @@ import com.dfsek.terra.api.world.biome.TerraBiome; public interface BiomeSource { TerraBiome getBiome(double x, double z, long seed); - - enum Type { - NOISE - } } From d5fd6531308e2640aff1d543839dcbf3f080a79a Mon Sep 17 00:00:00 2001 From: dfsek Date: Thu, 29 Jul 2021 07:38:41 -0700 Subject: [PATCH 21/26] register stages --- .../terra/addons/biome/pipeline/BiomePipelineAddon.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java index cc373bf09..382b45f1b 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java @@ -41,6 +41,7 @@ public class BiomePipelineAddon extends TerraAddon { public static final TypeKey>> SOURCE_REGISTRY_KEY = new TypeKey<>() {}; + public static final TypeKey>> STAGE_REGISTRY_KEY = new TypeKey<>() {}; @Inject private TerraPlugin main; @@ -49,8 +50,7 @@ public class BiomePipelineAddon extends TerraAddon { main.getEventManager() .getHandler(FunctionalEventHandler.class) .register(this, ConfigPackPreLoadEvent.class) - .then(event -> event.getPack().applyLoader(Stage.class, new StageLoader()) - .applyLoader(ExpanderStage.Type.class, (c, o, l) -> ExpanderStage.Type.valueOf((String) o)) + .then(event -> event.getPack().applyLoader(ExpanderStage.Type.class, (c, o, l) -> ExpanderStage.Type.valueOf((String) o)) .applyLoader(MutatorStage.Type.class, (c, o, l) -> MutatorStage.Type.valueOf((String) o)) .applyLoader(ReplaceMutator.class, ReplaceMutatorTemplate::new) .applyLoader(BorderMutator.class, BorderMutatorTemplate::new) @@ -64,6 +64,10 @@ public class BiomePipelineAddon extends TerraAddon { CheckedRegistry>> sourceRegistry = event.getPack().getOrCreateRegistry(SOURCE_REGISTRY_KEY); sourceRegistry.register("NOISE", NoiseSourceTemplate::new); }) + .then(event -> { + CheckedRegistry>> stageRegistry = event.getPack().getOrCreateRegistry(STAGE_REGISTRY_KEY); + stageRegistry.register("FRACTAL_EXPAND", ExpanderStageTemplate::new); + }) .failThrough(); } } From dd0ef7ea45b8f75b63d50bed99d8dfce501c9e10 Mon Sep 17 00:00:00 2001 From: dfsek Date: Thu, 29 Jul 2021 07:47:56 -0700 Subject: [PATCH 22/26] register all stage types --- .../biome/pipeline/BiomePipelineAddon.java | 16 +++++++--------- .../pipeline/config/stage/StageTemplate.java | 2 ++ .../stage/mutator/BorderListMutatorTemplate.java | 10 ++++++---- .../stage/mutator/BorderMutatorTemplate.java | 9 ++++++--- .../stage/mutator/MutatorStageTemplate.java | 16 ---------------- .../mutator/ReplaceListMutatorTemplate.java | 9 ++++++--- .../stage/mutator/ReplaceMutatorTemplate.java | 9 ++++++--- .../stage/mutator/SmoothMutatorTemplate.java | 9 ++++++--- 8 files changed, 39 insertions(+), 41 deletions(-) delete mode 100644 common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/MutatorStageTemplate.java diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java index 382b45f1b..032f739a8 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java @@ -6,6 +6,7 @@ import com.dfsek.terra.addons.biome.pipeline.config.BiomePipelineTemplate; import com.dfsek.terra.addons.biome.pipeline.config.BiomeProviderLoader; import com.dfsek.terra.addons.biome.pipeline.config.NoiseSourceTemplate; import com.dfsek.terra.addons.biome.pipeline.config.stage.StageLoader; +import com.dfsek.terra.addons.biome.pipeline.config.stage.StageTemplate; import com.dfsek.terra.addons.biome.pipeline.config.stage.expander.ExpanderStageTemplate; import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.BorderListMutatorTemplate; import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.BorderMutatorTemplate; @@ -50,15 +51,7 @@ public class BiomePipelineAddon extends TerraAddon { main.getEventManager() .getHandler(FunctionalEventHandler.class) .register(this, ConfigPackPreLoadEvent.class) - .then(event -> event.getPack().applyLoader(ExpanderStage.Type.class, (c, o, l) -> ExpanderStage.Type.valueOf((String) o)) - .applyLoader(MutatorStage.Type.class, (c, o, l) -> MutatorStage.Type.valueOf((String) o)) - .applyLoader(ReplaceMutator.class, ReplaceMutatorTemplate::new) - .applyLoader(BorderMutator.class, BorderMutatorTemplate::new) - .applyLoader(BorderListMutator.class, BorderListMutatorTemplate::new) - .applyLoader(ReplaceListMutator.class, ReplaceListMutatorTemplate::new) - .applyLoader(SmoothMutator.class, SmoothMutatorTemplate::new) - .applyLoader(ExpanderStage.class, ExpanderStageTemplate::new) - .applyLoader(BiomePipelineProvider.class, () -> new BiomePipelineTemplate(main)) + .then(event -> event.getPack().applyLoader(BiomePipelineProvider.class, () -> new BiomePipelineTemplate(main)) .applyLoader(BiomeProvider.class, new BiomeProviderLoader())) .then(event -> { CheckedRegistry>> sourceRegistry = event.getPack().getOrCreateRegistry(SOURCE_REGISTRY_KEY); @@ -67,6 +60,11 @@ public class BiomePipelineAddon extends TerraAddon { .then(event -> { CheckedRegistry>> stageRegistry = event.getPack().getOrCreateRegistry(STAGE_REGISTRY_KEY); stageRegistry.register("FRACTAL_EXPAND", ExpanderStageTemplate::new); + stageRegistry.register("SMOOTH", SmoothMutatorTemplate::new); + stageRegistry.register("REPLACE", ReplaceMutatorTemplate::new); + stageRegistry.register("REPLACE_LIST", ReplaceListMutatorTemplate::new); + stageRegistry.register("BORDER", BorderMutatorTemplate::new); + stageRegistry.register("BORDER_LIST", BorderListMutatorTemplate::new); }) .failThrough(); } diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/StageTemplate.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/StageTemplate.java index b7451b871..4aba4990f 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/StageTemplate.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/StageTemplate.java @@ -2,7 +2,9 @@ package com.dfsek.terra.addons.biome.pipeline.config.stage; import com.dfsek.tectonic.annotations.Value; import com.dfsek.tectonic.loading.object.ObjectTemplate; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator; import com.dfsek.terra.addons.biome.pipeline.api.Stage; +import com.dfsek.terra.addons.biome.pipeline.stages.MutatorStage; import com.dfsek.terra.api.config.meta.Meta; import com.dfsek.terra.api.noise.NoiseSampler; diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/BorderListMutatorTemplate.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/BorderListMutatorTemplate.java index 2538c9f9d..a65e181d6 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/BorderListMutatorTemplate.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/BorderListMutatorTemplate.java @@ -1,8 +1,10 @@ package com.dfsek.terra.addons.biome.pipeline.config.stage.mutator; import com.dfsek.tectonic.annotations.Value; -import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator; +import com.dfsek.terra.addons.biome.pipeline.api.Stage; +import com.dfsek.terra.addons.biome.pipeline.config.stage.StageTemplate; import com.dfsek.terra.addons.biome.pipeline.mutator.BorderListMutator; +import com.dfsek.terra.addons.biome.pipeline.stages.MutatorStage; import com.dfsek.terra.api.config.meta.Meta; import com.dfsek.terra.api.util.collection.ProbabilityCollection; import com.dfsek.terra.api.world.biome.TerraBiome; @@ -10,7 +12,7 @@ import com.dfsek.terra.api.world.biome.TerraBiome; import java.util.Map; @SuppressWarnings("unused") -public class BorderListMutatorTemplate extends MutatorStageTemplate { +public class BorderListMutatorTemplate extends StageTemplate { @Value("from") private @Meta String from; @@ -25,7 +27,7 @@ public class BorderListMutatorTemplate extends MutatorStageTemplate { @Override - public BiomeMutator get() { - return new BorderListMutator(replace, from, defaultReplace, noise, defaultTo); + public Stage get() { + return new MutatorStage(new BorderListMutator(replace, from, defaultReplace, noise, defaultTo)); } } diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/BorderMutatorTemplate.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/BorderMutatorTemplate.java index be8676afa..786b54dc8 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/BorderMutatorTemplate.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/BorderMutatorTemplate.java @@ -2,13 +2,16 @@ package com.dfsek.terra.addons.biome.pipeline.config.stage.mutator; import com.dfsek.tectonic.annotations.Value; import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator; +import com.dfsek.terra.addons.biome.pipeline.api.Stage; +import com.dfsek.terra.addons.biome.pipeline.config.stage.StageTemplate; import com.dfsek.terra.addons.biome.pipeline.mutator.BorderMutator; +import com.dfsek.terra.addons.biome.pipeline.stages.MutatorStage; import com.dfsek.terra.api.config.meta.Meta; import com.dfsek.terra.api.util.collection.ProbabilityCollection; import com.dfsek.terra.api.world.biome.TerraBiome; @SuppressWarnings("unused") -public class BorderMutatorTemplate extends MutatorStageTemplate { +public class BorderMutatorTemplate extends StageTemplate { @Value("from") private @Meta String from; @@ -19,7 +22,7 @@ public class BorderMutatorTemplate extends MutatorStageTemplate { private @Meta ProbabilityCollection<@Meta TerraBiome> to; @Override - public BiomeMutator get() { - return new BorderMutator(from, replace, noise, to); + public Stage get() { + return new MutatorStage(new BorderMutator(from, replace, noise, to)); } } diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/MutatorStageTemplate.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/MutatorStageTemplate.java deleted file mode 100644 index d19357f16..000000000 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/MutatorStageTemplate.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.dfsek.terra.addons.biome.pipeline.config.stage.mutator; - -import com.dfsek.tectonic.annotations.Value; -import com.dfsek.tectonic.loading.object.ObjectTemplate; -import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator; -import com.dfsek.terra.addons.biome.pipeline.stages.MutatorStage; -import com.dfsek.terra.api.config.meta.Meta; -import com.dfsek.terra.api.noise.NoiseSampler; - -public abstract class MutatorStageTemplate implements ObjectTemplate { - @Value("noise") - protected @Meta NoiseSampler noise; - - @Override - public abstract BiomeMutator get(); -} diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/ReplaceListMutatorTemplate.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/ReplaceListMutatorTemplate.java index 6f23b76b7..bdd22ade9 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/ReplaceListMutatorTemplate.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/ReplaceListMutatorTemplate.java @@ -2,7 +2,10 @@ package com.dfsek.terra.addons.biome.pipeline.config.stage.mutator; import com.dfsek.tectonic.annotations.Value; import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator; +import com.dfsek.terra.addons.biome.pipeline.api.Stage; +import com.dfsek.terra.addons.biome.pipeline.config.stage.StageTemplate; import com.dfsek.terra.addons.biome.pipeline.mutator.ReplaceListMutator; +import com.dfsek.terra.addons.biome.pipeline.stages.MutatorStage; import com.dfsek.terra.api.config.meta.Meta; import com.dfsek.terra.api.util.collection.ProbabilityCollection; import com.dfsek.terra.api.world.biome.TerraBiome; @@ -10,7 +13,7 @@ import com.dfsek.terra.api.world.biome.TerraBiome; import java.util.Map; @SuppressWarnings("unused") -public class ReplaceListMutatorTemplate extends MutatorStageTemplate { +public class ReplaceListMutatorTemplate extends StageTemplate { @Value("default-from") private @Meta String defaultFrom; @@ -21,7 +24,7 @@ public class ReplaceListMutatorTemplate extends MutatorStageTemplate { private @Meta Map<@Meta TerraBiome, @Meta ProbabilityCollection<@Meta TerraBiome>> replace; @Override - public BiomeMutator get() { - return new ReplaceListMutator(replace, defaultFrom, defaultTo, noise); + public Stage get() { + return new MutatorStage(new ReplaceListMutator(replace, defaultFrom, defaultTo, noise)); } } diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/ReplaceMutatorTemplate.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/ReplaceMutatorTemplate.java index 9adb4aab5..ea59bd3d8 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/ReplaceMutatorTemplate.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/ReplaceMutatorTemplate.java @@ -2,13 +2,16 @@ package com.dfsek.terra.addons.biome.pipeline.config.stage.mutator; import com.dfsek.tectonic.annotations.Value; import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator; +import com.dfsek.terra.addons.biome.pipeline.api.Stage; +import com.dfsek.terra.addons.biome.pipeline.config.stage.StageTemplate; import com.dfsek.terra.addons.biome.pipeline.mutator.ReplaceMutator; +import com.dfsek.terra.addons.biome.pipeline.stages.MutatorStage; import com.dfsek.terra.api.config.meta.Meta; import com.dfsek.terra.api.util.collection.ProbabilityCollection; import com.dfsek.terra.api.world.biome.TerraBiome; @SuppressWarnings("unused") -public class ReplaceMutatorTemplate extends MutatorStageTemplate { +public class ReplaceMutatorTemplate extends StageTemplate { @Value("from") private @Meta String from; @@ -16,7 +19,7 @@ public class ReplaceMutatorTemplate extends MutatorStageTemplate { private @Meta ProbabilityCollection<@Meta TerraBiome> to; @Override - public BiomeMutator get() { - return new ReplaceMutator(from, to, noise); + public Stage get() { + return new MutatorStage(new ReplaceMutator(from, to, noise)); } } diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/SmoothMutatorTemplate.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/SmoothMutatorTemplate.java index 20f98e993..77e23c100 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/SmoothMutatorTemplate.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/SmoothMutatorTemplate.java @@ -1,11 +1,14 @@ package com.dfsek.terra.addons.biome.pipeline.config.stage.mutator; import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator; +import com.dfsek.terra.addons.biome.pipeline.api.Stage; +import com.dfsek.terra.addons.biome.pipeline.config.stage.StageTemplate; import com.dfsek.terra.addons.biome.pipeline.mutator.SmoothMutator; +import com.dfsek.terra.addons.biome.pipeline.stages.MutatorStage; -public class SmoothMutatorTemplate extends MutatorStageTemplate { +public class SmoothMutatorTemplate extends StageTemplate { @Override - public BiomeMutator get() { - return new SmoothMutator(noise); + public Stage get() { + return new MutatorStage(new SmoothMutator(noise)); } } From 276c78a329b8e2eaf1f240dc75f830547ff6f8c3 Mon Sep 17 00:00:00 2001 From: dfsek Date: Thu, 29 Jul 2021 07:48:43 -0700 Subject: [PATCH 23/26] remove StageLoader --- .../biome/pipeline/BiomePipelineAddon.java | 9 --- .../pipeline/config/stage/StageLoader.java | 63 ------------------- 2 files changed, 72 deletions(-) delete mode 100644 common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/StageLoader.java diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java index 032f739a8..9d7cb870d 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java @@ -5,21 +5,12 @@ import com.dfsek.terra.addons.biome.pipeline.api.Stage; import com.dfsek.terra.addons.biome.pipeline.config.BiomePipelineTemplate; import com.dfsek.terra.addons.biome.pipeline.config.BiomeProviderLoader; import com.dfsek.terra.addons.biome.pipeline.config.NoiseSourceTemplate; -import com.dfsek.terra.addons.biome.pipeline.config.stage.StageLoader; -import com.dfsek.terra.addons.biome.pipeline.config.stage.StageTemplate; import com.dfsek.terra.addons.biome.pipeline.config.stage.expander.ExpanderStageTemplate; import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.BorderListMutatorTemplate; import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.BorderMutatorTemplate; import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.ReplaceListMutatorTemplate; import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.ReplaceMutatorTemplate; import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.SmoothMutatorTemplate; -import com.dfsek.terra.addons.biome.pipeline.mutator.BorderListMutator; -import com.dfsek.terra.addons.biome.pipeline.mutator.BorderMutator; -import com.dfsek.terra.addons.biome.pipeline.mutator.ReplaceListMutator; -import com.dfsek.terra.addons.biome.pipeline.mutator.ReplaceMutator; -import com.dfsek.terra.addons.biome.pipeline.mutator.SmoothMutator; -import com.dfsek.terra.addons.biome.pipeline.stages.ExpanderStage; -import com.dfsek.terra.addons.biome.pipeline.stages.MutatorStage; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.addon.TerraAddon; import com.dfsek.terra.api.addon.annotations.Addon; diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/StageLoader.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/StageLoader.java deleted file mode 100644 index 6805f4fcb..000000000 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/StageLoader.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.dfsek.terra.addons.biome.pipeline.config.stage; - -import com.dfsek.tectonic.exception.LoadException; -import com.dfsek.tectonic.loading.ConfigLoader; -import com.dfsek.tectonic.loading.TypeLoader; -import com.dfsek.terra.addons.biome.pipeline.api.Stage; -import com.dfsek.terra.addons.biome.pipeline.config.stage.expander.ExpanderStageTemplate; -import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.BorderListMutatorTemplate; -import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.BorderMutatorTemplate; -import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.ReplaceListMutatorTemplate; -import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.ReplaceMutatorTemplate; -import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.SmoothMutatorTemplate; -import com.dfsek.terra.addons.biome.pipeline.mutator.BorderListMutator; -import com.dfsek.terra.addons.biome.pipeline.mutator.BorderMutator; -import com.dfsek.terra.addons.biome.pipeline.mutator.ReplaceListMutator; -import com.dfsek.terra.addons.biome.pipeline.mutator.ReplaceMutator; -import com.dfsek.terra.addons.biome.pipeline.mutator.SmoothMutator; -import com.dfsek.terra.addons.biome.pipeline.stages.ExpanderStage; -import com.dfsek.terra.addons.biome.pipeline.stages.MutatorStage; - -import java.lang.reflect.AnnotatedType; -import java.util.Map; - -@SuppressWarnings("unchecked") -public class StageLoader implements TypeLoader { - @Override - public Stage load(AnnotatedType t, Object c, ConfigLoader loader) throws LoadException { - Map raw = (Map) c; - - if(raw.size() != 1) throw new LoadException("Illegal stage map size: " + raw.size()); - - Map.Entry entry = null; - - for(Map.Entry e : raw.entrySet()) { - entry = e; - } - - Map mutator = (Map) entry.getValue(); - - if(entry.getKey().equals("expand")) { - ExpanderStage.Type stageType = loader.loadType(ExpanderStage.Type.class, mutator.get("type")); - if(stageType.equals(ExpanderStage.Type.FRACTAL)) { - return loader.loadType(ExpanderStage.class, mutator); - } else throw new LoadException("No such expander \"" + stageType + "\""); - } else if(entry.getKey().equals("mutate")) { - switch(loader.loadType(MutatorStage.Type.class, mutator.get("type"))) { - case SMOOTH: - return new MutatorStage(loader.loadType(SmoothMutator.class, mutator)); - case REPLACE: - return new MutatorStage(loader.loadType(ReplaceMutator.class, mutator)); - case REPLACE_LIST: - return new MutatorStage(loader.loadType(ReplaceListMutator.class, mutator)); - case BORDER: - return new MutatorStage(loader.loadType(BorderMutator.class, mutator)); - case BORDER_LIST: - return new MutatorStage(loader.loadType(BorderListMutator.class, mutator)); - default: - throw new LoadException("No such mutator type \"" + mutator.get("type")); - } - } - throw new LoadException("No such mutator \"" + entry.getKey() + "\""); - } -} From 480e41b99a6fa7a7f9d2ec8bcec161f8674c285a Mon Sep 17 00:00:00 2001 From: dfsek Date: Thu, 29 Jul 2021 07:56:21 -0700 Subject: [PATCH 24/26] register biome provider types --- .../terra/addons/biome/pipeline/BiomePipelineAddon.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java index 9d7cb870d..539723a67 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java @@ -34,6 +34,7 @@ public class BiomePipelineAddon extends TerraAddon { public static final TypeKey>> SOURCE_REGISTRY_KEY = new TypeKey<>() {}; public static final TypeKey>> STAGE_REGISTRY_KEY = new TypeKey<>() {}; + public static final TypeKey>> PROVIDER_REGISTRY_KEY = new TypeKey<>() {}; @Inject private TerraPlugin main; @@ -42,8 +43,10 @@ public class BiomePipelineAddon extends TerraAddon { main.getEventManager() .getHandler(FunctionalEventHandler.class) .register(this, ConfigPackPreLoadEvent.class) - .then(event -> event.getPack().applyLoader(BiomePipelineProvider.class, () -> new BiomePipelineTemplate(main)) - .applyLoader(BiomeProvider.class, new BiomeProviderLoader())) + .then(event -> { + CheckedRegistry>> providerRegistry = event.getPack().getOrCreateRegistry(PROVIDER_REGISTRY_KEY); + providerRegistry.register("PIPELINE", () -> new BiomePipelineTemplate(main)); + }) .then(event -> { CheckedRegistry>> sourceRegistry = event.getPack().getOrCreateRegistry(SOURCE_REGISTRY_KEY); sourceRegistry.register("NOISE", NoiseSourceTemplate::new); From 1c5945706febed02b1b0fa8ddbcb243ef250cfe4 Mon Sep 17 00:00:00 2001 From: dfsek Date: Thu, 29 Jul 2021 07:59:13 -0700 Subject: [PATCH 25/26] implement single biome provider addon --- .../single/SingleBiomeProviderAddon.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 common/addons/biome-provider-single/src/main/java/com/dfsek/terra/addons/biome/single/SingleBiomeProviderAddon.java diff --git a/common/addons/biome-provider-single/src/main/java/com/dfsek/terra/addons/biome/single/SingleBiomeProviderAddon.java b/common/addons/biome-provider-single/src/main/java/com/dfsek/terra/addons/biome/single/SingleBiomeProviderAddon.java new file mode 100644 index 000000000..704a20d28 --- /dev/null +++ b/common/addons/biome-provider-single/src/main/java/com/dfsek/terra/addons/biome/single/SingleBiomeProviderAddon.java @@ -0,0 +1,38 @@ +package com.dfsek.terra.addons.biome.single; + +import com.dfsek.tectonic.loading.object.ObjectTemplate; +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.events.config.pack.ConfigPackPreLoadEvent; +import com.dfsek.terra.api.event.functional.FunctionalEventHandler; +import com.dfsek.terra.api.injection.annotations.Inject; +import com.dfsek.terra.api.registry.CheckedRegistry; +import com.dfsek.terra.api.util.reflection.TypeKey; +import com.dfsek.terra.api.world.biome.generation.BiomeProvider; + +import java.util.function.Supplier; + +@Addon("biome-provider-single") +@Author("Terra") +@Version("1.0.0") +public class SingleBiomeProviderAddon extends TerraAddon { + public static final TypeKey>> PROVIDER_REGISTRY_KEY = new TypeKey<>() {}; + + @Inject + private TerraPlugin main; + + @Override + public void initialize() { + main.getEventManager() + .getHandler(FunctionalEventHandler.class) + .register(this, ConfigPackPreLoadEvent.class) + .then(event -> { + CheckedRegistry>> providerRegistry = event.getPack().getOrCreateRegistry(PROVIDER_REGISTRY_KEY); + providerRegistry.register("SINGLE", SingleBiomeProviderTemplate::new); + }) + .failThrough(); + } +} From a2d8a5a259dd9ec98c19728ccb7b52a0adc9be44 Mon Sep 17 00:00:00 2001 From: dfsek Date: Thu, 29 Jul 2021 08:03:22 -0700 Subject: [PATCH 26/26] implement ImageBiomeProviderAddon --- .../biome/image/ImageBiomeProviderAddon.java | 39 +++++++++++++++++++ .../biome/image/ImageProviderTemplate.java | 12 ++++-- 2 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 common/addons/biome-provider-image/src/main/java/com/dfsek/terra/addons/biome/image/ImageBiomeProviderAddon.java diff --git a/common/addons/biome-provider-image/src/main/java/com/dfsek/terra/addons/biome/image/ImageBiomeProviderAddon.java b/common/addons/biome-provider-image/src/main/java/com/dfsek/terra/addons/biome/image/ImageBiomeProviderAddon.java new file mode 100644 index 000000000..566abff80 --- /dev/null +++ b/common/addons/biome-provider-image/src/main/java/com/dfsek/terra/addons/biome/image/ImageBiomeProviderAddon.java @@ -0,0 +1,39 @@ +package com.dfsek.terra.addons.biome.image; + +import com.dfsek.tectonic.loading.object.ObjectTemplate; +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.events.config.pack.ConfigPackPreLoadEvent; +import com.dfsek.terra.api.event.functional.FunctionalEventHandler; +import com.dfsek.terra.api.injection.annotations.Inject; +import com.dfsek.terra.api.registry.CheckedRegistry; +import com.dfsek.terra.api.util.reflection.TypeKey; +import com.dfsek.terra.api.world.biome.TerraBiome; +import com.dfsek.terra.api.world.biome.generation.BiomeProvider; + +import java.util.function.Supplier; + +@Addon("biome-provider-image") +@Author("Terra") +@Version("1.0.0") +public class ImageBiomeProviderAddon extends TerraAddon { + public static final TypeKey>> PROVIDER_REGISTRY_KEY = new TypeKey<>() {}; + + @Inject + private TerraPlugin main; + + @Override + public void initialize() { + main.getEventManager() + .getHandler(FunctionalEventHandler.class) + .register(this, ConfigPackPreLoadEvent.class) + .then(event -> { + CheckedRegistry>> providerRegistry = event.getPack().getOrCreateRegistry(PROVIDER_REGISTRY_KEY); + providerRegistry.register("IMAGE", () -> new ImageProviderTemplate(event.getPack().getRegistry(TerraBiome.class))); + }) + .failThrough(); + } +} diff --git a/common/addons/biome-provider-image/src/main/java/com/dfsek/terra/addons/biome/image/ImageProviderTemplate.java b/common/addons/biome-provider-image/src/main/java/com/dfsek/terra/addons/biome/image/ImageProviderTemplate.java index f0388a941..70ad46589 100644 --- a/common/addons/biome-provider-image/src/main/java/com/dfsek/terra/addons/biome/image/ImageProviderTemplate.java +++ b/common/addons/biome-provider-image/src/main/java/com/dfsek/terra/addons/biome/image/ImageProviderTemplate.java @@ -1,6 +1,8 @@ package com.dfsek.terra.addons.biome.image; +import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Value; +import com.dfsek.tectonic.loading.object.ObjectTemplate; import com.dfsek.terra.api.registry.Registry; import com.dfsek.terra.api.world.biome.TerraBiome; import com.dfsek.terra.api.world.biome.generation.BiomeProvider; @@ -8,7 +10,7 @@ import com.dfsek.terra.api.world.biome.generation.BiomeProvider; import java.awt.image.BufferedImage; import java.util.HashSet; -public class ImageProviderTemplate /*extends BiomeProviderTemplate */ { +public class ImageProviderTemplate implements ObjectTemplate { private final Registry biomes; @Value("image.name") private BufferedImage image; @@ -16,14 +18,16 @@ public class ImageProviderTemplate /*extends BiomeProviderTemplate */ { @Value("image.align") private ImageBiomeProvider.Align align; - private int resolution; + @Value("resolution") + @Default + private int resolution = 1; public ImageProviderTemplate(Registry set) { this.biomes = set; } - //@Override - public BiomeProvider build() { + @Override + public BiomeProvider get() { return new ImageBiomeProvider(new HashSet<>(biomes.entries()), image, resolution, align); } }