mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2025-07-04 00:45:57 +00:00
implementation compiles now
This commit is contained in:
parent
e9dc7d3db6
commit
54f4722297
@ -1,4 +1,4 @@
|
|||||||
package com.dfsek.terra.config.loaders.config.biome.templates.source;
|
package com.dfsek.terra.addons.biome;
|
||||||
|
|
||||||
import com.dfsek.tectonic.annotations.Value;
|
import com.dfsek.tectonic.annotations.Value;
|
||||||
import com.dfsek.terra.api.util.ProbabilityCollection;
|
import com.dfsek.terra.api.util.ProbabilityCollection;
|
@ -1,4 +1,4 @@
|
|||||||
package com.dfsek.terra.config.loaders.config;
|
package com.dfsek.terra.addons.biome;
|
||||||
|
|
||||||
import com.dfsek.tectonic.loading.ConfigLoader;
|
import com.dfsek.tectonic.loading.ConfigLoader;
|
||||||
import com.dfsek.tectonic.loading.TypeLoader;
|
import com.dfsek.tectonic.loading.TypeLoader;
|
@ -1,4 +1,4 @@
|
|||||||
package com.dfsek.terra.config.loaders.config;
|
package com.dfsek.terra.addons.biome;
|
||||||
|
|
||||||
import com.dfsek.tectonic.exception.LoadException;
|
import com.dfsek.tectonic.exception.LoadException;
|
||||||
import com.dfsek.tectonic.loading.ConfigLoader;
|
import com.dfsek.tectonic.loading.ConfigLoader;
|
@ -1,4 +1,4 @@
|
|||||||
package com.dfsek.terra.config.loaders.config.biome.templates.source;
|
package com.dfsek.terra.addons.biome;
|
||||||
|
|
||||||
import com.dfsek.tectonic.loading.object.ObjectTemplate;
|
import com.dfsek.tectonic.loading.object.ObjectTemplate;
|
||||||
import com.dfsek.terra.api.util.seeded.SourceSeeded;
|
import com.dfsek.terra.api.util.seeded.SourceSeeded;
|
@ -1,4 +1,4 @@
|
|||||||
package com.dfsek.terra.commands.biome;
|
package com.dfsek.terra.addons.biome.command.biome;
|
||||||
|
|
||||||
import com.dfsek.terra.api.TerraPlugin;
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
import com.dfsek.terra.api.command.CommandTemplate;
|
import com.dfsek.terra.api.command.CommandTemplate;
|
@ -1,4 +1,4 @@
|
|||||||
package com.dfsek.terra.commands.biome;
|
package com.dfsek.terra.addons.biome.command.biome;
|
||||||
|
|
||||||
import com.dfsek.terra.api.command.CommandTemplate;
|
import com.dfsek.terra.api.command.CommandTemplate;
|
||||||
import com.dfsek.terra.api.command.annotation.Argument;
|
import com.dfsek.terra.api.command.annotation.Argument;
|
||||||
@ -8,8 +8,6 @@ import com.dfsek.terra.api.entity.CommandSender;
|
|||||||
import com.dfsek.terra.api.structure.ConfiguredStructure;
|
import com.dfsek.terra.api.structure.ConfiguredStructure;
|
||||||
import com.dfsek.terra.api.world.biome.TerraBiome;
|
import com.dfsek.terra.api.world.biome.TerraBiome;
|
||||||
import com.dfsek.terra.api.world.biome.UserDefinedBiome;
|
import com.dfsek.terra.api.world.biome.UserDefinedBiome;
|
||||||
import com.dfsek.terra.commands.biome.arg.BiomeArgumentParser;
|
|
||||||
import com.dfsek.terra.commands.biome.tab.BiomeTabCompleter;
|
|
||||||
import com.dfsek.terra.config.templates.BiomeTemplate;
|
import com.dfsek.terra.config.templates.BiomeTemplate;
|
||||||
import com.dfsek.terra.world.population.items.TerraStructure;
|
import com.dfsek.terra.world.population.items.TerraStructure;
|
||||||
|
|
@ -1,5 +1,6 @@
|
|||||||
package com.dfsek.terra.commands.biome;
|
package com.dfsek.terra.addons.biome.command.biome;
|
||||||
|
|
||||||
|
import com.dfsek.terra.addons.biome.command.biome.arg.BiomeArgumentParser;
|
||||||
import com.dfsek.terra.api.TerraPlugin;
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
import com.dfsek.terra.api.command.CommandTemplate;
|
import com.dfsek.terra.api.command.CommandTemplate;
|
||||||
import com.dfsek.terra.api.command.annotation.Argument;
|
import com.dfsek.terra.api.command.annotation.Argument;
|
||||||
@ -16,8 +17,7 @@ import com.dfsek.terra.api.injection.annotations.Inject;
|
|||||||
import com.dfsek.terra.api.vector.Vector3;
|
import com.dfsek.terra.api.vector.Vector3;
|
||||||
import com.dfsek.terra.api.world.biome.TerraBiome;
|
import com.dfsek.terra.api.world.biome.TerraBiome;
|
||||||
import com.dfsek.terra.api.world.locate.AsyncBiomeFinder;
|
import com.dfsek.terra.api.world.locate.AsyncBiomeFinder;
|
||||||
import com.dfsek.terra.commands.biome.arg.BiomeArgumentParser;
|
import com.dfsek.terra.addons.biome.command.biome.tab.BiomeTabCompleter;
|
||||||
import com.dfsek.terra.commands.biome.tab.BiomeTabCompleter;
|
|
||||||
import com.dfsek.terra.config.lang.LangUtil;
|
import com.dfsek.terra.config.lang.LangUtil;
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
@ -1,4 +1,4 @@
|
|||||||
package com.dfsek.terra.commands.biome.arg;
|
package com.dfsek.terra.addons.biome.command.biome.arg;
|
||||||
|
|
||||||
import com.dfsek.terra.api.TerraPlugin;
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
import com.dfsek.terra.api.command.arg.ArgumentParser;
|
import com.dfsek.terra.api.command.arg.ArgumentParser;
|
@ -1,4 +1,4 @@
|
|||||||
package com.dfsek.terra.commands.biome.tab;
|
package com.dfsek.terra.addons.biome.command.biome.tab;
|
||||||
|
|
||||||
import com.dfsek.terra.api.TerraPlugin;
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
import com.dfsek.terra.api.command.tab.TabCompleter;
|
import com.dfsek.terra.api.command.tab.TabCompleter;
|
@ -1,4 +1,4 @@
|
|||||||
package com.dfsek.terra.config.loaders.config.biome;
|
package com.dfsek.terra.addons.biome.pipeline.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;
|
@ -1,15 +1,15 @@
|
|||||||
package com.dfsek.terra.config.loaders.config;
|
package com.dfsek.terra.addons.tree;
|
||||||
|
|
||||||
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.addons.tree.tree.TreeLayer;
|
||||||
import com.dfsek.terra.api.util.ProbabilityCollection;
|
import com.dfsek.terra.api.util.ProbabilityCollection;
|
||||||
import com.dfsek.terra.api.util.Range;
|
import com.dfsek.terra.api.util.Range;
|
||||||
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
|
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
|
||||||
import com.dfsek.terra.api.world.Tree;
|
import com.dfsek.terra.api.world.Tree;
|
||||||
import com.dfsek.terra.config.loaders.Types;
|
import com.dfsek.terra.config.loaders.Types;
|
||||||
import com.dfsek.terra.noise.samplers.noise.random.WhiteNoiseSampler;
|
import com.dfsek.terra.noise.samplers.noise.random.WhiteNoiseSampler;
|
||||||
import com.dfsek.terra.addons.tree.tree.TreeLayer;
|
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
@ -12,6 +12,8 @@ import com.dfsek.terra.api.vector.Vector3;
|
|||||||
public interface WorldHandle {
|
public interface WorldHandle {
|
||||||
BlockState createBlockData(String data);
|
BlockState createBlockData(String data);
|
||||||
|
|
||||||
|
BlockState air();
|
||||||
|
|
||||||
EntityType getEntity(String id);
|
EntityType getEntity(String id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -29,13 +29,7 @@ public interface Generator {
|
|||||||
|
|
||||||
double getWeight();
|
double getWeight();
|
||||||
|
|
||||||
/**
|
PaletteSettings getPaletteSettings();
|
||||||
* Gets the BlocPalette to generate the biome with.
|
|
||||||
*
|
|
||||||
* @return BlocPalette - The biome's palette.
|
|
||||||
*/
|
|
||||||
Palette getPalette(int y);
|
|
||||||
|
|
||||||
NoiseSampler getBiomeNoise();
|
NoiseSampler getBiomeNoise();
|
||||||
|
|
||||||
double getElevationWeight();
|
double getElevationWeight();
|
||||||
|
@ -0,0 +1,7 @@
|
|||||||
|
package com.dfsek.terra.api.world.biome;
|
||||||
|
|
||||||
|
import com.dfsek.terra.api.world.generator.Palette;
|
||||||
|
|
||||||
|
public interface PaletteSettings {
|
||||||
|
Palette getPalette(int y);
|
||||||
|
}
|
@ -1,13 +1,13 @@
|
|||||||
package com.dfsek.terra.api.util;
|
package com.dfsek.terra.api.util;
|
||||||
|
|
||||||
|
import com.dfsek.terra.api.world.biome.Generator;
|
||||||
import com.dfsek.terra.api.world.generator.Palette;
|
import com.dfsek.terra.api.world.generator.Palette;
|
||||||
import com.dfsek.terra.api.world.generator.Sampler;
|
import com.dfsek.terra.api.world.generator.Sampler;
|
||||||
import com.dfsek.terra.api.world.palette.slant.SlantHolder;
|
|
||||||
import com.dfsek.terra.config.templates.BiomeTemplate;
|
|
||||||
|
|
||||||
public final class PaletteUtil {
|
public final class PaletteUtil {
|
||||||
public static Palette getPalette(int x, int y, int z, BiomeTemplate c, Sampler sampler) {
|
public static Palette getPalette(int x, int y, int z, Generator c, Sampler sampler) {
|
||||||
|
|
||||||
|
/*
|
||||||
SlantHolder slant = c.getSlant();
|
SlantHolder slant = c.getSlant();
|
||||||
if(slant != null) {
|
if(slant != null) {
|
||||||
double slope = MathUtil.derivative(sampler, x, y, z);
|
double slope = MathUtil.derivative(sampler, x, y, z);
|
||||||
@ -16,6 +16,8 @@ public final class PaletteUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return c.getPalette().getPalette(y);
|
*/
|
||||||
|
|
||||||
|
return c.getPaletteSettings().getPalette(y);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -2,9 +2,7 @@ package com.dfsek.terra.commands;
|
|||||||
|
|
||||||
import com.dfsek.terra.api.command.CommandManager;
|
import com.dfsek.terra.api.command.CommandManager;
|
||||||
import com.dfsek.terra.api.command.exception.MalformedCommandException;
|
import com.dfsek.terra.api.command.exception.MalformedCommandException;
|
||||||
import com.dfsek.terra.commands.biome.BiomeCommand;
|
|
||||||
import com.dfsek.terra.commands.profiler.ProfileCommand;
|
import com.dfsek.terra.commands.profiler.ProfileCommand;
|
||||||
import com.dfsek.terra.addons.structure.command.structure.StructureCommand;
|
|
||||||
|
|
||||||
public final class CommandUtil {
|
public final class CommandUtil {
|
||||||
public static void registerAll(CommandManager manager) throws MalformedCommandException {
|
public static void registerAll(CommandManager manager) throws MalformedCommandException {
|
||||||
@ -14,6 +12,6 @@ public final class CommandUtil {
|
|||||||
manager.register("version", VersionCommand.class);
|
manager.register("version", VersionCommand.class);
|
||||||
manager.register("getblock", GetBlockCommand.class);
|
manager.register("getblock", GetBlockCommand.class);
|
||||||
manager.register("packs", PacksCommand.class);
|
manager.register("packs", PacksCommand.class);
|
||||||
manager.register("biome", BiomeCommand.class);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,18 +8,11 @@ import com.dfsek.terra.api.tectonic.LoaderRegistrar;
|
|||||||
import com.dfsek.terra.api.util.ProbabilityCollection;
|
import com.dfsek.terra.api.util.ProbabilityCollection;
|
||||||
import com.dfsek.terra.api.util.Range;
|
import com.dfsek.terra.api.util.Range;
|
||||||
import com.dfsek.terra.api.util.collections.MaterialSet;
|
import com.dfsek.terra.api.util.collections.MaterialSet;
|
||||||
import com.dfsek.terra.api.util.seeded.SourceSeeded;
|
|
||||||
import com.dfsek.terra.api.util.seeded.StageSeeded;
|
|
||||||
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
|
|
||||||
import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeSource;
|
import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeSource;
|
||||||
import com.dfsek.terra.config.loaders.LinkedHashMapLoader;
|
import com.dfsek.terra.config.loaders.LinkedHashMapLoader;
|
||||||
import com.dfsek.terra.config.loaders.MaterialSetLoader;
|
import com.dfsek.terra.config.loaders.MaterialSetLoader;
|
||||||
import com.dfsek.terra.config.loaders.ProbabilityCollectionLoader;
|
import com.dfsek.terra.config.loaders.ProbabilityCollectionLoader;
|
||||||
import com.dfsek.terra.config.loaders.RangeLoader;
|
import com.dfsek.terra.config.loaders.RangeLoader;
|
||||||
import com.dfsek.terra.config.loaders.config.biome.BiomeProviderBuilderLoader;
|
|
||||||
import com.dfsek.terra.config.loaders.config.biome.SourceBuilderLoader;
|
|
||||||
import com.dfsek.terra.config.loaders.config.biome.StageBuilderLoader;
|
|
||||||
import com.dfsek.terra.config.loaders.config.biome.templates.source.NoiseSourceTemplate;
|
|
||||||
|
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
|
|
||||||
@ -35,12 +28,7 @@ public class GenericLoaders implements LoaderRegistrar {
|
|||||||
registry.registerLoader(ProbabilityCollection.class, new ProbabilityCollectionLoader())
|
registry.registerLoader(ProbabilityCollection.class, new ProbabilityCollectionLoader())
|
||||||
.registerLoader(Range.class, new RangeLoader())
|
.registerLoader(Range.class, new RangeLoader())
|
||||||
.registerLoader(MaterialSet.class, new MaterialSetLoader())
|
.registerLoader(MaterialSet.class, new MaterialSetLoader())
|
||||||
.registerLoader(NoiseSourceTemplate.class, NoiseSourceTemplate::new)
|
|
||||||
.registerLoader(LinkedHashMap.class, new LinkedHashMapLoader())
|
.registerLoader(LinkedHashMap.class, new LinkedHashMapLoader())
|
||||||
.registerLoader(SourceSeeded.class, new SourceBuilderLoader())
|
|
||||||
.registerLoader(StageSeeded.class, new StageBuilderLoader())
|
|
||||||
.registerLoader(BiomeProvider.BiomeProviderBuilder.class, new BiomeProviderBuilderLoader())
|
|
||||||
.registerLoader(BiomeProvider.Type.class, (t, object, cf) -> BiomeProvider.Type.valueOf((String) object))
|
|
||||||
.registerLoader(BiomeSource.Type.class, (t, object, cf) -> BiomeSource.Type.valueOf((String) object));
|
.registerLoader(BiomeSource.Type.class, (t, object, cf) -> BiomeSource.Type.valueOf((String) object));
|
||||||
|
|
||||||
if(main != null) {
|
if(main != null) {
|
||||||
|
@ -1,35 +0,0 @@
|
|||||||
package com.dfsek.terra.config.loaders.config.biome;
|
|
||||||
|
|
||||||
import com.dfsek.tectonic.exception.LoadException;
|
|
||||||
import com.dfsek.tectonic.loading.ConfigLoader;
|
|
||||||
import com.dfsek.tectonic.loading.TypeLoader;
|
|
||||||
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
|
|
||||||
import com.dfsek.terra.config.loaders.config.biome.templates.provider.BiomePipelineTemplate;
|
|
||||||
import com.dfsek.terra.config.loaders.config.biome.templates.provider.ImageProviderTemplate;
|
|
||||||
import com.dfsek.terra.config.loaders.config.biome.templates.provider.SingleBiomeProviderTemplate;
|
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public class BiomeProviderBuilderLoader implements TypeLoader<BiomeProvider.BiomeProviderBuilder> {
|
|
||||||
|
|
||||||
public BiomeProviderBuilderLoader() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BiomeProvider.BiomeProviderBuilder load(Type t, Object c, ConfigLoader loader) throws LoadException { // TODO: clean this up
|
|
||||||
Map<String, Object> map = (Map<String, Object>) c;
|
|
||||||
|
|
||||||
switch(loader.loadClass(BiomeProvider.Type.class, map.get("type"))) {
|
|
||||||
case IMAGE:
|
|
||||||
return loader.loadClass(ImageProviderTemplate.class, map);
|
|
||||||
case PIPELINE:
|
|
||||||
return loader.loadClass(BiomePipelineTemplate.class, map);
|
|
||||||
case SINGLE:
|
|
||||||
return loader.loadClass(SingleBiomeProviderTemplate.class, map);
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new LoadException("No such biome provider type: " + map.get("type"));
|
|
||||||
}
|
|
||||||
}
|
|
@ -3,10 +3,8 @@ package com.dfsek.terra.config.loaders.config.biome.templates.provider;
|
|||||||
import com.dfsek.tectonic.annotations.Default;
|
import com.dfsek.tectonic.annotations.Default;
|
||||||
import com.dfsek.tectonic.annotations.Value;
|
import com.dfsek.tectonic.annotations.Value;
|
||||||
import com.dfsek.tectonic.loading.object.ObjectTemplate;
|
import com.dfsek.tectonic.loading.object.ObjectTemplate;
|
||||||
import com.dfsek.terra.api.noise.NoiseSampler;
|
|
||||||
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
|
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
|
||||||
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
|
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
|
||||||
import com.dfsek.terra.noise.samplers.noise.ConstantSampler;
|
|
||||||
|
|
||||||
public abstract class BiomeProviderTemplate implements ObjectTemplate<BiomeProvider.BiomeProviderBuilder>, BiomeProvider.BiomeProviderBuilder {
|
public abstract class BiomeProviderTemplate implements ObjectTemplate<BiomeProvider.BiomeProviderBuilder>, BiomeProvider.BiomeProviderBuilder {
|
||||||
@Value("resolution")
|
@Value("resolution")
|
||||||
|
@ -256,9 +256,10 @@ public class ConfigPackImpl implements ConfigPack {
|
|||||||
return (CheckedRegistry<T>) registryMap.getOrDefault(clazz, ImmutablePair.ofNull()).getRight();
|
return (CheckedRegistry<T>) registryMap.getOrDefault(clazz, ImmutablePair.ofNull()).getRight();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
@Override
|
@Override
|
||||||
public <T> CheckedRegistry<T> getCheckedRegistry(Class<T> clazz) throws IllegalStateException {
|
public <T> CheckedRegistry<T> getCheckedRegistry(Class<T> clazz) throws IllegalStateException {
|
||||||
return null;
|
return (CheckedRegistry<T>) registryMap.getOrDefault(clazz, ImmutablePair.ofNull()).getRight();
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
@ -273,6 +274,7 @@ public class ConfigPackImpl implements ConfigPack {
|
|||||||
registry
|
registry
|
||||||
.registerLoader(ConfigType.class, configTypeRegistry)
|
.registerLoader(ConfigType.class, configTypeRegistry)
|
||||||
.registerLoader(BufferedImage.class, new BufferedImageLoader(loader));
|
.registerLoader(BufferedImage.class, new BufferedImageLoader(loader));
|
||||||
|
registryMap.forEach((clazz, reg) -> registry.registerLoader(clazz, reg.getLeft()));
|
||||||
loaders.forEach(registry::registerLoader);
|
loaders.forEach(registry::registerLoader);
|
||||||
objectLoaders.forEach((t, l) -> registry.registerLoader(t, (TemplateProvider<ObjectTemplate<Object>>) ((Object) l)));
|
objectLoaders.forEach((t, l) -> registry.registerLoader(t, (TemplateProvider<ObjectTemplate<Object>>) ((Object) l)));
|
||||||
}
|
}
|
||||||
|
@ -27,8 +27,8 @@ public class TerraWorldImpl implements TerraWorld {
|
|||||||
this.world = w;
|
this.world = w;
|
||||||
config = (WorldConfigImpl) c.toWorldConfig(this);
|
config = (WorldConfigImpl) c.toWorldConfig(this);
|
||||||
this.provider = config.getProvider();
|
this.provider = config.getProvider();
|
||||||
air = main.getWorldHandle().createBlockData("minecraft:air");
|
|
||||||
main.getEventManager().callEvent(new TerraWorldLoadEvent(this, c));
|
main.getEventManager().callEvent(new TerraWorldLoadEvent(this, c));
|
||||||
|
this.air = main.getWorldHandle().air();
|
||||||
safe = true;
|
safe = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,7 +58,7 @@ public class TerraWorldImpl implements TerraWorld {
|
|||||||
@Override
|
@Override
|
||||||
public BlockState getUngeneratedBlock(int x, int y, int z) {
|
public BlockState getUngeneratedBlock(int x, int y, int z) {
|
||||||
TerraBiome biome = provider.getBiome(x, z);
|
TerraBiome biome = provider.getBiome(x, z);
|
||||||
Palette palette = biome.getGenerator(world).getPalette(y);
|
Palette palette = biome.getGenerator(world).getPaletteSettings().getPalette(y);
|
||||||
Sampler sampler = config.getSamplerCache().get(x, z);
|
Sampler sampler = config.getSamplerCache().get(x, z);
|
||||||
int fdX = FastMath.floorMod(x, 16);
|
int fdX = FastMath.floorMod(x, 16);
|
||||||
int fdZ = FastMath.floorMod(z, 16);
|
int fdZ = FastMath.floorMod(z, 16);
|
||||||
@ -70,9 +70,9 @@ public class TerraWorldImpl implements TerraWorld {
|
|||||||
else level = 0;
|
else level = 0;
|
||||||
}
|
}
|
||||||
return palette.get(level, x, y, z);
|
return palette.get(level, x, y, z);
|
||||||
} else if(y <= biome.getConfig().getSeaLevel()) {
|
} /* else if(y <= biome.getConfig().getSeaLevel()) {
|
||||||
return biome.getConfig().getOceanPalette().get(biome.getConfig().getSeaLevel() - y, x, y, z);
|
return biome.getConfig().getOceanPalette().get(biome.getConfig().getSeaLevel() - y, x, y, z);
|
||||||
} else return air;
|
} */else return air;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -14,16 +14,14 @@ import com.dfsek.terra.api.vector.Vector3;
|
|||||||
import com.dfsek.terra.api.world.BiomeGrid;
|
import com.dfsek.terra.api.world.BiomeGrid;
|
||||||
import com.dfsek.terra.api.world.TerraWorld;
|
import com.dfsek.terra.api.world.TerraWorld;
|
||||||
import com.dfsek.terra.api.world.World;
|
import com.dfsek.terra.api.world.World;
|
||||||
|
import com.dfsek.terra.api.world.biome.Generator;
|
||||||
import com.dfsek.terra.api.world.biome.TerraBiome;
|
import com.dfsek.terra.api.world.biome.TerraBiome;
|
||||||
import com.dfsek.terra.api.world.biome.UserDefinedBiome;
|
|
||||||
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
|
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
|
||||||
import com.dfsek.terra.api.world.generator.ChunkData;
|
import com.dfsek.terra.api.world.generator.ChunkData;
|
||||||
import com.dfsek.terra.api.world.generator.Palette;
|
import com.dfsek.terra.api.world.generator.Palette;
|
||||||
import com.dfsek.terra.api.world.generator.Sampler;
|
import com.dfsek.terra.api.world.generator.Sampler;
|
||||||
import com.dfsek.terra.api.world.generator.TerraBlockPopulator;
|
import com.dfsek.terra.api.world.generator.TerraBlockPopulator;
|
||||||
import com.dfsek.terra.api.world.generator.TerraChunkGenerator;
|
import com.dfsek.terra.api.world.generator.TerraChunkGenerator;
|
||||||
import com.dfsek.terra.api.world.palette.PaletteImpl;
|
|
||||||
import com.dfsek.terra.config.templates.BiomeTemplate;
|
|
||||||
import com.dfsek.terra.world.Carver;
|
import com.dfsek.terra.world.Carver;
|
||||||
import com.dfsek.terra.world.carving.NoiseCarver;
|
import com.dfsek.terra.world.carving.NoiseCarver;
|
||||||
import com.dfsek.terra.world.generation.math.samplers.Sampler3D;
|
import com.dfsek.terra.world.generation.math.samplers.Sampler3D;
|
||||||
@ -37,7 +35,6 @@ import java.util.Random;
|
|||||||
public class DefaultChunkGenerator3D implements TerraChunkGenerator {
|
public class DefaultChunkGenerator3D implements TerraChunkGenerator {
|
||||||
private final ConfigPack configPack;
|
private final ConfigPack configPack;
|
||||||
private final TerraPlugin main;
|
private final TerraPlugin main;
|
||||||
private final PaletteImpl.Singleton blank;
|
|
||||||
private final List<TerraBlockPopulator> blockPopulators = new ArrayList<>();
|
private final List<TerraBlockPopulator> blockPopulators = new ArrayList<>();
|
||||||
|
|
||||||
private final Carver carver;
|
private final Carver carver;
|
||||||
@ -47,7 +44,6 @@ public class DefaultChunkGenerator3D implements TerraChunkGenerator {
|
|||||||
this.main = main;
|
this.main = main;
|
||||||
|
|
||||||
carver = new NoiseCarver(new ConstantRange(0, 255), main.getWorldHandle().createBlockData("minecraft:air"), main);
|
carver = new NoiseCarver(new ConstantRange(0, 255), main.getWorldHandle().createBlockData("minecraft:air"), main);
|
||||||
blank = new PaletteImpl.Singleton(main.getWorldHandle().createBlockData("minecraft:air"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -81,26 +77,26 @@ public class DefaultChunkGenerator3D implements TerraChunkGenerator {
|
|||||||
int cz = zOrig + z;
|
int cz = zOrig + z;
|
||||||
|
|
||||||
TerraBiome b = grid.getBiome(cx, cz);
|
TerraBiome b = grid.getBiome(cx, cz);
|
||||||
BiomeTemplate c = ((UserDefinedBiome) b).getConfig();
|
Generator g = b.getGenerator(world);
|
||||||
|
|
||||||
int sea = c.getSeaLevel();
|
//int sea = c.getSeaLevel();
|
||||||
Palette seaPalette = c.getOceanPalette();
|
//Palette seaPalette = c.getOceanPalette();
|
||||||
|
|
||||||
boolean justSet = false;
|
boolean justSet = false;
|
||||||
BlockState data = null;
|
BlockState data = null;
|
||||||
for(int y = world.getMaxHeight() - 1; y >= world.getMinHeight(); y--) {
|
for(int y = world.getMaxHeight() - 1; y >= world.getMinHeight(); y--) {
|
||||||
if(sampler.sample(x, y, z) > 0) {
|
if(sampler.sample(x, y, z) > 0) {
|
||||||
justSet = true;
|
justSet = true;
|
||||||
data = PaletteUtil.getPalette(x, y, z, c, sampler).get(paletteLevel, cx, y, cz);
|
data = PaletteUtil.getPalette(x, y, z, g, sampler).get(paletteLevel, cx, y, cz);
|
||||||
chunk.setBlock(x, y, z, data);
|
chunk.setBlock(x, y, z, data);
|
||||||
|
|
||||||
paletteLevel++;
|
paletteLevel++;
|
||||||
} else if(y <= sea) {
|
} /*else if(y <= sea) {
|
||||||
chunk.setBlock(x, y, z, seaPalette.get(sea - y, x + xOrig, y, z + zOrig));
|
chunk.setBlock(x, y, z, seaPalette.get(sea - y, x + xOrig, y, z + zOrig));
|
||||||
|
|
||||||
justSet = false;
|
justSet = false;
|
||||||
paletteLevel = 0;
|
paletteLevel = 0;
|
||||||
} else {
|
} */else {
|
||||||
|
|
||||||
justSet = false;
|
justSet = false;
|
||||||
paletteLevel = 0;
|
paletteLevel = 0;
|
||||||
|
@ -1,206 +0,0 @@
|
|||||||
package noise;
|
|
||||||
|
|
||||||
import com.dfsek.tectonic.exception.ConfigException;
|
|
||||||
import com.dfsek.tectonic.loading.ConfigLoader;
|
|
||||||
import com.dfsek.terra.api.noise.NoiseSampler;
|
|
||||||
import com.dfsek.terra.api.util.ProbabilityCollection;
|
|
||||||
import com.dfsek.terra.api.util.collections.ProbabilityCollectionImpl;
|
|
||||||
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
|
|
||||||
import com.dfsek.terra.config.GenericLoaders;
|
|
||||||
import com.dfsek.terra.config.fileloaders.FolderLoader;
|
|
||||||
import com.dfsek.terra.config.loaders.ProbabilityCollectionLoader;
|
|
||||||
import com.dfsek.terra.config.loaders.config.BufferedImageLoader;
|
|
||||||
import com.dfsek.terra.config.loaders.config.sampler.NoiseSamplerBuilderLoader;
|
|
||||||
import com.dfsek.terra.registry.config.NoiseRegistry;
|
|
||||||
import org.apache.commons.io.FileUtils;
|
|
||||||
|
|
||||||
import javax.swing.*;
|
|
||||||
import java.awt.*;
|
|
||||||
import java.awt.event.KeyEvent;
|
|
||||||
import java.awt.event.KeyListener;
|
|
||||||
import java.awt.image.BufferedImage;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.nio.file.Paths;
|
|
||||||
import java.util.concurrent.ThreadLocalRandom;
|
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
|
||||||
|
|
||||||
public class NoiseTool {
|
|
||||||
public static void main(String... args) throws ConfigException, IOException {
|
|
||||||
JFrame frame = new JFrame("Noise Viewer");
|
|
||||||
|
|
||||||
AtomicInteger seed = new AtomicInteger(2403);
|
|
||||||
JLabel label = new JLabel(new ImageIcon(load(seed.get(), false, false)));
|
|
||||||
frame.add(label);
|
|
||||||
frame.pack();
|
|
||||||
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
|
|
||||||
|
|
||||||
|
|
||||||
frame.addKeyListener(new KeyListener() {
|
|
||||||
@Override
|
|
||||||
public void keyTyped(KeyEvent e) {
|
|
||||||
if(e.getKeyChar() == 'r') {
|
|
||||||
try {
|
|
||||||
label.setIcon(new ImageIcon(load(seed.get(), false, false)));
|
|
||||||
} catch(ConfigException | IOException configException) {
|
|
||||||
configException.printStackTrace();
|
|
||||||
}
|
|
||||||
} else if(e.getKeyChar() == 's') {
|
|
||||||
try {
|
|
||||||
seed.set(ThreadLocalRandom.current().nextInt());
|
|
||||||
label.setIcon(new ImageIcon(load(seed.get(), false, false)));
|
|
||||||
} catch(ConfigException | IOException configException) {
|
|
||||||
configException.printStackTrace();
|
|
||||||
}
|
|
||||||
} else if(e.getKeyChar() == 'd') {
|
|
||||||
try {
|
|
||||||
label.setIcon(new ImageIcon(load(seed.get(), true, false)));
|
|
||||||
} catch(ConfigException | IOException configException) {
|
|
||||||
configException.printStackTrace();
|
|
||||||
}
|
|
||||||
} else if(e.getKeyChar() == 'c') {
|
|
||||||
try {
|
|
||||||
label.setIcon(new ImageIcon(load(seed.get(), false, true)));
|
|
||||||
} catch(ConfigException | IOException configException) {
|
|
||||||
configException.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void keyPressed(KeyEvent e) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void keyReleased(KeyEvent e) {
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
frame.setVisible(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static int normal(double in, double out, double min, double max) {
|
|
||||||
double range = max - min;
|
|
||||||
return (int) (((in - min) * out) / range);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static int buildRGBA(int in) {
|
|
||||||
return (255 << 24)
|
|
||||||
+ (in << 16)
|
|
||||||
+ (in << 8)
|
|
||||||
+ in;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static BufferedImage load(int seed, boolean distribution, boolean chunk) throws ConfigException, IOException {
|
|
||||||
long s = System.nanoTime();
|
|
||||||
|
|
||||||
FolderLoader folderLoader = new FolderLoader(Paths.get("./"));
|
|
||||||
|
|
||||||
ConfigLoader loader = new ConfigLoader();
|
|
||||||
loader.registerLoader(NoiseSeeded.class, new NoiseSamplerBuilderLoader(new NoiseRegistry()))
|
|
||||||
.registerLoader(BufferedImage.class, new BufferedImageLoader(folderLoader))
|
|
||||||
.registerLoader(ProbabilityCollection.class, new ProbabilityCollectionLoader());
|
|
||||||
|
|
||||||
new GenericLoaders(null).register(loader);
|
|
||||||
NoiseConfigTemplate template = new NoiseConfigTemplate();
|
|
||||||
|
|
||||||
File file = new File("./config.yml");
|
|
||||||
|
|
||||||
System.out.println(file.getAbsolutePath());
|
|
||||||
|
|
||||||
File colorFile = new File("./color.yml");
|
|
||||||
|
|
||||||
|
|
||||||
System.out.println(file.getAbsolutePath());
|
|
||||||
if(!file.exists()) {
|
|
||||||
file.getParentFile().mkdirs();
|
|
||||||
FileUtils.copyInputStreamToFile(NoiseTool.class.getResourceAsStream("/config.yml"), file);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
boolean colors = false;
|
|
||||||
ColorConfigTemplate color = new ColorConfigTemplate();
|
|
||||||
if(colorFile.exists()) {
|
|
||||||
loader.load(color, new FileInputStream(colorFile));
|
|
||||||
colors = color.enable();
|
|
||||||
}
|
|
||||||
ProbabilityCollectionImpl<Integer> colorCollection = color.getColors();
|
|
||||||
|
|
||||||
loader.load(template, new FileInputStream(file));
|
|
||||||
System.out.println(template.getBuilder().getDimensions());
|
|
||||||
NoiseSampler noise = template.getBuilder().apply((long) seed);
|
|
||||||
|
|
||||||
|
|
||||||
int size = 1024;
|
|
||||||
|
|
||||||
BufferedImage image = new BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB);
|
|
||||||
|
|
||||||
double[][] noiseVals = new double[size][size];
|
|
||||||
int[][] rgbVals = new int[size][size];
|
|
||||||
double max = Double.MIN_VALUE;
|
|
||||||
double min = Double.MAX_VALUE;
|
|
||||||
|
|
||||||
int[] buckets = new int[1024];
|
|
||||||
|
|
||||||
for(int x = 0; x < noiseVals.length; x++) {
|
|
||||||
for(int z = 0; z < noiseVals[x].length; z++) {
|
|
||||||
double n = noise.getNoise(x, z);
|
|
||||||
noiseVals[x][z] = n;
|
|
||||||
max = Math.max(n, max);
|
|
||||||
min = Math.min(n, min);
|
|
||||||
if(colors) rgbVals[x][z] = colorCollection.get(noise, x, z);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for(int x = 0; x < noiseVals.length; x++) {
|
|
||||||
for(int z = 0; z < noiseVals[x].length; z++) {
|
|
||||||
if(colors) image.setRGB(x, z, rgbVals[x][z] + (255 << 24));
|
|
||||||
else image.setRGB(x, z, buildRGBA(normal(noiseVals[x][z], 255, min, max)));
|
|
||||||
buckets[normal(noiseVals[x][z], size - 1, min, max)]++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
long time = System.nanoTime() - s;
|
|
||||||
|
|
||||||
double ms = time / 1000000d;
|
|
||||||
|
|
||||||
|
|
||||||
if(chunk) {
|
|
||||||
for(int x = 0; x < image.getWidth(); x += 16) {
|
|
||||||
for(int y = 0; y < image.getHeight(); y++) image.setRGB(x, y, buildRGBA(0));
|
|
||||||
}
|
|
||||||
for(int y = 0; y < image.getWidth(); y += 16) {
|
|
||||||
for(int x = 0; x < image.getHeight(); x++) image.setRGB(x, y, buildRGBA(0));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Graphics graphics = image.getGraphics();
|
|
||||||
graphics.setColor(Color.WHITE);
|
|
||||||
graphics.fillRect(0, 0, 325, 90);
|
|
||||||
graphics.setColor(Color.BLACK);
|
|
||||||
graphics.setFont(new Font("Monospace", Font.BOLD, 20));
|
|
||||||
graphics.drawString("min: " + min, 0, 20);
|
|
||||||
graphics.drawString("max: " + max, 0, 40);
|
|
||||||
graphics.drawString("seed: " + seed, 0, 60);
|
|
||||||
graphics.drawString("time: " + ms + "ms", 0, 80);
|
|
||||||
|
|
||||||
if(distribution) {
|
|
||||||
graphics.setColor(Color.WHITE);
|
|
||||||
graphics.fillRect(0, size - (size / 4) - 1, size, (size / 4) - 1);
|
|
||||||
int highestBucket = Integer.MIN_VALUE;
|
|
||||||
for(int i : buckets) highestBucket = Math.max(highestBucket, i);
|
|
||||||
graphics.setColor(Color.BLACK);
|
|
||||||
graphics.drawString("" + highestBucket, 0, size - (size / 4) - 1 + 20);
|
|
||||||
|
|
||||||
for(int x = 0; x < size; x++) {
|
|
||||||
for(int y = 0; y < ((double) buckets[x] / highestBucket) * ((double) size / 4); y++) {
|
|
||||||
image.setRGB(x, size - y - 1, buildRGBA(0));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return image;
|
|
||||||
}
|
|
||||||
}
|
|
@ -14,7 +14,6 @@ import com.dfsek.terra.api.addon.annotations.Author;
|
|||||||
import com.dfsek.terra.api.addon.annotations.Version;
|
import com.dfsek.terra.api.addon.annotations.Version;
|
||||||
import com.dfsek.terra.api.block.state.BlockState;
|
import com.dfsek.terra.api.block.state.BlockState;
|
||||||
import com.dfsek.terra.api.command.CommandManager;
|
import com.dfsek.terra.api.command.CommandManager;
|
||||||
import com.dfsek.terra.commands.TerraCommandManager;
|
|
||||||
import com.dfsek.terra.api.command.exception.MalformedCommandException;
|
import com.dfsek.terra.api.command.exception.MalformedCommandException;
|
||||||
import com.dfsek.terra.api.config.ConfigPack;
|
import com.dfsek.terra.api.config.ConfigPack;
|
||||||
import com.dfsek.terra.api.config.PluginConfig;
|
import com.dfsek.terra.api.config.PluginConfig;
|
||||||
@ -33,13 +32,14 @@ import com.dfsek.terra.api.registry.CheckedRegistry;
|
|||||||
import com.dfsek.terra.api.registry.exception.DuplicateEntryException;
|
import com.dfsek.terra.api.registry.exception.DuplicateEntryException;
|
||||||
import com.dfsek.terra.api.util.generic.pair.Pair;
|
import com.dfsek.terra.api.util.generic.pair.Pair;
|
||||||
import com.dfsek.terra.api.util.logging.DebugLogger;
|
import com.dfsek.terra.api.util.logging.DebugLogger;
|
||||||
|
import com.dfsek.terra.api.util.seeded.BiomeBuilder;
|
||||||
import com.dfsek.terra.api.world.TerraWorld;
|
import com.dfsek.terra.api.world.TerraWorld;
|
||||||
import com.dfsek.terra.api.world.Tree;
|
import com.dfsek.terra.api.world.Tree;
|
||||||
import com.dfsek.terra.api.world.World;
|
import com.dfsek.terra.api.world.World;
|
||||||
import com.dfsek.terra.commands.CommandUtil;
|
import com.dfsek.terra.commands.CommandUtil;
|
||||||
|
import com.dfsek.terra.commands.TerraCommandManager;
|
||||||
import com.dfsek.terra.config.GenericLoaders;
|
import com.dfsek.terra.config.GenericLoaders;
|
||||||
import com.dfsek.terra.config.PluginConfigImpl;
|
import com.dfsek.terra.config.PluginConfigImpl;
|
||||||
import com.dfsek.terra.api.util.seeded.BiomeBuilder;
|
|
||||||
import com.dfsek.terra.config.lang.LangUtil;
|
import com.dfsek.terra.config.lang.LangUtil;
|
||||||
import com.dfsek.terra.fabric.config.PostLoadCompatibilityOptions;
|
import com.dfsek.terra.fabric.config.PostLoadCompatibilityOptions;
|
||||||
import com.dfsek.terra.fabric.config.PreLoadCompatibilityOptions;
|
import com.dfsek.terra.fabric.config.PreLoadCompatibilityOptions;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user