Fix various issues

This commit is contained in:
dfsek 2020-11-30 17:23:57 -07:00
parent f033b8219c
commit f85d047ee6
12 changed files with 38 additions and 47 deletions

View File

@ -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<World, TerraWorld> 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) {

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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();

View File

@ -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 <C extends AbstractableTemplate, O> void buildAll(TerraFactory<C, O> factory, TerraRegistry<O> registry, List<C> configTemplates) throws LoadException {

View File

@ -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;
}
}

View File

@ -26,6 +26,6 @@ public class BiomeFactory implements TerraFactory<BiomeTemplate, UserDefinedBiom
generatorBuilder.setVarScope(pack.getVarScope());
return new UserDefinedBiome(template.getVanilla(), decorator, generatorBuilder, template.isErodible(), template);
return new UserDefinedBiome(template.getVanilla(), decorator, generatorBuilder, template, pack);
}
}

View File

@ -2,7 +2,7 @@ package com.dfsek.terra.config.factories;
import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.terra.config.templates.TreeTemplate;
import com.dfsek.terra.generation.items.TerraTree;
import com.dfsek.terra.generation.items.tree.TerraTree;
import org.polydev.gaea.tree.Tree;
public class TreeFactory implements TerraFactory<TreeTemplate, Tree> {

View File

@ -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<TerraStructure> getStructures() {

View File

@ -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;

View File

@ -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<Tree> {
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());
}
}
}
}

View File

@ -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");