mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2025-07-04 00:45:57 +00:00
Fix various issues
This commit is contained in:
parent
f033b8219c
commit
f85d047ee6
@ -13,7 +13,6 @@ import org.polydev.gaea.biome.BiomeGrid;
|
|||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
public class TerraWorld {
|
public class TerraWorld {
|
||||||
private static final Map<World, TerraWorld> map = new HashMap<>();
|
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!");
|
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);
|
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) {
|
public static void loadWorld(WorldConfig w) {
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.dfsek.terra.biome;
|
package com.dfsek.terra.biome;
|
||||||
|
|
||||||
import com.dfsek.terra.WorldObject;
|
import com.dfsek.terra.WorldObject;
|
||||||
|
import com.dfsek.terra.config.base.ConfigPack;
|
||||||
import com.dfsek.terra.config.builder.GeneratorBuilder;
|
import com.dfsek.terra.config.builder.GeneratorBuilder;
|
||||||
import com.dfsek.terra.config.templates.BiomeTemplate;
|
import com.dfsek.terra.config.templates.BiomeTemplate;
|
||||||
import com.dfsek.terra.generation.UserDefinedDecorator;
|
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 org.bukkit.block.Biome vanilla;
|
||||||
private final String id;
|
private final String id;
|
||||||
private final BiomeTemplate config;
|
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.vanilla = vanilla;
|
||||||
this.decorator = dec;
|
this.decorator = dec;
|
||||||
this.gen = gen;
|
this.gen = gen;
|
||||||
this.id = config.getID();
|
this.id = config.getID();
|
||||||
this.erode = erode;
|
|
||||||
this.config = config;
|
this.config = config;
|
||||||
|
this.pack = pack;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -77,10 +79,14 @@ public class UserDefinedBiome implements Biome, WorldObject {
|
|||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isErodible() {
|
public UserDefinedBiome getErode() {
|
||||||
|
if(erode == null) {
|
||||||
|
erode = (config.getErode() == null) ? this : pack.getBiome(config.getErode());
|
||||||
|
}
|
||||||
return erode;
|
return erode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public BiomeTemplate getConfig() {
|
public BiomeTemplate getConfig() {
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
@ -22,9 +22,8 @@ public class TerraBiomeGrid extends BiomeGrid {
|
|||||||
private final BiomeZone zone;
|
private final BiomeZone zone;
|
||||||
private CoordinatePerturb perturb;
|
private CoordinatePerturb perturb;
|
||||||
private ErosionNoise erode;
|
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);
|
super(w, freq1, freq2, 0, 0);
|
||||||
ConfigPackTemplate t = c.getTemplate();
|
ConfigPackTemplate t = c.getTemplate();
|
||||||
if(c.getTemplate().isBlend()) {
|
if(c.getTemplate().isBlend()) {
|
||||||
@ -33,7 +32,6 @@ public class TerraBiomeGrid extends BiomeGrid {
|
|||||||
this.zone = zone;
|
this.zone = zone;
|
||||||
if(c.getTemplate().isErode()) {
|
if(c.getTemplate().isErode()) {
|
||||||
erode = new ErosionNoise(t.getErodeFreq(), t.getErodeThresh(), t.getErodeOctaves(), w.getSeed());
|
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) {
|
public Biome getBiome(int x, int z, GenerationPhase phase) {
|
||||||
int xp = x;
|
int xp = x;
|
||||||
int zp = z;
|
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);
|
Vector2 perturbCoords = perturb.getShiftedCoords(x, z);
|
||||||
xp = (int) perturbCoords.getX();
|
xp = (int) perturbCoords.getX();
|
||||||
zp = (int) perturbCoords.getZ();
|
zp = (int) perturbCoords.getZ();
|
||||||
@ -61,9 +59,7 @@ public class TerraBiomeGrid extends BiomeGrid {
|
|||||||
failNum++;
|
failNum++;
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if(erode != null && b.isErodible() && erode.isEroded(xp, zp)) {
|
if(erode.isEroded(xp, zp)) return b.getErode();
|
||||||
return erosionGrid.getBiome(xp, zp, phase);
|
|
||||||
}
|
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ public class BiomeInfoCommand extends WorldCommand {
|
|||||||
}
|
}
|
||||||
sender.sendMessage("Biome info for \"" + b.getID() + "\".");
|
sender.sendMessage("Biome info for \"" + b.getID() + "\".");
|
||||||
sender.sendMessage("Vanilla biome: " + b.getVanillaBiome());
|
sender.sendMessage("Vanilla biome: " + b.getVanillaBiome());
|
||||||
sender.sendMessage("Erodible: " + b.isErodible());
|
sender.sendMessage("Eroded by: " + b.getErode());
|
||||||
|
|
||||||
|
|
||||||
BiomeTemplate bio = b.getConfig();
|
BiomeTemplate bio = b.getConfig();
|
||||||
|
@ -58,6 +58,7 @@ import java.util.Collection;
|
|||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.zip.ZipEntry;
|
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("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("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();
|
.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 {
|
private <C extends AbstractableTemplate, O> void buildAll(TerraFactory<C, O> factory, TerraRegistry<O> registry, List<C> configTemplates) throws LoadException {
|
||||||
|
@ -69,10 +69,6 @@ public class ConfigPackTemplate implements ConfigTemplate {
|
|||||||
@Default
|
@Default
|
||||||
private int erodeOctaves = 5;
|
private int erodeOctaves = 5;
|
||||||
|
|
||||||
@Value("erode.grid")
|
|
||||||
@Default
|
|
||||||
private String erodeGrid = null;
|
|
||||||
|
|
||||||
@Value("vanilla.mobs")
|
@Value("vanilla.mobs")
|
||||||
@Default
|
@Default
|
||||||
private boolean vanillaMobs = false;
|
private boolean vanillaMobs = false;
|
||||||
@ -164,8 +160,4 @@ public class ConfigPackTemplate implements ConfigTemplate {
|
|||||||
public int getErodeOctaves() {
|
public int getErodeOctaves() {
|
||||||
return erodeOctaves;
|
return erodeOctaves;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getErodeGrid() {
|
|
||||||
return erodeGrid;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,6 @@ public class BiomeFactory implements TerraFactory<BiomeTemplate, UserDefinedBiom
|
|||||||
generatorBuilder.setVarScope(pack.getVarScope());
|
generatorBuilder.setVarScope(pack.getVarScope());
|
||||||
|
|
||||||
|
|
||||||
return new UserDefinedBiome(template.getVanilla(), decorator, generatorBuilder, template.isErodible(), template);
|
return new UserDefinedBiome(template.getVanilla(), decorator, generatorBuilder, template, pack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@ package com.dfsek.terra.config.factories;
|
|||||||
|
|
||||||
import com.dfsek.tectonic.exception.LoadException;
|
import com.dfsek.tectonic.exception.LoadException;
|
||||||
import com.dfsek.terra.config.templates.TreeTemplate;
|
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;
|
import org.polydev.gaea.tree.Tree;
|
||||||
|
|
||||||
public class TreeFactory implements TerraFactory<TreeTemplate, Tree> {
|
public class TreeFactory implements TerraFactory<TreeTemplate, Tree> {
|
||||||
|
@ -44,10 +44,10 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf
|
|||||||
@Value("vanilla")
|
@Value("vanilla")
|
||||||
@Abstractable
|
@Abstractable
|
||||||
private Biome vanilla;
|
private Biome vanilla;
|
||||||
@Value("erodible")
|
@Value("erode")
|
||||||
@Abstractable
|
@Abstractable
|
||||||
@Default
|
@Default
|
||||||
private boolean erodible = false;
|
private String erode = null;
|
||||||
@Value("structures")
|
@Value("structures")
|
||||||
@Abstractable
|
@Abstractable
|
||||||
@Default
|
@Default
|
||||||
@ -176,8 +176,8 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf
|
|||||||
return vanilla;
|
return vanilla;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isErodible() {
|
public String getErode() {
|
||||||
return erodible;
|
return erode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<TerraStructure> getStructures() {
|
public List<TerraStructure> getStructures() {
|
||||||
|
@ -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.procgen.math.Vector2;
|
||||||
import com.dfsek.terra.structure.Rotation;
|
import com.dfsek.terra.structure.Rotation;
|
@ -10,6 +10,7 @@ import org.polydev.gaea.math.FastNoiseLite;
|
|||||||
import org.polydev.gaea.math.ProbabilityCollection;
|
import org.polydev.gaea.math.ProbabilityCollection;
|
||||||
import org.polydev.gaea.math.Range;
|
import org.polydev.gaea.math.Range;
|
||||||
import org.polydev.gaea.tree.Tree;
|
import org.polydev.gaea.tree.Tree;
|
||||||
|
import org.polydev.gaea.tree.TreeType;
|
||||||
|
|
||||||
import java.util.Random;
|
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());
|
Block current = chunk.getBlock((int) coords.getX(), level.getMax(), (int) coords.getZ());
|
||||||
for(int ignored : level) {
|
for(int ignored : level) {
|
||||||
current = current.getRelative(BlockFace.DOWN);
|
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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -53,7 +53,8 @@ public final class TagUtil {
|
|||||||
|| name.contains("repeater")
|
|| name.contains("repeater")
|
||||||
|| name.equals("lily_pad")
|
|| name.equals("lily_pad")
|
||||||
|| name.equals("snow")
|
|| name.equals("snow")
|
||||||
|| name.equals("pane")) snow.add(m);
|
|| name.equals("pane")
|
||||||
|
|| !m.isSolid()) snow.add(m);
|
||||||
}
|
}
|
||||||
tagMap.put("terra:snow_blacklist", snow);
|
tagMap.put("terra:snow_blacklist", snow);
|
||||||
Bukkit.getLogger().info("Added " + snow.size() + " materials to snow blacklist");
|
Bukkit.getLogger().info("Added " + snow.size() + " materials to snow blacklist");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user