mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-06-18 14:50:56 +00:00
material override ore config options
This commit is contained in:
@@ -13,9 +13,9 @@ public class OreFactory implements ConfigFactory<OreTemplate, Ore> {
|
|||||||
BlockData m = config.getMaterial();
|
BlockData m = config.getMaterial();
|
||||||
switch(config.getType()) {
|
switch(config.getType()) {
|
||||||
case SPHERE:
|
case SPHERE:
|
||||||
return new DeformedSphereOre(m, config.getReplaceable(), config.doPhysics(), config.getDeform(), config.getDeformFrequency(), config.getSize(), main);
|
return new DeformedSphereOre(m, config.getReplaceable(), config.doPhysics(), config.getDeform(), config.getDeformFrequency(), config.getSize(), main, config.getMaterialOverrides());
|
||||||
case VANILLA:
|
case VANILLA:
|
||||||
return new VanillaOre(m, config.getReplaceable(), config.doPhysics(), config.getSize(), main);
|
return new VanillaOre(m, config.getReplaceable(), config.doPhysics(), config.getSize(), main, config.getMaterialOverrides());
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,9 +5,13 @@ import com.dfsek.tectonic.annotations.Default;
|
|||||||
import com.dfsek.tectonic.annotations.Value;
|
import com.dfsek.tectonic.annotations.Value;
|
||||||
import com.dfsek.terra.api.math.Range;
|
import com.dfsek.terra.api.math.Range;
|
||||||
import com.dfsek.terra.api.platform.block.BlockData;
|
import com.dfsek.terra.api.platform.block.BlockData;
|
||||||
|
import com.dfsek.terra.api.platform.block.BlockType;
|
||||||
import com.dfsek.terra.api.util.collections.MaterialSet;
|
import com.dfsek.terra.api.util.collections.MaterialSet;
|
||||||
import com.dfsek.terra.world.population.items.ores.Ore;
|
import com.dfsek.terra.world.population.items.ores.Ore;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@SuppressWarnings({"unused", "FieldMayBeFinal"})
|
@SuppressWarnings({"unused", "FieldMayBeFinal"})
|
||||||
public class OreTemplate extends AbstractableTemplate {
|
public class OreTemplate extends AbstractableTemplate {
|
||||||
@Value("id")
|
@Value("id")
|
||||||
@@ -17,6 +21,11 @@ public class OreTemplate extends AbstractableTemplate {
|
|||||||
@Abstractable
|
@Abstractable
|
||||||
private BlockData material;
|
private BlockData material;
|
||||||
|
|
||||||
|
@Value("material-overrides")
|
||||||
|
@Default
|
||||||
|
@Abstractable
|
||||||
|
private Map<BlockType, BlockData> materials = new HashMap<>();
|
||||||
|
|
||||||
@Value("type")
|
@Value("type")
|
||||||
@Abstractable
|
@Abstractable
|
||||||
@Default
|
@Default
|
||||||
@@ -76,4 +85,8 @@ public class OreTemplate extends AbstractableTemplate {
|
|||||||
public Ore.Type getType() {
|
public Ore.Type getType() {
|
||||||
return oreType;
|
return oreType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<BlockType, BlockData> getMaterialOverrides() {
|
||||||
|
return materials;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-6
@@ -6,10 +6,11 @@ import com.dfsek.terra.api.math.noise.samplers.noise.simplex.OpenSimplex2Sampler
|
|||||||
import com.dfsek.terra.api.math.vector.Vector3;
|
import com.dfsek.terra.api.math.vector.Vector3;
|
||||||
import com.dfsek.terra.api.platform.block.Block;
|
import com.dfsek.terra.api.platform.block.Block;
|
||||||
import com.dfsek.terra.api.platform.block.BlockData;
|
import com.dfsek.terra.api.platform.block.BlockData;
|
||||||
import com.dfsek.terra.api.platform.handle.WorldHandle;
|
import com.dfsek.terra.api.platform.block.BlockType;
|
||||||
import com.dfsek.terra.api.platform.world.Chunk;
|
import com.dfsek.terra.api.platform.world.Chunk;
|
||||||
import com.dfsek.terra.api.util.collections.MaterialSet;
|
import com.dfsek.terra.api.util.collections.MaterialSet;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
public class DeformedSphereOre extends Ore {
|
public class DeformedSphereOre extends Ore {
|
||||||
@@ -17,8 +18,8 @@ public class DeformedSphereOre extends Ore {
|
|||||||
private final double deformFrequency;
|
private final double deformFrequency;
|
||||||
private final Range size;
|
private final Range size;
|
||||||
|
|
||||||
public DeformedSphereOre(BlockData material, MaterialSet replaceable, boolean applyGravity, double deform, double deformFrequency, Range size, TerraPlugin main) {
|
public DeformedSphereOre(BlockData material, MaterialSet replaceable, boolean applyGravity, double deform, double deformFrequency, Range size, TerraPlugin main, Map<BlockType, BlockData> materials) {
|
||||||
super(material, replaceable, applyGravity, main);
|
super(material, replaceable, applyGravity, main, materials);
|
||||||
this.deform = deform;
|
this.deform = deform;
|
||||||
this.deformFrequency = deformFrequency;
|
this.deformFrequency = deformFrequency;
|
||||||
this.size = size;
|
this.size = size;
|
||||||
@@ -27,7 +28,6 @@ public class DeformedSphereOre extends Ore {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void generate(Vector3 origin, Chunk c, Random r) {
|
public void generate(Vector3 origin, Chunk c, Random r) {
|
||||||
WorldHandle handle = main.getWorldHandle();
|
|
||||||
OpenSimplex2Sampler ore = new OpenSimplex2Sampler(r.nextInt());
|
OpenSimplex2Sampler ore = new OpenSimplex2Sampler(r.nextInt());
|
||||||
ore.setFrequency(deformFrequency);
|
ore.setFrequency(deformFrequency);
|
||||||
int rad = size.get(r);
|
int rad = size.get(r);
|
||||||
@@ -39,8 +39,9 @@ public class DeformedSphereOre extends Ore {
|
|||||||
continue;
|
continue;
|
||||||
if(oreLoc.distance(origin) < (rad + 0.5) * ((ore.getNoise(x, y, z) + 1) * deform)) {
|
if(oreLoc.distance(origin) < (rad + 0.5) * ((ore.getNoise(x, y, z) + 1) * deform)) {
|
||||||
Block b = c.getBlock(oreLoc.getBlockX(), oreLoc.getBlockY(), oreLoc.getBlockZ());
|
Block b = c.getBlock(oreLoc.getBlockX(), oreLoc.getBlockY(), oreLoc.getBlockZ());
|
||||||
if(getReplaceable().contains(b.getType()) && b.getLocation().getY() >= 0)
|
BlockType type = b.getType();
|
||||||
b.setBlockData(getMaterial(), isApplyGravity());
|
if(getReplaceable().contains(type) && b.getLocation().getY() >= 0)
|
||||||
|
b.setBlockData(getMaterial(type), isApplyGravity());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,9 +3,11 @@ package com.dfsek.terra.world.population.items.ores;
|
|||||||
import com.dfsek.terra.api.TerraPlugin;
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
import com.dfsek.terra.api.math.vector.Vector3;
|
import com.dfsek.terra.api.math.vector.Vector3;
|
||||||
import com.dfsek.terra.api.platform.block.BlockData;
|
import com.dfsek.terra.api.platform.block.BlockData;
|
||||||
|
import com.dfsek.terra.api.platform.block.BlockType;
|
||||||
import com.dfsek.terra.api.platform.world.Chunk;
|
import com.dfsek.terra.api.platform.world.Chunk;
|
||||||
import com.dfsek.terra.api.util.collections.MaterialSet;
|
import com.dfsek.terra.api.util.collections.MaterialSet;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
public abstract class Ore {
|
public abstract class Ore {
|
||||||
@@ -14,18 +16,20 @@ public abstract class Ore {
|
|||||||
private final MaterialSet replaceable;
|
private final MaterialSet replaceable;
|
||||||
private final boolean applyGravity;
|
private final boolean applyGravity;
|
||||||
protected TerraPlugin main;
|
protected TerraPlugin main;
|
||||||
|
private final Map<BlockType, BlockData> materials;
|
||||||
|
|
||||||
public Ore(BlockData material, MaterialSet replaceable, boolean applyGravity, TerraPlugin main) {
|
public Ore(BlockData material, MaterialSet replaceable, boolean applyGravity, TerraPlugin main, Map<BlockType, BlockData> materials) {
|
||||||
this.material = material;
|
this.material = material;
|
||||||
this.replaceable = replaceable;
|
this.replaceable = replaceable;
|
||||||
this.applyGravity = applyGravity;
|
this.applyGravity = applyGravity;
|
||||||
this.main = main;
|
this.main = main;
|
||||||
|
this.materials = materials;
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract void generate(Vector3 origin, Chunk c, Random r);
|
public abstract void generate(Vector3 origin, Chunk c, Random r);
|
||||||
|
|
||||||
public BlockData getMaterial() {
|
public BlockData getMaterial(BlockType replace) {
|
||||||
return material;
|
return materials.getOrDefault(replace, material);
|
||||||
}
|
}
|
||||||
|
|
||||||
public MaterialSet getReplaceable() {
|
public MaterialSet getReplaceable() {
|
||||||
|
|||||||
@@ -5,18 +5,20 @@ import com.dfsek.terra.api.math.Range;
|
|||||||
import com.dfsek.terra.api.math.vector.Vector3;
|
import com.dfsek.terra.api.math.vector.Vector3;
|
||||||
import com.dfsek.terra.api.platform.block.Block;
|
import com.dfsek.terra.api.platform.block.Block;
|
||||||
import com.dfsek.terra.api.platform.block.BlockData;
|
import com.dfsek.terra.api.platform.block.BlockData;
|
||||||
|
import com.dfsek.terra.api.platform.block.BlockType;
|
||||||
import com.dfsek.terra.api.platform.world.Chunk;
|
import com.dfsek.terra.api.platform.world.Chunk;
|
||||||
import com.dfsek.terra.api.util.collections.MaterialSet;
|
import com.dfsek.terra.api.util.collections.MaterialSet;
|
||||||
import net.jafama.FastMath;
|
import net.jafama.FastMath;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
|
|
||||||
public class VanillaOre extends Ore {
|
public class VanillaOre extends Ore {
|
||||||
private final Range sizeRange;
|
private final Range sizeRange;
|
||||||
|
|
||||||
public VanillaOre(BlockData material, MaterialSet replaceable, boolean applyGravity, Range size, TerraPlugin main) {
|
public VanillaOre(BlockData material, MaterialSet replaceable, boolean applyGravity, Range size, TerraPlugin main, Map<BlockType, BlockData> materials) {
|
||||||
super(material, replaceable, applyGravity, main);
|
super(material, replaceable, applyGravity, main, materials);
|
||||||
this.sizeRange = size;
|
this.sizeRange = size;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,8 +69,9 @@ public class VanillaOre extends Ore {
|
|||||||
double d15 = (z + 0.5D - (d3 + (d4 - d3) * iFactor)) / (d11 / 2.0D);
|
double d15 = (z + 0.5D - (d3 + (d4 - d3) * iFactor)) / (d11 / 2.0D);
|
||||||
if(x > 15 || z > 15 || y > 255 || x < 0 || z < 0 || y < 0) continue;
|
if(x > 15 || z > 15 || y > 255 || x < 0 || z < 0 || y < 0) continue;
|
||||||
Block block = chunk.getBlock(x, y, z);
|
Block block = chunk.getBlock(x, y, z);
|
||||||
if((d13 * d13 + d14 * d14 + d15 * d15 < 1.0D) && getReplaceable().contains(block.getType())) {
|
BlockType type = block.getType();
|
||||||
block.setBlockData(getMaterial(), isApplyGravity());
|
if((d13 * d13 + d14 * d14 + d15 * d15 < 1.0D) && getReplaceable().contains(type)) {
|
||||||
|
block.setBlockData(getMaterial(type), isApplyGravity());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user