diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/FabricAdapter.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/FabricAdapter.java index 0a457b632..ba20cdf97 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/FabricAdapter.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/FabricAdapter.java @@ -18,6 +18,7 @@ import com.dfsek.terra.fabric.world.entity.FabricEntityType; import com.dfsek.terra.fabric.world.handles.world.FabricWorldHandle; import net.minecraft.block.Block; import net.minecraft.block.BlockState; +import net.minecraft.entity.Entity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.state.property.Properties; @@ -60,7 +61,7 @@ public final class FabricAdapter { return new FabricEntityType(entityType); } - public static net.minecraft.entity.EntityType adapt(EntityType entityType) { + public static net.minecraft.entity.EntityType adapt(EntityType entityType) { return ((FabricEntityType) entityType).getHandle(); } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/entity/FabricEntity.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/entity/FabricEntity.java index 72cbf83b4..fd7da3d05 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/entity/FabricEntity.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/entity/FabricEntity.java @@ -2,8 +2,16 @@ package com.dfsek.terra.fabric.world.entity; import com.dfsek.terra.api.math.vector.Location; import com.dfsek.terra.api.platform.entity.Entity; +import com.dfsek.terra.fabric.world.FabricAdapter; +import com.dfsek.terra.fabric.world.handles.world.FabricWorldAccess; public class FabricEntity implements Entity { + private final net.minecraft.entity.Entity delegate; + + public FabricEntity(net.minecraft.entity.Entity delegate) { + this.delegate = delegate; + } + @Override public void sendMessage(String message) { @@ -16,6 +24,6 @@ public class FabricEntity implements Entity { @Override public Location getLocation() { - return null; + return new Location(new FabricWorldAccess(delegate.world), FabricAdapter.adapt(delegate.getBlockPos())); } } 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 b32483ebb..840559c83 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,7 +7,9 @@ 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.fabric.world.block.FabricBlock; +import com.dfsek.terra.fabric.world.entity.FabricEntity; import com.dfsek.terra.fabric.world.handles.chunk.FabricChunk; import com.dfsek.terra.fabric.world.handles.world.FabricWorldHandle; import net.minecraft.server.world.ServerWorld; @@ -90,7 +92,10 @@ public class FabricWorld implements World, FabricWorldHandle { @Override public Entity spawnEntity(Location location, EntityType entityType) { - return null; + net.minecraft.entity.Entity entity = FabricAdapter.adapt(entityType).create(delegate.world); + entity.setPos(location.getX(), location.getY(), location.getZ()); + delegate.world.spawnEntity(entity); + return new FabricEntity(entity); } @Override 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 4f9f3d9d1..3db150d99 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,8 +7,11 @@ 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.fabric.world.block.FabricBlock; +import com.dfsek.terra.fabric.world.entity.FabricEntity; import com.dfsek.terra.fabric.world.generator.FabricChunkGenerator; +import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.BlockPos; import net.minecraft.world.ServerWorldAccess; import net.minecraft.world.WorldAccess; @@ -77,7 +80,10 @@ public class FabricSeededWorldAccess implements World, FabricWorldHandle { @Override public Entity spawnEntity(Location location, EntityType entityType) { - return null; + net.minecraft.entity.Entity entity = FabricAdapter.adapt(entityType).create((ServerWorld) handle.worldAccess); + entity.setPos(location.getX(), location.getY(), location.getZ()); + handle.worldAccess.spawnEntity(entity); + return new FabricEntity(entity); } @Override 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 603be63dd..3bf422496 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,7 +7,9 @@ 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.fabric.world.block.FabricBlock; +import com.dfsek.terra.fabric.world.entity.FabricEntity; import com.dfsek.terra.fabric.world.generator.FabricChunkGenerator; import net.minecraft.util.math.BlockPos; import net.minecraft.world.ServerWorldAccess; @@ -77,7 +79,11 @@ public class FabricWorldAccess implements World, FabricWorldHandle { @Override public Entity spawnEntity(Location location, EntityType entityType) { - return null; + net.minecraft.entity.Entity entity = FabricAdapter.adapt(entityType).create(((ServerWorldAccess) delegate).toServerWorld()); + entity.setPos(location.getX(), location.getY(), location.getZ()); + delegate.spawnEntity(entity); + System.out.println("Spawned " + entity); + return new FabricEntity(entity); } @Override diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/world/FabricWorldChunkRegion.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/world/FabricWorldChunkRegion.java deleted file mode 100644 index 1255a966a..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/world/FabricWorldChunkRegion.java +++ /dev/null @@ -1,126 +0,0 @@ -package com.dfsek.terra.fabric.world.handles.world; - -import com.dfsek.terra.api.math.vector.Location; -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.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.generator.FabricChunkGenerator; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.ChunkRegion; -import net.minecraft.world.ServerWorldAccess; -import net.minecraft.world.WorldAccess; - -import java.io.File; -import java.util.UUID; - -public class FabricWorldChunkRegion implements World, FabricWorldHandle { - private final Handle delegate; - - public FabricWorldChunkRegion(ChunkRegion delegate, net.minecraft.world.gen.chunk.ChunkGenerator generator) { - this.delegate = new Handle(delegate, generator); - } - - @Override - public long getSeed() { - return delegate.getChunk().getSeed(); - } - - @Override - public int getMaxHeight() { - return delegate.getChunk().getHeight(); - } - - @Override - public ChunkGenerator getGenerator() { - return new FabricChunkGenerator(delegate.getGenerator()); - } - - @Override - public String getName() { - return delegate.chunk.toString(); - } - - @Override - public UUID getUID() { - return UUID.randomUUID(); - } - - @Override - public boolean isChunkGenerated(int x, int z) { - return delegate.chunk.isChunkLoaded(x, z); - } - - @Override - public Chunk getChunkAt(int x, int z) { - return null; - } - - @Override - public File getWorldFolder() { - return null; - } - - @Override - public Block getBlockAt(int x, int y, int z) { - BlockPos pos = new BlockPos(x, y, z); - return new FabricBlock(pos, delegate.chunk); - } - - @Override - public int hashCode() { - return ((ServerWorldAccess) delegate.chunk).toServerWorld().hashCode(); - } - - @Override - public boolean equals(Object obj) { - if(!(obj instanceof FabricWorldChunkRegion)) return false; - return ((ServerWorldAccess) ((FabricWorldChunkRegion) obj).delegate.chunk).toServerWorld().equals(((ServerWorldAccess) delegate.chunk).toServerWorld()); - } - - @Override - public Block getBlockAt(Location l) { - return getBlockAt(l.getBlockX(), l.getBlockY(), l.getBlockZ()); - } - - @Override - public Entity spawnEntity(Location location, EntityType entityType) { - return null; - } - - @Override - public int getMinHeight() { - return 0; - } - - @Override - public Object getHandle() { - return delegate; - } - - @Override - public WorldAccess getWorld() { - return delegate.chunk; - } - - public static final class Handle { - private final ChunkRegion chunk; - private final net.minecraft.world.gen.chunk.ChunkGenerator generator; - - public Handle(ChunkRegion chunk, net.minecraft.world.gen.chunk.ChunkGenerator generator) { - this.chunk = chunk; - this.generator = generator; - } - - public net.minecraft.world.gen.chunk.ChunkGenerator getGenerator() { - return generator; - } - - public ChunkRegion getChunk() { - return chunk; - } - } -}