From f85d047ee6f49ec5379ccdd1836c5200f56cccb0 Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 30 Nov 2020 17:23:57 -0700 Subject: [PATCH] Fix various issues --- src/main/java/com/dfsek/terra/TerraWorld.java | 19 +------------------ .../dfsek/terra/biome/UserDefinedBiome.java | 14 ++++++++++---- .../terra/biome/grid/TerraBiomeGrid.java | 10 +++------- .../terra/command/biome/BiomeInfoCommand.java | 2 +- .../dfsek/terra/config/base/ConfigPack.java | 8 ++++++++ .../terra/config/base/ConfigPackTemplate.java | 8 -------- .../terra/config/factories/BiomeFactory.java | 2 +- .../terra/config/factories/TreeFactory.java | 2 +- .../terra/config/templates/BiomeTemplate.java | 8 ++++---- .../items/{ => tree}/TerraTree.java | 2 +- .../generation/items/tree/TreeLayer.java | 7 ++++++- .../java/com/dfsek/terra/util/TagUtil.java | 3 ++- 12 files changed, 38 insertions(+), 47 deletions(-) rename src/main/java/com/dfsek/terra/generation/items/{ => tree}/TerraTree.java (98%) diff --git a/src/main/java/com/dfsek/terra/TerraWorld.java b/src/main/java/com/dfsek/terra/TerraWorld.java index 31acd97ee..0d0297296 100644 --- a/src/main/java/com/dfsek/terra/TerraWorld.java +++ b/src/main/java/com/dfsek/terra/TerraWorld.java @@ -13,7 +13,6 @@ import org.polydev.gaea.biome.BiomeGrid; import java.util.HashMap; import java.util.Map; -import java.util.Objects; public class TerraWorld { private static final Map map = new HashMap<>(); @@ -49,24 +48,8 @@ public class TerraWorld { Bukkit.getLogger().severe("Terrain will NOT generate properly at this point. Correct your config before using your server!"); } } - BiomeGrid erosion = null; - String erosionName = template.getErodeGrid(); - if(template.isErode()) { - try { - BiomeGridBuilder g = Objects.requireNonNull(config.getBiomeGrid(erosionName)); - BiomeGrid b = g.build(w, worldConfig); - erosion = b; - } catch(NullPointerException e) { - safe = false; - Debug.stack(e); - Bukkit.getLogger().severe("No such BiomeGrid (erosion): " + erosionName); - Bukkit.getLogger().severe("Please check configuration files for errors. Configuration errors will have been reported during initialization."); - Bukkit.getLogger().severe("ONLY report this to Terra if you are SURE your config is error-free."); - Bukkit.getLogger().severe("Terrain will NOT generate properly at this point. Correct your config before using your server!"); - } - } zone = new BiomeZone(w, worldConfig, definedGrids); - grid = new TerraBiomeGrid(w, template.getGridFreqX(), template.getGridFreqZ(), zone, config, erosion); + grid = new TerraBiomeGrid(w, template.getGridFreqX(), template.getGridFreqZ(), zone, config); } public static void loadWorld(WorldConfig w) { diff --git a/src/main/java/com/dfsek/terra/biome/UserDefinedBiome.java b/src/main/java/com/dfsek/terra/biome/UserDefinedBiome.java index 6701f769e..7da44d7f3 100644 --- a/src/main/java/com/dfsek/terra/biome/UserDefinedBiome.java +++ b/src/main/java/com/dfsek/terra/biome/UserDefinedBiome.java @@ -1,6 +1,7 @@ package com.dfsek.terra.biome; import com.dfsek.terra.WorldObject; +import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.builder.GeneratorBuilder; import com.dfsek.terra.config.templates.BiomeTemplate; import com.dfsek.terra.generation.UserDefinedDecorator; @@ -21,16 +22,17 @@ public class UserDefinedBiome implements Biome, WorldObject { private final org.bukkit.block.Biome vanilla; private final String id; private final BiomeTemplate config; - private final boolean erode; + private final ConfigPack pack; + private UserDefinedBiome erode; - public UserDefinedBiome(org.bukkit.block.Biome vanilla, UserDefinedDecorator dec, GeneratorBuilder gen, boolean erode, BiomeTemplate config) { + public UserDefinedBiome(org.bukkit.block.Biome vanilla, UserDefinedDecorator dec, GeneratorBuilder gen, BiomeTemplate config, ConfigPack pack) { this.vanilla = vanilla; this.decorator = dec; this.gen = gen; this.id = config.getID(); - this.erode = erode; this.config = config; + this.pack = pack; } /** @@ -77,10 +79,14 @@ public class UserDefinedBiome implements Biome, WorldObject { return id; } - public boolean isErodible() { + public UserDefinedBiome getErode() { + if(erode == null) { + erode = (config.getErode() == null) ? this : pack.getBiome(config.getErode()); + } return erode; } + public BiomeTemplate getConfig() { return config; } diff --git a/src/main/java/com/dfsek/terra/biome/grid/TerraBiomeGrid.java b/src/main/java/com/dfsek/terra/biome/grid/TerraBiomeGrid.java index 6a5ca9317..f6bba40a0 100644 --- a/src/main/java/com/dfsek/terra/biome/grid/TerraBiomeGrid.java +++ b/src/main/java/com/dfsek/terra/biome/grid/TerraBiomeGrid.java @@ -22,9 +22,8 @@ public class TerraBiomeGrid extends BiomeGrid { private final BiomeZone zone; private CoordinatePerturb perturb; private ErosionNoise erode; - private BiomeGrid erosionGrid; - public TerraBiomeGrid(World w, double freq1, double freq2, BiomeZone zone, ConfigPack c, BiomeGrid erosion) { + public TerraBiomeGrid(World w, double freq1, double freq2, BiomeZone zone, ConfigPack c) { super(w, freq1, freq2, 0, 0); ConfigPackTemplate t = c.getTemplate(); if(c.getTemplate().isBlend()) { @@ -33,7 +32,6 @@ public class TerraBiomeGrid extends BiomeGrid { this.zone = zone; if(c.getTemplate().isErode()) { erode = new ErosionNoise(t.getErodeFreq(), t.getErodeThresh(), t.getErodeOctaves(), w.getSeed()); - this.erosionGrid = erosion; } } @@ -45,7 +43,7 @@ public class TerraBiomeGrid extends BiomeGrid { public Biome getBiome(int x, int z, GenerationPhase phase) { int xp = x; int zp = z; - if(perturb != null && phase.equals(GenerationPhase.PALETTE_APPLY)) { + if(perturb != null && (phase.equals(GenerationPhase.PALETTE_APPLY) || phase.equals(GenerationPhase.POPULATE))) { Vector2 perturbCoords = perturb.getShiftedCoords(x, z); xp = (int) perturbCoords.getX(); zp = (int) perturbCoords.getZ(); @@ -61,9 +59,7 @@ public class TerraBiomeGrid extends BiomeGrid { failNum++; return null; } - if(erode != null && b.isErodible() && erode.isEroded(xp, zp)) { - return erosionGrid.getBiome(xp, zp, phase); - } + if(erode.isEroded(xp, zp)) return b.getErode(); return b; } diff --git a/src/main/java/com/dfsek/terra/command/biome/BiomeInfoCommand.java b/src/main/java/com/dfsek/terra/command/biome/BiomeInfoCommand.java index 762a51d3e..8c52603b0 100644 --- a/src/main/java/com/dfsek/terra/command/biome/BiomeInfoCommand.java +++ b/src/main/java/com/dfsek/terra/command/biome/BiomeInfoCommand.java @@ -36,7 +36,7 @@ public class BiomeInfoCommand extends WorldCommand { } sender.sendMessage("Biome info for \"" + b.getID() + "\"."); sender.sendMessage("Vanilla biome: " + b.getVanillaBiome()); - sender.sendMessage("Erodible: " + b.isErodible()); + sender.sendMessage("Eroded by: " + b.getErode()); BiomeTemplate bio = b.getConfig(); diff --git a/src/main/java/com/dfsek/terra/config/base/ConfigPack.java b/src/main/java/com/dfsek/terra/config/base/ConfigPack.java index 21ca89edd..739842d19 100644 --- a/src/main/java/com/dfsek/terra/config/base/ConfigPack.java +++ b/src/main/java/com/dfsek/terra/config/base/ConfigPack.java @@ -58,6 +58,7 @@ import java.util.Collection; import java.util.Enumeration; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.logging.Level; import java.util.zip.ZipEntry; @@ -144,6 +145,13 @@ public class ConfigPack { .open("structures/trees").then(streams -> buildAll(new TreeFactory(), treeRegistry, abstractConfigLoader.load(streams, TreeTemplate::new))).close() .open("biomes").then(streams -> buildAll(new BiomeFactory(this), biomeRegistry, abstractConfigLoader.load(streams, () -> new BiomeTemplate(this)))).close() .open("grids").then(streams -> buildAll(new BiomeGridFactory(), biomeGridRegistry, abstractConfigLoader.load(streams, BiomeGridTemplate::new))).close(); + for(UserDefinedBiome b : biomeRegistry.entries()) { + try { + Objects.requireNonNull(b.getErode()); // Throws NPE if it cannot load erosion biomes. + } catch(NullPointerException e) { + throw new LoadException("Invalid erosion biome defined in biome \"" + b.getID() + "\"", e); + } + } } private void buildAll(TerraFactory factory, TerraRegistry registry, List configTemplates) throws LoadException { diff --git a/src/main/java/com/dfsek/terra/config/base/ConfigPackTemplate.java b/src/main/java/com/dfsek/terra/config/base/ConfigPackTemplate.java index 3be7e2569..452608ed5 100644 --- a/src/main/java/com/dfsek/terra/config/base/ConfigPackTemplate.java +++ b/src/main/java/com/dfsek/terra/config/base/ConfigPackTemplate.java @@ -69,10 +69,6 @@ public class ConfigPackTemplate implements ConfigTemplate { @Default private int erodeOctaves = 5; - @Value("erode.grid") - @Default - private String erodeGrid = null; - @Value("vanilla.mobs") @Default private boolean vanillaMobs = false; @@ -164,8 +160,4 @@ public class ConfigPackTemplate implements ConfigTemplate { public int getErodeOctaves() { return erodeOctaves; } - - public String getErodeGrid() { - return erodeGrid; - } } diff --git a/src/main/java/com/dfsek/terra/config/factories/BiomeFactory.java b/src/main/java/com/dfsek/terra/config/factories/BiomeFactory.java index b84443d07..0e42f5381 100644 --- a/src/main/java/com/dfsek/terra/config/factories/BiomeFactory.java +++ b/src/main/java/com/dfsek/terra/config/factories/BiomeFactory.java @@ -26,6 +26,6 @@ public class BiomeFactory implements TerraFactory { diff --git a/src/main/java/com/dfsek/terra/config/templates/BiomeTemplate.java b/src/main/java/com/dfsek/terra/config/templates/BiomeTemplate.java index aa66b9fd5..819c4ccae 100644 --- a/src/main/java/com/dfsek/terra/config/templates/BiomeTemplate.java +++ b/src/main/java/com/dfsek/terra/config/templates/BiomeTemplate.java @@ -44,10 +44,10 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf @Value("vanilla") @Abstractable private Biome vanilla; - @Value("erodible") + @Value("erode") @Abstractable @Default - private boolean erodible = false; + private String erode = null; @Value("structures") @Abstractable @Default @@ -176,8 +176,8 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf return vanilla; } - public boolean isErodible() { - return erodible; + public String getErode() { + return erode; } public List getStructures() { diff --git a/src/main/java/com/dfsek/terra/generation/items/TerraTree.java b/src/main/java/com/dfsek/terra/generation/items/tree/TerraTree.java similarity index 98% rename from src/main/java/com/dfsek/terra/generation/items/TerraTree.java rename to src/main/java/com/dfsek/terra/generation/items/tree/TerraTree.java index db88ae5e9..5204b4ca6 100644 --- a/src/main/java/com/dfsek/terra/generation/items/TerraTree.java +++ b/src/main/java/com/dfsek/terra/generation/items/tree/TerraTree.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.generation.items; +package com.dfsek.terra.generation.items.tree; import com.dfsek.terra.procgen.math.Vector2; import com.dfsek.terra.structure.Rotation; diff --git a/src/main/java/com/dfsek/terra/generation/items/tree/TreeLayer.java b/src/main/java/com/dfsek/terra/generation/items/tree/TreeLayer.java index b462102f2..79a217b68 100644 --- a/src/main/java/com/dfsek/terra/generation/items/tree/TreeLayer.java +++ b/src/main/java/com/dfsek/terra/generation/items/tree/TreeLayer.java @@ -10,6 +10,7 @@ import org.polydev.gaea.math.FastNoiseLite; import org.polydev.gaea.math.ProbabilityCollection; import org.polydev.gaea.math.Range; import org.polydev.gaea.tree.Tree; +import org.polydev.gaea.tree.TreeType; import java.util.Random; @@ -25,7 +26,11 @@ public class TreeLayer extends PlaceableLayer { Block current = chunk.getBlock((int) coords.getX(), level.getMax(), (int) coords.getZ()); for(int ignored : level) { current = current.getRelative(BlockFace.DOWN); - if(item.getSpawnable().contains(current.getType())) item.plant(current.getLocation(), random, Terra.getInstance()); + if(item.getSpawnable().contains(current.getType())) { + if(item instanceof TreeType && current.getRelative(BlockFace.UP).isEmpty()) + item.plant(current.getLocation().add(0, 1, 0), random, Terra.getInstance()); + else if(!(item instanceof TreeType)) item.plant(current.getLocation(), random, Terra.getInstance()); + } } } } diff --git a/src/main/java/com/dfsek/terra/util/TagUtil.java b/src/main/java/com/dfsek/terra/util/TagUtil.java index 907f6cc31..d1b6f98e1 100644 --- a/src/main/java/com/dfsek/terra/util/TagUtil.java +++ b/src/main/java/com/dfsek/terra/util/TagUtil.java @@ -53,7 +53,8 @@ public final class TagUtil { || name.contains("repeater") || name.equals("lily_pad") || name.equals("snow") - || name.equals("pane")) snow.add(m); + || name.equals("pane") + || !m.isSolid()) snow.add(m); } tagMap.put("terra:snow_blacklist", snow); Bukkit.getLogger().info("Added " + snow.size() + " materials to snow blacklist");