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.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) {
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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 {
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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> {
|
||||
|
@ -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() {
|
||||
|
@ -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;
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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");
|
||||
|
Loading…
x
Reference in New Issue
Block a user