diff --git a/pom.xml b/pom.xml index 9698065ae..43b50c799 100644 --- a/pom.xml +++ b/pom.xml @@ -83,7 +83,7 @@ org.polydev gaea - 1.1.2 + 1.1.3 diff --git a/src/main/java/com/dfsek/terra/Terra.java b/src/main/java/com/dfsek/terra/Terra.java index 6fd15d736..57953eb5d 100644 --- a/src/main/java/com/dfsek/terra/Terra.java +++ b/src/main/java/com/dfsek/terra/Terra.java @@ -1,13 +1,75 @@ package com.dfsek.terra; +import com.dfsek.terra.config.ConfigUtil; import com.dfsek.terra.config.WorldConfig; +import com.dfsek.terra.math.NoiseFunction2; +import com.dfsek.terra.math.NoiseFunction3; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.generator.ChunkGenerator; import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.polydev.gaea.math.parsii.eval.Expression; +import org.polydev.gaea.math.parsii.eval.Function; +import org.polydev.gaea.math.parsii.eval.Parser; + +import java.util.List; public class Terra extends JavaPlugin { + + static { + Parser.registerFunction("floor", new Function() { + @Override + public int getNumberOfArguments() { + return 1; + } + + @Override + public double eval(List list) { + return Math.floor(list.get(0).evaluate()); + } + + @Override + public boolean isNaturalFunction() { + return true; + } + }); + Parser.registerFunction("ceil", new Function() { + @Override + public int getNumberOfArguments() { + return 1; + } + + @Override + public double eval(List list) { + return Math.ceil(list.get(0).evaluate()); + } + + @Override + public boolean isNaturalFunction() { + return true; + } + }); + Parser.registerFunction("round", new Function() { + @Override + public int getNumberOfArguments() { + return 1; + } + + @Override + public double eval(List list) { + return Math.round(list.get(0).evaluate()); + } + + @Override + public boolean isNaturalFunction() { + return true; + } + }); + Parser.registerFunction("noise2", new NoiseFunction2()); + Parser.registerFunction("noise3", new NoiseFunction3()); + } + private static FileConfiguration config; private static Terra instance; @@ -22,9 +84,11 @@ public class Terra extends JavaPlugin { @Override public void onEnable() { - super.onEnable(); + ConfigUtil.loadConfig(this); + getCommand("terra").setExecutor(new TerraCommand()); saveDefaultConfig(); config = getConfig(); + instance = this; } @NotNull diff --git a/src/main/java/com/dfsek/terra/TerraChunkGenerator.java b/src/main/java/com/dfsek/terra/TerraChunkGenerator.java index 4f2748f74..c78edf003 100644 --- a/src/main/java/com/dfsek/terra/TerraChunkGenerator.java +++ b/src/main/java/com/dfsek/terra/TerraChunkGenerator.java @@ -20,12 +20,25 @@ public class TerraChunkGenerator extends GaeaChunkGenerator { super(InterpolationType.TRILINEAR); } - public ChunkData generateBase(@NotNull World world, @NotNull Random random, int i, int i1, FastNoise fastNoise) { + public ChunkData generateBase(@NotNull World world, @NotNull Random random, int chunkX, int chunkZ, FastNoise fastNoise) { ChunkData chunk = createChunkData(world); for(byte x = 0; x < 16; x++) { for(int y = 0; y < 256; y++) { for(byte z = 0; z < 16; z++) { - if(super.getInterpolatedNoise(x, y, z) > 0.5) chunk.setBlock(x, y, z, Material.STONE); + if(super.getInterpolatedNoise(x, y, z) > 0) chunk.setBlock(x, y, z, Material.STONE); + } + } + } + for(byte x = 0; x < 16; x++) { + for(byte z = 0; z < 16; z++) { + int paletteLevel = 0; + for(int y = world.getMaxHeight()-1; y > 0; y--) { + if(chunk.getType(x, y, z).isAir()){ + paletteLevel = 0; + continue; + } + chunk.setBlock(x, y, z, TerraBiomeGrid.fromWorld(world).getBiome((chunkX << 4) + x, (chunkZ << 4) + z).getGenerator().getPalette().get(paletteLevel, random)); + paletteLevel++; } } } @@ -45,6 +58,6 @@ public class TerraChunkGenerator extends GaeaChunkGenerator { } public org.polydev.gaea.biome.BiomeGrid getBiomeGrid(World world) { - return new TerraBiomeGrid(world); + return TerraBiomeGrid.fromWorld(world); } } diff --git a/src/main/java/com/dfsek/terra/TerraCommand.java b/src/main/java/com/dfsek/terra/TerraCommand.java new file mode 100644 index 000000000..7e7a5979d --- /dev/null +++ b/src/main/java/com/dfsek/terra/TerraCommand.java @@ -0,0 +1,28 @@ +package com.dfsek.terra; + +import com.dfsek.terra.biome.TerraBiomeGrid; +import com.dfsek.terra.biome.UserDefinedBiome; +import com.dfsek.terra.config.ConfigUtil; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +public class TerraCommand implements CommandExecutor { + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + if(args.length == 1) { + switch(args[0]) { + case "reload": + ConfigUtil.loadConfig(Terra.getInstance()); + sender.sendMessage("Reloaded Terra config."); + break; + case "biome": + if(!(sender instanceof Player)) return false; + sender.sendMessage("You are in " + ((UserDefinedBiome) TerraBiomeGrid.fromWorld(((Player) sender).getWorld()).getBiome(((Player) sender).getLocation())).getConfig().getFriendlyName()); + } + } + return true; + } +} diff --git a/src/main/java/com/dfsek/terra/biome/TerraBiomeGrid.java b/src/main/java/com/dfsek/terra/biome/TerraBiomeGrid.java index c2f5ed0f5..9efbd0a32 100644 --- a/src/main/java/com/dfsek/terra/biome/TerraBiomeGrid.java +++ b/src/main/java/com/dfsek/terra/biome/TerraBiomeGrid.java @@ -1,20 +1,17 @@ package com.dfsek.terra.biome; -import com.dfsek.terra.Terra; +import com.dfsek.terra.config.ConfigUtil; import com.dfsek.terra.config.WorldConfig; import org.bukkit.World; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; import org.polydev.gaea.biome.BiomeGrid; -import java.io.File; -import java.io.IOException; -import java.util.List; +import java.util.HashMap; +import java.util.Map; public class TerraBiomeGrid extends BiomeGrid { - private UserDefinedBiome[][] grid; + + private static final Map grids = new HashMap<>(); + private final UserDefinedBiome[][] grid; private final World w; public TerraBiomeGrid(World w) { @@ -22,15 +19,21 @@ public class TerraBiomeGrid extends BiomeGrid { this.w = w; grid = new UserDefinedBiome[16][16]; load(); + grids.put(w, this); } public void load() { - for(int x = 0; x < 16; x++) { - for(int z = 0; z < 16; z++) { - WorldConfig.fromWorld(w); - grid[x][z] = WorldConfig.getBiomes().get(WorldConfig.fromWorld(w).biomeGrid.get(x).get(z)).getBiome(); - } - } - super.setGrid(grid); + super.setGrid(WorldConfig.fromWorld(w).biomeGrid.getBiomeGrid()); } + + public static TerraBiomeGrid fromWorld(World w) { + if(grids.containsKey(w)) return grids.get(w); + else return new TerraBiomeGrid(w); + } + public static void reloadAll() { + for(Map.Entry e : grids.entrySet()) { + e.getValue().load(); + } + } + } diff --git a/src/main/java/com/dfsek/terra/biome/UserDefinedBiome.java b/src/main/java/com/dfsek/terra/biome/UserDefinedBiome.java index e114a77f7..7eb6ad508 100644 --- a/src/main/java/com/dfsek/terra/biome/UserDefinedBiome.java +++ b/src/main/java/com/dfsek/terra/biome/UserDefinedBiome.java @@ -1,5 +1,7 @@ package com.dfsek.terra.biome; +import com.dfsek.terra.config.BiomeConfig; +import com.dfsek.terra.config.ConfigUtil; import org.bukkit.configuration.file.FileConfiguration; import org.polydev.gaea.biome.Biome; import org.polydev.gaea.biome.BiomeTerrain; @@ -11,12 +13,19 @@ import org.polydev.gaea.structures.features.Feature; import java.util.Collections; import java.util.List; +import java.util.Objects; public class UserDefinedBiome implements Biome { private final UserDefinedGenerator gen; - public UserDefinedBiome(String noiseEq) throws ParseException { + private final BiomeConfig config; + public UserDefinedBiome(BiomeConfig config) throws ParseException { + this.config = config; Scope s = Scope.create(); - gen = new UserDefinedGenerator(s, Parser.parse(noiseEq, s), Collections.emptyList()); + gen = new UserDefinedGenerator(s, Parser.parse(Objects.requireNonNull(config.getString("noise-equation")), s), Collections.emptyList(), ConfigUtil.getPalette(config.getString("palette")).getPalette()); + } + + public BiomeConfig getConfig() { + return config; } /** diff --git a/src/main/java/com/dfsek/terra/biome/UserDefinedGenerator.java b/src/main/java/com/dfsek/terra/biome/UserDefinedGenerator.java index 460b254b7..a3e74f5b9 100644 --- a/src/main/java/com/dfsek/terra/biome/UserDefinedGenerator.java +++ b/src/main/java/com/dfsek/terra/biome/UserDefinedGenerator.java @@ -1,5 +1,7 @@ package com.dfsek.terra.biome; +import com.dfsek.terra.math.NoiseFunction2; +import com.dfsek.terra.math.NoiseFunction3; import org.polydev.gaea.biome.BiomeTerrain; import org.polydev.gaea.math.FastNoise; import org.polydev.gaea.math.parsii.eval.Expression; @@ -15,18 +17,16 @@ public class UserDefinedGenerator extends BiomeTerrain { private final Variable xVar; private final Variable yVar; private final Variable zVar; - private final Variable noise2D; - private final Variable noise3D; + private final BlockPalette p; - public UserDefinedGenerator(Scope s, Expression e, List v) { + public UserDefinedGenerator(Scope s, Expression e, List v, BlockPalette p) { this.noiseExp = e; this.vars = v; + this.p = p; this.xVar = s.getVariable("x"); this.yVar = s.getVariable("y"); this.zVar = s.getVariable("z"); - this.noise2D = s.getVariable("w"); - this.noise3D = s.getVariable("t"); } /** * Gets the 2D noise at a pair of coordinates using the provided FastNoise instance. @@ -41,8 +41,8 @@ public class UserDefinedGenerator extends BiomeTerrain { xVar.setValue(x); yVar.setValue(0); zVar.setValue(z); - noise2D.setValue(gen.getSimplexFractal(x, z)); - noise3D.setValue(0); + NoiseFunction2.setNoise(gen); + NoiseFunction3.setNoise(gen); return noiseExp.evaluate(); } @@ -60,8 +60,8 @@ public class UserDefinedGenerator extends BiomeTerrain { xVar.setValue(x); yVar.setValue(y); zVar.setValue(z); - noise2D.setValue(gen.getSimplexFractal(x, z)); - noise3D.setValue(gen.getSimplexFractal(x, y, z)); + NoiseFunction2.setNoise(gen); + NoiseFunction3.setNoise(gen); return noiseExp.evaluate(); } @@ -72,6 +72,6 @@ public class UserDefinedGenerator extends BiomeTerrain { */ @Override public BlockPalette getPalette() { - return null; + return p; } } diff --git a/src/main/java/com/dfsek/terra/config/BiomeConfig.java b/src/main/java/com/dfsek/terra/config/BiomeConfig.java index 1e97b708a..15b76ac4f 100644 --- a/src/main/java/com/dfsek/terra/config/BiomeConfig.java +++ b/src/main/java/com/dfsek/terra/config/BiomeConfig.java @@ -1,26 +1,47 @@ package com.dfsek.terra.config; import com.dfsek.terra.biome.UserDefinedBiome; +import org.bukkit.Bukkit; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.YamlConfiguration; +import org.jetbrains.annotations.NotNull; import org.polydev.gaea.math.parsii.tokenizer.ParseException; import java.io.File; import java.io.IOException; public class BiomeConfig extends YamlConfiguration { - private final UserDefinedBiome biome; - private final String biomeID; - private final String friendlyName; - public BiomeConfig(File file) throws InvalidConfigurationException, ParseException, IOException { + private UserDefinedBiome biome; + private String biomeID; + private String friendlyName; + private boolean isEnabled = false; + + public BiomeConfig(File file) throws InvalidConfigurationException, IOException { super(); + load(file); + } + + + @Override + public void load(@NotNull File file) throws InvalidConfigurationException, IOException { + isEnabled = false; super.load(file); if(!contains("noise-equation")) throw new InvalidConfigurationException("No noise equation included in biome!"); - this.biome = new UserDefinedBiome(getString("noise-equation")); + try { + this.biome = new UserDefinedBiome(this); + } catch(ParseException e) { + e.printStackTrace(); + Bukkit.getLogger().severe("Unable to parse noise equation!"); + } if(!contains("id")) throw new InvalidConfigurationException("Biome ID unspecified!"); this.biomeID = getString("id"); if(!contains("name")) throw new InvalidConfigurationException("Biome Name unspecified!"); this.friendlyName = getString("name"); + isEnabled = true; + } + + public boolean isEnabled() { + return isEnabled; } public UserDefinedBiome getBiome() { diff --git a/src/main/java/com/dfsek/terra/config/BiomeGridConfig.java b/src/main/java/com/dfsek/terra/config/BiomeGridConfig.java new file mode 100644 index 000000000..2432cdfdd --- /dev/null +++ b/src/main/java/com/dfsek/terra/config/BiomeGridConfig.java @@ -0,0 +1,59 @@ +package com.dfsek.terra.config; + +import com.dfsek.terra.biome.UserDefinedBiome; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.jetbrains.annotations.NotNull; +import org.polydev.gaea.biome.BiomeGrid; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +public class BiomeGridConfig extends YamlConfiguration { + private String gridID; + private String friendlyName; + private boolean isEnabled = false; + private final UserDefinedBiome[][] grid = new UserDefinedBiome[16][16]; + + public BiomeGridConfig(File file) throws IOException, InvalidConfigurationException { + super(); + load(file); + } + @Override + public void load(@NotNull File file) throws IOException, InvalidConfigurationException { + isEnabled = false; + super.load(file); + if(!contains("grid")) throw new InvalidConfigurationException("Grid not found!"); + try { + for(int x = 0; x < 16; x++) { + for(int z = 0; z < 16; z++) { + grid[x][z] = ConfigUtil.getBiome(((List>) getList("grid")).get(x).get(z)).getBiome(); + } + } + } catch(ClassCastException e) { + throw new InvalidConfigurationException("Malformed grid!"); + } + if(!contains("id")) throw new InvalidConfigurationException("Grid ID unspecified!"); + this.gridID = getString("id"); + if(!contains("name")) throw new InvalidConfigurationException("Grid Name unspecified!"); + this.friendlyName = getString("name"); + isEnabled = true; + } + + public String getFriendlyName() { + return friendlyName; + } + + public UserDefinedBiome[][] getBiomeGrid() { + return grid; + } + + public boolean isEnabled() { + return isEnabled; + } + + public String getGridID() { + return gridID; + } +} diff --git a/src/main/java/com/dfsek/terra/config/ConfigUtil.java b/src/main/java/com/dfsek/terra/config/ConfigUtil.java index 00e54b933..5e82f8a16 100644 --- a/src/main/java/com/dfsek/terra/config/ConfigUtil.java +++ b/src/main/java/com/dfsek/terra/config/ConfigUtil.java @@ -1,4 +1,103 @@ package com.dfsek.terra.config; +import com.dfsek.terra.biome.TerraBiomeGrid; +import com.dfsek.terra.biome.UserDefinedBiome; +import org.bukkit.Bukkit; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.plugin.java.JavaPlugin; +import org.polydev.gaea.commons.io.FilenameUtils; +import org.polydev.gaea.world.BlockPalette; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.HashMap; +import java.util.Map; +import java.util.logging.Logger; +import java.util.stream.Stream; + public class ConfigUtil { + private static final Map biomes = new HashMap<>(); + private static final Map biomeGrids = new HashMap<>(); + private static final Map palettes = new HashMap<>(); + + public static void loadConfig(JavaPlugin main) { + Logger logger = main.getLogger(); + logger.info("Loading config values"); + + try (Stream paths = Files.walk(Paths.get(main.getDataFolder() + File.separator + "palettes"))) { + paths + .filter(path -> FilenameUtils.wildcardMatch(path.toFile().getName(), "*.yml")) + .forEach(path -> { + logger.info("Loading BlockPalette from " + path.toString()); + try { + PaletteConfig grid = new PaletteConfig(path.toFile()); + palettes.put(grid.getPaletteID(), grid); + logger.info("Friendly name: " + grid.getFriendlyName()); + logger.info("ID: " + grid.getPaletteID()); + } catch(IOException | InvalidConfigurationException e) { + e.printStackTrace(); + } + }); + } catch(IOException e) { + e.printStackTrace(); + } + + try (Stream paths = Files.walk(Paths.get(main.getDataFolder() + File.separator + "biomes"))) { + paths + .filter(path -> FilenameUtils.wildcardMatch(path.toFile().getName(), "*.yml")) + .forEach(path -> { + logger.info("Loading biome from " + path.toString()); + try { + BiomeConfig biome = new BiomeConfig(path.toFile()); + biomes.put(biome.getBiomeID(), biome); + logger.info("Friendly name: " + biome.getFriendlyName()); + logger.info("ID: " + biome.getBiomeID()); + logger.info("Noise equation: " + biome.get("noise-equation")); + } catch(IOException | InvalidConfigurationException e) { + e.printStackTrace(); + } + }); + } catch(IOException e) { + e.printStackTrace(); + } + + try (Stream paths = Files.walk(Paths.get(main.getDataFolder() + File.separator + "grids"))) { + paths + .filter(path -> FilenameUtils.wildcardMatch(path.toFile().getName(), "*.yml")) + .forEach(path -> { + logger.info("Loading BiomeGrid from " + path.toString()); + try { + BiomeGridConfig grid = new BiomeGridConfig(path.toFile()); + biomeGrids.put(grid.getGridID(), grid); + logger.info("Friendly name: " + grid.getFriendlyName()); + logger.info("ID: " + grid.getGridID()); + } catch(IOException | InvalidConfigurationException e) { + e.printStackTrace(); + } + }); + } catch(IOException e) { + e.printStackTrace(); + } + + + + + WorldConfig.reloadAll(); + TerraBiomeGrid.reloadAll(); + } + + public static BiomeConfig getBiome(String id) { + return biomes.get(id); + } + + public static BiomeGridConfig getGrid(String id) { + return biomeGrids.get(id); + } + + public static PaletteConfig getPalette(String id) { + return palettes.get(id); + } } diff --git a/src/main/java/com/dfsek/terra/config/PaletteConfig.java b/src/main/java/com/dfsek/terra/config/PaletteConfig.java new file mode 100644 index 000000000..e3a3ebfee --- /dev/null +++ b/src/main/java/com/dfsek/terra/config/PaletteConfig.java @@ -0,0 +1,88 @@ +package com.dfsek.terra.config; + +import org.bukkit.Bukkit; +import org.bukkit.block.data.BlockData; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.jetbrains.annotations.NotNull; +import org.polydev.gaea.math.ProbabilityCollection; +import org.polydev.gaea.world.BlockPalette; + +import java.io.File; +import java.io.IOException; +import java.util.List; +import java.util.Map; + +public class PaletteConfig extends YamlConfiguration { + private BlockPalette palette; + private String paletteID; + private boolean isEnabled = false; + private String friendlyName; + public PaletteConfig(File file) throws IOException, InvalidConfigurationException { + load(file); + } + + @Override + public void load(@NotNull File file) throws IOException, InvalidConfigurationException { + super.load(file); + palette = new BlockPalette(); + for(Map m : getMapList("blocks")) { + try { + ProbabilityCollection layer = new ProbabilityCollection<>(); + for(Map.Entry type : ((Map) m.get("materials")).entrySet()) { + layer.add(Bukkit.createBlockData(type.getKey()), type.getValue()); + Bukkit.getLogger().info("[Terra] Added" + type.getKey() + " with probability " + type.getValue()); + } + Bukkit.getLogger().info("[Terra] Added above materials for " + m.get("layers") + " layers."); + palette.addBlockData(layer, (Integer) m.get("layers")); + } catch(ClassCastException e) { + e.printStackTrace(); + } + } + if(!contains("id")) throw new InvalidConfigurationException("Grid ID unspecified!"); + this.paletteID = getString("id"); + if(!contains("name")) throw new InvalidConfigurationException("Grid Name unspecified!"); + this.friendlyName = getString("name"); + isEnabled = true; + } + + public BlockPalette getPalette() { + return palette; + } + + public boolean isEnabled() { + return isEnabled; + } + + public String getFriendlyName() { + return friendlyName; + } + + public String getPaletteID() { + return paletteID; + } + + private static class Range { + private final int min; + private final int max; + + /** + * Instantiates a Range object with a minimum value (inclusive) and a maximum value (exclusive). + * @param min The minimum value (inclusive). + * @param max The maximum value (exclusive). + */ + public Range(int min, int max) { + this.min = min; + this.max = max; + } + + /** + * Tests if a value is within range. + * @param val The value to test. + * @return boolean - Whether the value is within range. + */ + public boolean isInRange(int val) { + return val >= min && val < max; + } + } +} diff --git a/src/main/java/com/dfsek/terra/config/WorldConfig.java b/src/main/java/com/dfsek/terra/config/WorldConfig.java index 098b7602d..7f0fbe894 100644 --- a/src/main/java/com/dfsek/terra/config/WorldConfig.java +++ b/src/main/java/com/dfsek/terra/config/WorldConfig.java @@ -27,8 +27,7 @@ import java.util.stream.Stream; public class WorldConfig { private static JavaPlugin main; private static final Map configs = new HashMap<>(); - private static final Map biomes = new HashMap<>(); - public List> biomeGrid; + public BiomeGridConfig biomeGrid; public WorldConfig(String name, JavaPlugin main) { @@ -36,6 +35,12 @@ public class WorldConfig { load(name); } + public static void reloadAll() { + for(Map.Entry e : configs.entrySet()) { + e.getValue().load(e.getKey()); + } + } + public static WorldConfig fromWorld(World w) { return configs.getOrDefault(w.getName(), null); } @@ -57,31 +62,13 @@ public class WorldConfig { main.getLogger().severe("Unable to load configuration for world " + w + "."); } - biomeGrid = (List>) config.getList("grids.DEFAULT"); + biomeGrid = ConfigUtil.getGrid(config.getStringList("grids").get(0)); + - try (Stream paths = Files.walk(Paths.get(main.getDataFolder() + File.separator + "biomes"))) { - paths - .filter(path -> FilenameUtils.wildcardMatch(path.toFile().getName(), "*.yml")) - .forEach(path -> { - Bukkit.getLogger().info(path.toString()); - try { - BiomeConfig biome = new BiomeConfig(path.toFile()); - biomes.put(biome.getBiomeID(), biome); - } catch(IOException | InvalidConfigurationException | ParseException e) { - e.printStackTrace(); - } - }); - } catch(IOException e) { - e.printStackTrace(); - } configs.put(w, this); main.getLogger().info("World load complete. Time elapsed: " + ((double) (System.nanoTime() - start)) / 1000000 + "ms"); } - - public static Map getBiomes() { - return biomes; - } } diff --git a/src/main/java/com/dfsek/terra/math/NoiseFunction2.java b/src/main/java/com/dfsek/terra/math/NoiseFunction2.java new file mode 100644 index 000000000..d2349eaf4 --- /dev/null +++ b/src/main/java/com/dfsek/terra/math/NoiseFunction2.java @@ -0,0 +1,34 @@ +package com.dfsek.terra.math; + +import org.polydev.gaea.math.FastNoise; +import org.polydev.gaea.math.parsii.eval.Expression; +import org.polydev.gaea.math.parsii.eval.Function; + +import java.util.List; + +public class NoiseFunction2 implements Function { + private static FastNoise gen = new FastNoise(); + + @Override + public int getNumberOfArguments() { + return 2; + } + + @Override + public double eval(List list) { + return gen.getSimplexFractal((float) list.get(0).evaluate(), (float) list.get(1).evaluate()); + } + + @Override + public boolean isNaturalFunction() { + return true; + } + + public static void setNoise(FastNoise gen) { + NoiseFunction2.gen = gen; + } + + public static FastNoise getNoise() { + return gen; + } +} diff --git a/src/main/java/com/dfsek/terra/math/NoiseFunction3.java b/src/main/java/com/dfsek/terra/math/NoiseFunction3.java new file mode 100644 index 000000000..e368cb749 --- /dev/null +++ b/src/main/java/com/dfsek/terra/math/NoiseFunction3.java @@ -0,0 +1,34 @@ +package com.dfsek.terra.math; + +import org.polydev.gaea.math.FastNoise; +import org.polydev.gaea.math.parsii.eval.Expression; +import org.polydev.gaea.math.parsii.eval.Function; + +import java.util.List; + +public class NoiseFunction3 implements Function { + private static FastNoise gen = new FastNoise(); + + @Override + public int getNumberOfArguments() { + return 3; + } + + @Override + public double eval(List list) { + return gen.getSimplexFractal((float) list.get(0).evaluate(), (float) list.get(1).evaluate(), (float) list.get(2).evaluate()); + } + + @Override + public boolean isNaturalFunction() { + return true; + } + + public static void setNoise(FastNoise gen) { + NoiseFunction3.gen = gen; + } + + public static FastNoise getNoise() { + return gen; + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 43433e079..ee7c00467 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -2,4 +2,10 @@ name: Terra main: com.dfsek.terra.Terra version: 1.0.0 load: STARTUP -api-version: "1.15" \ No newline at end of file +api-version: "1.15" +commands: + terra: + description: Terra base command + usage: /terra reload + aliases: [te] + permission: terra.command \ No newline at end of file