diff --git a/.gitignore b/.gitignore index eb4cb9a50..b7523806f 100644 --- a/.gitignore +++ b/.gitignore @@ -138,4 +138,3 @@ build !lib/*.jar .idea/Terra.iml /run/ -/run/ diff --git a/common/src/main/java/com/dfsek/terra/api/gaea/tree/fractal/FractalTree.java b/common/src/main/java/com/dfsek/terra/api/gaea/tree/fractal/FractalTree.java index f2e58762d..d0dad638e 100644 --- a/common/src/main/java/com/dfsek/terra/api/gaea/tree/fractal/FractalTree.java +++ b/common/src/main/java/com/dfsek/terra/api/gaea/tree/fractal/FractalTree.java @@ -1,6 +1,5 @@ package com.dfsek.terra.api.gaea.tree.fractal; -import com.dfsek.terra.api.gaea.tree.Tree; import com.dfsek.terra.api.gaea.util.GlueList; import com.dfsek.terra.api.generic.Entity; import com.dfsek.terra.api.generic.TerraPlugin; @@ -13,11 +12,10 @@ import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Random; -import java.util.Set; import java.util.function.Consumer; -public abstract class FractalTree implements Tree { +public abstract class FractalTree { private final Map treeAssembler = new HashMap<>(); private final List entities = new GlueList<>(); private final Location origin; @@ -111,14 +109,4 @@ public abstract class FractalTree implements Tree { public MaterialData getMaterial(Location l) { return treeAssembler.getOrDefault(l, main.getWorldHandle().createBlockData("minecraft:air")).getMaterial(); } - - @Override - public boolean plant(Location l, Random r) { - return false; - } - - @Override - public Set getSpawnable() { - return null; - } } diff --git a/common/src/main/java/com/dfsek/terra/registry/ConfigRegistry.java b/common/src/main/java/com/dfsek/terra/registry/ConfigRegistry.java index 626e697f9..60f7c90e8 100644 --- a/common/src/main/java/com/dfsek/terra/registry/ConfigRegistry.java +++ b/common/src/main/java/com/dfsek/terra/registry/ConfigRegistry.java @@ -21,6 +21,7 @@ public class ConfigRegistry extends TerraRegistry { public boolean loadAll(TerraPlugin main) { boolean valid = true; File packsFolder = new File(main.getDataFolder(), "packs"); + packsFolder.mkdirs(); for(File dir : packsFolder.listFiles(File::isDirectory)) { try { load(dir, main); diff --git a/common/src/main/java/com/dfsek/terra/registry/TreeRegistry.java b/common/src/main/java/com/dfsek/terra/registry/TreeRegistry.java index 8f4a6340b..35464bccb 100644 --- a/common/src/main/java/com/dfsek/terra/registry/TreeRegistry.java +++ b/common/src/main/java/com/dfsek/terra/registry/TreeRegistry.java @@ -2,12 +2,20 @@ package com.dfsek.terra.registry; import com.dfsek.terra.api.gaea.tree.Tree; import com.dfsek.terra.api.generic.TerraPlugin; +import com.dfsek.terra.api.generic.world.block.MaterialData; +import com.dfsek.terra.api.generic.world.vector.Location; + +import java.util.Random; +import java.util.Set; public class TreeRegistry extends TerraRegistry { private final TerraPlugin main; public TreeRegistry(TerraPlugin main) { this.main = main; + addTree("ACACIA"); + addTree("BIRCH"); + addTree("BROWN_MUSHROOM"); } private void addTree(String id) { @@ -17,4 +25,17 @@ public class TreeRegistry extends TerraRegistry { main.getLogger().warning("Unable to load tree " + id + ": " + e.getMessage()); } } + + private static final class FractalTreeHolder implements Tree { + + @Override + public boolean plant(Location l, Random r) { + return false; + } + + @Override + public Set getSpawnable() { + return null; + } + } } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java index 8788d76d1..a8382de07 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java @@ -9,6 +9,8 @@ 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.fabric.inventory.FabricItemHandle; +import com.dfsek.terra.fabric.mixin.GeneratorTypeAccessor; +import com.dfsek.terra.fabric.world.FabricWorldHandle; import com.dfsek.terra.registry.ConfigRegistry; import net.fabricmc.api.ModInitializer; import net.minecraft.client.world.GeneratorType; @@ -21,10 +23,8 @@ import net.minecraft.world.gen.chunk.FlatChunkGeneratorConfig; import net.minecraft.world.gen.chunk.StructuresConfig; import java.io.File; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; +import java.net.URISyntaxException; import java.util.Collections; -import java.util.List; import java.util.Optional; import java.util.logging.Logger; @@ -40,10 +40,12 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { }; 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(); @Override public WorldHandle getWorldHandle() { - return null; + return worldHandle; } @Override @@ -68,7 +70,12 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { @Override public File getDataFolder() { - return null; + try { + return new File(new File(TerraFabricPlugin.class.getProtectionDomain().getCodeSource().getLocation() + .toURI()), "terra"); + } catch(URISyntaxException e) { + throw new RuntimeException(e); + } } @Override @@ -83,7 +90,7 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { @Override public ConfigRegistry getRegistry() { - return null; + return registry; } @Override @@ -93,7 +100,7 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { @Override public ItemHandle getItemHandle() { - return null; + return itemHandle; } @Override @@ -101,24 +108,11 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { } - @SuppressWarnings("unchecked") @Override public void onInitialize() { logger.info("Initializing Terra..."); - Class generatorTypeClass = GeneratorType.class; + GeneratorTypeAccessor.getValues().add(TERRA); + registry.loadAll(this); - try { - Field values = generatorTypeClass.getDeclaredField("VALUES"); - values.setAccessible(true); - - Field modifiersField = Field.class.getDeclaredField("modifiers"); - - modifiersField.setAccessible(true); - modifiersField.setInt(values, values.getModifiers() & ~Modifier.FINAL); - - ((List) values.get(null)).add(TERRA); // TODO: This is incredibly yucky and should be replaced by Mixin as soon as possible. - } catch(NoSuchFieldException | IllegalAccessException e) { - throw new RuntimeException(e); - } } } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/GeneratorAccessor.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/GeneratorTypeAccessor.java similarity index 77% rename from platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/GeneratorAccessor.java rename to platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/GeneratorTypeAccessor.java index 1b4f1712a..e251ebd59 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/GeneratorAccessor.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/GeneratorTypeAccessor.java @@ -7,9 +7,9 @@ import org.spongepowered.asm.mixin.gen.Accessor; import java.util.List; @Mixin(GeneratorType.class) -public class GeneratorAccessor { +public interface GeneratorTypeAccessor { @Accessor("VALUES") - public static List getValues() { + static List getValues() { throw new AssertionError(); } } diff --git a/platforms/fabric/src/main/resources/terra.mixins.json b/platforms/fabric/src/main/resources/terra.mixins.json index e9cbf4eaf..3b5597ce8 100644 --- a/platforms/fabric/src/main/resources/terra.mixins.json +++ b/platforms/fabric/src/main/resources/terra.mixins.json @@ -6,7 +6,7 @@ "mixins": [], "client": [], "server": [ - "GeneratorAccessor" + "GeneratorTypeAccessor" ], "injectors": { "defaultRequire": 1