From b06a7551541f19f191bf4acabd076f21de9a21d9 Mon Sep 17 00:00:00 2001 From: dfsek Date: Fri, 18 Dec 2020 15:31:12 -0700 Subject: [PATCH] Trees work on Fabric now --- .../dfsek/terra/fabric/TerraFabricPlugin.java | 43 ++++++++++++------- .../dfsek/terra/fabric/world/FabricTree.java | 5 +-- .../terra/fabric/world/FabricWorldHandle.java | 5 +-- .../world/features/PopulatorFeature.java | 1 + 4 files changed, 32 insertions(+), 22 deletions(-) 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 9105b423a..d2787d1d6 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 @@ -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.generator.FabricChunkGeneratorWrapper; import com.dfsek.terra.registry.ConfigRegistry; +import com.dfsek.terra.util.StringUtils; import net.fabricmc.api.EnvType; import net.fabricmc.api.ModInitializer; 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.NopeDecoratorConfig; 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.DefaultFeatureConfig; import net.minecraft.world.gen.feature.Feature; import net.minecraft.world.gen.feature.FeatureConfig; import net.minecraft.world.gen.feature.HugeMushroomFeature; 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.TernarySurfaceConfig; import org.apache.commons.io.FileUtils; @@ -58,6 +59,7 @@ import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; import java.util.logging.Level; @@ -213,7 +215,17 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { .build(); } - @SuppressWarnings("unchecked") + private static ConfiguredFeature getFeature(String name) { + Class 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 public void onInitialize() { instance = this; @@ -222,20 +234,19 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { BuiltinRegistries.CONFIGURED_FEATURE.stream().filter(feature -> feature.feature instanceof TreeFeature || feature.feature instanceof HugeMushroomFeature).forEach(tree -> System.out.println(BuiltinRegistries.CONFIGURED_FEATURE.getId(tree))); - - Transformer> treeTransformer = new Transformer.Builder>() - .addTransform(id -> (ConfiguredFeature) BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse(id))) - .addTransform(new MapTransform>() - .add("BROWN_MUSHROOM", (ConfiguredFeature) BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:huge_brown_mushroom"))) - .add("RED_MUSHROOM", (ConfiguredFeature) BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:huge_red_mushroom"))) - .add("JUNGLE", (ConfiguredFeature) BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:mega_jungle_tree"))) - .add("JUNGLE_COCOA", (ConfiguredFeature) BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:jungle_tree_no_vine"))) - .add("LARGE_OAK", (ConfiguredFeature) BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:fancy_oak"))) - .add("LARGE_SPRUCE", (ConfiguredFeature) BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:pine"))) - .add("SMALL_JUNGLE", (ConfiguredFeature) BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:jungle_tree"))) - .add("SWAMP_OAK", (ConfiguredFeature) BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:oak"))) - .add("TALL_BIRCH", (ConfiguredFeature) BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:birch")))) - .addTransform(id -> (ConfiguredFeature) BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:" + id.toLowerCase()))).build(); + Transformer> treeTransformer = new Transformer.Builder>() + .addTransform(TerraFabricPlugin::getFeature) + .addTransform(id -> getFeature(StringUtils.stripMinecraftNamespace(id))) + .addTransform(new MapTransform>() + .add("BROWN_MUSHROOM", ConfiguredFeatures.BROWN_MUSHROOM_GIANT) + .add("RED_MUSHROOM", ConfiguredFeatures.RED_MUSHROOM_GIANT) + .add("JUNGLE", ConfiguredFeatures.MEGA_JUNGLE_TREE) + .add("JUNGLE_COCOA", ConfiguredFeatures.JUNGLE_TREE) + .add("LARGE_OAK", ConfiguredFeatures.FANCY_OAK) + .add("LARGE_SPRUCE", ConfiguredFeatures.PINE) + .add("SMALL_JUNGLE", ConfiguredFeatures.JUNGLE_TREE) + .add("SWAMP_OAK", ConfiguredFeatures.SWAMP_TREE) + .add("TALL_BIRCH", ConfiguredFeatures.BIRCH_TALL)).build(); ((FabricWorldHandle) worldHandle).setTreeTransformer(treeTransformer); config = new File(FabricLoader.getInstance().getConfigDir().toFile(), "Terra"); diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/FabricTree.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/FabricTree.java index e92bef247..ff870c3c3 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/FabricTree.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/FabricTree.java @@ -11,15 +11,14 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.StructureWorldAccess; import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.feature.ConfiguredFeature; -import net.minecraft.world.gen.feature.TreeFeatureConfig; import java.util.Random; import java.util.Set; public class FabricTree implements Tree { - private final ConfiguredFeature delegate; + private final ConfiguredFeature delegate; - public FabricTree(ConfiguredFeature delegate) { + public FabricTree(ConfiguredFeature delegate) { this.delegate = delegate; } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/FabricWorldHandle.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/FabricWorldHandle.java index 9a8873ffd..260d3c9ea 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/FabricWorldHandle.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/FabricWorldHandle.java @@ -18,14 +18,13 @@ import net.minecraft.block.BlockState; import net.minecraft.command.argument.BlockArgumentParser; import net.minecraft.state.property.Properties; import net.minecraft.world.gen.feature.ConfiguredFeature; -import net.minecraft.world.gen.feature.TreeFeatureConfig; import java.util.Arrays; public class FabricWorldHandle implements WorldHandle { - private Transformer> treeTransformer; + private Transformer> treeTransformer; - public void setTreeTransformer(Transformer> treeTransformer) { + public void setTreeTransformer(Transformer> treeTransformer) { this.treeTransformer = treeTransformer; } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/features/PopulatorFeature.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/features/PopulatorFeature.java index 6f33f2b09..e5f6d584e 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/features/PopulatorFeature.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/features/PopulatorFeature.java @@ -29,6 +29,7 @@ public class PopulatorFeature extends Feature { gen.getCavePopulator().populate(world1, random, chunk); gen.getOrePopulator().populate(world1, random, chunk); gen.getFloraPopulator().populate(world1, random, chunk); + gen.getTreePopulator().populate(world1, random, chunk); return true; } }