mirror of
https://github.com/plexusorg/Plex-FAWE.git
synced 2024-11-16 17:16:11 +00:00
implement entities in paste -e
This commit is contained in:
parent
34298f7dee
commit
94b1233d98
@ -119,31 +119,6 @@ public class BukkitWorld extends AbstractWorld {
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public com.sk89q.worldedit.entity.Entity createEntity(com.sk89q.worldedit.util.Location location, BaseEntity entity) {
|
|
||||||
BukkitImplAdapter adapter = WorldEditPlugin.getInstance().getBukkitImplAdapter();
|
|
||||||
if (adapter != null) {
|
|
||||||
try {
|
|
||||||
Entity createdEntity = adapter.createEntity(BukkitAdapter.adapt(getWorld(), location), entity);
|
|
||||||
if (createdEntity != null) {
|
|
||||||
return new BukkitEntity(createdEntity);
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
logger.warn("Corrupt entity found when creating: " + entity.getType().getId());
|
|
||||||
if (entity.getNbtData() != null) {
|
|
||||||
logger.warn(entity.getNbtData().toString());
|
|
||||||
}
|
|
||||||
e.printStackTrace();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the world handle.
|
* Get the world handle.
|
||||||
*
|
*
|
||||||
|
@ -1,13 +1,23 @@
|
|||||||
package com.boydti.fawe.beta.implementation;
|
package com.boydti.fawe.beta.implementation;
|
||||||
|
|
||||||
import com.boydti.fawe.beta.IChunk;
|
import com.boydti.fawe.beta.IChunk;
|
||||||
|
import com.boydti.fawe.util.ReflectionUtils;
|
||||||
import com.sk89q.jnbt.CompoundTag;
|
import com.sk89q.jnbt.CompoundTag;
|
||||||
|
import com.sk89q.jnbt.DoubleTag;
|
||||||
|
import com.sk89q.jnbt.ListTag;
|
||||||
|
import com.sk89q.jnbt.StringTag;
|
||||||
|
import com.sk89q.jnbt.Tag;
|
||||||
import com.sk89q.worldedit.WorldEditException;
|
import com.sk89q.worldedit.WorldEditException;
|
||||||
|
import com.sk89q.worldedit.entity.BaseEntity;
|
||||||
|
import com.sk89q.worldedit.entity.Entity;
|
||||||
import com.sk89q.worldedit.extent.Extent;
|
import com.sk89q.worldedit.extent.Extent;
|
||||||
|
import com.sk89q.worldedit.util.Location;
|
||||||
import com.sk89q.worldedit.world.biome.BiomeType;
|
import com.sk89q.worldedit.world.biome.BiomeType;
|
||||||
import com.sk89q.worldedit.world.block.BaseBlock;
|
import com.sk89q.worldedit.world.block.BaseBlock;
|
||||||
import com.sk89q.worldedit.world.block.BlockState;
|
import com.sk89q.worldedit.world.block.BlockState;
|
||||||
import com.sk89q.worldedit.world.block.BlockStateHolder;
|
import com.sk89q.worldedit.world.block.BlockStateHolder;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import org.jetbrains.annotations.Range;
|
import org.jetbrains.annotations.Range;
|
||||||
|
|
||||||
public interface IChunkExtent<T extends IChunk> extends Extent {
|
public interface IChunkExtent<T extends IChunk> extends Extent {
|
||||||
@ -91,4 +101,21 @@ public interface IChunkExtent<T extends IChunk> extends Extent {
|
|||||||
final IChunk chunk = getOrCreateChunk(x >> 4, z >> 4);
|
final IChunk chunk = getOrCreateChunk(x >> 4, z >> 4);
|
||||||
return chunk.getOpacity(x & 15, y, z & 15);
|
return chunk.getOpacity(x & 15, y, z & 15);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
default Entity createEntity(Location location, BaseEntity entity) {
|
||||||
|
final IChunk chunk = getOrCreateChunk(location.getBlockX() >> 4, location.getBlockZ() >> 4);
|
||||||
|
CompoundTag tag = entity.getNbtData();
|
||||||
|
Map<String, Tag> map = ReflectionUtils.getMap(tag.getValue());
|
||||||
|
map.put("Id", new StringTag(entity.getType().getName()));
|
||||||
|
ListTag pos = (ListTag) map.get("Pos");
|
||||||
|
if (pos != null) {
|
||||||
|
List<Tag> posList = ReflectionUtils.getList(pos.getValue());
|
||||||
|
posList.set(0, new DoubleTag(location.getX() + 0.5));
|
||||||
|
posList.set(1, new DoubleTag(location.getY()));
|
||||||
|
posList.set(2, new DoubleTag(location.getZ() + 0.5));
|
||||||
|
}
|
||||||
|
chunk.setEntity(tag);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -88,6 +88,20 @@ public class ReflectionUtils {
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private static Class<?> UNMODIFIABLE_MAP = Collections.unmodifiableMap(Collections.EMPTY_MAP).getClass();
|
||||||
|
|
||||||
|
public static <T, V> Map<T, V> getMap(Map<T, V> map) {
|
||||||
|
try {
|
||||||
|
Class<? extends Map> clazz = map.getClass();
|
||||||
|
if (clazz != UNMODIFIABLE_MAP) return map;
|
||||||
|
Field m = clazz.getDeclaredField("m");
|
||||||
|
m.setAccessible(true);
|
||||||
|
return (Map<T, V>) m.get(map);
|
||||||
|
} catch (Throwable e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static Object getHandle(Object wrapper) {
|
public static Object getHandle(Object wrapper) {
|
||||||
final Method getHandle = makeMethod(wrapper.getClass(), "getHandle");
|
final Method getHandle = makeMethod(wrapper.getClass(), "getHandle");
|
||||||
|
@ -46,6 +46,7 @@ import com.boydti.fawe.util.ExtentTraverser;
|
|||||||
import com.boydti.fawe.util.MaskTraverser;
|
import com.boydti.fawe.util.MaskTraverser;
|
||||||
import com.boydti.fawe.util.MathMan;
|
import com.boydti.fawe.util.MathMan;
|
||||||
import com.boydti.fawe.util.TaskManager;
|
import com.boydti.fawe.util.TaskManager;
|
||||||
|
import com.sk89q.worldedit.entity.BaseEntity;
|
||||||
import com.sk89q.worldedit.entity.Entity;
|
import com.sk89q.worldedit.entity.Entity;
|
||||||
import com.sk89q.worldedit.entity.Player;
|
import com.sk89q.worldedit.entity.Player;
|
||||||
import com.sk89q.worldedit.event.extent.EditSessionEvent;
|
import com.sk89q.worldedit.event.extent.EditSessionEvent;
|
||||||
@ -118,6 +119,7 @@ import com.sk89q.worldedit.regions.shape.RegionShape;
|
|||||||
import com.sk89q.worldedit.regions.shape.WorldEditExpressionEnvironment;
|
import com.sk89q.worldedit.regions.shape.WorldEditExpressionEnvironment;
|
||||||
import com.sk89q.worldedit.util.Countable;
|
import com.sk89q.worldedit.util.Countable;
|
||||||
import com.sk89q.worldedit.util.Direction;
|
import com.sk89q.worldedit.util.Direction;
|
||||||
|
import com.sk89q.worldedit.util.Location;
|
||||||
import com.sk89q.worldedit.util.SideEffectSet;
|
import com.sk89q.worldedit.util.SideEffectSet;
|
||||||
import com.sk89q.worldedit.util.TreeGenerator;
|
import com.sk89q.worldedit.util.TreeGenerator;
|
||||||
import com.sk89q.worldedit.util.eventbus.EventBus;
|
import com.sk89q.worldedit.util.eventbus.EventBus;
|
||||||
@ -3060,4 +3062,13 @@ public class EditSession extends PassthroughExtent implements AutoCloseable {
|
|||||||
public List<? extends Entity> getEntities(Region region) {
|
public List<? extends Entity> getEntities(Region region) {
|
||||||
return world.getEntities(region);
|
return world.getEntities(region);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Entity createEntity(Location location, BaseEntity entity){
|
||||||
|
try {
|
||||||
|
return this.getExtent().createEntity(location, entity);
|
||||||
|
} catch (WorldEditException e) {
|
||||||
|
throw new RuntimeException("Unexpected exception", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -200,6 +200,11 @@ public class BlockArrayClipboard implements Clipboard {
|
|||||||
return getParent().getEntities(region);
|
return getParent().getEntities(region);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<? extends Entity> getEntities() {
|
||||||
|
return getParent().getEntities();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public Entity createEntity(Location location, BaseEntity entity) {
|
public Entity createEntity(Location location, BaseEntity entity) {
|
||||||
|
Loading…
Reference in New Issue
Block a user