mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-10-26 22:10:22 +00:00
completely dynamic registries
This commit is contained in:
1 parent
91144dc8f8
commit
e671ef783f
14 files changed
+73
-635
No files matched your search
@@ -3,10 +3,13 @@ package com.dfsek.terra.api.structures.script;
|
|||||||
import com.dfsek.terra.api.TerraPlugin;
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
import com.dfsek.terra.api.math.vector.Location;
|
import com.dfsek.terra.api.math.vector.Location;
|
||||||
import com.dfsek.terra.api.platform.world.Chunk;
|
import com.dfsek.terra.api.platform.world.Chunk;
|
||||||
|
import com.dfsek.terra.api.registry.Registry;
|
||||||
|
import com.dfsek.terra.api.structures.loot.LootTable;
|
||||||
import com.dfsek.terra.api.structures.parser.Parser;
|
import com.dfsek.terra.api.structures.parser.Parser;
|
||||||
import com.dfsek.terra.api.structures.parser.exceptions.ParseException;
|
import com.dfsek.terra.api.structures.parser.exceptions.ParseException;
|
||||||
import com.dfsek.terra.api.structures.parser.lang.Block;
|
import com.dfsek.terra.api.structures.parser.lang.Block;
|
||||||
import com.dfsek.terra.api.structures.parser.lang.Returnable;
|
import com.dfsek.terra.api.structures.parser.lang.Returnable;
|
||||||
|
import com.dfsek.terra.api.structures.parser.lang.functions.FunctionBuilder;
|
||||||
import com.dfsek.terra.api.structures.script.builders.BinaryNumberFunctionBuilder;
|
import com.dfsek.terra.api.structures.script.builders.BinaryNumberFunctionBuilder;
|
||||||
import com.dfsek.terra.api.structures.script.builders.BiomeFunctionBuilder;
|
import com.dfsek.terra.api.structures.script.builders.BiomeFunctionBuilder;
|
||||||
import com.dfsek.terra.api.structures.script.builders.BlockFunctionBuilder;
|
import com.dfsek.terra.api.structures.script.builders.BlockFunctionBuilder;
|
||||||
@@ -29,9 +32,6 @@ import com.dfsek.terra.api.structures.structure.Rotation;
|
|||||||
import com.dfsek.terra.api.structures.structure.buffer.Buffer;
|
import com.dfsek.terra.api.structures.structure.buffer.Buffer;
|
||||||
import com.dfsek.terra.api.structures.structure.buffer.DirectBuffer;
|
import com.dfsek.terra.api.structures.structure.buffer.DirectBuffer;
|
||||||
import com.dfsek.terra.api.structures.structure.buffer.StructureBuffer;
|
import com.dfsek.terra.api.structures.structure.buffer.StructureBuffer;
|
||||||
import com.dfsek.terra.registry.config.FunctionRegistry;
|
|
||||||
import com.dfsek.terra.registry.config.LootRegistry;
|
|
||||||
import com.dfsek.terra.registry.config.ScriptRegistry;
|
|
||||||
import com.google.common.cache.Cache;
|
import com.google.common.cache.Cache;
|
||||||
import com.google.common.cache.CacheBuilder;
|
import com.google.common.cache.CacheBuilder;
|
||||||
import net.jafama.FastMath;
|
import net.jafama.FastMath;
|
||||||
@@ -49,7 +49,7 @@ public class StructureScript {
|
|||||||
private final TerraPlugin main;
|
private final TerraPlugin main;
|
||||||
private String tempID;
|
private String tempID;
|
||||||
|
|
||||||
public StructureScript(InputStream inputStream, TerraPlugin main, ScriptRegistry registry, LootRegistry lootRegistry, FunctionRegistry functionRegistry) throws ParseException {
|
public StructureScript(InputStream inputStream, TerraPlugin main, Registry<StructureScript> registry, Registry<LootTable> lootRegistry, Registry<FunctionBuilder<?>> functionRegistry) throws ParseException {
|
||||||
Parser parser;
|
Parser parser;
|
||||||
try {
|
try {
|
||||||
parser = new Parser(IOUtils.toString(inputStream));
|
parser = new Parser(IOUtils.toString(inputStream));
|
||||||
|
|||||||
+4
-3
@@ -1,21 +1,22 @@
|
|||||||
package com.dfsek.terra.api.structures.script.builders;
|
package com.dfsek.terra.api.structures.script.builders;
|
||||||
|
|
||||||
import com.dfsek.terra.api.TerraPlugin;
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
|
import com.dfsek.terra.api.registry.Registry;
|
||||||
|
import com.dfsek.terra.api.structures.loot.LootTable;
|
||||||
import com.dfsek.terra.api.structures.parser.lang.Returnable;
|
import com.dfsek.terra.api.structures.parser.lang.Returnable;
|
||||||
import com.dfsek.terra.api.structures.parser.lang.functions.FunctionBuilder;
|
import com.dfsek.terra.api.structures.parser.lang.functions.FunctionBuilder;
|
||||||
import com.dfsek.terra.api.structures.script.StructureScript;
|
import com.dfsek.terra.api.structures.script.StructureScript;
|
||||||
import com.dfsek.terra.api.structures.script.functions.LootFunction;
|
import com.dfsek.terra.api.structures.script.functions.LootFunction;
|
||||||
import com.dfsek.terra.api.structures.tokenizer.Position;
|
import com.dfsek.terra.api.structures.tokenizer.Position;
|
||||||
import com.dfsek.terra.registry.config.LootRegistry;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class LootFunctionBuilder implements FunctionBuilder<LootFunction> {
|
public class LootFunctionBuilder implements FunctionBuilder<LootFunction> {
|
||||||
private final TerraPlugin main;
|
private final TerraPlugin main;
|
||||||
private final LootRegistry registry;
|
private final Registry<LootTable> registry;
|
||||||
private final StructureScript script;
|
private final StructureScript script;
|
||||||
|
|
||||||
public LootFunctionBuilder(TerraPlugin main, LootRegistry registry, StructureScript script) {
|
public LootFunctionBuilder(TerraPlugin main, Registry<LootTable> registry, StructureScript script) {
|
||||||
this.main = main;
|
this.main = main;
|
||||||
this.registry = registry;
|
this.registry = registry;
|
||||||
this.script = script;
|
this.script = script;
|
||||||
|
|||||||
+4
-3
@@ -1,21 +1,22 @@
|
|||||||
package com.dfsek.terra.api.structures.script.builders;
|
package com.dfsek.terra.api.structures.script.builders;
|
||||||
|
|
||||||
import com.dfsek.terra.api.TerraPlugin;
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
|
import com.dfsek.terra.api.registry.Registry;
|
||||||
import com.dfsek.terra.api.structures.parser.exceptions.ParseException;
|
import com.dfsek.terra.api.structures.parser.exceptions.ParseException;
|
||||||
import com.dfsek.terra.api.structures.parser.lang.Returnable;
|
import com.dfsek.terra.api.structures.parser.lang.Returnable;
|
||||||
import com.dfsek.terra.api.structures.parser.lang.functions.FunctionBuilder;
|
import com.dfsek.terra.api.structures.parser.lang.functions.FunctionBuilder;
|
||||||
|
import com.dfsek.terra.api.structures.script.StructureScript;
|
||||||
import com.dfsek.terra.api.structures.script.functions.StructureFunction;
|
import com.dfsek.terra.api.structures.script.functions.StructureFunction;
|
||||||
import com.dfsek.terra.api.structures.tokenizer.Position;
|
import com.dfsek.terra.api.structures.tokenizer.Position;
|
||||||
import com.dfsek.terra.registry.config.ScriptRegistry;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class StructureFunctionBuilder implements FunctionBuilder<StructureFunction> {
|
public class StructureFunctionBuilder implements FunctionBuilder<StructureFunction> {
|
||||||
private final ScriptRegistry registry;
|
private final Registry<StructureScript> registry;
|
||||||
private final TerraPlugin main;
|
private final TerraPlugin main;
|
||||||
|
|
||||||
public StructureFunctionBuilder(ScriptRegistry registry, TerraPlugin main) {
|
public StructureFunctionBuilder(Registry<StructureScript> registry, TerraPlugin main) {
|
||||||
this.registry = registry;
|
this.registry = registry;
|
||||||
this.main = main;
|
this.main = main;
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -3,6 +3,7 @@ package com.dfsek.terra.api.structures.script.functions;
|
|||||||
import com.dfsek.terra.api.TerraPlugin;
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
import com.dfsek.terra.api.math.vector.Vector2;
|
import com.dfsek.terra.api.math.vector.Vector2;
|
||||||
import com.dfsek.terra.api.math.vector.Vector3;
|
import com.dfsek.terra.api.math.vector.Vector3;
|
||||||
|
import com.dfsek.terra.api.registry.Registry;
|
||||||
import com.dfsek.terra.api.structures.loot.LootTable;
|
import com.dfsek.terra.api.structures.loot.LootTable;
|
||||||
import com.dfsek.terra.api.structures.parser.lang.ImplementationArguments;
|
import com.dfsek.terra.api.structures.parser.lang.ImplementationArguments;
|
||||||
import com.dfsek.terra.api.structures.parser.lang.Returnable;
|
import com.dfsek.terra.api.structures.parser.lang.Returnable;
|
||||||
@@ -13,20 +14,19 @@ import com.dfsek.terra.api.structures.script.TerraImplementationArguments;
|
|||||||
import com.dfsek.terra.api.structures.structure.RotationUtil;
|
import com.dfsek.terra.api.structures.structure.RotationUtil;
|
||||||
import com.dfsek.terra.api.structures.structure.buffer.items.BufferedLootApplication;
|
import com.dfsek.terra.api.structures.structure.buffer.items.BufferedLootApplication;
|
||||||
import com.dfsek.terra.api.structures.tokenizer.Position;
|
import com.dfsek.terra.api.structures.tokenizer.Position;
|
||||||
import com.dfsek.terra.registry.config.LootRegistry;
|
|
||||||
import net.jafama.FastMath;
|
import net.jafama.FastMath;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class LootFunction implements Function<Void> {
|
public class LootFunction implements Function<Void> {
|
||||||
private final LootRegistry registry;
|
private final Registry<LootTable> registry;
|
||||||
private final Returnable<String> data;
|
private final Returnable<String> data;
|
||||||
private final Returnable<Number> x, y, z;
|
private final Returnable<Number> x, y, z;
|
||||||
private final Position position;
|
private final Position position;
|
||||||
private final TerraPlugin main;
|
private final TerraPlugin main;
|
||||||
private final StructureScript script;
|
private final StructureScript script;
|
||||||
|
|
||||||
public LootFunction(LootRegistry registry, Returnable<Number> x, Returnable<Number> y, Returnable<Number> z, Returnable<String> data, TerraPlugin main, Position position, StructureScript script) {
|
public LootFunction(Registry<LootTable> registry, Returnable<Number> x, Returnable<Number> y, Returnable<Number> z, Returnable<String> data, TerraPlugin main, Position position, StructureScript script) {
|
||||||
this.registry = registry;
|
this.registry = registry;
|
||||||
this.position = position;
|
this.position = position;
|
||||||
this.data = data;
|
this.data = data;
|
||||||
|
|||||||
+3
-3
@@ -3,6 +3,7 @@ package com.dfsek.terra.api.structures.script.functions;
|
|||||||
import com.dfsek.terra.api.TerraPlugin;
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
import com.dfsek.terra.api.math.vector.Vector2;
|
import com.dfsek.terra.api.math.vector.Vector2;
|
||||||
import com.dfsek.terra.api.math.vector.Vector3;
|
import com.dfsek.terra.api.math.vector.Vector3;
|
||||||
|
import com.dfsek.terra.api.registry.Registry;
|
||||||
import com.dfsek.terra.api.structures.parser.lang.ImplementationArguments;
|
import com.dfsek.terra.api.structures.parser.lang.ImplementationArguments;
|
||||||
import com.dfsek.terra.api.structures.parser.lang.Returnable;
|
import com.dfsek.terra.api.structures.parser.lang.Returnable;
|
||||||
import com.dfsek.terra.api.structures.parser.lang.functions.Function;
|
import com.dfsek.terra.api.structures.parser.lang.functions.Function;
|
||||||
@@ -13,21 +14,20 @@ import com.dfsek.terra.api.structures.structure.Rotation;
|
|||||||
import com.dfsek.terra.api.structures.structure.RotationUtil;
|
import com.dfsek.terra.api.structures.structure.RotationUtil;
|
||||||
import com.dfsek.terra.api.structures.structure.buffer.IntermediateBuffer;
|
import com.dfsek.terra.api.structures.structure.buffer.IntermediateBuffer;
|
||||||
import com.dfsek.terra.api.structures.tokenizer.Position;
|
import com.dfsek.terra.api.structures.tokenizer.Position;
|
||||||
import com.dfsek.terra.registry.config.ScriptRegistry;
|
|
||||||
import net.jafama.FastMath;
|
import net.jafama.FastMath;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class StructureFunction implements Function<Boolean> {
|
public class StructureFunction implements Function<Boolean> {
|
||||||
private final ScriptRegistry registry;
|
private final Registry<StructureScript> registry;
|
||||||
private final Returnable<String> id;
|
private final Returnable<String> id;
|
||||||
private final Returnable<Number> x, y, z;
|
private final Returnable<Number> x, y, z;
|
||||||
private final Position position;
|
private final Position position;
|
||||||
private final TerraPlugin main;
|
private final TerraPlugin main;
|
||||||
private final List<Returnable<String>> rotations;
|
private final List<Returnable<String>> rotations;
|
||||||
|
|
||||||
public StructureFunction(Returnable<Number> x, Returnable<Number> y, Returnable<Number> z, Returnable<String> id, List<Returnable<String>> rotations, ScriptRegistry registry, Position position, TerraPlugin main) {
|
public StructureFunction(Returnable<Number> x, Returnable<Number> y, Returnable<Number> z, Returnable<String> id, List<Returnable<String>> rotations, Registry<StructureScript> registry, Position position, TerraPlugin main) {
|
||||||
this.registry = registry;
|
this.registry = registry;
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.position = position;
|
this.position = position;
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package com.dfsek.terra.api.util.seeded;
|
||||||
|
|
||||||
|
import com.dfsek.tectonic.loading.object.ObjectTemplate;
|
||||||
|
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
@FunctionalInterface
|
||||||
|
public interface NoiseProvider extends Supplier<ObjectTemplate<NoiseSeeded>> {
|
||||||
|
}
|
||||||
+1
-1
@@ -13,6 +13,6 @@ public class ScriptArgumentParser implements ArgumentParser<StructureScript> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StructureScript parse(CommandSender sender, String arg) {
|
public StructureScript parse(CommandSender sender, String arg) {
|
||||||
return main.getWorld(((Player) sender).getWorld()).getConfig().getScriptRegistry().get(arg);
|
return main.getWorld(((Player) sender).getWorld()).getConfig().getRegistry(StructureScript.class).get(arg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+1
-1
@@ -16,6 +16,6 @@ public class ScriptCompleter implements TabCompleter {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> complete(CommandSender sender) {
|
public List<String> complete(CommandSender sender) {
|
||||||
return main.getWorld(((Player) sender).getWorld()).getConfig().getScriptRegistry().entries().stream().map(StructureScript::getId).collect(Collectors.toList());
|
return main.getWorld(((Player) sender).getWorld()).getConfig().getRegistry(StructureScript.class).entries().stream().map(StructureScript::getId).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+4
-3
@@ -6,8 +6,9 @@ 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.tectonic.loading.object.ObjectTemplate;
|
import com.dfsek.tectonic.loading.object.ObjectTemplate;
|
||||||
|
import com.dfsek.terra.api.registry.Registry;
|
||||||
|
import com.dfsek.terra.api.util.seeded.NoiseProvider;
|
||||||
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
|
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
|
||||||
import com.dfsek.terra.registry.config.NoiseRegistry;
|
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
@@ -15,9 +16,9 @@ import java.util.Map;
|
|||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public class NoiseSamplerBuilderLoader implements TypeLoader<NoiseSeeded> {
|
public class NoiseSamplerBuilderLoader implements TypeLoader<NoiseSeeded> {
|
||||||
private final NoiseRegistry noiseRegistry;
|
private final Registry<NoiseProvider> noiseRegistry;
|
||||||
|
|
||||||
public NoiseSamplerBuilderLoader(NoiseRegistry noiseRegistry) {
|
public NoiseSamplerBuilderLoader(Registry<NoiseProvider> noiseRegistry) {
|
||||||
this.noiseRegistry = noiseRegistry;
|
this.noiseRegistry = noiseRegistry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,14 +13,16 @@ import com.dfsek.terra.api.TerraPlugin;
|
|||||||
import com.dfsek.terra.api.event.events.config.ConfigPackPostLoadEvent;
|
import com.dfsek.terra.api.event.events.config.ConfigPackPostLoadEvent;
|
||||||
import com.dfsek.terra.api.event.events.config.ConfigPackPreLoadEvent;
|
import com.dfsek.terra.api.event.events.config.ConfigPackPreLoadEvent;
|
||||||
import com.dfsek.terra.api.registry.CheckedRegistry;
|
import com.dfsek.terra.api.registry.CheckedRegistry;
|
||||||
|
import com.dfsek.terra.api.registry.Registry;
|
||||||
import com.dfsek.terra.api.structures.loot.LootTable;
|
import com.dfsek.terra.api.structures.loot.LootTable;
|
||||||
|
import com.dfsek.terra.api.structures.parser.lang.functions.FunctionBuilder;
|
||||||
import com.dfsek.terra.api.structures.script.StructureScript;
|
import com.dfsek.terra.api.structures.script.StructureScript;
|
||||||
import com.dfsek.terra.api.util.generic.pair.ImmutablePair;
|
import com.dfsek.terra.api.util.generic.pair.ImmutablePair;
|
||||||
|
import com.dfsek.terra.api.util.seeded.NoiseProvider;
|
||||||
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
|
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
|
||||||
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
|
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
|
||||||
import com.dfsek.terra.config.builder.BiomeBuilder;
|
import com.dfsek.terra.config.builder.BiomeBuilder;
|
||||||
import com.dfsek.terra.config.dummy.DummyWorld;
|
import com.dfsek.terra.config.dummy.DummyWorld;
|
||||||
import com.dfsek.terra.config.factories.ConfigFactory;
|
|
||||||
import com.dfsek.terra.config.fileloaders.FolderLoader;
|
import com.dfsek.terra.config.fileloaders.FolderLoader;
|
||||||
import com.dfsek.terra.config.fileloaders.Loader;
|
import com.dfsek.terra.config.fileloaders.Loader;
|
||||||
import com.dfsek.terra.config.fileloaders.ZIPLoader;
|
import com.dfsek.terra.config.fileloaders.ZIPLoader;
|
||||||
@@ -32,7 +34,6 @@ import com.dfsek.terra.config.loaders.config.sampler.NoiseSamplerBuilderLoader;
|
|||||||
import com.dfsek.terra.config.loaders.config.sampler.templates.ImageSamplerTemplate;
|
import com.dfsek.terra.config.loaders.config.sampler.templates.ImageSamplerTemplate;
|
||||||
import com.dfsek.terra.config.prototype.ConfigType;
|
import com.dfsek.terra.config.prototype.ConfigType;
|
||||||
import com.dfsek.terra.config.prototype.ProtoConfig;
|
import com.dfsek.terra.config.prototype.ProtoConfig;
|
||||||
import com.dfsek.terra.config.templates.AbstractableTemplate;
|
|
||||||
import com.dfsek.terra.registry.OpenRegistry;
|
import com.dfsek.terra.registry.OpenRegistry;
|
||||||
import com.dfsek.terra.registry.config.ConfigTypeRegistry;
|
import com.dfsek.terra.registry.config.ConfigTypeRegistry;
|
||||||
import com.dfsek.terra.registry.config.FunctionRegistry;
|
import com.dfsek.terra.registry.config.FunctionRegistry;
|
||||||
@@ -68,33 +69,21 @@ import java.util.zip.ZipFile;
|
|||||||
public class ConfigPack implements LoaderRegistrar {
|
public class ConfigPack implements LoaderRegistrar {
|
||||||
private final ConfigPackTemplate template = new ConfigPackTemplate();
|
private final ConfigPackTemplate template = new ConfigPackTemplate();
|
||||||
|
|
||||||
private final Map<Class<?>, ImmutablePair<OpenRegistry<?>, CheckedRegistry<?>>> registryMap = new HashMap<>();
|
|
||||||
|
|
||||||
|
|
||||||
private final ScriptRegistry scriptRegistry = new ScriptRegistry();
|
|
||||||
private final LootRegistry lootRegistry = new LootRegistry();
|
|
||||||
|
|
||||||
private final NoiseRegistry noiseRegistry = new NoiseRegistry();
|
|
||||||
private final FunctionRegistry functionRegistry = new FunctionRegistry();
|
|
||||||
|
|
||||||
private final AbstractConfigLoader abstractConfigLoader = new AbstractConfigLoader();
|
private final AbstractConfigLoader abstractConfigLoader = new AbstractConfigLoader();
|
||||||
private final ConfigLoader selfLoader = new ConfigLoader();
|
private final ConfigLoader selfLoader = new ConfigLoader();
|
||||||
private final Scope varScope = new Scope();
|
private final Scope varScope = new Scope();
|
||||||
|
|
||||||
private final TerraPlugin main;
|
private final TerraPlugin main;
|
||||||
private final Loader loader;
|
private final Loader loader;
|
||||||
|
|
||||||
private final BiomeProvider.BiomeProviderBuilder biomeProviderBuilder;
|
private final BiomeProvider.BiomeProviderBuilder biomeProviderBuilder;
|
||||||
|
|
||||||
private final ConfigTypeRegistry configTypeRegistry;
|
|
||||||
|
|
||||||
|
private final ConfigTypeRegistry configTypeRegistry;
|
||||||
|
private final Map<Class<?>, ImmutablePair<OpenRegistry<?>, CheckedRegistry<?>>> registryMap = newRegistryMap();
|
||||||
|
|
||||||
public ConfigPack(File folder, TerraPlugin main) throws ConfigException {
|
public ConfigPack(File folder, TerraPlugin main) throws ConfigException {
|
||||||
try {
|
try {
|
||||||
this.configTypeRegistry = new ConfigTypeRegistry(this, main, (id, configType) -> {
|
this.configTypeRegistry = new ConfigTypeRegistry(this, main, (id, configType) -> {
|
||||||
OpenRegistry<?> openRegistry = configType.registrySupplier().get();
|
OpenRegistry<?> openRegistry = configType.registrySupplier().get();
|
||||||
selfLoader.registerLoader(configType.getTypeClass(), openRegistry);
|
|
||||||
abstractConfigLoader.registerLoader(configType.getTypeClass(), openRegistry);
|
|
||||||
registryMap.put(configType.getTypeClass(), ImmutablePair.of(openRegistry, new CheckedRegistry<>(openRegistry)));
|
registryMap.put(configType.getTypeClass(), ImmutablePair.of(openRegistry, new CheckedRegistry<>(openRegistry)));
|
||||||
});
|
});
|
||||||
this.loader = new FolderLoader(folder.toPath());
|
this.loader = new FolderLoader(folder.toPath());
|
||||||
@@ -134,8 +123,6 @@ public class ConfigPack implements LoaderRegistrar {
|
|||||||
try {
|
try {
|
||||||
this.configTypeRegistry = new ConfigTypeRegistry(this, main, (id, configType) -> {
|
this.configTypeRegistry = new ConfigTypeRegistry(this, main, (id, configType) -> {
|
||||||
OpenRegistry<?> openRegistry = configType.registrySupplier().get();
|
OpenRegistry<?> openRegistry = configType.registrySupplier().get();
|
||||||
selfLoader.registerLoader(configType.getTypeClass(), openRegistry);
|
|
||||||
abstractConfigLoader.registerLoader(configType.getTypeClass(), openRegistry);
|
|
||||||
registryMap.put(configType.getTypeClass(), ImmutablePair.of(openRegistry, new CheckedRegistry<>(openRegistry)));
|
registryMap.put(configType.getTypeClass(), ImmutablePair.of(openRegistry, new CheckedRegistry<>(openRegistry)));
|
||||||
});
|
});
|
||||||
this.loader = new ZIPLoader(file);
|
this.loader = new ZIPLoader(file);
|
||||||
@@ -177,15 +164,35 @@ public class ConfigPack implements LoaderRegistrar {
|
|||||||
toWorldConfig(new TerraWorld(new DummyWorld(), this, main)); // Build now to catch any errors immediately.
|
toWorldConfig(new TerraWorld(new DummyWorld(), this, main)); // Build now to catch any errors immediately.
|
||||||
}
|
}
|
||||||
|
|
||||||
public static <C extends AbstractableTemplate, O> void buildAll(ConfigFactory<C, O> factory, OpenRegistry<O> registry, List<C> configTemplates, TerraPlugin main) throws LoadException {
|
@SuppressWarnings({"unchecked", "rawtypes"})
|
||||||
for(C template : configTemplates) registry.add(template.getID(), factory.build(template, main));
|
private Map<Class<?>, ImmutablePair<OpenRegistry<?>, CheckedRegistry<?>>> newRegistryMap() {
|
||||||
|
Map<Class<?>, ImmutablePair<OpenRegistry<?>, CheckedRegistry<?>>> map = new HashMap<Class<?>, ImmutablePair<OpenRegistry<?>, CheckedRegistry<?>>>() {
|
||||||
|
private static final long serialVersionUID = 4015855819914064466L;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ImmutablePair<OpenRegistry<?>, CheckedRegistry<?>> put(Class<?> key, ImmutablePair<OpenRegistry<?>, CheckedRegistry<?>> value) {
|
||||||
|
selfLoader.registerLoader(key, value.getLeft());
|
||||||
|
abstractConfigLoader.registerLoader(key, value.getLeft());
|
||||||
|
return super.put(key, value);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
putPair(map, NoiseProvider.class, new NoiseRegistry());
|
||||||
|
putPair(map, FunctionBuilder.class, (OpenRegistry<FunctionBuilder>) (Object) new FunctionRegistry());
|
||||||
|
putPair(map, LootTable.class, new LootRegistry());
|
||||||
|
putPair(map, StructureScript.class, new ScriptRegistry());
|
||||||
|
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
private <R> void putPair(Map<Class<?>, ImmutablePair<OpenRegistry<?>, CheckedRegistry<?>>> map, Class<R> key, OpenRegistry<R> l) {
|
||||||
|
map.put(key, ImmutablePair.of(l, new CheckedRegistry<>(l)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkDeadEntries(TerraPlugin main) {
|
private void checkDeadEntries(TerraPlugin main) {
|
||||||
registryMap.forEach((clazz, pair) -> pair.getLeft().getDeadEntries().forEach((id, value) -> main.getDebugLogger().warn("Dead entry in '" + clazz + "' registry: '" + id + "'")));
|
registryMap.forEach((clazz, pair) -> pair.getLeft().getDeadEntries().forEach((id, value) -> main.getDebugLogger().warn("Dead entry in '" + clazz + "' registry: '" + id + "'")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@SuppressWarnings({"unchecked", "rawtypes"})
|
@SuppressWarnings({"unchecked", "rawtypes"})
|
||||||
private void load(long start, TerraPlugin main) throws ConfigException {
|
private void load(long start, TerraPlugin main) throws ConfigException {
|
||||||
main.getEventManager().callEvent(new ConfigPackPreLoadEvent(this));
|
main.getEventManager().callEvent(new ConfigPackPreLoadEvent(this));
|
||||||
@@ -197,8 +204,8 @@ public class ConfigPack implements LoaderRegistrar {
|
|||||||
loader.open("structures/data", ".tesf").thenEntries(entries -> {
|
loader.open("structures/data", ".tesf").thenEntries(entries -> {
|
||||||
for(Map.Entry<String, InputStream> entry : entries) {
|
for(Map.Entry<String, InputStream> entry : entries) {
|
||||||
try(InputStream stream = entry.getValue()) {
|
try(InputStream stream = entry.getValue()) {
|
||||||
StructureScript structureScript = new StructureScript(stream, main, scriptRegistry, lootRegistry, functionRegistry);
|
StructureScript structureScript = new StructureScript(stream, main, getRegistry(StructureScript.class), getRegistry(LootTable.class), (Registry<FunctionBuilder<?>>) (Object) getRegistry(FunctionBuilder.class));
|
||||||
scriptRegistry.add(structureScript.getId(), structureScript);
|
getOpenRegistry(StructureScript.class).add(structureScript.getId(), structureScript);
|
||||||
} catch(com.dfsek.terra.api.structures.parser.exceptions.ParseException | IOException e) {
|
} catch(com.dfsek.terra.api.structures.parser.exceptions.ParseException | IOException e) {
|
||||||
throw new LoadException("Unable to load script \"" + entry.getKey() + "\"", e);
|
throw new LoadException("Unable to load script \"" + entry.getKey() + "\"", e);
|
||||||
}
|
}
|
||||||
@@ -206,7 +213,7 @@ public class ConfigPack implements LoaderRegistrar {
|
|||||||
}).close().open("structures/loot", ".json").thenEntries(entries -> {
|
}).close().open("structures/loot", ".json").thenEntries(entries -> {
|
||||||
for(Map.Entry<String, InputStream> entry : entries) {
|
for(Map.Entry<String, InputStream> entry : entries) {
|
||||||
try {
|
try {
|
||||||
lootRegistry.add(entry.getKey(), new LootTable(IOUtils.toString(entry.getValue(), StandardCharsets.UTF_8), main));
|
getOpenRegistry(LootTable.class).add(entry.getKey(), new LootTable(IOUtils.toString(entry.getValue(), StandardCharsets.UTF_8), main));
|
||||||
} catch(ParseException | IOException | NullPointerException e) {
|
} catch(ParseException | IOException | NullPointerException e) {
|
||||||
throw new LoadException("Unable to load loot table \"" + entry.getKey() + "\"", e);
|
throw new LoadException("Unable to load loot table \"" + entry.getKey() + "\"", e);
|
||||||
}
|
}
|
||||||
@@ -253,29 +260,28 @@ public class ConfigPack implements LoaderRegistrar {
|
|||||||
return (CheckedRegistry<T>) registryMap.getOrDefault(clazz, ImmutablePair.ofNull()).getRight();
|
return (CheckedRegistry<T>) registryMap.getOrDefault(clazz, ImmutablePair.ofNull()).getRight();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
protected <T> OpenRegistry<T> getOpenRegistry(Class<T> clazz) {
|
||||||
|
return (OpenRegistry<T>) registryMap.getOrDefault(clazz, ImmutablePair.ofNull()).getLeft();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void register(TypeRegistry registry) {
|
public void register(TypeRegistry registry) {
|
||||||
registry
|
registry
|
||||||
.registerLoader(ConfigType.class, configTypeRegistry)
|
.registerLoader(ConfigType.class, configTypeRegistry)
|
||||||
.registerLoader(StructureScript.class, scriptRegistry)
|
|
||||||
.registerLoader(LootTable.class, lootRegistry)
|
|
||||||
.registerLoader(BufferedImage.class, new BufferedImageLoader(loader))
|
.registerLoader(BufferedImage.class, new BufferedImageLoader(loader))
|
||||||
.registerLoader(NoiseSeeded.class, new NoiseSamplerBuilderLoader(noiseRegistry))
|
|
||||||
.registerLoader(SingleBiomeProviderTemplate.class, SingleBiomeProviderTemplate::new)
|
.registerLoader(SingleBiomeProviderTemplate.class, SingleBiomeProviderTemplate::new)
|
||||||
.registerLoader(BiomePipelineTemplate.class, () -> new BiomePipelineTemplate(main))
|
.registerLoader(BiomePipelineTemplate.class, () -> new BiomePipelineTemplate(main))
|
||||||
.registerLoader(ImageProviderTemplate.class, () -> new ImageProviderTemplate(getRegistry(BiomeBuilder.class)))
|
.registerLoader(ImageProviderTemplate.class, () -> new ImageProviderTemplate(getRegistry(BiomeBuilder.class)))
|
||||||
.registerLoader(ImageSamplerTemplate.class, () -> new ImageProviderTemplate(getRegistry(BiomeBuilder.class)));
|
.registerLoader(ImageSamplerTemplate.class, () -> new ImageProviderTemplate(getRegistry(BiomeBuilder.class)))
|
||||||
|
.registerLoader(NoiseSeeded.class, new NoiseSamplerBuilderLoader(getOpenRegistry(NoiseProvider.class)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public BiomeProvider.BiomeProviderBuilder getBiomeProviderBuilder() {
|
public BiomeProvider.BiomeProviderBuilder getBiomeProviderBuilder() {
|
||||||
return biomeProviderBuilder;
|
return biomeProviderBuilder;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CheckedRegistry<StructureScript> getScriptRegistry() {
|
|
||||||
return new CheckedRegistry<>(scriptRegistry);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public WorldConfig toWorldConfig(TerraWorld world) {
|
public WorldConfig toWorldConfig(TerraWorld world) {
|
||||||
return new WorldConfig(world, this, main);
|
return new WorldConfig(world, this, main);
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package com.dfsek.terra.config.pack;
|
|||||||
|
|
||||||
import com.dfsek.terra.api.TerraPlugin;
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
import com.dfsek.terra.api.registry.LockedRegistry;
|
import com.dfsek.terra.api.registry.LockedRegistry;
|
||||||
import com.dfsek.terra.api.structures.script.StructureScript;
|
|
||||||
import com.dfsek.terra.api.world.biome.TerraBiome;
|
import com.dfsek.terra.api.world.biome.TerraBiome;
|
||||||
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
|
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
|
||||||
import com.dfsek.terra.carving.UserDefinedCarver;
|
import com.dfsek.terra.carving.UserDefinedCarver;
|
||||||
@@ -18,7 +17,6 @@ import java.util.Map;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class WorldConfig {
|
public class WorldConfig {
|
||||||
private final LockedRegistry<StructureScript> scriptRegistry;
|
|
||||||
private final SamplerCache samplerCache;
|
private final SamplerCache samplerCache;
|
||||||
|
|
||||||
private final BiomeProvider provider;
|
private final BiomeProvider provider;
|
||||||
@@ -35,7 +33,6 @@ public class WorldConfig {
|
|||||||
|
|
||||||
pack.getConfigTypeRegistry().forEach(configType -> registryMap.put(configType.getTypeClass(), new LockedRegistry<>(pack.getRegistry(configType.getTypeClass()))));
|
pack.getConfigTypeRegistry().forEach(configType -> registryMap.put(configType.getTypeClass(), new LockedRegistry<>(pack.getRegistry(configType.getTypeClass()))));
|
||||||
|
|
||||||
this.scriptRegistry = new LockedRegistry<>(pack.getScriptRegistry());
|
|
||||||
|
|
||||||
OpenRegistry<TerraBiome> biomeOpenRegistry = new OpenRegistry<>();
|
OpenRegistry<TerraBiome> biomeOpenRegistry = new OpenRegistry<>();
|
||||||
pack.getRegistry(BiomeBuilder.class).forEach((id, biome) -> biomeOpenRegistry.add(id, biome.apply(world.getWorld().getSeed())));
|
pack.getRegistry(BiomeBuilder.class).forEach((id, biome) -> biomeOpenRegistry.add(id, biome.apply(world.getWorld().getSeed())));
|
||||||
@@ -61,10 +58,6 @@ public class WorldConfig {
|
|||||||
return new HashSet<>(getRegistry(UserDefinedCarver.class).entries());
|
return new HashSet<>(getRegistry(UserDefinedCarver.class).entries());
|
||||||
}
|
}
|
||||||
|
|
||||||
public LockedRegistry<StructureScript> getScriptRegistry() {
|
|
||||||
return scriptRegistry;
|
|
||||||
}
|
|
||||||
|
|
||||||
public BiomeProvider getProvider() {
|
public BiomeProvider getProvider() {
|
||||||
return provider;
|
return provider;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package com.dfsek.terra.registry.config;
|
package com.dfsek.terra.registry.config;
|
||||||
|
|
||||||
import com.dfsek.tectonic.loading.object.ObjectTemplate;
|
|
||||||
import com.dfsek.terra.api.math.noise.samplers.noise.random.GaussianNoiseSampler;
|
import com.dfsek.terra.api.math.noise.samplers.noise.random.GaussianNoiseSampler;
|
||||||
import com.dfsek.terra.api.math.noise.samplers.noise.random.WhiteNoiseSampler;
|
import com.dfsek.terra.api.math.noise.samplers.noise.random.WhiteNoiseSampler;
|
||||||
import com.dfsek.terra.api.math.noise.samplers.noise.simplex.OpenSimplex2SSampler;
|
import com.dfsek.terra.api.math.noise.samplers.noise.simplex.OpenSimplex2SSampler;
|
||||||
@@ -9,7 +8,7 @@ import com.dfsek.terra.api.math.noise.samplers.noise.simplex.PerlinSampler;
|
|||||||
import com.dfsek.terra.api.math.noise.samplers.noise.simplex.SimplexSampler;
|
import com.dfsek.terra.api.math.noise.samplers.noise.simplex.SimplexSampler;
|
||||||
import com.dfsek.terra.api.math.noise.samplers.noise.value.ValueCubicSampler;
|
import com.dfsek.terra.api.math.noise.samplers.noise.value.ValueCubicSampler;
|
||||||
import com.dfsek.terra.api.math.noise.samplers.noise.value.ValueSampler;
|
import com.dfsek.terra.api.math.noise.samplers.noise.value.ValueSampler;
|
||||||
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
|
import com.dfsek.terra.api.util.seeded.NoiseProvider;
|
||||||
import com.dfsek.terra.config.loaders.config.sampler.templates.DomainWarpTemplate;
|
import com.dfsek.terra.config.loaders.config.sampler.templates.DomainWarpTemplate;
|
||||||
import com.dfsek.terra.config.loaders.config.sampler.templates.ImageSamplerTemplate;
|
import com.dfsek.terra.config.loaders.config.sampler.templates.ImageSamplerTemplate;
|
||||||
import com.dfsek.terra.config.loaders.config.sampler.templates.KernelTemplate;
|
import com.dfsek.terra.config.loaders.config.sampler.templates.KernelTemplate;
|
||||||
@@ -26,9 +25,7 @@ import com.dfsek.terra.config.loaders.config.sampler.templates.normalizer.Linear
|
|||||||
import com.dfsek.terra.config.loaders.config.sampler.templates.normalizer.NormalNormalizerTemplate;
|
import com.dfsek.terra.config.loaders.config.sampler.templates.normalizer.NormalNormalizerTemplate;
|
||||||
import com.dfsek.terra.registry.OpenRegistry;
|
import com.dfsek.terra.registry.OpenRegistry;
|
||||||
|
|
||||||
import java.util.function.Supplier;
|
public class NoiseRegistry extends OpenRegistry<NoiseProvider> {
|
||||||
|
|
||||||
public class NoiseRegistry extends OpenRegistry<Supplier<ObjectTemplate<NoiseSeeded>>> {
|
|
||||||
public NoiseRegistry() {
|
public NoiseRegistry() {
|
||||||
add("LINEAR", LinearNormalizerTemplate::new);
|
add("LINEAR", LinearNormalizerTemplate::new);
|
||||||
add("NORMAL", NormalNormalizerTemplate::new);
|
add("NORMAL", NormalNormalizerTemplate::new);
|
||||||
|
|||||||
@@ -1,352 +0,0 @@
|
|||||||
package biome;
|
|
||||||
|
|
||||||
import com.dfsek.tectonic.abstraction.AbstractConfigLoader;
|
|
||||||
import com.dfsek.tectonic.annotations.Abstractable;
|
|
||||||
import com.dfsek.tectonic.annotations.Default;
|
|
||||||
import com.dfsek.tectonic.annotations.Value;
|
|
||||||
import com.dfsek.tectonic.config.ConfigTemplate;
|
|
||||||
import com.dfsek.tectonic.config.ValidatedConfigTemplate;
|
|
||||||
import com.dfsek.tectonic.exception.ConfigException;
|
|
||||||
import com.dfsek.tectonic.loading.ConfigLoader;
|
|
||||||
import com.dfsek.tectonic.loading.TypeRegistry;
|
|
||||||
import com.dfsek.terra.api.TerraPlugin;
|
|
||||||
import com.dfsek.terra.api.addons.TerraAddon;
|
|
||||||
import com.dfsek.terra.api.event.EventManager;
|
|
||||||
import com.dfsek.terra.api.platform.handle.ItemHandle;
|
|
||||||
import com.dfsek.terra.api.platform.handle.WorldHandle;
|
|
||||||
import com.dfsek.terra.api.platform.world.Biome;
|
|
||||||
import com.dfsek.terra.api.platform.world.World;
|
|
||||||
import com.dfsek.terra.api.registry.CheckedRegistry;
|
|
||||||
import com.dfsek.terra.api.registry.LockedRegistry;
|
|
||||||
import com.dfsek.terra.api.util.collections.ProbabilityCollection;
|
|
||||||
import com.dfsek.terra.api.util.logging.DebugLogger;
|
|
||||||
import com.dfsek.terra.api.util.logging.JavaLogger;
|
|
||||||
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
|
|
||||||
import com.dfsek.terra.api.world.biome.Generator;
|
|
||||||
import com.dfsek.terra.api.world.biome.TerraBiome;
|
|
||||||
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
|
|
||||||
import com.dfsek.terra.config.GenericLoaders;
|
|
||||||
import com.dfsek.terra.config.PluginConfig;
|
|
||||||
import com.dfsek.terra.config.builder.BiomeBuilder;
|
|
||||||
import com.dfsek.terra.config.fileloaders.FolderLoader;
|
|
||||||
import com.dfsek.terra.config.lang.Language;
|
|
||||||
import com.dfsek.terra.config.loaders.ProbabilityCollectionLoader;
|
|
||||||
import com.dfsek.terra.config.loaders.config.BufferedImageLoader;
|
|
||||||
import com.dfsek.terra.config.loaders.config.biome.BiomeProviderBuilderLoader;
|
|
||||||
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 com.dfsek.terra.config.loaders.config.sampler.NoiseSamplerBuilderLoader;
|
|
||||||
import com.dfsek.terra.config.pack.ConfigPack;
|
|
||||||
import com.dfsek.terra.config.templates.AbstractableTemplate;
|
|
||||||
import com.dfsek.terra.config.templates.BiomeTemplate;
|
|
||||||
import com.dfsek.terra.registry.config.BiomeRegistry;
|
|
||||||
import com.dfsek.terra.registry.config.NoiseRegistry;
|
|
||||||
import com.dfsek.terra.world.TerraWorld;
|
|
||||||
|
|
||||||
import javax.swing.*;
|
|
||||||
import java.awt.*;
|
|
||||||
import java.awt.event.KeyEvent;
|
|
||||||
import java.awt.event.KeyListener;
|
|
||||||
import java.awt.event.MouseEvent;
|
|
||||||
import java.awt.event.MouseListener;
|
|
||||||
import java.awt.image.BufferedImage;
|
|
||||||
import java.awt.image.ColorModel;
|
|
||||||
import java.awt.image.WritableRaster;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.ThreadLocalRandom;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
public class DistributionTest {
|
|
||||||
private static final TerraPlugin MAIN = new TerraPlugin() {
|
|
||||||
@Override
|
|
||||||
public WorldHandle getWorldHandle() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TerraWorld getWorld(World world) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public com.dfsek.terra.api.util.logging.Logger logger() {
|
|
||||||
return new JavaLogger(Logger.getLogger("Terra"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PluginConfig getTerraConfig() {
|
|
||||||
return new PluginConfig();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public File getDataFolder() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDebug() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Language getLanguage() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CheckedRegistry<ConfigPack> getConfigRegistry() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public LockedRegistry<TerraAddon> getAddons() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean reload() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemHandle getItemHandle() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void saveDefaultConfig() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String platformName() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public DebugLogger getDebugLogger() {
|
|
||||||
return new DebugLogger(new JavaLogger(Logger.getLogger("Terra")));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public EventManager getEventManager() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void register(TypeRegistry registry) {
|
|
||||||
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
private static BiomeProvider getProvider(long seed) throws ConfigException, IOException {
|
|
||||||
System.out.println(seed);
|
|
||||||
File pack = new File("/home/dfsek/Documents/Terra/platforms/bukkit/target/server/plugins/Terra/packs/default/");
|
|
||||||
FolderLoader folderLoader = new FolderLoader(pack.toPath());
|
|
||||||
|
|
||||||
AbstractConfigLoader loader = new AbstractConfigLoader();
|
|
||||||
new GenericLoaders(MAIN).register(loader);
|
|
||||||
|
|
||||||
BiomeRegistry biomeRegistry = new BiomeRegistry();
|
|
||||||
folderLoader.open("biomes", ".yml").then(inputStreams -> ConfigPack.buildAll((template, main) -> template, biomeRegistry, loader.load(inputStreams, TestBiome::new), MAIN));
|
|
||||||
|
|
||||||
BiomeProviderTemplate template = new BiomeProviderTemplate();
|
|
||||||
ConfigLoader pipeLoader = new ConfigLoader()
|
|
||||||
.registerLoader(BiomeProvider.BiomeProviderBuilder.class, new BiomeProviderBuilderLoader())
|
|
||||||
.registerLoader(ProbabilityCollection.class, new ProbabilityCollectionLoader())
|
|
||||||
.registerLoader(BiomeBuilder.class, biomeRegistry)
|
|
||||||
.registerLoader(BufferedImage.class, new BufferedImageLoader(folderLoader))
|
|
||||||
.registerLoader(SingleBiomeProviderTemplate.class, SingleBiomeProviderTemplate::new)
|
|
||||||
.registerLoader(BiomePipelineTemplate.class, () -> new BiomePipelineTemplate(MAIN))
|
|
||||||
.registerLoader(ImageProviderTemplate.class, () -> new ImageProviderTemplate(biomeRegistry));
|
|
||||||
new GenericLoaders(MAIN).register(pipeLoader);
|
|
||||||
|
|
||||||
pipeLoader.registerLoader(NoiseSeeded.class, new NoiseSamplerBuilderLoader(new NoiseRegistry()));
|
|
||||||
|
|
||||||
pipeLoader.load(template, folderLoader.get("pack.yml"));
|
|
||||||
return template.getBiomeProviderBuilder().build(seed);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String... args) throws ConfigException, IOException {
|
|
||||||
JFrame testFrame = new JFrame("Biome Viewer");
|
|
||||||
|
|
||||||
|
|
||||||
final BiomeProvider[] provider = {getProvider(2403)};
|
|
||||||
|
|
||||||
|
|
||||||
int size = 1024;
|
|
||||||
final BufferedImage[] image = {new BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB)};
|
|
||||||
for(int x = 0; x < size; x++) {
|
|
||||||
for(int z = 0; z < size; z++) {
|
|
||||||
image[0].setRGB(x, z, provider[0].getBiome(x, z).getColor());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
JLabel img = new JLabel(new ImageIcon(image[0]));
|
|
||||||
|
|
||||||
testFrame.add(img);
|
|
||||||
testFrame.pack();
|
|
||||||
img.addMouseListener(new MouseListener() {
|
|
||||||
@Override
|
|
||||||
public void mouseClicked(MouseEvent e) {
|
|
||||||
BufferedImage newImage = deepCopy(image[0]);
|
|
||||||
Graphics graphics = newImage.getGraphics();
|
|
||||||
graphics.setColor(Color.WHITE);
|
|
||||||
graphics.fillRect(0, 0, 512, 24);
|
|
||||||
graphics.setColor(Color.BLACK);
|
|
||||||
graphics.setFont(new Font("Monospace", Font.BOLD, 20));
|
|
||||||
graphics.drawString(provider[0].getBiome(e.getX(), e.getY()).toString(), 0, 20);
|
|
||||||
|
|
||||||
graphics.setColor(Color.WHITE);
|
|
||||||
graphics.fillOval(e.getX() - 2, e.getY() - 2, 12, 12);
|
|
||||||
graphics.setColor(Color.BLACK);
|
|
||||||
graphics.fillOval(e.getX(), e.getY(), 8, 8);
|
|
||||||
|
|
||||||
img.setIcon(new ImageIcon(newImage));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mousePressed(MouseEvent e) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mouseReleased(MouseEvent e) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mouseEntered(MouseEvent e) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mouseExited(MouseEvent e) {
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
testFrame.addKeyListener(new KeyListener() {
|
|
||||||
@Override
|
|
||||||
public void keyTyped(KeyEvent e) {
|
|
||||||
if(e.getKeyChar() == 's') {
|
|
||||||
long l = System.nanoTime();
|
|
||||||
try {
|
|
||||||
provider[0] = getProvider(ThreadLocalRandom.current().nextLong());
|
|
||||||
} catch(ConfigException | IOException configException) {
|
|
||||||
configException.printStackTrace();
|
|
||||||
}
|
|
||||||
image[0] = new BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB);
|
|
||||||
for(int x = 0; x < size; x++) {
|
|
||||||
for(int z = 0; z < size; z++) {
|
|
||||||
image[0].setRGB(x, z, provider[0].getBiome(x, z).getColor());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
long n = System.nanoTime();
|
|
||||||
double t = n - l;
|
|
||||||
System.out.println("Time: " + t / 1000000 + "ms");
|
|
||||||
img.setIcon(new ImageIcon(image[0]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void keyPressed(KeyEvent e) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void keyReleased(KeyEvent e) {
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
testFrame.setResizable(false);
|
|
||||||
testFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
|
|
||||||
testFrame.setVisible(true);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private static BufferedImage deepCopy(BufferedImage bi) {
|
|
||||||
ColorModel cm = bi.getColorModel();
|
|
||||||
boolean isAlphaPremultiplied = cm.isAlphaPremultiplied();
|
|
||||||
WritableRaster raster = bi.copyData(null);
|
|
||||||
return new BufferedImage(cm, raster, isAlphaPremultiplied, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final class BiomeProviderTemplate implements ConfigTemplate {
|
|
||||||
@Value("biomes")
|
|
||||||
BiomeProvider.BiomeProviderBuilder biomeProviderBuilder;
|
|
||||||
|
|
||||||
public BiomeProvider.BiomeProviderBuilder getBiomeProviderBuilder() {
|
|
||||||
return biomeProviderBuilder;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final class TestBiome extends AbstractableTemplate implements TerraBiome, ValidatedConfigTemplate, BiomeBuilder {
|
|
||||||
|
|
||||||
@Value("color")
|
|
||||||
@Default
|
|
||||||
@Abstractable
|
|
||||||
private int color;
|
|
||||||
|
|
||||||
@Value("tags")
|
|
||||||
@Abstractable
|
|
||||||
@Default
|
|
||||||
private Set<String> tags = new HashSet<>();
|
|
||||||
|
|
||||||
@Value("id")
|
|
||||||
private String id;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ProbabilityCollection<Biome> getVanillaBiomes() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BiomeTemplate getTemplate() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Generator getGenerator(World w) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getColor() {
|
|
||||||
return color;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<String> getTags() {
|
|
||||||
return tags;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean validate() {
|
|
||||||
color += (255 << 24); // Alpha adjustment
|
|
||||||
tags.add("BIOME:" + id);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getID() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TestBiome apply(Long aLong) {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,218 +0,0 @@
|
|||||||
package biome;
|
|
||||||
|
|
||||||
import com.dfsek.tectonic.abstraction.AbstractConfigLoader;
|
|
||||||
import com.dfsek.tectonic.annotations.Abstractable;
|
|
||||||
import com.dfsek.tectonic.annotations.Default;
|
|
||||||
import com.dfsek.tectonic.annotations.Value;
|
|
||||||
import com.dfsek.tectonic.config.ConfigTemplate;
|
|
||||||
import com.dfsek.tectonic.config.ValidatedConfigTemplate;
|
|
||||||
import com.dfsek.tectonic.exception.ConfigException;
|
|
||||||
import com.dfsek.terra.api.platform.world.Biome;
|
|
||||||
import com.dfsek.terra.api.platform.world.World;
|
|
||||||
import com.dfsek.terra.api.util.collections.ProbabilityCollection;
|
|
||||||
import com.dfsek.terra.api.world.biome.Generator;
|
|
||||||
import com.dfsek.terra.api.world.biome.TerraBiome;
|
|
||||||
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
|
|
||||||
import com.dfsek.terra.api.world.biome.provider.ImageBiomeProvider;
|
|
||||||
import com.dfsek.terra.config.fileloaders.FolderLoader;
|
|
||||||
import com.dfsek.terra.config.pack.ConfigPack;
|
|
||||||
import com.dfsek.terra.config.templates.AbstractableTemplate;
|
|
||||||
import com.dfsek.terra.registry.OpenRegistry;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
|
||||||
import javax.swing.*;
|
|
||||||
import java.awt.*;
|
|
||||||
import java.awt.event.KeyEvent;
|
|
||||||
import java.awt.event.KeyListener;
|
|
||||||
import java.awt.event.MouseEvent;
|
|
||||||
import java.awt.event.MouseListener;
|
|
||||||
import java.awt.image.BufferedImage;
|
|
||||||
import java.awt.image.ColorModel;
|
|
||||||
import java.awt.image.WritableRaster;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.ThreadLocalRandom;
|
|
||||||
|
|
||||||
public class ImageTest {
|
|
||||||
private static ImageBiomeProvider getProvider(long seed) throws ConfigException, IOException {
|
|
||||||
System.out.println(seed);
|
|
||||||
File pack = new File("/home/dfsek/Documents/Terra/platforms/bukkit/target/server/plugins/Terra/packs/default/");
|
|
||||||
FolderLoader folderLoader = new FolderLoader(pack.toPath());
|
|
||||||
|
|
||||||
AbstractConfigLoader loader = new AbstractConfigLoader();
|
|
||||||
|
|
||||||
OpenRegistry<TerraBiome> biomeRegistry = new OpenRegistry<TerraBiome>() {
|
|
||||||
};
|
|
||||||
folderLoader.open("biomes", ".yml").then(inputStreams -> ConfigPack.buildAll((template, main) -> template, biomeRegistry, loader.load(inputStreams, TestBiome::new), null));
|
|
||||||
|
|
||||||
return new ImageBiomeProvider(biomeRegistry.entries(), ImageIO.read(ImageTest.class.getResourceAsStream("/map.jpg")), 1, ImageBiomeProvider.Align.CENTER);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public static void main(String... args) throws ConfigException, IOException {
|
|
||||||
JFrame testFrame = new JFrame("Biome Viewer");
|
|
||||||
|
|
||||||
|
|
||||||
final BiomeProvider[] provider = {getProvider(2403)};
|
|
||||||
|
|
||||||
|
|
||||||
int size = 1024;
|
|
||||||
final BufferedImage[] image = {new BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB)};
|
|
||||||
for(int x = 0; x < size; x++) {
|
|
||||||
for(int z = 0; z < size; z++) {
|
|
||||||
image[0].setRGB(x, z, provider[0].getBiome(x, z).getColor());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
JLabel img = new JLabel(new ImageIcon(image[0]));
|
|
||||||
|
|
||||||
testFrame.add(img);
|
|
||||||
testFrame.pack();
|
|
||||||
img.addMouseListener(new MouseListener() {
|
|
||||||
@Override
|
|
||||||
public void mouseClicked(MouseEvent e) {
|
|
||||||
BufferedImage newImage = deepCopy(image[0]);
|
|
||||||
Graphics graphics = newImage.getGraphics();
|
|
||||||
graphics.setColor(Color.WHITE);
|
|
||||||
graphics.fillRect(0, 0, 512, 24);
|
|
||||||
graphics.setColor(Color.BLACK);
|
|
||||||
graphics.setFont(new Font("Monospace", Font.BOLD, 20));
|
|
||||||
graphics.drawString(provider[0].getBiome(e.getX(), e.getY()).toString(), 0, 20);
|
|
||||||
|
|
||||||
graphics.setColor(Color.WHITE);
|
|
||||||
graphics.fillOval(e.getX() - 2, e.getY() - 2, 12, 12);
|
|
||||||
graphics.setColor(Color.BLACK);
|
|
||||||
graphics.fillOval(e.getX(), e.getY(), 8, 8);
|
|
||||||
|
|
||||||
img.setIcon(new ImageIcon(newImage));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mousePressed(MouseEvent e) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mouseReleased(MouseEvent e) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mouseEntered(MouseEvent e) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mouseExited(MouseEvent e) {
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
testFrame.addKeyListener(new KeyListener() {
|
|
||||||
@Override
|
|
||||||
public void keyTyped(KeyEvent e) {
|
|
||||||
if(e.getKeyChar() == 's') {
|
|
||||||
try {
|
|
||||||
provider[0] = getProvider(ThreadLocalRandom.current().nextLong());
|
|
||||||
} catch(ConfigException | IOException configException) {
|
|
||||||
configException.printStackTrace();
|
|
||||||
}
|
|
||||||
image[0] = new BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB);
|
|
||||||
for(int x = 0; x < size; x++) {
|
|
||||||
for(int z = 0; z < size; z++) {
|
|
||||||
image[0].setRGB(x, z, provider[0].getBiome(x, z).getColor());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
img.setIcon(new ImageIcon(image[0]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void keyPressed(KeyEvent e) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void keyReleased(KeyEvent e) {
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
testFrame.setResizable(false);
|
|
||||||
testFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
|
|
||||||
testFrame.setVisible(true);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private static BufferedImage deepCopy(BufferedImage bi) {
|
|
||||||
ColorModel cm = bi.getColorModel();
|
|
||||||
boolean isAlphaPremultiplied = cm.isAlphaPremultiplied();
|
|
||||||
WritableRaster raster = bi.copyData(null);
|
|
||||||
return new BufferedImage(cm, raster, isAlphaPremultiplied, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final class BiomeProviderTemplate implements ConfigTemplate {
|
|
||||||
@Value("biome-pipeline")
|
|
||||||
BiomeProvider.BiomeProviderBuilder biomeProviderBuilder;
|
|
||||||
|
|
||||||
public BiomeProvider.BiomeProviderBuilder getBiomeProviderBuilder() {
|
|
||||||
return biomeProviderBuilder;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final class TestBiome extends AbstractableTemplate implements TerraBiome, ValidatedConfigTemplate {
|
|
||||||
|
|
||||||
@Value("color")
|
|
||||||
@Default
|
|
||||||
@Abstractable
|
|
||||||
private int color;
|
|
||||||
|
|
||||||
@Value("tags")
|
|
||||||
@Abstractable
|
|
||||||
@Default
|
|
||||||
private Set<String> tags = new HashSet<>();
|
|
||||||
|
|
||||||
@Value("id")
|
|
||||||
private String id;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ProbabilityCollection<Biome> getVanillaBiomes() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Generator getGenerator(World w) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getColor() {
|
|
||||||
return color;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<String> getTags() {
|
|
||||||
return tags;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean validate() {
|
|
||||||
color += (255 << 24); // Alpha adjustment
|
|
||||||
tags.add("BIOME:" + id);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getID() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in new issue
Block a user