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