mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-02-16 10:30:42 +00:00
Structure features
This commit is contained in:
@@ -3,13 +3,30 @@ package com.dfsek.terra.config.loaders.config;
|
||||
import com.dfsek.tectonic.exception.LoadException;
|
||||
import com.dfsek.tectonic.loading.ConfigLoader;
|
||||
import com.dfsek.tectonic.loading.TypeLoader;
|
||||
import com.dfsek.terra.structure.features.EntityFeature;
|
||||
import com.dfsek.terra.structure.features.Feature;
|
||||
import com.dfsek.terra.util.MaterialSet;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.polydev.gaea.math.Range;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.Map;
|
||||
|
||||
@SuppressWarnings({"unchecked", "SwitchStatementWithTooFewBranches"}) // We will do more features laterTM
|
||||
public class StructureFeatureLoader implements TypeLoader<Feature> {
|
||||
@Override
|
||||
public Feature load(Type type, Object o, ConfigLoader configLoader) throws LoadException {
|
||||
return null;
|
||||
Map<String, Object> map = (Map<String, Object>) o;
|
||||
switch((String) map.get("type")) {
|
||||
case "ENTITY_FEATURE":
|
||||
MaterialSet stand = (MaterialSet) configLoader.loadType(MaterialSet.class, map.get("spawnable-on"));
|
||||
MaterialSet in = (MaterialSet) configLoader.loadType(MaterialSet.class, map.get("spawnable-in"));
|
||||
Range amount = (Range) configLoader.loadType(Range.class, map.get("amount"));
|
||||
EntityType entityType = (EntityType) configLoader.loadType(EntityType.class, map.get("entity"));
|
||||
Integer height = (Integer) configLoader.loadType(Integer.class, map.get("in-height"));
|
||||
return new EntityFeature(entityType, amount, stand, in, height);
|
||||
default:
|
||||
throw new LoadException("Invalid feature type: \"" + map.get("type") + "\"");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,17 @@
|
||||
package com.dfsek.terra.config.templates;
|
||||
|
||||
import com.dfsek.tectonic.annotations.Abstractable;
|
||||
import com.dfsek.tectonic.annotations.Default;
|
||||
import com.dfsek.tectonic.annotations.Value;
|
||||
import com.dfsek.terra.procgen.GridSpawn;
|
||||
import com.dfsek.terra.structure.Structure;
|
||||
import com.dfsek.terra.structure.features.Feature;
|
||||
import org.polydev.gaea.math.ProbabilityCollection;
|
||||
import org.polydev.gaea.math.Range;
|
||||
import org.polydev.gaea.structures.loot.LootTable;
|
||||
import org.polydev.gaea.util.GlueList;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
@@ -36,6 +40,11 @@ public class StructureTemplate extends AbstractableTemplate {
|
||||
@Abstractable
|
||||
private Map<Integer, LootTable> loot;
|
||||
|
||||
@Value("features")
|
||||
@Abstractable
|
||||
@Default
|
||||
private final List<Feature> features = new GlueList<>();
|
||||
|
||||
public Map<Integer, LootTable> getLoot() {
|
||||
return loot;
|
||||
}
|
||||
@@ -56,6 +65,9 @@ public class StructureTemplate extends AbstractableTemplate {
|
||||
return bound;
|
||||
}
|
||||
|
||||
public List<Feature> getFeatures() {
|
||||
return features;
|
||||
}
|
||||
|
||||
public GridSpawn getSpawn() {
|
||||
return spawn;
|
||||
|
||||
@@ -11,6 +11,7 @@ import com.dfsek.terra.procgen.math.Vector2;
|
||||
import com.dfsek.terra.structure.Rotation;
|
||||
import com.dfsek.terra.structure.Structure;
|
||||
import com.dfsek.terra.structure.StructureContainedInventory;
|
||||
import com.dfsek.terra.structure.features.Feature;
|
||||
import com.dfsek.terra.util.PopulationUtil;
|
||||
import com.dfsek.terra.util.structure.RotationUtil;
|
||||
import net.jafama.FastMath;
|
||||
@@ -72,8 +73,7 @@ public class StructurePopulator extends BlockPopulator {
|
||||
Debug.stack(e);
|
||||
}
|
||||
}
|
||||
//for(Feature f : conf.getFeatures()) f.apply(struc, rotation, spawn, chunk); // Apply features.
|
||||
// TODO: features
|
||||
for(Feature f : conf.getTemplate().getFeatures()) f.apply(struc, rotation, spawn, chunk); // Apply features.
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import com.dfsek.terra.config.loaders.config.GridSpawnLoader;
|
||||
import com.dfsek.terra.config.loaders.config.NoiseBuilderLoader;
|
||||
import com.dfsek.terra.config.loaders.config.OreConfigLoader;
|
||||
import com.dfsek.terra.config.loaders.config.OreHolderLoader;
|
||||
import com.dfsek.terra.config.loaders.config.StructureFeatureLoader;
|
||||
import com.dfsek.terra.config.loaders.config.TreeLayerLoader;
|
||||
import com.dfsek.terra.config.loaders.palette.CarverPaletteLoader;
|
||||
import com.dfsek.terra.config.loaders.palette.PaletteHolderLoader;
|
||||
@@ -24,10 +25,12 @@ import com.dfsek.terra.generation.items.ores.OreConfig;
|
||||
import com.dfsek.terra.generation.items.ores.OreHolder;
|
||||
import com.dfsek.terra.generation.items.tree.TreeLayer;
|
||||
import com.dfsek.terra.procgen.GridSpawn;
|
||||
import com.dfsek.terra.structure.features.Feature;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.polydev.gaea.math.ProbabilityCollection;
|
||||
import org.polydev.gaea.math.Range;
|
||||
|
||||
@@ -54,6 +57,8 @@ public final class ConfigUtil {
|
||||
.registerLoader(TreeLayer.class, new TreeLayerLoader())
|
||||
.registerLoader(MaterialSet.class, new MaterialSetLoader())
|
||||
.registerLoader(OreHolder.class, new OreHolderLoader())
|
||||
.registerLoader(Feature.class, new StructureFeatureLoader())
|
||||
.registerLoader(EntityType.class, (t, o, l) -> EntityType.valueOf((String) o))
|
||||
.registerLoader(StructureTypeEnum.class, (t, o, l) -> StructureTypeEnum.valueOf((String) o))
|
||||
.registerLoader(TerraFlora.Search.class, (t, o, l) -> TerraFlora.Search.valueOf((String) o));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user