Successful default config load in Fabric

This commit is contained in:
dfsek 2020-12-13 02:00:15 -07:00
parent a3add9b20f
commit 2c15a9fc0c
19 changed files with 70 additions and 600 deletions

View File

@ -1,31 +1,34 @@
package com.dfsek.terra.api.gaea.lang;
import com.dfsek.tectonic.config.Configuration;
import com.dfsek.terra.api.generic.CommandSender;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Language {
private final Configuration configuration;
public Language(File file) throws IOException {
load(file);
}
public void load(@NotNull File file) throws IOException {
configuration = new Configuration(new FileInputStream(file));
}
@SuppressWarnings("unchecked")
public Message getMessage(String id) {
Object m = null;
Message temp;
if(m instanceof List) {
temp = new MultiLineMessage((List<String>) m);
} else if(m instanceof String) {
temp = new SingleLineMessage((String) m);
} else return new SingleLineMessage("message:" + id + ":translation_undefined");
if(temp.isEmpty()) return new SingleLineMessage("message:" + id + ":translation_undefined");
Message temp = null;
if(configuration.contains(id)) {
Object m = configuration.get(id);
if(m instanceof List) {
temp = new MultiLineMessage((List<String>) m);
} else if(m instanceof String) {
temp = new SingleLineMessage((String) m);
} else return new SingleLineMessage("message:" + id + ":translation_undefined");
}
if(temp == null || temp.isEmpty()) return new SingleLineMessage("message:" + id + ":translation_undefined");
return temp;
}
public void log(String messageID, Level level, Logger logger, String... args) {

View File

@ -29,7 +29,10 @@ public final class LangUtil {
Debug.error("Report this to Terra!");
}
try {
language = new Language(new File(main.getDataFolder(), "lang" + File.separator + langID + ".yml"));
File file1 = new File(file, langID + ".yml");
logger.info(file1.getAbsolutePath());
language = new Language(file1);
logger.info("Loaded language " + langID);
} catch(IOException e) {
logger.severe("Unable to load language: " + langID);
e.printStackTrace();

View File

@ -37,12 +37,14 @@ dependencies {
implementation("com.dfsek:Tectonic:1.0.3")
implementation("net.jafama:jafama:2.3.2")
compileOnly("com.googlecode.json-simple:json-simple:1.1")
implementation("com.googlecode.json-simple:json-simple:1.1")
implementation("com.google.guava:guava:30.0-jre")
compileOnly("org.jetbrains:annotations:20.1.0")
implementation("org.yaml:snakeyaml:1.27")
// To change the versions see the gradle.properties file
minecraft("com.mojang:minecraft:1.16.4")
mappings("net.fabricmc:yarn:1.16.4+build.6:v2")

View File

@ -2,17 +2,23 @@ package com.dfsek.terra.fabric;
import com.dfsek.tectonic.loading.TypeRegistry;
import com.dfsek.terra.TerraWorld;
import com.dfsek.terra.api.GenericLoaders;
import com.dfsek.terra.api.gaea.lang.Language;
import com.dfsek.terra.api.generic.TerraPlugin;
import com.dfsek.terra.api.generic.inventory.ItemHandle;
import com.dfsek.terra.api.generic.world.World;
import com.dfsek.terra.api.generic.world.WorldHandle;
import com.dfsek.terra.api.generic.world.block.BlockData;
import com.dfsek.terra.api.generic.world.block.MaterialData;
import com.dfsek.terra.config.base.PluginConfig;
import com.dfsek.terra.config.lang.LangUtil;
import com.dfsek.terra.fabric.inventory.FabricItemHandle;
import com.dfsek.terra.fabric.mixin.GeneratorTypeAccessor;
import com.dfsek.terra.fabric.world.FabricBiome;
import com.dfsek.terra.fabric.world.FabricWorldHandle;
import com.dfsek.terra.registry.ConfigRegistry;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.world.GeneratorType;
import net.minecraft.util.registry.Registry;
import net.minecraft.world.biome.Biome;
@ -23,7 +29,7 @@ import net.minecraft.world.gen.chunk.FlatChunkGeneratorConfig;
import net.minecraft.world.gen.chunk.StructuresConfig;
import java.io.File;
import java.net.URISyntaxException;
import java.io.IOException;
import java.util.Collections;
import java.util.Optional;
import java.util.logging.Logger;
@ -38,10 +44,13 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
return new FlatChunkGenerator(config);
}
};
private final GenericLoaders genericLoaders = new GenericLoaders(this);
private final Logger logger = Logger.getLogger("Terra");
private final ItemHandle itemHandle = new FabricItemHandle();
private final WorldHandle worldHandle = new FabricWorldHandle();
private final ConfigRegistry registry = new ConfigRegistry();
private File config;
@Override
public WorldHandle getWorldHandle() {
@ -70,12 +79,7 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
@Override
public File getDataFolder() {
try {
return new File(new File(TerraFabricPlugin.class.getProtectionDomain().getCodeSource().getLocation()
.toURI()), "terra");
} catch(URISyntaxException e) {
throw new RuntimeException(e);
}
return config;
}
@Override
@ -85,7 +89,11 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
@Override
public Language getLanguage() {
return null;
try {
return new Language(new File(getDataFolder(), "lang/en_us/yml"));
} catch(IOException e) {
throw new IllegalArgumentException();
}
}
@Override
@ -105,14 +113,19 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
@Override
public void register(TypeRegistry registry) {
genericLoaders.register(registry);
registry
.registerLoader(BlockData.class, (t, o, l) -> worldHandle.createBlockData((String) o))
.registerLoader(MaterialData.class, (t, o, l) -> worldHandle.createMaterialData((String) o))
.registerLoader(com.dfsek.terra.api.generic.world.Biome.class, (t, o, l) -> new FabricBiome());
}
@Override
public void onInitialize() {
config = new File(FabricLoader.getInstance().getConfigDir().toFile(), "Terra");
LangUtil.load("en_us", this);
logger.info("Initializing Terra...");
GeneratorTypeAccessor.getValues().add(TERRA);
GeneratorTypeAccessor.accessor$getValues().add(TERRA);
registry.loadAll(this);
}
}

View File

@ -9,7 +9,7 @@ import java.util.List;
@Mixin(GeneratorType.class)
public interface GeneratorTypeAccessor {
@Accessor("VALUES")
static List<GeneratorType> getValues() {
static List<GeneratorType> accessor$getValues() {
throw new AssertionError();
}
}

View File

@ -0,0 +1,10 @@
package com.dfsek.terra.fabric.world;
import com.dfsek.terra.api.generic.world.Biome;
public class FabricBiome implements Biome {
@Override
public Object getHandle() {
return null;
}
}

View File

@ -5,6 +5,9 @@ import com.dfsek.terra.api.generic.world.WorldHandle;
import com.dfsek.terra.api.generic.world.block.Block;
import com.dfsek.terra.api.generic.world.block.BlockData;
import com.dfsek.terra.api.generic.world.block.MaterialData;
import com.mojang.brigadier.StringReader;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import net.minecraft.command.argument.BlockArgumentParser;
public class FabricWorldHandle implements WorldHandle {
@Override
@ -23,13 +26,18 @@ public class FabricWorldHandle implements WorldHandle {
}
@Override
public BlockData createBlockData(String data) {
return null;
public FabricBlockData createBlockData(String data) {
BlockArgumentParser parser = new BlockArgumentParser(new StringReader(data), true);
try {
return new FabricBlockData(parser.parse(true).getBlockState());
} catch(CommandSyntaxException e) {
throw new IllegalArgumentException(e);
}
}
@Override
public MaterialData createMaterialData(String data) {
return null;
return new FabricMaterialData(createBlockData(data).getHandle().getMaterial());
}
@Override

View File

@ -4,10 +4,10 @@
"package": "com.dfsek.terra.fabric.mixin",
"compatibilityLevel": "JAVA_8",
"mixins": [],
"client": [],
"server": [
"client": [
"GeneratorTypeAccessor"
],
"server": [],
"injectors": {
"defaultRequire": 1
}

View File

@ -1,50 +0,0 @@
plugins {
java
maven
id("org.spongepowered.plugin").version("0.9.0")
id("com.github.johnrengelman.shadow")
}
group = "com.dfsek.terra"
repositories {
mavenCentral()
jcenter()
maven { url = uri("https://repo.codemc.org/repository/maven-public") }
}
dependencies {
compile("org.spongepowered:spongeapi:7.2.0")
testImplementation("org.junit.jupiter:junit-jupiter-api:5.7.0")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.7.0")
implementation("org.apache.commons:commons-rng-core:1.3")
implementation("com.scireum:parsii:1.2.1")
implementation("com.dfsek:Tectonic:1.0.3")
implementation("net.jafama:jafama:2.3.2")
compileOnly("com.googlecode.json-simple:json-simple:1.1")
implementation("com.google.guava:guava:30.0-jre")
compileOnly("org.jetbrains:annotations:20.1.0")
implementation(project(":common"))
}
tasks.named<com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar>("shadowJar") {
archiveClassifier.set("")
archiveBaseName.set("Terra")
setVersion(project.version)
relocate("org.apache.commons", "com.dfsek.terra.lib.commons")
relocate("org.bstats.bukkit", "com.dfsek.terra.lib.bstats")
relocate("parsii", "com.dfsek.terra.lib.parsii")
relocate("io.papermc.lib", "com.dfsek.terra.lib.paperlib")
relocate("net.jafama", "com.dfsek.terra.lib.jafama")
relocate("com.dfsek.tectonic", "com.dfsek.terra.lib.tectonic")
relocate("net.jafama", "com.dfsek.terra.lib.jafama")
minimize()
}

View File

@ -1,112 +0,0 @@
package com.dfsek.terra.sponge;
import com.dfsek.tectonic.loading.TypeRegistry;
import com.dfsek.terra.TerraWorld;
import com.dfsek.terra.api.gaea.lang.Language;
import com.dfsek.terra.api.generic.TerraPlugin;
import com.dfsek.terra.api.generic.inventory.ItemHandle;
import com.dfsek.terra.api.generic.world.World;
import com.dfsek.terra.api.generic.world.WorldHandle;
import com.dfsek.terra.config.base.PluginConfig;
import com.dfsek.terra.registry.ConfigRegistry;
import com.dfsek.terra.sponge.world.SpongeWorldHandle;
import com.google.inject.Inject;
import org.spongepowered.api.GameRegistry;
import org.spongepowered.api.config.ConfigDir;
import org.spongepowered.api.event.Listener;
import org.spongepowered.api.event.game.state.GameStartedServerEvent;
import org.spongepowered.api.plugin.Plugin;
import java.io.File;
import java.util.logging.Logger;
@Plugin(id = "terra", name = "Terra", version = "@VERSION", description = "Terra world generator")
public class TerraSpongePlugin implements TerraPlugin {
private final ConfigRegistry registry = new ConfigRegistry();
private final WorldHandle worldHandle = new SpongeWorldHandle(this);
@Inject
private Logger logger;
private boolean enabled = false;
@Inject
@ConfigDir(sharedRoot = false)
private File configDir;
@Inject
private GameRegistry gameRegistry;
public GameRegistry getGameRegistry() {
return gameRegistry;
}
@Listener
public void serverStart(GameStartedServerEvent event) {
logger.info("Hello Sponge!");
logger.info("Config dir is: " + configDir);
registry.loadAll(this);
enabled = true;
}
@Override
public WorldHandle getWorldHandle() {
return worldHandle;
}
@Override
public boolean isEnabled() {
return enabled;
}
@Override
public TerraWorld getWorld(World world) {
return null;
}
@Override
public Logger getLogger() {
return logger;
}
@Override
public PluginConfig getTerraConfig() {
return null;
}
@Override
public File getDataFolder() {
return configDir;
}
@Override
public boolean isDebug() {
return false;
}
@Override
public Language getLanguage() {
return null;
}
@Override
public ConfigRegistry getRegistry() {
return null;
}
@Override
public void reload() {
}
@Override
public ItemHandle getItemHandle() {
return null;
}
@Override
public void register(TypeRegistry registry) {
}
}

View File

@ -1,4 +0,0 @@
package com.dfsek.terra.sponge.mixin;
public class BlockStateParserMixin {
}

View File

@ -1,38 +0,0 @@
package com.dfsek.terra.sponge.world;
import com.dfsek.terra.api.generic.world.Chunk;
import com.dfsek.terra.api.generic.world.World;
import com.dfsek.terra.api.generic.world.block.Block;
public class SpongeChunk implements Chunk {
private final org.spongepowered.api.world.Chunk delegate;
public SpongeChunk(org.spongepowered.api.world.Chunk delegate) {
this.delegate = delegate;
}
@Override
public int getX() {
return delegate.getPosition().getX();
}
@Override
public int getZ() {
return delegate.getPosition().getZ();
}
@Override
public World getWorld() {
return new SpongeWorld(delegate.getWorld());
}
@Override
public Block getBlock(int x, int y, int z) {
return null;
}
@Override
public org.spongepowered.api.world.Chunk getHandle() {
return delegate;
}
}

View File

@ -1,87 +0,0 @@
package com.dfsek.terra.sponge.world;
import com.dfsek.terra.api.generic.Entity;
import com.dfsek.terra.api.generic.Tree;
import com.dfsek.terra.api.generic.generator.ChunkGenerator;
import com.dfsek.terra.api.generic.world.Chunk;
import com.dfsek.terra.api.generic.world.World;
import com.dfsek.terra.api.generic.world.block.Block;
import com.dfsek.terra.api.generic.world.vector.Location;
import com.dfsek.terra.sponge.world.generator.SpongeChunkGenerator;
import java.io.File;
import java.util.UUID;
import java.util.function.Consumer;
public class SpongeWorld implements World {
private final org.spongepowered.api.world.World delegate;
public SpongeWorld(org.spongepowered.api.world.World delegate) {
this.delegate = delegate;
}
@Override
public long getSeed() {
return delegate.getProperties().getSeed();
}
@Override
public int getMaxHeight() {
return 255;
}
@Override
public ChunkGenerator getGenerator() {
return new SpongeChunkGenerator(delegate.getWorldGenerator());
}
@Override
public String getName() {
return delegate.getName();
}
@Override
public UUID getUID() {
return delegate.getUniqueId();
}
@Override
public boolean isChunkGenerated(int x, int z) {
return delegate.loadChunk(x, 0, z, false).isPresent(); // TODO: better implementation
}
@Override
public Chunk getChunkAt(int x, int z) {
return null;
}
@Override
public File getWorldFolder() {
return null;
}
@Override
public Block getBlockAt(int x, int y, int z) {
return null;
}
@Override
public Block getBlockAt(Location l) {
return null;
}
@Override
public boolean generateTree(Location l, Tree vanillaTreeType) {
return false;
}
@Override
public void spawn(Location location, Class<Entity> entity, Consumer<Entity> consumer) {
}
@Override
public Object getHandle() {
return null;
}
}

View File

@ -1,47 +0,0 @@
package com.dfsek.terra.sponge.world;
import com.dfsek.terra.api.generic.Tree;
import com.dfsek.terra.api.generic.world.WorldHandle;
import com.dfsek.terra.api.generic.world.block.Block;
import com.dfsek.terra.api.generic.world.block.BlockData;
import com.dfsek.terra.api.generic.world.block.MaterialData;
import com.dfsek.terra.sponge.TerraSpongePlugin;
import com.dfsek.terra.sponge.world.block.SpongeBlockData;
public class SpongeWorldHandle implements WorldHandle {
private final TerraSpongePlugin main;
public SpongeWorldHandle(TerraSpongePlugin main) {
this.main = main;
}
@Override
public void setBlockData(Block block, BlockData data, boolean physics) {
}
@Override
public BlockData getBlockData(Block block) {
return null;
}
@Override
public MaterialData getType(Block block) {
return null;
}
@Override
public BlockData createBlockData(String data) {
return new SpongeBlockData(null);
}
@Override
public MaterialData createMaterialData(String data) {
return createBlockData(data).getMaterial();
}
@Override
public Tree getTree(String id) {
return null;
}
}

View File

@ -1,77 +0,0 @@
package com.dfsek.terra.sponge.world.block;
import com.dfsek.terra.api.generic.world.block.Block;
import com.dfsek.terra.api.generic.world.block.BlockData;
import com.dfsek.terra.api.generic.world.block.BlockFace;
import com.dfsek.terra.api.generic.world.block.MaterialData;
import com.dfsek.terra.api.generic.world.vector.Location;
import com.dfsek.terra.sponge.world.SpongeWorld;
import org.spongepowered.api.world.World;
public class SpongeBlock implements Block {
private final org.spongepowered.api.world.Location<World> delegate;
public SpongeBlock(org.spongepowered.api.world.Location<World> delegate) {
this.delegate = delegate;
}
@Override
public void setBlockData(BlockData data, boolean physics) {
delegate.setBlock(((SpongeBlockData) data).getHandle());
}
@Override
public BlockData getBlockData() {
return new SpongeBlockData(delegate.getBlock());
}
@Override
public Block getRelative(BlockFace face) {
return new SpongeBlock(delegate.copy().add(face.getModX(), face.getModY(), face.getModZ()));
}
@Override
public Block getRelative(BlockFace face, int len) {
return new SpongeBlock(delegate.copy().add(face.getModX() * len, face.getModY() * len, face.getModZ() * len));
}
@Override
public boolean isEmpty() {
return delegate.hasBlock();
}
@Override
public Location getLocation() {
return new Location(new SpongeWorld(delegate.getExtent()), delegate.getX(), delegate.getY(), delegate.getZ());
}
@Override
public MaterialData getType() {
return new SpongeMaterialData(delegate.getBlockType());
}
@Override
public int getX() {
return delegate.getBlockX();
}
@Override
public int getZ() {
return delegate.getBlockZ();
}
@Override
public int getY() {
return delegate.getBlockY();
}
@Override
public boolean isPassable() {
return false;
}
@Override
public org.spongepowered.api.world.Location<World> getHandle() {
return delegate;
}
}

View File

@ -1,37 +0,0 @@
package com.dfsek.terra.sponge.world.block;
import com.dfsek.terra.api.generic.world.block.BlockData;
import com.dfsek.terra.api.generic.world.block.MaterialData;
import org.spongepowered.api.block.BlockState;
public class SpongeBlockData implements BlockData {
private final BlockState delegate;
public SpongeBlockData(BlockState delegate) {
this.delegate = delegate;
}
@Override
public MaterialData getMaterial() {
return new SpongeMaterialData(delegate.getType());
}
@Override
public boolean matches(MaterialData materialData) {
return ((SpongeMaterialData) materialData).getHandle().equals(delegate.getType());
}
@Override
public BlockData clone() {
try {
return (BlockData) super.clone();
} catch(CloneNotSupportedException e) {
throw new Error(e);
}
}
@Override
public BlockState getHandle() {
return delegate;
}
}

View File

@ -1,48 +0,0 @@
package com.dfsek.terra.sponge.world.block;
import com.dfsek.terra.api.generic.world.block.BlockData;
import com.dfsek.terra.api.generic.world.block.MaterialData;
import org.spongepowered.api.block.BlockType;
public class SpongeMaterialData implements MaterialData {
private final BlockType delegate;
public SpongeMaterialData(BlockType delegate) {
this.delegate = delegate;
}
@Override
public boolean matches(MaterialData other) {
return delegate.equals(((SpongeMaterialData) other).getHandle());
}
@Override
public boolean matches(BlockData other) {
return false;
}
@Override
public boolean isSolid() {
return false;
}
@Override
public boolean isAir() {
return false;
}
@Override
public double getMaxDurability() {
return 0;
}
@Override
public BlockData createBlockData() {
return null;
}
@Override
public BlockType getHandle() {
return delegate;
}
}

View File

@ -1,66 +0,0 @@
package com.dfsek.terra.sponge.world.generator;
import com.dfsek.terra.api.generic.generator.BlockPopulator;
import com.dfsek.terra.api.generic.generator.ChunkGenerator;
import com.dfsek.terra.api.generic.generator.TerraChunkGenerator;
import com.dfsek.terra.api.generic.world.BiomeGrid;
import com.dfsek.terra.api.generic.world.World;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.api.world.gen.WorldGenerator;
import java.util.List;
import java.util.Random;
public class SpongeChunkGenerator implements ChunkGenerator {
private final WorldGenerator delegate;
public SpongeChunkGenerator(WorldGenerator delegate) {
this.delegate = delegate;
}
@Override
public boolean isParallelCapable() {
return false;
}
@Override
public boolean shouldGenerateCaves() {
return false;
}
@Override
public boolean shouldGenerateDecorations() {
return false;
}
@Override
public boolean shouldGenerateMobs() {
return false;
}
@Override
public boolean shouldGenerateStructures() {
return false;
}
@Override
public ChunkData generateChunkData(@NotNull World world, @NotNull Random random, int x, int z, @NotNull BiomeGrid biome) {
return null;
}
@Override
public List<BlockPopulator> getDefaultPopulators(World world) {
return null;
}
@Override
public @Nullable TerraChunkGenerator getTerraGenerator() {
return null;
}
@Override
public WorldGenerator getHandle() {
return delegate;
}
}

View File

@ -33,6 +33,3 @@ gradleEnterprise {
// publishAlwaysIf(true)
}
}
include("sponge")
include("platforms:sponge")
findProject(":platforms:sponge")?.name = "sponge"