diff --git a/Ruins/src/main/java/atomicstryker/ruins/common/FileHandler.java b/Ruins/src/main/java/atomicstryker/ruins/common/FileHandler.java index f03bd7a34..21fd296fe 100644 --- a/Ruins/src/main/java/atomicstryker/ruins/common/FileHandler.java +++ b/Ruins/src/main/java/atomicstryker/ruins/common/FileHandler.java @@ -18,6 +18,7 @@ import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.util.ResourceLocation; +import net.minecraft.world.DimensionType; import net.minecraft.world.biome.Biome; class FileHandler @@ -234,7 +235,7 @@ private void recalcBiomeWeight(String biomeName) vars.put(biomeName, val); } - private static final Pattern patternSpecificBiome = Pattern.compile("\\s*+specific_([^\\s=]++)\\s*+=\\s*+([^\\s#]++)"); + private static final Pattern patternSpecificBiome = Pattern.compile("specific_([^=]++)=(.++)"); private void readPerWorldOptions(File dir, PrintWriter ruinsLog) throws Exception { @@ -323,7 +324,7 @@ else if (check[0].equals("teblocks") && check.length > 1) } } } - else if ((matcher = patternSpecificBiome.matcher(read)).lookingAt()) + else if ((matcher = patternSpecificBiome.matcher(read)).matches()) { boolean found = false; Biome bgb; @@ -359,6 +360,7 @@ private void addRuins(PrintWriter pw, File path, String name, HashSet bonemealMarkers; private final ArrayList adjoiningTemplates; + private final Set acceptedDimensions = new HashSet<>(); private class AdjoiningTemplateData { @@ -855,6 +856,14 @@ else if (line.startsWith("unacceptable_target_blocks")) deniedSurfaces = inacceptables.toArray(deniedSurfaces); } } + else if (line.startsWith("dimensionsToSpawnIn")) + { + String[] check = line.split("="); + if (check.length > 1) + { + Collections.addAll(acceptedDimensions, check[1].split(",")); + } + } else if (line.startsWith("dimensions")) { String[] check = line.split("="); @@ -1131,6 +1140,11 @@ public Block getAirBlock() return Blocks.AIR; } + public boolean acceptsDimension(final String dimension) + { + return acceptedDimensions.isEmpty() || dimension != null && !dimension.isEmpty() && acceptedDimensions.contains(dimension); + } + // A VariantRuleset is a list of template rules, some of which may have a number of variant versions from which the // actual rule definitions for a particular structure are randomly drawn. This allows per-structure randomization // (in addition to regular per-block randomization) without the need to create separate templates. diff --git a/Ruins/src/main/java/atomicstryker/ruins/common/World2TemplateParser.java b/Ruins/src/main/java/atomicstryker/ruins/common/World2TemplateParser.java index 08ab26b4a..5963d8d4f 100644 --- a/Ruins/src/main/java/atomicstryker/ruins/common/World2TemplateParser.java +++ b/Ruins/src/main/java/atomicstryker/ruins/common/World2TemplateParser.java @@ -472,6 +472,10 @@ private void toFile(File file) pw.println("# e.g., a weight=6 template is chosen 3X as often as one with weight=2"); pw.println("weight=1"); pw.println("#"); + pw.println("# list of dimensions in which this template may spawn, even if generic"); + pw.println("# one or more dimension names, separated by commas (blank = all)"); + pw.println("dimensionsToSpawnIn="); + pw.println("#"); pw.println("# list of other biomes in which this template may spawn"); pw.println("# biome corresponding to directory is always assumed, listed or not"); pw.println("# generic templates should leave this list empty"); diff --git a/Ruins/src/main/resources/changelog.txt b/Ruins/src/main/resources/changelog.txt index ba4452d59..1bc21929f 100644 --- a/Ruins/src/main/resources/changelog.txt +++ b/Ruins/src/main/resources/changelog.txt @@ -545,3 +545,5 @@ a: setAccessible now true + consider dimension in "recursive generator" check, bugfix + allow floating point block and template weights, rule and specific_biome chance values + remove extra +1% generic spawn chance, bugfix ++ support biome names containing spaces ++ templates can now specify dimensions to spawn in diff --git a/Ruins/src/main/resources/examplesAndDocs/template_rules.txt b/Ruins/src/main/resources/examplesAndDocs/template_rules.txt index a22fd366a..e88e14cff 100644 --- a/Ruins/src/main/resources/examplesAndDocs/template_rules.txt +++ b/Ruins/src/main/resources/examplesAndDocs/template_rules.txt @@ -187,6 +187,12 @@ # and is of lower precedence than + and -; parentheses may be used to further control the # order of evaluation. # +# Ruins 17.3 adds optional variable "dimensionsToSpawnIn" to specify in which +# dimensions the template's structures may appear. Note this applies to generic +# spawning as well. List one or more dimensions by name, separated by commas, +# or leave blank (default) to allow all dimensions. +# example: dimensionsToSpawnIn=overworld,twilight_forest +# weight=5 embed_into_distance=1