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 3e95b66a9..0613ffd43 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 @@ -35,6 +35,7 @@ import net.minecraft.world.gen.feature.ConfiguredFeature; import net.minecraft.world.gen.feature.Feature; import net.minecraft.world.gen.feature.HugeMushroomFeature; import net.minecraft.world.gen.feature.TreeFeature; +import net.minecraft.world.gen.feature.TreeFeatureConfig; import org.apache.commons.io.FileUtils; import java.io.File; @@ -153,6 +154,7 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { }); } + @SuppressWarnings("unchecked") @Override public void onInitialize() { instance = this; @@ -162,19 +164,19 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { 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 -> BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse(id))) - .addTransform(new MapTransform>() - .add("BROWN_MUSHROOM", BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:huge_brown_mushroom"))) - .add("RED_MUSHROOM", BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:huge_red_mushroom"))) - .add("JUNGLE", BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:mega_jungle_tree"))) - .add("JUNGLE_COCOA", BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:jungle_tree_no_vine"))) - .add("LARGE_OAK", BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:fancy_oak"))) - .add("LARGE_SPRUCE", BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:pine"))) - .add("SMALL_JUNGLE", BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:jungle_tree"))) - .add("SWAMP_OAK", BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:oak"))) - .add("TALL_BIRCH", BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:birch")))) - .addTransform(id -> BuiltinRegistries.CONFIGURED_FEATURE.get(Identifier.tryParse("minecraft:" + id.toLowerCase()))).build(); + 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(); ((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 ff870c3c3..e92bef247 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,14 +11,15 @@ 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 781210139..17af069fe 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,13 +18,14 @@ 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/handles/FabricWorld.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/FabricWorld.java new file mode 100644 index 000000000..b8e9f5cf3 --- /dev/null +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/FabricWorld.java @@ -0,0 +1,99 @@ +package com.dfsek.terra.fabric.world.handles; + +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.fabric.world.handles.chunk.FabricChunk; +import net.minecraft.server.world.ServerWorld; + +import java.io.File; +import java.util.UUID; +import java.util.function.Consumer; + +public class FabricWorld implements World { + + private final Handle delegate; + + public FabricWorld(ServerWorld world, ChunkGenerator generator) { + this.delegate = new Handle(world, generator); + } + + @Override + public long getSeed() { + return delegate.world.getSeed(); + } + + @Override + public int getMaxHeight() { + return delegate.world.getHeight(); + } + + @Override + public ChunkGenerator getGenerator() { + return delegate.generator; + } + + @Override + public String getName() { + return delegate.world.worldProperties.getLevelName(); + } + + @Override + public UUID getUID() { + return null; + } + + @Override + public boolean isChunkGenerated(int x, int z) { + return false; + } + + @Override + public Chunk getChunkAt(int x, int z) { + return new FabricChunk(delegate.world.getChunk(x, z)); + } + + @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, Consumer consumer) { + + } + + @Override + public Handle getHandle() { + return null; + } + + private final class Handle { + private final ServerWorld world; + private final ChunkGenerator generator; + + private Handle(ServerWorld world, ChunkGenerator generator) { + this.world = world; + this.generator = generator; + } + } +} diff --git a/platforms/fabric/src/main/resources/terra.accesswidener b/platforms/fabric/src/main/resources/terra.accesswidener index f7a4eba9a..0b39996bb 100644 --- a/platforms/fabric/src/main/resources/terra.accesswidener +++ b/platforms/fabric/src/main/resources/terra.accesswidener @@ -1,3 +1,4 @@ accessWidener v1 named -extendable method net/minecraft/client/world/GeneratorType (Ljava/lang/String;)V \ No newline at end of file +extendable method net/minecraft/client/world/GeneratorType (Ljava/lang/String;)V +accessible field net/minecraft/server/world/ServerWorld Lnet/minecraft/world/level/ServerWorldProperties worldProperties \ No newline at end of file