fabric entities

This commit is contained in:
dfsek
2021-02-25 01:21:28 -07:00
parent 924bc6e469
commit 12af19edba
6 changed files with 31 additions and 131 deletions

View File

@@ -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<? extends Entity> adapt(EntityType entityType) {
return ((FabricEntityType) entityType).getHandle();
}

View File

@@ -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()));
}
}

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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;
}
}
}