diff --git a/common/src/main/java/com/dfsek/terra/api/command/TerraCommandManager.java b/common/src/main/java/com/dfsek/terra/api/command/TerraCommandManager.java index 482aefba9..e58dbbf30 100644 --- a/common/src/main/java/com/dfsek/terra/api/command/TerraCommandManager.java +++ b/common/src/main/java/com/dfsek/terra/api/command/TerraCommandManager.java @@ -65,7 +65,7 @@ public class TerraCommandManager implements CommandManager { return; } - if(commandClass.isAnnotationPresent(WorldCommand.class) && (!(sender instanceof Player) || !TerraWorld.isTerraWorld(((Player) sender).getWorld()))) { + if(commandClass.isAnnotationPresent(WorldCommand.class) && (!(sender instanceof Player) || !(((Player) sender).getWorld()).isTerraWorld())) { sender.sendMessage("Command must be executed in a Terra world."); return; } diff --git a/common/src/main/java/com/dfsek/terra/api/platform/world/World.java b/common/src/main/java/com/dfsek/terra/api/platform/world/World.java index 8bf12f352..888d90fb4 100644 --- a/common/src/main/java/com/dfsek/terra/api/platform/world/World.java +++ b/common/src/main/java/com/dfsek/terra/api/platform/world/World.java @@ -6,6 +6,8 @@ import com.dfsek.terra.api.platform.block.Block; import com.dfsek.terra.api.platform.entity.Entity; import com.dfsek.terra.api.platform.entity.EntityType; import com.dfsek.terra.api.platform.world.generator.ChunkGenerator; +import com.dfsek.terra.api.platform.world.generator.GeneratorWrapper; +import com.dfsek.terra.api.world.generation.TerraChunkGenerator; import java.io.File; import java.util.UUID; @@ -34,4 +36,12 @@ public interface World extends Handle { Entity spawnEntity(Location location, EntityType entityType); int getMinHeight(); + + default boolean isTerraWorld() { + return getGenerator().getHandle() instanceof GeneratorWrapper; + } + + default TerraChunkGenerator getTerraGenerator() { + return ((GeneratorWrapper) getGenerator().getHandle()).getHandle(); + } } diff --git a/common/src/main/java/com/dfsek/terra/api/structures/structure/buffer/items/BufferedEntity.java b/common/src/main/java/com/dfsek/terra/api/structures/structure/buffer/items/BufferedEntity.java index 6b8315ca2..fc90123ce 100644 --- a/common/src/main/java/com/dfsek/terra/api/structures/structure/buffer/items/BufferedEntity.java +++ b/common/src/main/java/com/dfsek/terra/api/structures/structure/buffer/items/BufferedEntity.java @@ -19,6 +19,6 @@ public class BufferedEntity implements BufferedItem { @Override public void paste(Location origin) { Entity entity = origin.clone().add(0.5, 0, 0.5).getWorld().spawnEntity(origin, type); - main.getEventManager().callEvent(new EntitySpawnEvent(main.getWorld(entity.getWorld()).getGenerator().getConfigPack(), entity, entity.getLocation())); + main.getEventManager().callEvent(new EntitySpawnEvent(entity.getWorld().getTerraGenerator().getConfigPack(), entity, entity.getLocation())); } } diff --git a/common/src/main/java/com/dfsek/terra/api/structures/structure/buffer/items/BufferedLootApplication.java b/common/src/main/java/com/dfsek/terra/api/structures/structure/buffer/items/BufferedLootApplication.java index a2c474a08..b70b1e35d 100644 --- a/common/src/main/java/com/dfsek/terra/api/structures/structure/buffer/items/BufferedLootApplication.java +++ b/common/src/main/java/com/dfsek/terra/api/structures/structure/buffer/items/BufferedLootApplication.java @@ -32,7 +32,7 @@ public class BufferedLootApplication implements BufferedItem { } Container container = (Container) data; - LootPopulateEvent event = new LootPopulateEvent(block, container, table, main.getWorld(block.getLocation().getWorld()).getGenerator().getConfigPack(), structure); + LootPopulateEvent event = new LootPopulateEvent(block, container, table, block.getLocation().getWorld().getTerraGenerator().getConfigPack(), structure); main.getEventManager().callEvent(event); if(event.isCancelled()) return; diff --git a/common/src/main/java/com/dfsek/terra/world/TerraWorld.java b/common/src/main/java/com/dfsek/terra/world/TerraWorld.java index eefd72fc7..cc37116a2 100644 --- a/common/src/main/java/com/dfsek/terra/world/TerraWorld.java +++ b/common/src/main/java/com/dfsek/terra/world/TerraWorld.java @@ -25,7 +25,7 @@ public class TerraWorld { public TerraWorld(World w, ConfigPack c, TerraPlugin main) { - if(!isTerraWorld(w)) throw new IllegalArgumentException("World " + w + " is not a Terra World!"); + if(!w.isTerraWorld()) throw new IllegalArgumentException("World " + w + " is not a Terra World!"); this.world = w; config = c.toWorldConfig(this); this.provider = config.getProvider(); @@ -34,17 +34,11 @@ public class TerraWorld { safe = true; } - public static boolean isTerraWorld(World w) { - return w.getGenerator().getHandle() instanceof GeneratorWrapper; - } public World getWorld() { return world; } - public TerraChunkGenerator getGenerator() { - return ((GeneratorWrapper) world.getGenerator().getHandle()).getHandle(); - } public BiomeProvider getBiomeProvider() { return provider; diff --git a/common/src/main/java/com/dfsek/terra/world/generation/math/SamplerCache.java b/common/src/main/java/com/dfsek/terra/world/generation/math/SamplerCache.java index 64d4577b1..e9965d49b 100644 --- a/common/src/main/java/com/dfsek/terra/world/generation/math/SamplerCache.java +++ b/common/src/main/java/com/dfsek/terra/world/generation/math/SamplerCache.java @@ -25,7 +25,7 @@ public class SamplerCache { public Sampler load(@NotNull Long key) { int cx = (int) (key >> 32); int cz = (int) key.longValue(); - return world.getGenerator().createSampler(cx, cz, world.getBiomeProvider(), world.getWorld(), world.getConfig().getTemplate().getElevationBlend()); + return world.getWorld().getTerraGenerator().createSampler(cx, cz, world.getBiomeProvider(), world.getWorld(), world.getConfig().getTemplate().getElevationBlend()); } }); } 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 f0e1fcdf7..7256ea57e 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 @@ -19,7 +19,6 @@ import com.dfsek.terra.api.event.events.config.ConfigPackPreLoadEvent; import com.dfsek.terra.api.platform.CommandSender; import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.platform.entity.Entity; -import com.dfsek.terra.api.platform.entity.Player; import com.dfsek.terra.api.platform.handle.ItemHandle; import com.dfsek.terra.api.platform.handle.WorldHandle; import com.dfsek.terra.api.platform.world.Tree; @@ -30,6 +29,7 @@ import com.dfsek.terra.api.transform.NotNullValidator; import com.dfsek.terra.api.transform.Transformer; import com.dfsek.terra.api.util.logging.DebugLogger; import com.dfsek.terra.api.util.logging.Logger; +import com.dfsek.terra.api.world.generation.TerraChunkGenerator; import com.dfsek.terra.commands.CommandUtil; import com.dfsek.terra.config.GenericLoaders; import com.dfsek.terra.config.PluginConfig; @@ -40,13 +40,11 @@ import com.dfsek.terra.config.pack.ConfigPack; import com.dfsek.terra.config.templates.BiomeTemplate; import com.dfsek.terra.fabric.inventory.FabricItemHandle; import com.dfsek.terra.fabric.mixin.GeneratorTypeAccessor; -import com.dfsek.terra.fabric.world.FabricAdapter; import com.dfsek.terra.fabric.world.FabricBiome; import com.dfsek.terra.fabric.world.FabricTree; import com.dfsek.terra.fabric.world.FabricWorldHandle; import com.dfsek.terra.fabric.world.TerraBiomeSource; import com.dfsek.terra.fabric.world.features.PopulatorFeature; -import com.dfsek.terra.fabric.world.generator.FabricChunkGenerator; import com.dfsek.terra.fabric.world.generator.FabricChunkGeneratorWrapper; import com.dfsek.terra.profiler.Profiler; import com.dfsek.terra.profiler.ProfilerImpl; @@ -159,7 +157,7 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { public TerraWorld getWorld(World world) { return worldMap.computeIfAbsent(world.getSeed(), w -> { logger.info("Loading world " + w); - return new TerraWorld(world, ((FabricChunkGeneratorWrapper) ((FabricChunkGenerator) world.getGenerator()).getHandle()).getPack(), this); + return new TerraWorld(world, ((FabricChunkGeneratorWrapper) world.getGenerator()).getPack(), this); }); } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/world/ChunkGeneratorMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/world/ChunkGeneratorMixin.java new file mode 100644 index 000000000..dccaf2344 --- /dev/null +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/world/ChunkGeneratorMixin.java @@ -0,0 +1,14 @@ +package com.dfsek.terra.fabric.mixin.world; + +import net.minecraft.world.gen.chunk.ChunkGenerator; +import org.spongepowered.asm.mixin.Implements; +import org.spongepowered.asm.mixin.Interface; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(ChunkGenerator.class) +@Implements(@Interface(iface = com.dfsek.terra.api.platform.world.generator.ChunkGenerator.class, prefix = "vw$")) +public abstract class ChunkGeneratorMixin { + public Object vw$getHandle() { + return this; + } +} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/world/WorldChunkMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/world/WorldChunkMixin.java index 1878963c5..5b0f38c1b 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/world/WorldChunkMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/world/WorldChunkMixin.java @@ -4,14 +4,12 @@ import com.dfsek.terra.api.platform.block.Block; import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.platform.world.Chunk; import com.dfsek.terra.api.platform.world.World; +import com.dfsek.terra.api.platform.world.generator.ChunkGenerator; import com.dfsek.terra.fabric.world.block.FabricBlock; import com.dfsek.terra.fabric.world.block.FabricBlockData; -import com.dfsek.terra.fabric.world.generator.FabricChunkGenerator; import com.dfsek.terra.fabric.world.handles.FabricWorld; -import com.dfsek.terra.fabric.world.handles.world.FabricWorldAccess; import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.BlockPos; -import net.minecraft.world.ChunkRegion; import net.minecraft.world.chunk.WorldChunk; import org.jetbrains.annotations.NotNull; import org.spongepowered.asm.mixin.Final; @@ -36,7 +34,7 @@ public abstract class WorldChunkMixin { } public World vw$getWorld() { - return new FabricWorld((ServerWorld) world, new FabricChunkGenerator(((ServerWorld) world).getChunkManager().getChunkGenerator())); + return new FabricWorld((ServerWorld) world, (ChunkGenerator) ((ServerWorld) world).getChunkManager().getChunkGenerator()); } public Block vw$getBlock(int x, int y, int z) { 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 f02117929..02bcb0a24 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 @@ -4,7 +4,6 @@ import com.dfsek.terra.api.math.vector.Location; import com.dfsek.terra.api.platform.world.Tree; import com.dfsek.terra.api.util.collections.MaterialSet; import com.dfsek.terra.fabric.TerraFabricPlugin; -import com.dfsek.terra.fabric.world.generator.FabricChunkGenerator; import com.dfsek.terra.fabric.world.handles.world.FabricWorldAccess; import com.dfsek.terra.profiler.ProfileFrame; import net.minecraft.util.math.BlockPos; @@ -29,7 +28,7 @@ public class FabricTree implements Tree { public boolean plant(Location l, Random r) { try(ProfileFrame ignore = TerraFabricPlugin.getInstance().getProfiler().profile("fabric_tree:" + id.toLowerCase(Locale.ROOT))) { FabricWorldAccess fabricWorldAccess = ((FabricWorldAccess) l.getWorld()); - ChunkGenerator generatorWrapper = ((FabricChunkGenerator) fabricWorldAccess.getGenerator()).getHandle(); + ChunkGenerator generatorWrapper = (ChunkGenerator) fabricWorldAccess.getGenerator(); return delegate.generate((StructureWorldAccess) fabricWorldAccess.getHandle(), generatorWrapper, r, new BlockPos(l.getBlockX(), l.getBlockY(), l.getBlockZ())); } } 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 985a502d4..18b327682 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 @@ -1,7 +1,6 @@ package com.dfsek.terra.fabric.world.features; import com.dfsek.terra.api.platform.world.Chunk; -import com.dfsek.terra.fabric.world.generator.FabricChunkGenerator; import com.dfsek.terra.fabric.world.generator.FabricChunkGeneratorWrapper; import com.dfsek.terra.fabric.world.handles.FabricWorld; import com.mojang.serialization.Codec; @@ -24,7 +23,7 @@ public class PopulatorFeature extends Feature { @Override public boolean generate(StructureWorldAccess world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, DefaultFeatureConfig config) { FabricChunkGeneratorWrapper gen = (FabricChunkGeneratorWrapper) chunkGenerator; - FabricWorld world1 = new FabricWorld(world.toServerWorld(), new FabricChunkGenerator(chunkGenerator)); + FabricWorld world1 = new FabricWorld(world.toServerWorld(), (com.dfsek.terra.api.platform.world.generator.ChunkGenerator) chunkGenerator); gen.getHandle().getPopulators().forEach(populator -> populator.populate(world1, (Chunk) world)); return true; } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkData.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkData.java deleted file mode 100644 index 24ea33e9b..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkData.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.dfsek.terra.fabric.world.generator; - -import com.dfsek.terra.api.platform.block.BlockData; -import com.dfsek.terra.api.platform.world.generator.ChunkData; -import com.dfsek.terra.fabric.world.block.FabricBlockData; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.chunk.Chunk; -import org.jetbrains.annotations.NotNull; - -public class FabricChunkData implements ChunkData { - private final Chunk handle; - - public FabricChunkData(Chunk handle) { - this.handle = handle; - } - - @Override - public Chunk getHandle() { - return handle; - } - - @Override - public int getMaxHeight() { - return handle.getHeight(); - } - - @Override - public void setBlock(int x, int y, int z, @NotNull BlockData blockData) { - handle.setBlockState(new BlockPos(x, y, z), ((FabricBlockData) blockData).getHandle(), false); - } - - @Override - public @NotNull BlockData getBlockData(int x, int y, int z) { - return new FabricBlockData(handle.getBlockState(new BlockPos(x, y, z))); - } -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGenerator.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGenerator.java deleted file mode 100644 index ae7526326..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGenerator.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.dfsek.terra.fabric.world.generator; - -import com.dfsek.terra.api.platform.world.generator.ChunkGenerator; - -public class FabricChunkGenerator implements ChunkGenerator { - private final net.minecraft.world.gen.chunk.ChunkGenerator delegate; - - public FabricChunkGenerator(net.minecraft.world.gen.chunk.ChunkGenerator delegate) { - this.delegate = delegate; - } - - @Override - public net.minecraft.world.gen.chunk.ChunkGenerator getHandle() { - return delegate; - } -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGeneratorWrapper.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGeneratorWrapper.java index d85f0a319..5f3a68a73 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGeneratorWrapper.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGeneratorWrapper.java @@ -11,11 +11,6 @@ import com.dfsek.terra.fabric.world.handles.world.FabricSeededWorldAccess; import com.dfsek.terra.world.TerraWorld; import com.dfsek.terra.world.generation.generators.DefaultChunkGenerator3D; import com.dfsek.terra.world.generation.math.samplers.Sampler; -import com.dfsek.terra.world.population.CavePopulator; -import com.dfsek.terra.world.population.FloraPopulator; -import com.dfsek.terra.world.population.OrePopulator; -import com.dfsek.terra.world.population.StructurePopulator; -import com.dfsek.terra.world.population.TreePopulator; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.jafama.FastMath; 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 index cff51432c..bf33c7d11 100644 --- 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 @@ -7,9 +7,10 @@ import com.dfsek.terra.api.platform.entity.EntityType; import com.dfsek.terra.api.platform.world.Chunk; import com.dfsek.terra.api.platform.world.World; import com.dfsek.terra.api.platform.world.generator.ChunkGenerator; -import com.dfsek.terra.fabric.world.FabricAdapter; +import com.dfsek.terra.api.platform.world.generator.GeneratorWrapper; +import com.dfsek.terra.api.world.generation.TerraChunkGenerator; import com.dfsek.terra.fabric.world.block.FabricBlock; -import com.dfsek.terra.fabric.world.handles.chunk.FabricChunk; +import com.dfsek.terra.fabric.world.generator.FabricChunkGeneratorWrapper; import com.dfsek.terra.fabric.world.handles.world.FabricWorldHandle; import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.BlockPos; @@ -46,7 +47,7 @@ public class FabricWorld implements World, FabricWorldHandle { @Override public Chunk getChunkAt(int x, int z) { - return new FabricChunk(delegate.world.getChunk(x, z)); + return (Chunk) delegate.world.getChunk(x, z); } @Override @@ -106,4 +107,14 @@ public class FabricWorld implements World, FabricWorldHandle { return world; } } + + @Override + public boolean isTerraWorld() { + return delegate.generator instanceof GeneratorWrapper; + } + + @Override + public TerraChunkGenerator getTerraGenerator() { + return ((FabricChunkGeneratorWrapper) delegate.generator).getHandle(); + } } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/chunk/FabricChunk.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/chunk/FabricChunk.java deleted file mode 100644 index f9b488fdf..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/chunk/FabricChunk.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.dfsek.terra.fabric.world.handles.chunk; - -import com.dfsek.terra.api.platform.block.Block; -import com.dfsek.terra.api.platform.block.BlockData; -import com.dfsek.terra.api.platform.world.Chunk; -import com.dfsek.terra.api.platform.world.World; -import com.dfsek.terra.fabric.world.block.FabricBlockData; -import net.minecraft.util.math.BlockPos; -import org.jetbrains.annotations.NotNull; - -public class FabricChunk implements Chunk { - private final net.minecraft.world.chunk.Chunk chunk; - - public FabricChunk(net.minecraft.world.chunk.Chunk chunk) { - this.chunk = chunk; - } - - @Override - public int getX() { - return chunk.getPos().x; - } - - @Override - public int getZ() { - return chunk.getPos().z; - } - - @Override - public World getWorld() { - return null; - } - - @Override - public Block getBlock(int x, int y, int z) { - return null; - } - - @Override - public net.minecraft.world.chunk.Chunk getHandle() { - return chunk; - } - - @Override - public void setBlock(int x, int y, int z, @NotNull BlockData blockData) { - chunk.setBlockState(new BlockPos(x, y, z), ((FabricBlockData) blockData).getHandle(), false); - } - - @Override - public @NotNull BlockData getBlockData(int x, int y, int z) { - return getBlock(x, y, z).getBlockData(); - } -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/world/FabricSeededWorldAccess.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/world/FabricSeededWorldAccess.java index 65996a2b6..5983db7d8 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/world/FabricSeededWorldAccess.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/world/FabricSeededWorldAccess.java @@ -7,9 +7,10 @@ import com.dfsek.terra.api.platform.entity.EntityType; import com.dfsek.terra.api.platform.world.Chunk; import com.dfsek.terra.api.platform.world.World; import com.dfsek.terra.api.platform.world.generator.ChunkGenerator; -import com.dfsek.terra.fabric.world.FabricAdapter; +import com.dfsek.terra.api.platform.world.generator.GeneratorWrapper; +import com.dfsek.terra.api.world.generation.TerraChunkGenerator; import com.dfsek.terra.fabric.world.block.FabricBlock; -import com.dfsek.terra.fabric.world.generator.FabricChunkGenerator; +import com.dfsek.terra.fabric.world.generator.FabricChunkGeneratorWrapper; import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.BlockPos; import net.minecraft.world.ServerWorldAccess; @@ -35,7 +36,7 @@ public class FabricSeededWorldAccess implements World, FabricWorldHandle { @Override public ChunkGenerator getGenerator() { - return new FabricChunkGenerator(handle.getGenerator()); + return (ChunkGenerator) handle.getGenerator(); } @Override @@ -111,4 +112,14 @@ public class FabricSeededWorldAccess implements World, FabricWorldHandle { return worldAccess; } } + + @Override + public boolean isTerraWorld() { + return handle.generator instanceof GeneratorWrapper; + } + + @Override + public TerraChunkGenerator getTerraGenerator() { + return ((FabricChunkGeneratorWrapper) handle.generator).getHandle(); + } } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/world/FabricWorldAccess.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/world/FabricWorldAccess.java index cda41a3ea..b79c320a6 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/world/FabricWorldAccess.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/world/FabricWorldAccess.java @@ -7,9 +7,10 @@ import com.dfsek.terra.api.platform.entity.EntityType; import com.dfsek.terra.api.platform.world.Chunk; import com.dfsek.terra.api.platform.world.World; import com.dfsek.terra.api.platform.world.generator.ChunkGenerator; -import com.dfsek.terra.fabric.world.FabricAdapter; +import com.dfsek.terra.api.platform.world.generator.GeneratorWrapper; +import com.dfsek.terra.api.world.generation.TerraChunkGenerator; import com.dfsek.terra.fabric.world.block.FabricBlock; -import com.dfsek.terra.fabric.world.generator.FabricChunkGenerator; +import com.dfsek.terra.fabric.world.generator.FabricChunkGeneratorWrapper; import net.minecraft.util.math.BlockPos; import net.minecraft.world.ServerWorldAccess; import net.minecraft.world.StructureWorldAccess; @@ -34,7 +35,7 @@ public class FabricWorldAccess implements World, FabricWorldHandle { @Override public ChunkGenerator getGenerator() { - return new FabricChunkGenerator(((ServerWorldAccess) delegate).toServerWorld().getChunkManager().getChunkGenerator()); + return (ChunkGenerator) ((ServerWorldAccess) delegate).toServerWorld().getChunkManager().getChunkGenerator(); } @Override @@ -86,4 +87,14 @@ public class FabricWorldAccess implements World, FabricWorldHandle { if(!(obj instanceof FabricWorldAccess)) return false; return ((ServerWorldAccess) ((FabricWorldAccess) obj).delegate).toServerWorld().equals(((ServerWorldAccess) delegate).toServerWorld()); } + + @Override + public boolean isTerraWorld() { + return getGenerator() instanceof GeneratorWrapper; + } + + @Override + public TerraChunkGenerator getTerraGenerator() { + return ((FabricChunkGeneratorWrapper) getGenerator()).getHandle(); + } } diff --git a/platforms/fabric/src/main/resources/terra.mixins.json b/platforms/fabric/src/main/resources/terra.mixins.json index 22ad3c7c9..b0e7a8a2b 100644 --- a/platforms/fabric/src/main/resources/terra.mixins.json +++ b/platforms/fabric/src/main/resources/terra.mixins.json @@ -14,6 +14,7 @@ "inventory.ItemStackDamageableMixin", "inventory.ItemStackMetaMixin", "inventory.ItemStackMixin", + "world.ChunkGeneratorMixin", "world.ChunkRegionMixin", "world.ProtoChunkMixin", "world.WorldChunkMixin"