Structure features

This commit is contained in:
dfsek
2020-12-01 23:59:57 -07:00
parent c5fe86272e
commit b5c99c87e1
4 changed files with 37 additions and 3 deletions

View File

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

View File

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

View File

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

View File

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