diff --git a/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/UserDefinedBiome.java b/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/UserDefinedBiome.java index 015fdc728..d3a2332ea 100644 --- a/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/UserDefinedBiome.java +++ b/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/UserDefinedBiome.java @@ -20,15 +20,16 @@ public class UserDefinedBiome implements TerraBiome { private final int color; private final Set tags; - private final Context context = new Context(); + private final Context context; - public UserDefinedBiome(ProbabilityCollection vanilla, UserDefinedGenerator gen, BiomeTemplate config) { + public UserDefinedBiome(ProbabilityCollection vanilla, UserDefinedGenerator gen, BiomeTemplate config, Context context) { this.vanilla = vanilla; this.gen = gen; this.id = config.getID(); this.config = config; this.color = config.getColor(); this.tags = config.getTags(); + this.context = context; tags.add("BIOME:" + id); } diff --git a/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/UserDefinedBiomeBuilder.java b/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/UserDefinedBiomeBuilder.java index 48bcfb08b..9d4a25a6f 100644 --- a/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/UserDefinedBiomeBuilder.java +++ b/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/UserDefinedBiomeBuilder.java @@ -1,6 +1,6 @@ package com.dfsek.terra.addons.biome; -import com.dfsek.terra.api.config.ConfigPack; +import com.dfsek.terra.api.properties.Context; import com.dfsek.terra.api.util.collection.ProbabilityCollection; import com.dfsek.terra.api.util.seeded.BiomeBuilder; import com.dfsek.terra.api.world.biome.Biome; @@ -10,6 +10,7 @@ import java.util.concurrent.ConcurrentHashMap; public class UserDefinedBiomeBuilder implements BiomeBuilder { private final BiomeTemplate template; + private final Context context = new Context(); private final Map biomeMap = new ConcurrentHashMap<>(); @@ -24,7 +25,7 @@ public class UserDefinedBiomeBuilder implements BiomeBuilder { s -> { UserDefinedGenerator generator = new UserDefinedGenerator(template.getNoiseEquation().apply(seed), template.getElevationEquation().apply(seed), template.getCarvingEquation().apply(seed), template.getBiomeNoise().apply(seed), template.getElevationWeight(), template.getBlendDistance(), template.getBlendStep(), template.getBlendWeight()); - return new UserDefinedBiome(template.getVanilla(), generator, template); + return new UserDefinedBiome(template.getVanilla(), generator, template, context); } ); } @@ -34,4 +35,9 @@ public class UserDefinedBiomeBuilder implements BiomeBuilder { public ProbabilityCollection getVanillaBiomes() { return template.getVanilla(); } + + @Override + public Context getContext() { + return context; + } } diff --git a/common/api/src/main/java/com/dfsek/terra/api/properties/annotations/Linked.java b/common/api/src/main/java/com/dfsek/terra/api/properties/annotations/Linked.java new file mode 100644 index 000000000..a717fb214 --- /dev/null +++ b/common/api/src/main/java/com/dfsek/terra/api/properties/annotations/Linked.java @@ -0,0 +1,18 @@ +package com.dfsek.terra.api.properties.annotations; + +import com.dfsek.terra.api.properties.PropertyHolder; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Specifies that this property holder shares properties + * with the {@link #value()} holder. + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.CLASS) +public @interface Linked { + Class value(); +} diff --git a/common/api/src/main/java/com/dfsek/terra/api/util/seeded/BiomeBuilder.java b/common/api/src/main/java/com/dfsek/terra/api/util/seeded/BiomeBuilder.java index 9a47e834d..f27567cb3 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/util/seeded/BiomeBuilder.java +++ b/common/api/src/main/java/com/dfsek/terra/api/util/seeded/BiomeBuilder.java @@ -1,9 +1,12 @@ package com.dfsek.terra.api.util.seeded; +import com.dfsek.terra.api.properties.PropertyHolder; +import com.dfsek.terra.api.properties.annotations.Linked; import com.dfsek.terra.api.util.collection.ProbabilityCollection; import com.dfsek.terra.api.world.biome.Biome; import com.dfsek.terra.api.world.biome.TerraBiome; -public interface BiomeBuilder extends SeededBuilder { +@Linked(TerraBiome.class) +public interface BiomeBuilder extends SeededBuilder, PropertyHolder { ProbabilityCollection getVanillaBiomes(); } diff --git a/common/api/src/main/java/com/dfsek/terra/api/world/biome/TerraBiome.java b/common/api/src/main/java/com/dfsek/terra/api/world/biome/TerraBiome.java index 92464823b..68abb8d73 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/world/biome/TerraBiome.java +++ b/common/api/src/main/java/com/dfsek/terra/api/world/biome/TerraBiome.java @@ -2,7 +2,9 @@ package com.dfsek.terra.api.world.biome; import com.dfsek.terra.api.properties.PropertyHolder; +import com.dfsek.terra.api.properties.annotations.Linked; import com.dfsek.terra.api.util.collection.ProbabilityCollection; +import com.dfsek.terra.api.util.seeded.BiomeBuilder; import com.dfsek.terra.api.world.World; import java.util.Set; @@ -10,6 +12,7 @@ import java.util.Set; /** * Represents a custom biome */ +@Linked(BiomeBuilder.class) public interface TerraBiome extends PropertyHolder { /**