diff --git a/gradle.properties b/gradle.properties index 092beb34..172c19fa 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ yarn_mappings=6 loader_version=0.11.3 # Mod Properties -mod_version = 0.1.17 +mod_version = 0.1.18 maven_group = ru.bclib archives_base_name = bclib diff --git a/src/main/java/ru/bclib/util/WeighTree.java b/src/main/java/ru/bclib/util/WeighTree.java index 28527dca..096747c4 100644 --- a/src/main/java/ru/bclib/util/WeighTree.java +++ b/src/main/java/ru/bclib/util/WeighTree.java @@ -1,5 +1,6 @@ package ru.bclib.util; +import java.util.Locale; import java.util.Random; public class WeighTree { @@ -20,20 +21,20 @@ public class WeighTree { return root.get(random.nextFloat() * maxWeight); } - private Node getNode(WeightedList biomes) { - int size = biomes.size(); + private Node getNode(WeightedList list) { + int size = list.size(); if (size == 1) { - return new Leaf(biomes.get(0)); + return new Leaf(list.get(0)); } else if (size == 2) { - T first = biomes.get(0); - return new Branch(biomes.getWeight(0), new Leaf(first), new Leaf(biomes.get(1))); + T first = list.get(0); + return new Branch(list.getWeight(0), new Leaf(first), new Leaf(list.get(1))); } else { int index = size >> 1; - float separator = biomes.getWeight(index); - Node a = getNode(biomes.subList(0, index + 1)); - Node b = getNode(biomes.subList(index, size)); + float separator = list.getWeight(index); + Node a = getNode(list.subList(0, index + 1)); + Node b = getNode(list.subList(index, size)); return new Branch(separator, a, b); } } @@ -57,18 +58,33 @@ public class WeighTree { T get(float value) { return value < separator ? min.get(value) : max.get(value); } + + @Override + public String toString() { + return String.format(Locale.ROOT, "[%f, %s, %s]", separator, min.toString(), max.toString()); + } } private class Leaf extends Node { final T biome; - Leaf(T biome) { - this.biome = biome; + Leaf(T value) { + this.biome = value; } @Override T get(float value) { return biome; } + + @Override + public String toString() { + return String.format(Locale.ROOT, "[%s]", biome.toString()); + } + } + + @Override + public String toString() { + return root.toString(); } } diff --git a/src/main/java/ru/bclib/world/biomes/BCLBiome.java b/src/main/java/ru/bclib/world/biomes/BCLBiome.java index 6706f94d..f4c589a0 100644 --- a/src/main/java/ru/bclib/world/biomes/BCLBiome.java +++ b/src/main/java/ru/bclib/world/biomes/BCLBiome.java @@ -2,9 +2,11 @@ package ru.bclib.world.biomes; import java.io.InputStream; import java.util.List; +import java.util.Map; import java.util.Random; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import com.google.gson.JsonArray; import com.google.gson.JsonObject; @@ -31,6 +33,7 @@ public class BCLBiome { protected float maxSubBiomeChance = 1; protected final float genChance; + private final Map customData; private final float fogDensity; private BCLFeature structuresFeature; private Biome actualBiome; @@ -44,6 +47,7 @@ public class BCLBiome { this.biome = definition.build(); this.genChance = definition.getGenChance(); this.fogDensity = definition.getFodDensity(); + this.customData = definition.getCustomData(); } public BCLBiome(ResourceLocation id, Biome biome, float fogDensity, float genChance) { @@ -52,6 +56,7 @@ public class BCLBiome { this.genChance = genChance; this.fogDensity = fogDensity; this.readStructureList(); + this.customData = Maps.newHashMap(); } public BCLBiome getEdge() { @@ -179,4 +184,9 @@ public class BCLBiome { public int hashCode() { return mcID.hashCode(); } + + @SuppressWarnings("unchecked") + public T getCustomData(String name) { + return (T) customData.get(name); + } } diff --git a/src/main/java/ru/bclib/world/biomes/BCLBiomeDef.java b/src/main/java/ru/bclib/world/biomes/BCLBiomeDef.java index 479ee4b1..7a96e694 100644 --- a/src/main/java/ru/bclib/world/biomes/BCLBiomeDef.java +++ b/src/main/java/ru/bclib/world/biomes/BCLBiomeDef.java @@ -1,8 +1,10 @@ package ru.bclib.world.biomes; import java.util.List; +import java.util.Map; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import net.minecraft.core.Registry; import net.minecraft.core.particles.ParticleOptions; @@ -50,6 +52,7 @@ public class BCLBiomeDef { private final List carvers = Lists.newArrayList(); private final List mobs = Lists.newArrayList(); private final List spawns = Lists.newArrayList(); + private final Map customData = Maps.newHashMap(); private final ResourceLocation id; @@ -369,4 +372,12 @@ public class BCLBiomeDef { carvers.add(info); return this; } + + public void addCustomData(String name, Object value) { + customData.put(name, value); + } + + protected Map getCustomData() { + return customData; + } } \ No newline at end of file