Fabric stuff still doesnt work, but eh

This commit is contained in:
dfsek
2020-12-12 15:31:00 -07:00
parent d84dd3a526
commit 618e7ed12e
7 changed files with 42 additions and 39 deletions

1
.gitignore vendored
View File

@@ -138,4 +138,3 @@ build
!lib/*.jar
.idea/Terra.iml
/run/
/run/

View File

@@ -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<Location, BlockData> treeAssembler = new HashMap<>();
private final List<EntitySpawnHolder> 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<MaterialData> getSpawnable() {
return null;
}
}

View File

@@ -21,6 +21,7 @@ public class ConfigRegistry extends TerraRegistry<ConfigPack> {
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);

View File

@@ -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<Tree> {
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<Tree> {
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<MaterialData> getSpawnable() {
return null;
}
}
}

View File

@@ -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<GeneratorType> 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<GeneratorType>) 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);
}
}
}

View File

@@ -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<GeneratorType> getValues() {
static List<GeneratorType> getValues() {
throw new AssertionError();
}
}

View File

@@ -6,7 +6,7 @@
"mixins": [],
"client": [],
"server": [
"GeneratorAccessor"
"GeneratorTypeAccessor"
],
"injectors": {
"defaultRequire": 1