basic addon loading

This commit is contained in:
dfsek
2021-02-19 20:36:35 -07:00
parent 6d51da3118
commit 5e761c3e29
124 changed files with 483 additions and 220 deletions

View File

@@ -0,0 +1,30 @@
package com.dfsek.terra.addons.addon;
import com.dfsek.terra.addons.annotations.Addon;
import com.dfsek.terra.addons.annotations.Author;
import com.dfsek.terra.addons.annotations.Version;
import org.jetbrains.annotations.NotNull;
public abstract class TerraAddon {
public final @NotNull String getVersion() {
Version version = getClass().getAnnotation(Version.class);
return version == null ? "0.1.0" : version.value();
}
public final @NotNull String getAuthor() {
Author author = getClass().getAnnotation(Author.class);
return author == null ? "Anon Y. Mous" : author.value();
}
public final @NotNull String getName() {
Addon addon = getClass().getAnnotation(Addon.class);
if(addon == null) throw new IllegalStateException("Addon annotation not present"); // This should never happen; the presence of this annotation is checked by the addon loader.
return addon.value();
}
/**
* Invoked immediately after an addon is loaded.
*/
public abstract void initialize();
}

View File

@@ -0,0 +1,12 @@
package com.dfsek.terra.addons.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Addon {
String value();
}

View File

@@ -0,0 +1,12 @@
package com.dfsek.terra.addons.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Author {
String value();
}

View File

@@ -0,0 +1,12 @@
package com.dfsek.terra.addons.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Depends {
String[] value();
}

View File

@@ -0,0 +1,12 @@
package com.dfsek.terra.addons.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Version {
String value();
}

View File

@@ -0,0 +1,11 @@
package com.dfsek.terra.addons.annotations.inject;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Inject {
}

View File

@@ -0,0 +1,60 @@
package com.dfsek.terra.addons.loading;
import com.dfsek.terra.addons.addon.TerraAddon;
import com.dfsek.terra.addons.annotations.Addon;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Set;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
public class AddonClassLoader extends URLClassLoader {
static {
ClassLoader.registerAsParallelCapable();
}
public AddonClassLoader(URL[] urls, ClassLoader parent) {
super(urls, parent);
}
public AddonClassLoader(URL[] urls) {
super(urls);
}
@SuppressWarnings("unchecked")
public static Set<Class<? extends TerraAddon>> fetchAddonClasses(File file) throws IOException {
JarFile jarFile = new JarFile(file);
Enumeration<JarEntry> entries = jarFile.entries();
AddonClassLoader loader = new AddonClassLoader(new URL[] {file.toURI().toURL()}, AddonClassLoader.class.getClassLoader());
Set<Class<? extends TerraAddon>> set = new HashSet<>();
while(entries.hasMoreElements()) {
JarEntry entry = entries.nextElement();
if(entry.isDirectory() || !entry.getName().endsWith(".class")) continue;
String className = entry.getName().substring(0, entry.getName().length() - 6).replace('/', '.');
try {
Class<?> clazz = loader.loadClass(className);
Addon addon = clazz.getAnnotation(Addon.class);
if(addon == null) continue;
if(!TerraAddon.class.isAssignableFrom(clazz)) throw new IllegalArgumentException("Addon class must extend TerraAddon.");
set.add((Class<? extends TerraAddon>) clazz);
} catch(ClassNotFoundException e) {
e.printStackTrace();
}
}
return set;
}
}

View File

@@ -0,0 +1,11 @@
package com.dfsek.terra.addons.loading;
public class AddonLoadException extends Exception {
public AddonLoadException(String message) {
super(message);
}
public AddonLoadException(String message, Throwable cause) {
super(message, cause);
}
}

View File

@@ -8,6 +8,7 @@ import com.dfsek.terra.api.platform.world.World;
import com.dfsek.terra.config.PluginConfig;
import com.dfsek.terra.config.lang.Language;
import com.dfsek.terra.debug.DebugLogger;
import com.dfsek.terra.registry.AddonRegistry;
import com.dfsek.terra.registry.ConfigRegistry;
import com.dfsek.terra.world.TerraWorld;
@@ -33,6 +34,8 @@ public interface TerraPlugin extends LoaderRegistrar {
ConfigRegistry getRegistry();
AddonRegistry getAddons();
void reload();
ItemHandle getItemHandle();
@@ -41,7 +44,6 @@ public interface TerraPlugin extends LoaderRegistrar {
String platformName();
DebugLogger getDebugLogger();
EventManager getEventManager();

View File

@@ -0,0 +1,7 @@
package com.dfsek.terra.api.core.event.annotations;
/**
* Specifies that an event handler is to handle all events.
*/
public @interface Global {
}

View File

@@ -1,7 +1,7 @@
package com.dfsek.terra.api.math.paralithic.noise;
import com.dfsek.terra.api.math.noise.NoiseSampler;
import com.dfsek.terra.util.hash.HashMapDoubleDouble;
import com.dfsek.terra.api.util.hash.HashMapDoubleDouble;

View File

@@ -10,8 +10,8 @@ import com.dfsek.terra.api.structures.parser.lang.variables.Variable;
import com.dfsek.terra.api.structures.script.TerraImplementationArguments;
import com.dfsek.terra.api.structures.structure.RotationUtil;
import com.dfsek.terra.api.structures.tokenizer.Position;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.biome.provider.BiomeProvider;
import com.dfsek.terra.api.world.biome.UserDefinedBiome;
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
import net.jafama.FastMath;
import java.util.Map;

View File

@@ -12,8 +12,8 @@ import com.dfsek.terra.api.structures.parser.lang.variables.Variable;
import com.dfsek.terra.api.structures.script.TerraImplementationArguments;
import com.dfsek.terra.api.structures.structure.RotationUtil;
import com.dfsek.terra.api.structures.tokenizer.Position;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.biome.provider.BiomeProvider;
import com.dfsek.terra.api.world.biome.UserDefinedBiome;
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
import com.dfsek.terra.config.templates.BiomeTemplate;
import com.dfsek.terra.world.TerraWorld;
import com.dfsek.terra.world.generation.math.SamplerCache;

View File

@@ -31,7 +31,7 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
package com.dfsek.terra.util.hash;
package com.dfsek.terra.api.util.hash;
import java.io.Serializable;

View File

@@ -31,7 +31,7 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
package com.dfsek.terra.util.hash;
package com.dfsek.terra.api.util.hash;
import java.io.Serializable;
import java.util.NoSuchElementException;

View File

@@ -1,6 +1,6 @@
package com.dfsek.terra.api.util.seeded;
import com.dfsek.terra.biome.pipeline.source.BiomeSource;
import com.dfsek.terra.api.world.biome.pipeline.source.BiomeSource;
public interface SourceSeeded extends SeededBuilder<BiomeSource> {
}

View File

@@ -1,6 +1,6 @@
package com.dfsek.terra.api.util.seeded;
import com.dfsek.terra.biome.pipeline.stages.Stage;
import com.dfsek.terra.api.world.biome.pipeline.stages.Stage;
public interface StageSeeded extends SeededBuilder<Stage> {
}

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.util;
package com.dfsek.terra.api.util.world;
import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.platform.block.MaterialData;

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.util;
package com.dfsek.terra.api.util.world;
import com.dfsek.terra.api.math.MathUtil;
import com.dfsek.terra.api.platform.block.BlockData;

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.util;
package com.dfsek.terra.api.util.world;
import com.dfsek.terra.api.math.MathUtil;
import com.dfsek.terra.api.platform.world.Chunk;

View File

@@ -1,10 +1,9 @@
package com.dfsek.terra.biome;
package com.dfsek.terra.api.world.biome;
import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.api.platform.world.Biome;
import com.dfsek.terra.api.platform.world.World;
import com.dfsek.terra.api.world.biome.Generator;
import java.util.Set;

View File

@@ -1,9 +1,8 @@
package com.dfsek.terra.biome;
package com.dfsek.terra.api.world.biome;
import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.api.platform.world.Biome;
import com.dfsek.terra.api.platform.world.World;
import com.dfsek.terra.api.world.biome.Generator;
import com.dfsek.terra.config.builder.GeneratorBuilder;
import com.dfsek.terra.config.templates.BiomeTemplate;

View File

@@ -0,0 +1,18 @@
package com.dfsek.terra.api.world.biome.pipeline;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.pipeline.expand.BiomeExpander;
import com.dfsek.terra.api.world.biome.pipeline.mutator.BiomeMutator;
import com.dfsek.terra.api.world.biome.pipeline.source.BiomeSource;
public interface BiomeHolder {
BiomeHolder expand(BiomeExpander expander);
void mutate(BiomeMutator mutator);
void fill(BiomeSource source);
TerraBiome getBiome(int x, int z);
TerraBiome getBiomeRaw(int x, int z);
}

View File

@@ -1,10 +1,10 @@
package com.dfsek.terra.biome.pipeline;
package com.dfsek.terra.api.world.biome.pipeline;
import com.dfsek.terra.api.math.vector.Vector2;
import com.dfsek.terra.api.util.GlueList;
import com.dfsek.terra.api.util.seeded.StageSeeded;
import com.dfsek.terra.biome.pipeline.source.BiomeSource;
import com.dfsek.terra.biome.pipeline.stages.Stage;
import com.dfsek.terra.api.world.biome.pipeline.source.BiomeSource;
import com.dfsek.terra.api.world.biome.pipeline.stages.Stage;
import java.util.List;
import java.util.stream.Collectors;

View File

@@ -1,10 +1,10 @@
package com.dfsek.terra.biome.pipeline;
package com.dfsek.terra.api.world.biome.pipeline;
import com.dfsek.terra.api.math.vector.Vector2;
import com.dfsek.terra.biome.TerraBiome;
import com.dfsek.terra.biome.pipeline.expand.BiomeExpander;
import com.dfsek.terra.biome.pipeline.mutator.BiomeMutator;
import com.dfsek.terra.biome.pipeline.source.BiomeSource;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.pipeline.expand.BiomeExpander;
import com.dfsek.terra.api.world.biome.pipeline.mutator.BiomeMutator;
import com.dfsek.terra.api.world.biome.pipeline.source.BiomeSource;
public class TerraBiomeHolder implements BiomeHolder {
private final Vector2 origin;

View File

@@ -0,0 +1,7 @@
package com.dfsek.terra.api.world.biome.pipeline.expand;
import com.dfsek.terra.api.world.biome.TerraBiome;
public interface BiomeExpander {
TerraBiome getBetween(double x, double z, TerraBiome... others);
}

View File

@@ -1,8 +1,8 @@
package com.dfsek.terra.biome.pipeline.expand;
package com.dfsek.terra.api.world.biome.pipeline.expand;
import com.dfsek.terra.api.math.MathUtil;
import com.dfsek.terra.api.math.noise.NoiseSampler;
import com.dfsek.terra.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.TerraBiome;
public class FractalExpander implements BiomeExpander {
private final NoiseSampler sampler;

View File

@@ -1,7 +1,7 @@
package com.dfsek.terra.biome.pipeline.mutator;
package com.dfsek.terra.api.world.biome.pipeline.mutator;
import com.dfsek.terra.biome.TerraBiome;
import com.dfsek.terra.biome.pipeline.BiomeHolder;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.pipeline.BiomeHolder;
public interface BiomeMutator {
TerraBiome mutate(ViewPoint viewPoint, double x, double z);

View File

@@ -1,8 +1,8 @@
package com.dfsek.terra.biome.pipeline.mutator;
package com.dfsek.terra.api.world.biome.pipeline.mutator;
import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.api.math.noise.NoiseSampler;
import com.dfsek.terra.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.TerraBiome;
import java.util.Map;

View File

@@ -1,8 +1,8 @@
package com.dfsek.terra.biome.pipeline.mutator;
package com.dfsek.terra.api.world.biome.pipeline.mutator;
import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.api.math.noise.NoiseSampler;
import com.dfsek.terra.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.TerraBiome;
public class BorderMutator implements BiomeMutator {
private final String border;

View File

@@ -1,8 +1,8 @@
package com.dfsek.terra.biome.pipeline.mutator;
package com.dfsek.terra.api.world.biome.pipeline.mutator;
import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.api.math.noise.NoiseSampler;
import com.dfsek.terra.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.TerraBiome;
import java.util.Map;

View File

@@ -1,8 +1,8 @@
package com.dfsek.terra.biome.pipeline.mutator;
package com.dfsek.terra.api.world.biome.pipeline.mutator;
import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.api.math.noise.NoiseSampler;
import com.dfsek.terra.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.TerraBiome;
public class ReplaceMutator implements BiomeMutator {
private final String replaceableTag;

View File

@@ -1,8 +1,8 @@
package com.dfsek.terra.biome.pipeline.mutator;
package com.dfsek.terra.api.world.biome.pipeline.mutator;
import com.dfsek.terra.api.math.MathUtil;
import com.dfsek.terra.api.math.noise.NoiseSampler;
import com.dfsek.terra.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.TerraBiome;
import java.util.Objects;

View File

@@ -0,0 +1,7 @@
package com.dfsek.terra.api.world.biome.pipeline.source;
import com.dfsek.terra.api.world.biome.TerraBiome;
public interface BiomeSource {
TerraBiome getBiome(double x, double z);
}

View File

@@ -1,8 +1,8 @@
package com.dfsek.terra.biome.pipeline.source;
package com.dfsek.terra.api.world.biome.pipeline.source;
import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.api.math.noise.NoiseSampler;
import com.dfsek.terra.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.TerraBiome;
public class RandomSource implements BiomeSource {
private final ProbabilityCollection<TerraBiome> biomes;

View File

@@ -1,7 +1,7 @@
package com.dfsek.terra.biome.pipeline.stages;
package com.dfsek.terra.api.world.biome.pipeline.stages;
import com.dfsek.terra.biome.pipeline.BiomeHolder;
import com.dfsek.terra.biome.pipeline.expand.BiomeExpander;
import com.dfsek.terra.api.world.biome.pipeline.BiomeHolder;
import com.dfsek.terra.api.world.biome.pipeline.expand.BiomeExpander;
public class ExpanderStage implements Stage {
private final BiomeExpander expander;

View File

@@ -1,7 +1,7 @@
package com.dfsek.terra.biome.pipeline.stages;
package com.dfsek.terra.api.world.biome.pipeline.stages;
import com.dfsek.terra.biome.pipeline.BiomeHolder;
import com.dfsek.terra.biome.pipeline.mutator.BiomeMutator;
import com.dfsek.terra.api.world.biome.pipeline.BiomeHolder;
import com.dfsek.terra.api.world.biome.pipeline.mutator.BiomeMutator;
public class MutatorStage implements Stage {
private final BiomeMutator mutator;

View File

@@ -0,0 +1,10 @@
package com.dfsek.terra.api.world.biome.pipeline.stages;
import com.dfsek.terra.api.world.biome.pipeline.BiomeHolder;
public interface Stage {
boolean isExpansion();
BiomeHolder apply(BiomeHolder in);
}

View File

@@ -1,9 +1,9 @@
package com.dfsek.terra.biome.provider;
package com.dfsek.terra.api.world.biome.provider;
import com.dfsek.terra.api.math.vector.Location;
import com.dfsek.terra.api.math.vector.Vector2;
import com.dfsek.terra.api.math.vector.Vector3;
import com.dfsek.terra.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.TerraBiome;
public interface BiomeProvider {
TerraBiome getBiome(int x, int z);

View File

@@ -1,6 +1,6 @@
package com.dfsek.terra.biome.provider;
package com.dfsek.terra.api.world.biome.provider;
import com.dfsek.terra.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.registry.TerraRegistry;
import net.jafama.FastMath;

View File

@@ -1,6 +1,6 @@
package com.dfsek.terra.biome.provider;
package com.dfsek.terra.api.world.biome.provider;
import com.dfsek.terra.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.TerraBiome;
public class SingleBiomeProvider implements BiomeProvider, BiomeProvider.BiomeProviderBuilder {
private final TerraBiome biome;

View File

@@ -1,11 +1,11 @@
package com.dfsek.terra.biome.provider;
package com.dfsek.terra.api.world.biome.provider;
import com.dfsek.terra.api.core.TerraPlugin;
import com.dfsek.terra.api.math.noise.NoiseSampler;
import com.dfsek.terra.api.math.vector.Vector2;
import com.dfsek.terra.biome.TerraBiome;
import com.dfsek.terra.biome.pipeline.BiomeHolder;
import com.dfsek.terra.biome.pipeline.BiomePipeline;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.pipeline.BiomeHolder;
import com.dfsek.terra.api.world.biome.pipeline.BiomePipeline;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;

View File

@@ -5,7 +5,7 @@ import com.dfsek.terra.api.math.vector.Location;
import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.platform.entity.Entity;
import com.dfsek.terra.api.platform.entity.EntityType;
import com.dfsek.terra.util.MaterialSet;
import com.dfsek.terra.api.util.world.MaterialSet;
import java.util.Random;
import java.util.function.Consumer;

View File

@@ -3,8 +3,8 @@ package com.dfsek.terra.api.world.tree.fractal.trees;
import com.dfsek.terra.api.core.TerraPlugin;
import com.dfsek.terra.api.math.vector.Location;
import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.util.world.MaterialSet;
import com.dfsek.terra.api.world.tree.fractal.FractalTree;
import com.dfsek.terra.util.MaterialSet;
import java.util.Random;

View File

@@ -6,9 +6,9 @@ import com.dfsek.terra.api.math.vector.Location;
import com.dfsek.terra.api.math.vector.Vector3;
import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.platform.handle.WorldHandle;
import com.dfsek.terra.api.util.world.MaterialSet;
import com.dfsek.terra.api.world.tree.fractal.FractalTree;
import com.dfsek.terra.api.world.tree.fractal.TreeGeometry;
import com.dfsek.terra.util.MaterialSet;
import java.util.Random;

View File

@@ -4,9 +4,9 @@ import com.dfsek.terra.api.core.TerraPlugin;
import com.dfsek.terra.api.math.vector.Location;
import com.dfsek.terra.api.math.vector.Vector3;
import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.util.world.MaterialSet;
import com.dfsek.terra.api.world.tree.fractal.FractalTree;
import com.dfsek.terra.api.world.tree.fractal.TreeGeometry;
import com.dfsek.terra.util.MaterialSet;
import net.jafama.FastMath;
import java.util.Random;

View File

@@ -3,8 +3,8 @@ package com.dfsek.terra.api.world.tree.fractal.trees;
import com.dfsek.terra.api.core.TerraPlugin;
import com.dfsek.terra.api.math.vector.Location;
import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.util.world.MaterialSet;
import com.dfsek.terra.api.world.tree.fractal.FractalTree;
import com.dfsek.terra.util.MaterialSet;
import java.util.Random;

View File

@@ -6,9 +6,9 @@ import com.dfsek.terra.api.math.vector.Location;
import com.dfsek.terra.api.math.vector.Vector3;
import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.platform.handle.WorldHandle;
import com.dfsek.terra.api.util.world.MaterialSet;
import com.dfsek.terra.api.world.tree.fractal.FractalTree;
import com.dfsek.terra.api.world.tree.fractal.TreeGeometry;
import com.dfsek.terra.util.MaterialSet;
import net.jafama.FastMath;
import java.util.Random;

View File

@@ -3,8 +3,8 @@ package com.dfsek.terra.api.world.tree.fractal.trees;
import com.dfsek.terra.api.core.TerraPlugin;
import com.dfsek.terra.api.math.vector.Location;
import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.util.world.MaterialSet;
import com.dfsek.terra.api.world.tree.fractal.FractalTree;
import com.dfsek.terra.util.MaterialSet;
import java.util.Random;

View File

@@ -6,9 +6,9 @@ import com.dfsek.terra.api.math.vector.Location;
import com.dfsek.terra.api.math.vector.Vector3;
import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.platform.handle.WorldHandle;
import com.dfsek.terra.api.util.world.MaterialSet;
import com.dfsek.terra.api.world.tree.fractal.FractalTree;
import com.dfsek.terra.api.world.tree.fractal.TreeGeometry;
import com.dfsek.terra.util.MaterialSet;
import net.jafama.FastMath;
import java.util.Random;

View File

@@ -4,9 +4,9 @@ import com.dfsek.terra.api.core.TerraPlugin;
import com.dfsek.terra.api.math.vector.Location;
import com.dfsek.terra.api.math.vector.Vector3;
import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.util.world.MaterialSet;
import com.dfsek.terra.api.world.tree.fractal.FractalTree;
import com.dfsek.terra.api.world.tree.fractal.TreeGeometry;
import com.dfsek.terra.util.MaterialSet;
import net.jafama.FastMath;
import java.util.Random;

View File

@@ -3,8 +3,8 @@ package com.dfsek.terra.async;
import com.dfsek.terra.api.core.TerraPlugin;
import com.dfsek.terra.api.math.vector.Location;
import com.dfsek.terra.api.math.vector.Vector3;
import com.dfsek.terra.biome.TerraBiome;
import com.dfsek.terra.biome.provider.BiomeProvider;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
import org.jetbrains.annotations.NotNull;
import java.util.function.Consumer;

View File

@@ -4,7 +4,7 @@ import com.dfsek.terra.api.core.TerraPlugin;
import com.dfsek.terra.api.math.vector.Location;
import com.dfsek.terra.api.math.vector.Vector3;
import com.dfsek.terra.api.platform.world.World;
import com.dfsek.terra.biome.provider.BiomeProvider;
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
import org.jetbrains.annotations.NotNull;
import java.util.function.Consumer;

View File

@@ -6,8 +6,8 @@ import com.dfsek.terra.api.math.vector.Location;
import com.dfsek.terra.api.math.vector.Vector3;
import com.dfsek.terra.api.structures.structure.Rotation;
import com.dfsek.terra.api.util.FastRandom;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.biome.provider.BiomeProvider;
import com.dfsek.terra.api.world.biome.UserDefinedBiome;
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
import com.dfsek.terra.world.population.items.TerraStructure;
import net.jafama.FastMath;
import org.jetbrains.annotations.NotNull;

View File

@@ -1,18 +0,0 @@
package com.dfsek.terra.biome.pipeline;
import com.dfsek.terra.biome.TerraBiome;
import com.dfsek.terra.biome.pipeline.expand.BiomeExpander;
import com.dfsek.terra.biome.pipeline.mutator.BiomeMutator;
import com.dfsek.terra.biome.pipeline.source.BiomeSource;
public interface BiomeHolder {
BiomeHolder expand(BiomeExpander expander);
void mutate(BiomeMutator mutator);
void fill(BiomeSource source);
TerraBiome getBiome(int x, int z);
TerraBiome getBiomeRaw(int x, int z);
}

View File

@@ -1,7 +0,0 @@
package com.dfsek.terra.biome.pipeline.expand;
import com.dfsek.terra.biome.TerraBiome;
public interface BiomeExpander {
TerraBiome getBetween(double x, double z, TerraBiome... others);
}

View File

@@ -1,7 +0,0 @@
package com.dfsek.terra.biome.pipeline.source;
import com.dfsek.terra.biome.TerraBiome;
public interface BiomeSource {
TerraBiome getBiome(double x, double z);
}

View File

@@ -1,10 +0,0 @@
package com.dfsek.terra.biome.pipeline.stages;
import com.dfsek.terra.biome.pipeline.BiomeHolder;
public interface Stage {
boolean isExpansion();
BiomeHolder apply(BiomeHolder in);
}

View File

@@ -6,10 +6,10 @@ import com.dfsek.terra.api.math.vector.Vector3;
import com.dfsek.terra.api.platform.world.World;
import com.dfsek.terra.api.util.FastRandom;
import com.dfsek.terra.api.util.GlueList;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.UserDefinedBiome;
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
import com.dfsek.terra.api.world.carving.Worm;
import com.dfsek.terra.biome.TerraBiome;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.biome.provider.BiomeProvider;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;

View File

@@ -3,7 +3,7 @@ package com.dfsek.terra.carving;
import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.platform.block.MaterialData;
import com.dfsek.terra.util.MaterialSet;
import com.dfsek.terra.api.util.world.MaterialSet;
import java.util.Map;
import java.util.TreeMap;

View File

@@ -13,9 +13,9 @@ import com.dfsek.terra.api.math.vector.Vector3;
import com.dfsek.terra.api.platform.world.World;
import com.dfsek.terra.api.util.FastRandom;
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
import com.dfsek.terra.api.world.biome.UserDefinedBiome;
import com.dfsek.terra.api.world.carving.Carver;
import com.dfsek.terra.api.world.carving.Worm;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.config.loaders.config.function.FunctionTemplate;
import com.dfsek.terra.config.templates.BiomeTemplate;
import com.dfsek.terra.config.templates.CarverTemplate;

View File

@@ -10,12 +10,13 @@ import com.dfsek.terra.api.math.noise.samplers.ImageSampler;
import com.dfsek.terra.api.math.noise.samplers.noise.CellularSampler;
import com.dfsek.terra.api.util.seeded.SourceSeeded;
import com.dfsek.terra.api.util.seeded.StageSeeded;
import com.dfsek.terra.api.util.world.MaterialSet;
import com.dfsek.terra.api.world.biome.pipeline.stages.ExpanderStage;
import com.dfsek.terra.api.world.biome.pipeline.stages.MutatorStage;
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
import com.dfsek.terra.api.world.biome.provider.ImageBiomeProvider;
import com.dfsek.terra.api.world.palette.holder.PaletteHolder;
import com.dfsek.terra.api.world.palette.holder.PaletteLayerHolder;
import com.dfsek.terra.biome.pipeline.stages.ExpanderStage;
import com.dfsek.terra.biome.pipeline.stages.MutatorStage;
import com.dfsek.terra.biome.provider.BiomeProvider;
import com.dfsek.terra.biome.provider.ImageBiomeProvider;
import com.dfsek.terra.carving.CarverPalette;
import com.dfsek.terra.config.loaders.LinkedHashMapLoader;
import com.dfsek.terra.config.loaders.MaterialSetLoader;
@@ -44,7 +45,6 @@ import com.dfsek.terra.config.loaders.config.sampler.templates.normalizer.Normal
import com.dfsek.terra.config.loaders.palette.CarverPaletteLoader;
import com.dfsek.terra.config.loaders.palette.PaletteHolderLoader;
import com.dfsek.terra.config.loaders.palette.PaletteLayerLoader;
import com.dfsek.terra.util.MaterialSet;
import com.dfsek.terra.world.population.items.flora.FloraLayer;
import com.dfsek.terra.world.population.items.flora.TerraFlora;
import com.dfsek.terra.world.population.items.ores.Ore;

View File

@@ -2,8 +2,8 @@ package com.dfsek.terra.config.factories;
import com.dfsek.paralithic.eval.parser.Scope;
import com.dfsek.terra.api.core.TerraPlugin;
import com.dfsek.terra.biome.TerraBiome;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.UserDefinedBiome;
import com.dfsek.terra.config.builder.GeneratorBuilder;
import com.dfsek.terra.config.loaders.config.function.FunctionTemplate;
import com.dfsek.terra.config.pack.ConfigPack;

View File

@@ -4,7 +4,7 @@ import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.tectonic.loading.TypeLoader;
import com.dfsek.terra.api.platform.block.MaterialData;
import com.dfsek.terra.util.MaterialSet;
import com.dfsek.terra.api.util.world.MaterialSet;
import java.lang.reflect.Type;
import java.util.List;

View File

@@ -3,10 +3,10 @@ package com.dfsek.terra.config.loaders;
import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.platform.block.MaterialData;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.flora.Flora;
import com.dfsek.terra.api.world.palette.Palette;
import com.dfsek.terra.api.world.tree.Tree;
import com.dfsek.terra.biome.TerraBiome;
import java.lang.reflect.Type;
import java.util.Map;

View File

@@ -3,7 +3,7 @@ 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.biome.provider.BiomeProvider;
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
import com.dfsek.terra.config.loaders.config.biome.templates.source.BiomePipelineTemplate;
import com.dfsek.terra.config.loaders.config.biome.templates.source.ImageProviderTemplate;
import com.dfsek.terra.config.loaders.config.biome.templates.source.SingleBiomeProviderTemplate;

View File

@@ -6,8 +6,8 @@ import com.dfsek.tectonic.loading.TypeLoader;
import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
import com.dfsek.terra.api.util.seeded.SourceSeeded;
import com.dfsek.terra.biome.TerraBiome;
import com.dfsek.terra.biome.pipeline.source.RandomSource;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.pipeline.source.RandomSource;
import com.dfsek.terra.config.loaders.Types;
import java.lang.reflect.Type;

View File

@@ -4,8 +4,8 @@ import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.tectonic.loading.TypeLoader;
import com.dfsek.terra.api.util.seeded.StageSeeded;
import com.dfsek.terra.biome.pipeline.stages.ExpanderStage;
import com.dfsek.terra.biome.pipeline.stages.MutatorStage;
import com.dfsek.terra.api.world.biome.pipeline.stages.ExpanderStage;
import com.dfsek.terra.api.world.biome.pipeline.stages.MutatorStage;
import com.dfsek.terra.config.loaders.config.biome.templates.stage.expander.ExpanderStageTemplate;
import com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator.BorderListMutatorTemplate;
import com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator.BorderMutatorTemplate;

View File

@@ -5,9 +5,9 @@ import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.api.core.TerraPlugin;
import com.dfsek.terra.api.util.seeded.SourceSeeded;
import com.dfsek.terra.api.util.seeded.StageSeeded;
import com.dfsek.terra.biome.pipeline.BiomePipeline;
import com.dfsek.terra.biome.provider.BiomeProvider;
import com.dfsek.terra.biome.provider.StandardBiomeProvider;
import com.dfsek.terra.api.world.biome.pipeline.BiomePipeline;
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
import com.dfsek.terra.api.world.biome.provider.StandardBiomeProvider;
import com.dfsek.terra.registry.config.BiomeRegistry;
import java.util.List;

View File

@@ -6,7 +6,7 @@ import com.dfsek.tectonic.loading.object.ObjectTemplate;
import com.dfsek.terra.api.math.noise.NoiseSampler;
import com.dfsek.terra.api.math.noise.samplers.noise.ConstantSampler;
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
import com.dfsek.terra.biome.provider.BiomeProvider;
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
import com.dfsek.terra.registry.config.BiomeRegistry;
public abstract class BiomeProviderTemplate implements ObjectTemplate<BiomeProvider.BiomeProviderBuilder>, BiomeProvider.BiomeProviderBuilder {

View File

@@ -1,8 +1,8 @@
package com.dfsek.terra.config.loaders.config.biome.templates.source;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.biome.provider.BiomeProvider;
import com.dfsek.terra.biome.provider.ImageBiomeProvider;
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
import com.dfsek.terra.api.world.biome.provider.ImageBiomeProvider;
import com.dfsek.terra.registry.config.BiomeRegistry;
import java.awt.image.BufferedImage;

View File

@@ -1,9 +1,9 @@
package com.dfsek.terra.config.loaders.config.biome.templates.source;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.biome.TerraBiome;
import com.dfsek.terra.biome.provider.BiomeProvider;
import com.dfsek.terra.biome.provider.SingleBiomeProvider;
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.SingleBiomeProvider;
import com.dfsek.terra.registry.config.BiomeRegistry;
public class SingleBiomeProviderTemplate extends BiomeProviderTemplate {

View File

@@ -5,7 +5,7 @@ import com.dfsek.tectonic.loading.object.ObjectTemplate;
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
import com.dfsek.terra.api.util.seeded.SeededBuilder;
import com.dfsek.terra.api.util.seeded.StageSeeded;
import com.dfsek.terra.biome.pipeline.stages.Stage;
import com.dfsek.terra.api.world.biome.pipeline.stages.Stage;
public abstract class StageTemplate implements ObjectTemplate<SeededBuilder<Stage>>, StageSeeded {
@Value("noise")

View File

@@ -1,8 +1,8 @@
package com.dfsek.terra.config.loaders.config.biome.templates.stage.expander;
import com.dfsek.terra.biome.pipeline.expand.FractalExpander;
import com.dfsek.terra.biome.pipeline.stages.ExpanderStage;
import com.dfsek.terra.biome.pipeline.stages.Stage;
import com.dfsek.terra.api.world.biome.pipeline.expand.FractalExpander;
import com.dfsek.terra.api.world.biome.pipeline.stages.ExpanderStage;
import com.dfsek.terra.api.world.biome.pipeline.stages.Stage;
import com.dfsek.terra.config.loaders.config.biome.templates.stage.StageTemplate;
public class ExpanderStageTemplate extends StageTemplate {

View File

@@ -2,9 +2,9 @@ package com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.biome.TerraBiome;
import com.dfsek.terra.biome.pipeline.mutator.BiomeMutator;
import com.dfsek.terra.biome.pipeline.mutator.BorderListMutator;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.pipeline.mutator.BiomeMutator;
import com.dfsek.terra.api.world.biome.pipeline.mutator.BorderListMutator;
import java.util.Map;

View File

@@ -2,9 +2,9 @@ package com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.biome.TerraBiome;
import com.dfsek.terra.biome.pipeline.mutator.BiomeMutator;
import com.dfsek.terra.biome.pipeline.mutator.BorderMutator;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.pipeline.mutator.BiomeMutator;
import com.dfsek.terra.api.world.biome.pipeline.mutator.BorderMutator;
@SuppressWarnings("unused")
public class BorderMutatorTemplate extends MutatorStageTemplate {

View File

@@ -1,8 +1,8 @@
package com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator;
import com.dfsek.terra.biome.pipeline.mutator.BiomeMutator;
import com.dfsek.terra.biome.pipeline.stages.MutatorStage;
import com.dfsek.terra.biome.pipeline.stages.Stage;
import com.dfsek.terra.api.world.biome.pipeline.mutator.BiomeMutator;
import com.dfsek.terra.api.world.biome.pipeline.stages.MutatorStage;
import com.dfsek.terra.api.world.biome.pipeline.stages.Stage;
import com.dfsek.terra.config.loaders.config.biome.templates.stage.StageTemplate;
public abstract class MutatorStageTemplate extends StageTemplate {

View File

@@ -2,9 +2,9 @@ package com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.biome.TerraBiome;
import com.dfsek.terra.biome.pipeline.mutator.BiomeMutator;
import com.dfsek.terra.biome.pipeline.mutator.ReplaceListMutator;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.pipeline.mutator.BiomeMutator;
import com.dfsek.terra.api.world.biome.pipeline.mutator.ReplaceListMutator;
import java.util.Map;

View File

@@ -2,9 +2,9 @@ package com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.biome.TerraBiome;
import com.dfsek.terra.biome.pipeline.mutator.BiomeMutator;
import com.dfsek.terra.biome.pipeline.mutator.ReplaceMutator;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.pipeline.mutator.BiomeMutator;
import com.dfsek.terra.api.world.biome.pipeline.mutator.ReplaceMutator;
@SuppressWarnings("unused")
public class ReplaceMutatorTemplate extends MutatorStageTemplate {

View File

@@ -1,7 +1,7 @@
package com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator;
import com.dfsek.terra.biome.pipeline.mutator.BiomeMutator;
import com.dfsek.terra.biome.pipeline.mutator.SmoothMutator;
import com.dfsek.terra.api.world.biome.pipeline.mutator.BiomeMutator;
import com.dfsek.terra.api.world.biome.pipeline.mutator.SmoothMutator;
public class SmoothMutatorTemplate extends MutatorStageTemplate {
@Override

View File

@@ -6,9 +6,9 @@ import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.tectonic.loading.TypeLoader;
import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.util.world.MaterialSet;
import com.dfsek.terra.carving.CarverPalette;
import com.dfsek.terra.config.loaders.Types;
import com.dfsek.terra.util.MaterialSet;
import java.lang.reflect.Type;
import java.util.List;

View File

@@ -13,11 +13,11 @@ import com.dfsek.terra.api.core.event.events.config.ConfigPackPreLoadEvent;
import com.dfsek.terra.api.structures.loot.LootTable;
import com.dfsek.terra.api.structures.script.StructureScript;
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
import com.dfsek.terra.api.world.flora.Flora;
import com.dfsek.terra.api.world.palette.Palette;
import com.dfsek.terra.api.world.tree.Tree;
import com.dfsek.terra.biome.TerraBiome;
import com.dfsek.terra.biome.provider.BiomeProvider;
import com.dfsek.terra.carving.UserDefinedCarver;
import com.dfsek.terra.config.exception.FileMissingException;
import com.dfsek.terra.config.factories.BiomeFactory;

View File

@@ -2,7 +2,7 @@ package com.dfsek.terra.config.pack;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.tectonic.config.ConfigTemplate;
import com.dfsek.terra.biome.provider.BiomeProvider;
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
public class ConfigPackPostTemplate implements ConfigTemplate {
@Value("biomes")

View File

@@ -5,8 +5,8 @@ import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.api.math.Range;
import com.dfsek.terra.api.platform.block.MaterialData;
import com.dfsek.terra.api.util.world.MaterialSet;
import com.dfsek.terra.carving.CarverPalette;
import com.dfsek.terra.util.MaterialSet;
import java.util.HashMap;
import java.util.Map;

View File

@@ -3,8 +3,8 @@ package com.dfsek.terra.config.templates;
import com.dfsek.tectonic.annotations.Abstractable;
import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.api.util.world.MaterialSet;
import com.dfsek.terra.api.world.palette.holder.PaletteLayerHolder;
import com.dfsek.terra.util.MaterialSet;
import com.dfsek.terra.world.population.items.flora.TerraFlora;
import java.util.List;

View File

@@ -5,7 +5,7 @@ import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.api.math.Range;
import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.util.MaterialSet;
import com.dfsek.terra.api.util.world.MaterialSet;
import com.dfsek.terra.world.population.items.ores.Ore;
@SuppressWarnings({"unused", "FieldMayBeFinal"})

View File

@@ -5,7 +5,7 @@ import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.api.structures.script.StructureScript;
import com.dfsek.terra.util.MaterialSet;
import com.dfsek.terra.api.util.world.MaterialSet;
@SuppressWarnings({"unused", "FieldMayBeFinal"})
public class TreeTemplate extends AbstractableTemplate {

View File

@@ -0,0 +1,56 @@
package com.dfsek.terra.registry;
import com.dfsek.terra.addons.addon.TerraAddon;
import com.dfsek.terra.addons.loading.AddonClassLoader;
import com.dfsek.terra.addons.loading.AddonLoadException;
import com.dfsek.terra.api.core.TerraPlugin;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.Set;
public class AddonRegistry extends TerraRegistry<TerraAddon> {
public boolean loadAll(TerraPlugin main) {
boolean valid = true;
File addonsFolder = new File(main.getDataFolder(), "addons");
addonsFolder.mkdirs();
for(File jar : addonsFolder.listFiles(file -> file.getName().endsWith(".jar"))) {
try {
main.getLogger().info("Loading Addon(s) from: " + jar.getName());
load(jar, main);
} catch(IOException | AddonLoadException e) {
e.printStackTrace();
valid = false;
}
}
return valid;
}
public void load(File file, TerraPlugin main) throws AddonLoadException, IOException {
Set<Class<? extends TerraAddon>> addonClasses = AddonClassLoader.fetchAddonClasses(file);
for(Class<? extends TerraAddon> addonClass : addonClasses) {
Constructor<? extends TerraAddon> constructor;
try {
constructor = addonClass.getConstructor();
} catch(NoSuchMethodException e) {
throw new AddonLoadException("Addon class has no valid constructor: " + addonClass.getCanonicalName(), e);
}
TerraAddon addon;
try {
addon = constructor.newInstance();
} catch(InstantiationException | IllegalAccessException | InvocationTargetException e) {
throw new AddonLoadException("Failed to instantiate addon: " + addonClass.getCanonicalName(), e);
}
try {
addChecked(addon.getName(), addon);
} catch(IllegalArgumentException e) {
throw new AddonLoadException("Duplicate addon ID; addon with ID " + addon.getName() + " is already loaded.");
}
main.getLogger().info("Loaded addon " + addon.getName() + " v" + addon.getVersion() + ", by " + addon.getAuthor());
addon.initialize();
}
}
}

View File

@@ -29,7 +29,7 @@ public class ConfigRegistry extends TerraRegistry<ConfigPack> {
valid = false;
}
}
for(File zip : packsFolder.listFiles(file -> file.getName().endsWith(".zip") || file.getName().endsWith(".jar") || file.getName().endsWith(".com.dfsek.terra"))) {
for(File zip : packsFolder.listFiles(file -> file.getName().endsWith(".zip") || file.getName().endsWith(".terra"))) {
try {
main.getDebugLogger().info("Loading ZIP archive: " + zip.getName());
load(new ZipFile(zip), main);

View File

@@ -36,6 +36,11 @@ public abstract class TerraRegistry<T> implements TypeLoader<T> {
return exists;
}
public void addChecked(String name, T value) {
if(objects.containsKey(name)) throw new IllegalArgumentException("Value is already defined in registry.");
objects.put(name, value);
}
/**
* Check if the registry contains an object.
*

View File

@@ -2,7 +2,7 @@ package com.dfsek.terra.registry.config;
import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.terra.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.registry.TerraRegistry;
import java.lang.reflect.Type;

View File

@@ -3,9 +3,9 @@ package com.dfsek.terra.registry.config;
import com.dfsek.terra.api.core.TerraPlugin;
import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.platform.block.MaterialData;
import com.dfsek.terra.api.util.world.MaterialSet;
import com.dfsek.terra.api.world.flora.Flora;
import com.dfsek.terra.registry.TerraRegistry;
import com.dfsek.terra.util.MaterialSet;
import com.dfsek.terra.world.population.items.flora.ConstantFlora;
import java.util.Arrays;

View File

@@ -7,9 +7,9 @@ import com.dfsek.terra.api.math.vector.Vector3;
import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.platform.world.World;
import com.dfsek.terra.api.platform.world.generator.GeneratorWrapper;
import com.dfsek.terra.api.world.biome.UserDefinedBiome;
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
import com.dfsek.terra.api.world.palette.Palette;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.biome.provider.BiomeProvider;
import com.dfsek.terra.config.pack.ConfigPack;
import com.dfsek.terra.profiler.WorldProfiler;
import com.dfsek.terra.world.generation.math.Sampler;

View File

@@ -13,16 +13,16 @@ import com.dfsek.terra.api.platform.block.data.Waterlogged;
import com.dfsek.terra.api.platform.world.BiomeGrid;
import com.dfsek.terra.api.platform.world.World;
import com.dfsek.terra.api.platform.world.generator.ChunkGenerator;
import com.dfsek.terra.api.util.world.PaletteUtil;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.UserDefinedBiome;
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
import com.dfsek.terra.api.world.generation.TerraChunkGenerator;
import com.dfsek.terra.api.world.palette.Palette;
import com.dfsek.terra.api.world.palette.SinglePalette;
import com.dfsek.terra.biome.TerraBiome;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.biome.provider.BiomeProvider;
import com.dfsek.terra.config.pack.ConfigPack;
import com.dfsek.terra.config.templates.BiomeTemplate;
import com.dfsek.terra.profiler.ProfileFuture;
import com.dfsek.terra.util.PaletteUtil;
import com.dfsek.terra.world.Carver;
import com.dfsek.terra.world.TerraWorld;
import com.dfsek.terra.world.carving.NoiseCarver;

View File

@@ -1,7 +1,7 @@
package com.dfsek.terra.world.generation.math;
import com.dfsek.terra.api.platform.world.World;
import com.dfsek.terra.biome.provider.BiomeProvider;
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
import com.dfsek.terra.world.generation.math.interpolation.BiomeChunkInterpolator;
import com.dfsek.terra.world.generation.math.interpolation.ElevationInterpolator;
import net.jafama.FastMath;

View File

@@ -4,7 +4,7 @@ import com.dfsek.terra.api.math.vector.Vector3;
import com.dfsek.terra.api.platform.world.World;
import com.dfsek.terra.api.util.mutable.MutableInteger;
import com.dfsek.terra.api.world.biome.Generator;
import com.dfsek.terra.biome.provider.BiomeProvider;
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
import net.jafama.FastMath;
import java.util.HashMap;

View File

@@ -2,7 +2,7 @@ package com.dfsek.terra.world.generation.math.interpolation;
import com.dfsek.terra.api.platform.world.World;
import com.dfsek.terra.api.world.biome.Generator;
import com.dfsek.terra.biome.provider.BiomeProvider;
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
import com.dfsek.terra.world.generation.WorldGenerator;
public class ElevationInterpolator {

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.population;
package com.dfsek.terra.world.population;
import com.dfsek.terra.api.core.TerraPlugin;
import com.dfsek.terra.api.math.vector.Location;
@@ -8,12 +8,12 @@ import com.dfsek.terra.api.platform.block.MaterialData;
import com.dfsek.terra.api.platform.handle.WorldHandle;
import com.dfsek.terra.api.platform.world.Chunk;
import com.dfsek.terra.api.platform.world.World;
import com.dfsek.terra.api.util.world.PopulationUtil;
import com.dfsek.terra.api.world.generation.TerraBlockPopulator;
import com.dfsek.terra.carving.UserDefinedCarver;
import com.dfsek.terra.config.pack.ConfigPack;
import com.dfsek.terra.config.templates.CarverTemplate;
import com.dfsek.terra.profiler.ProfileFuture;
import com.dfsek.terra.util.PopulationUtil;
import com.dfsek.terra.world.TerraWorld;
import org.jetbrains.annotations.NotNull;

View File

@@ -4,11 +4,11 @@ import com.dfsek.terra.api.core.TerraPlugin;
import com.dfsek.terra.api.math.vector.Vector2;
import com.dfsek.terra.api.platform.world.Chunk;
import com.dfsek.terra.api.platform.world.World;
import com.dfsek.terra.api.util.world.PopulationUtil;
import com.dfsek.terra.api.world.biome.UserDefinedBiome;
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
import com.dfsek.terra.api.world.generation.TerraBlockPopulator;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.biome.provider.BiomeProvider;
import com.dfsek.terra.profiler.ProfileFuture;
import com.dfsek.terra.util.PopulationUtil;
import com.dfsek.terra.world.TerraWorld;
import com.dfsek.terra.world.population.items.flora.FloraLayer;
import org.jetbrains.annotations.NotNull;

View File

@@ -6,9 +6,9 @@ import com.dfsek.terra.api.math.vector.Vector3;
import com.dfsek.terra.api.platform.world.Chunk;
import com.dfsek.terra.api.platform.world.World;
import com.dfsek.terra.api.util.FastRandom;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.UserDefinedBiome;
import com.dfsek.terra.api.world.generation.TerraBlockPopulator;
import com.dfsek.terra.biome.TerraBiome;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.config.templates.BiomeTemplate;
import com.dfsek.terra.profiler.ProfileFuture;
import com.dfsek.terra.world.TerraWorld;

Some files were not shown because too many files have changed in this diff Show More