Trees work on Fabric now

This commit is contained in:
dfsek
2020-12-18 15:31:12 -07:00
parent 817b962c4a
commit b06a755154
4 changed files with 32 additions and 22 deletions
@@ -25,6 +25,7 @@ import com.dfsek.terra.fabric.world.TerraBiomeSource;
import com.dfsek.terra.fabric.world.features.PopulatorFeature; import com.dfsek.terra.fabric.world.features.PopulatorFeature;
import com.dfsek.terra.fabric.world.generator.FabricChunkGeneratorWrapper; import com.dfsek.terra.fabric.world.generator.FabricChunkGeneratorWrapper;
import com.dfsek.terra.registry.ConfigRegistry; import com.dfsek.terra.registry.ConfigRegistry;
import com.dfsek.terra.util.StringUtils;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.ModInitializer; import net.fabricmc.api.ModInitializer;
import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.FabricLoader;
@@ -44,13 +45,13 @@ import net.minecraft.world.gen.chunk.ChunkGeneratorSettings;
import net.minecraft.world.gen.decorator.Decorator; import net.minecraft.world.gen.decorator.Decorator;
import net.minecraft.world.gen.decorator.NopeDecoratorConfig; import net.minecraft.world.gen.decorator.NopeDecoratorConfig;
import net.minecraft.world.gen.feature.ConfiguredFeature; import net.minecraft.world.gen.feature.ConfiguredFeature;
import net.minecraft.world.gen.feature.ConfiguredFeatures;
import net.minecraft.world.gen.feature.DefaultBiomeFeatures; import net.minecraft.world.gen.feature.DefaultBiomeFeatures;
import net.minecraft.world.gen.feature.DefaultFeatureConfig; import net.minecraft.world.gen.feature.DefaultFeatureConfig;
import net.minecraft.world.gen.feature.Feature; import net.minecraft.world.gen.feature.Feature;
import net.minecraft.world.gen.feature.FeatureConfig; import net.minecraft.world.gen.feature.FeatureConfig;
import net.minecraft.world.gen.feature.HugeMushroomFeature; import net.minecraft.world.gen.feature.HugeMushroomFeature;
import net.minecraft.world.gen.feature.TreeFeature; import net.minecraft.world.gen.feature.TreeFeature;
import net.minecraft.world.gen.feature.TreeFeatureConfig;
import net.minecraft.world.gen.surfacebuilder.SurfaceBuilder; import net.minecraft.world.gen.surfacebuilder.SurfaceBuilder;
import net.minecraft.world.gen.surfacebuilder.TernarySurfaceConfig; import net.minecraft.world.gen.surfacebuilder.TernarySurfaceConfig;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
@@ -58,6 +59,7 @@ import org.apache.commons.io.FileUtils;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.lang.reflect.Field;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.logging.Level; import java.util.logging.Level;
@@ -213,7 +215,17 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
.build(); .build();
} }
@SuppressWarnings("unchecked") private static ConfiguredFeature<?, ?> getFeature(String name) {
Class<ConfiguredFeatures> featuresClass = ConfiguredFeatures.class;
Field feature;
try {
feature = featuresClass.getField(name);
return (ConfiguredFeature<?, ?>) feature.get(null);
} catch(NoSuchFieldException | IllegalAccessException e) {
throw new IllegalArgumentException("No such feature: " + name);
}
}
@Override @Override
public void onInitialize() { public void onInitialize() {
instance = this; instance = this;
@@ -222,20 +234,19 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
BuiltinRegistries.CONFIGURED_FEATURE.stream().filter(feature -> BuiltinRegistries.CONFIGURED_FEATURE.stream().filter(feature ->
feature.feature instanceof TreeFeature feature.feature instanceof TreeFeature
|| feature.feature instanceof HugeMushroomFeature).forEach(tree -> System.out.println(BuiltinRegistries.CONFIGURED_FEATURE.getId(tree))); || feature.feature instanceof HugeMushroomFeature).forEach(tree -> System.out.println(BuiltinRegistries.CONFIGURED_FEATURE.getId(tree)));
Transformer<String, ConfiguredFeature<?, ?>> treeTransformer = new Transformer.Builder<String, ConfiguredFeature<?, ?>>()
Transformer<String, ConfiguredFeature<TreeFeatureConfig, ?>> treeTransformer = new Transformer.Builder<String, ConfiguredFeature<TreeFeatureConfig, ?>>() .addTransform(TerraFabricPlugin::getFeature)
.addTransform(id -> (ConfiguredFeature<TreeFeatureConfig, ?>) BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse(id))) .addTransform(id -> getFeature(StringUtils.stripMinecraftNamespace(id)))
.addTransform(new MapTransform<String, ConfiguredFeature<TreeFeatureConfig, ?>>() .addTransform(new MapTransform<String, ConfiguredFeature<?, ?>>()
.add("BROWN_MUSHROOM", (ConfiguredFeature<TreeFeatureConfig, ?>) BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:huge_brown_mushroom"))) .add("BROWN_MUSHROOM", ConfiguredFeatures.BROWN_MUSHROOM_GIANT)
.add("RED_MUSHROOM", (ConfiguredFeature<TreeFeatureConfig, ?>) BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:huge_red_mushroom"))) .add("RED_MUSHROOM", ConfiguredFeatures.RED_MUSHROOM_GIANT)
.add("JUNGLE", (ConfiguredFeature<TreeFeatureConfig, ?>) BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:mega_jungle_tree"))) .add("JUNGLE", ConfiguredFeatures.MEGA_JUNGLE_TREE)
.add("JUNGLE_COCOA", (ConfiguredFeature<TreeFeatureConfig, ?>) BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:jungle_tree_no_vine"))) .add("JUNGLE_COCOA", ConfiguredFeatures.JUNGLE_TREE)
.add("LARGE_OAK", (ConfiguredFeature<TreeFeatureConfig, ?>) BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:fancy_oak"))) .add("LARGE_OAK", ConfiguredFeatures.FANCY_OAK)
.add("LARGE_SPRUCE", (ConfiguredFeature<TreeFeatureConfig, ?>) BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:pine"))) .add("LARGE_SPRUCE", ConfiguredFeatures.PINE)
.add("SMALL_JUNGLE", (ConfiguredFeature<TreeFeatureConfig, ?>) BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:jungle_tree"))) .add("SMALL_JUNGLE", ConfiguredFeatures.JUNGLE_TREE)
.add("SWAMP_OAK", (ConfiguredFeature<TreeFeatureConfig, ?>) BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:oak"))) .add("SWAMP_OAK", ConfiguredFeatures.SWAMP_TREE)
.add("TALL_BIRCH", (ConfiguredFeature<TreeFeatureConfig, ?>) BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:birch")))) .add("TALL_BIRCH", ConfiguredFeatures.BIRCH_TALL)).build();
.addTransform(id -> (ConfiguredFeature<TreeFeatureConfig, ?>) BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:" + id.toLowerCase()))).build();
((FabricWorldHandle) worldHandle).setTreeTransformer(treeTransformer); ((FabricWorldHandle) worldHandle).setTreeTransformer(treeTransformer);
config = new File(FabricLoader.getInstance().getConfigDir().toFile(), "Terra"); config = new File(FabricLoader.getInstance().getConfigDir().toFile(), "Terra");
@@ -11,15 +11,14 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.world.StructureWorldAccess; import net.minecraft.world.StructureWorldAccess;
import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.chunk.ChunkGenerator;
import net.minecraft.world.gen.feature.ConfiguredFeature; import net.minecraft.world.gen.feature.ConfiguredFeature;
import net.minecraft.world.gen.feature.TreeFeatureConfig;
import java.util.Random; import java.util.Random;
import java.util.Set; import java.util.Set;
public class FabricTree implements Tree { public class FabricTree implements Tree {
private final ConfiguredFeature<TreeFeatureConfig, ?> delegate; private final ConfiguredFeature<?, ?> delegate;
public FabricTree(ConfiguredFeature<TreeFeatureConfig, ?> delegate) { public FabricTree(ConfiguredFeature<?, ?> delegate) {
this.delegate = delegate; this.delegate = delegate;
} }
@@ -18,14 +18,13 @@ import net.minecraft.block.BlockState;
import net.minecraft.command.argument.BlockArgumentParser; import net.minecraft.command.argument.BlockArgumentParser;
import net.minecraft.state.property.Properties; import net.minecraft.state.property.Properties;
import net.minecraft.world.gen.feature.ConfiguredFeature; import net.minecraft.world.gen.feature.ConfiguredFeature;
import net.minecraft.world.gen.feature.TreeFeatureConfig;
import java.util.Arrays; import java.util.Arrays;
public class FabricWorldHandle implements WorldHandle { public class FabricWorldHandle implements WorldHandle {
private Transformer<String, ConfiguredFeature<TreeFeatureConfig, ?>> treeTransformer; private Transformer<String, ConfiguredFeature<?, ?>> treeTransformer;
public void setTreeTransformer(Transformer<String, ConfiguredFeature<TreeFeatureConfig, ?>> treeTransformer) { public void setTreeTransformer(Transformer<String, ConfiguredFeature<?, ?>> treeTransformer) {
this.treeTransformer = treeTransformer; this.treeTransformer = treeTransformer;
} }
@@ -29,6 +29,7 @@ public class PopulatorFeature extends Feature<DefaultFeatureConfig> {
gen.getCavePopulator().populate(world1, random, chunk); gen.getCavePopulator().populate(world1, random, chunk);
gen.getOrePopulator().populate(world1, random, chunk); gen.getOrePopulator().populate(world1, random, chunk);
gen.getFloraPopulator().populate(world1, random, chunk); gen.getFloraPopulator().populate(world1, random, chunk);
gen.getTreePopulator().populate(world1, random, chunk);
return true; return true;
} }
} }