From a690d5782f551a52f00cf6d38e0bb93e259aff79 Mon Sep 17 00:00:00 2001 From: zml2008 Date: Wed, 17 Oct 2012 07:50:49 -0700 Subject: [PATCH] Updated for SpoutAPI changes Make SpoutAPI not horribly slow --- pom.xml | 16 +-- .../worldedit/spout/SpoutConfiguration.java | 2 +- .../sk89q/worldedit/spout/SpoutEntity.java | 41 +++++-- .../sk89q/worldedit/spout/SpoutPlayer.java | 33 +++--- .../worldedit/spout/SpoutPlayerBlockBag.java | 82 +++++++++---- .../com/sk89q/worldedit/spout/SpoutUtil.java | 2 +- .../com/sk89q/worldedit/spout/SpoutWorld.java | 108 ++++++++++++------ .../worldedit/spout/WorldEditPlugin.java | 6 - 8 files changed, 184 insertions(+), 106 deletions(-) diff --git a/pom.xml b/pom.xml index fcbfaec75..c05f2e955 100644 --- a/pom.xml +++ b/pom.xml @@ -52,7 +52,7 @@ 1.6 true - + org.bukkit @@ -66,21 +66,21 @@ 1.3.1-R2.0 true - + de.schlichtherle truezip 6.8.3 - + rhino js 1.7R2 - + @@ -97,7 +97,7 @@ 1.9.0-rc1 test - + org.spout @@ -108,7 +108,7 @@ org.spout vanilla - 1.3.0-SNAPSHOT + 1.3.2-SNAPSHOT true @@ -124,7 +124,7 @@ ${basedir}/src/main/java/ - + org.apache.maven.wagon @@ -245,7 +245,7 @@ - + org.apache.maven.plugins diff --git a/src/main/java/com/sk89q/worldedit/spout/SpoutConfiguration.java b/src/main/java/com/sk89q/worldedit/spout/SpoutConfiguration.java index 3793b7774..7106b7b87 100644 --- a/src/main/java/com/sk89q/worldedit/spout/SpoutConfiguration.java +++ b/src/main/java/com/sk89q/worldedit/spout/SpoutConfiguration.java @@ -24,7 +24,7 @@ import com.sk89q.worldedit.util.YAMLConfiguration; import java.io.File; /** - * @author zml2008 + * Subclass of {@link YAMLConfiguration} with spout-specific data folder */ public class SpoutConfiguration extends YAMLConfiguration { private final WorldEditPlugin plugin; diff --git a/src/main/java/com/sk89q/worldedit/spout/SpoutEntity.java b/src/main/java/com/sk89q/worldedit/spout/SpoutEntity.java index 510a81d27..f069d9586 100644 --- a/src/main/java/com/sk89q/worldedit/spout/SpoutEntity.java +++ b/src/main/java/com/sk89q/worldedit/spout/SpoutEntity.java @@ -18,24 +18,33 @@ package com.sk89q.worldedit.spout; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; import com.sk89q.worldedit.LocalEntity; import com.sk89q.worldedit.Location; -import org.spout.api.entity.Controller; +import org.spout.api.component.Component; +import org.spout.api.datatable.ManagedHashMap; import org.spout.api.entity.Entity; -import org.spout.api.entity.controller.type.ControllerType; +import org.spout.api.geo.LoadOption; import org.spout.api.geo.World; import org.spout.api.geo.discrete.Point; +import java.io.IOException; +import java.util.Collection; +import java.util.List; + /** * @author zml2008 */ public class SpoutEntity extends LocalEntity { - private final ControllerType type; + private final byte[] datatableBytes; + private final List> components; private final int entityId; - public SpoutEntity(Location position, int id, Controller controller) { + public SpoutEntity(Location position, int id, Collection> components, ManagedHashMap datatable) { super(position); - type = controller.getType(); + this.components = Lists.newArrayList(components); + this.datatableBytes = datatable.serialize(); this.entityId = id; } @@ -47,16 +56,26 @@ public class SpoutEntity extends LocalEntity { public boolean spawn(Location loc) { World world = ((SpoutWorld) loc.getWorld()).getWorld(); Point pos = SpoutUtil.toPoint(world, loc.getPosition()); - Controller controller = type.createController(); - if (controller == null) { + Class mainComponent = null; + if (components.size() > 0) { + mainComponent = components.get(0); + } + if (mainComponent == null) { return false; } - Entity e = world.createAndSpawnEntity(pos, controller); + Entity e = world.createAndSpawnEntity(pos, mainComponent, LoadOption.LOAD_ONLY); // Blocks should already be pasted by time entitieos are brought in if (e != null) { - e.setPitch(loc.getPitch()); - e.setYaw(loc.getYaw()); - // TODO: Copy datatable info + e.getTransform().setPitch(loc.getPitch()); + e.getTransform().setYaw(loc.getYaw()); + for (Class clazz : Iterables.skip(components, 1)) { + e.add(clazz); + } + try { + e.getData().deserialize(datatableBytes, true); + } catch (IOException e1) { + return false; + } return true; } return false; diff --git a/src/main/java/com/sk89q/worldedit/spout/SpoutPlayer.java b/src/main/java/com/sk89q/worldedit/spout/SpoutPlayer.java index d601f66d8..57586784c 100644 --- a/src/main/java/com/sk89q/worldedit/spout/SpoutPlayer.java +++ b/src/main/java/com/sk89q/worldedit/spout/SpoutPlayer.java @@ -31,13 +31,15 @@ import com.sk89q.worldedit.cui.CUIEvent; import org.spout.api.Client; import org.spout.api.chat.style.ChatStyle; -import org.spout.api.entity.Controller; +import org.spout.api.component.components.TransformComponent; import org.spout.api.geo.discrete.Point; +import org.spout.api.inventory.Inventory; import org.spout.api.inventory.ItemStack; import org.spout.api.entity.Player; +import org.spout.vanilla.component.inventory.window.Window; +import org.spout.vanilla.component.living.Human; import org.spout.vanilla.material.VanillaMaterial; import org.spout.vanilla.material.VanillaMaterials; -import org.spout.vanilla.entity.VanillaPlayerController; public class SpoutPlayer extends LocalPlayer { private Player player; @@ -52,10 +54,9 @@ public class SpoutPlayer extends LocalPlayer { @Override public int getItemInHand() { - Controller controller = player.getController(); - if (controller instanceof VanillaPlayerController) { - ItemStack itemStack = ((VanillaPlayerController) controller).getInventory().getQuickbar().getCurrentItem(); - return itemStack != null ? ((VanillaMaterial) itemStack.getMaterial()).getMinecraftId() : 0; + if (player.has(Human.class)) { + return ((VanillaMaterial) player.get(Human.class).getInventory().getQuickbar() + .getCurrentItem().getMaterial()).getMinecraftId(); } else { return 0; } @@ -68,27 +69,25 @@ public class SpoutPlayer extends LocalPlayer { @Override public WorldVector getPosition() { - Point loc = player.getPosition(); + Point loc = player.getTransform().getPosition(); return new WorldVector(SpoutUtil.getLocalWorld(loc.getWorld()), loc.getX(), loc.getY(), loc.getZ()); } @Override public double getPitch() { - return player.getPitch(); + return player.getTransform().getPitch(); } @Override public double getYaw() { - return player.getYaw(); + return player.getTransform().getYaw(); } @Override public void giveItem(int type, int amt) { - Controller controller = player.getController(); - if (controller instanceof VanillaPlayerController) { - ((VanillaPlayerController) controller).getInventory() - .addItem(new ItemStack(VanillaMaterials.getMaterial((short) type), amt)); + if (player.has(Human.class)) { + player.get(Human.class).getInventory().add(new ItemStack(VanillaMaterials.getMaterial((short) type), amt)); } } @@ -122,10 +121,10 @@ public class SpoutPlayer extends LocalPlayer { @Override public void setPosition(Vector pos, float pitch, float yaw) { - player.setPosition(SpoutUtil.toPoint(player.getWorld(), pos)); - player.setPitch(pitch); - player.setYaw(yaw); - player.getNetworkSynchronizer().setPositionDirty(); + TransformComponent component = player.getTransform(); + player.teleport(SpoutUtil.toPoint(player.getWorld(), pos)); + component.setPitch(pitch); + component.setYaw(yaw); } @Override diff --git a/src/main/java/com/sk89q/worldedit/spout/SpoutPlayerBlockBag.java b/src/main/java/com/sk89q/worldedit/spout/SpoutPlayerBlockBag.java index 2658da996..2a3f4020b 100644 --- a/src/main/java/com/sk89q/worldedit/spout/SpoutPlayerBlockBag.java +++ b/src/main/java/com/sk89q/worldedit/spout/SpoutPlayerBlockBag.java @@ -29,10 +29,12 @@ import com.sk89q.worldedit.bags.OutOfSpaceException; import com.sk89q.worldedit.blocks.BaseItem; import com.sk89q.worldedit.blocks.BaseItemStack; import com.sk89q.worldedit.blocks.BlockID; -import org.spout.api.inventory.InventoryBase; +import org.spout.api.inventory.Inventory; import org.spout.api.inventory.ItemStack; import org.spout.api.material.Material; import org.spout.api.entity.Player; +import org.spout.vanilla.component.inventory.PlayerInventory; +import org.spout.vanilla.component.living.Human; import org.spout.vanilla.material.VanillaMaterials; import org.spout.vanilla.util.VanillaPlayerUtil; @@ -44,7 +46,17 @@ public class SpoutPlayerBlockBag extends BlockBag { /** * The player's inventory; */ - private ItemStack[] items; + private ItemInfo items; + + private static class ItemInfo { + ItemStack[] inventory; + boolean includesFullInventory; + + public ItemInfo(ItemStack[] inventory, boolean full) { + this.inventory = inventory; + this.includesFullInventory = full; + } + } /** * Construct the object. @@ -60,10 +72,34 @@ public class SpoutPlayerBlockBag extends BlockBag { */ private void loadInventory() { if (items == null) { - items = VanillaPlayerUtil.getInventory(player).getContents(); + items = getViewableItems(player); } } + private ItemInfo getViewableItems(Player player) { + boolean includesFullInventory = true; + ItemStack[] items; + Human human = player.get(Human.class); + PlayerInventory inv = human.getInventory(); + if (human.isCreative()) { + includesFullInventory = false; + items = new ItemStack[inv.getQuickbar().size()]; + } else { + items = new ItemStack[inv.getQuickbar().size() + inv.getMain().size()]; + } + int index = 0; + for (; index < inv.getQuickbar().size(); ++index) { + items[index] = inv.getQuickbar().get(index); + } + + if (!human.isCreative()) { + for (int i = 0; i < inv.getMain().size() && index < items.length; ++i) { + items[index++] = inv.getMain().get(i); + } + } + return new ItemInfo(items, includesFullInventory); + } + /** * Get the player. * @@ -84,12 +120,9 @@ public class SpoutPlayerBlockBag extends BlockBag { final short damage = item.getData(); int amount = (item instanceof BaseItemStack) ? ((BaseItemStack) item).getAmount() : 1; assert(amount == 1); - Material mat = VanillaMaterials.getMaterial(id); - if (mat.hasSubMaterials()) { - mat = mat.getSubMaterial(damage); - } + Material mat = VanillaMaterials.getMaterial(id, damage); - if (id == BlockID.AIR) { + if (mat == VanillaMaterials.AIR) { throw new IllegalArgumentException("Can't fetch air block"); } @@ -97,8 +130,8 @@ public class SpoutPlayerBlockBag extends BlockBag { boolean found = false; - for (int slot = 0; slot < items.length; ++slot) { - ItemStack spoutItem = items[slot]; + for (int slot = 0; slot < items.inventory.length; ++slot) { + ItemStack spoutItem = items.inventory[slot]; if (spoutItem == null) { continue; @@ -119,7 +152,7 @@ public class SpoutPlayerBlockBag extends BlockBag { spoutItem.setAmount(currentAmount - 1); found = true; } else { - items[slot] = null; + items.inventory[slot] = null; found = true; } @@ -140,14 +173,11 @@ public class SpoutPlayerBlockBag extends BlockBag { public void storeItem(BaseItem item) throws BlockBagException { final short id = (short) item.getType(); final short damage = item.getData(); - Material mat = VanillaMaterials.getMaterial(id); - if (mat.hasSubMaterials()) { - mat = mat.getSubMaterial(damage); - } + Material mat = VanillaMaterials.getMaterial(id, damage); int amount = (item instanceof BaseItemStack) ? ((BaseItemStack) item).getAmount() : 1; assert(amount <= mat.getMaxStackSize()); - if (id == BlockID.AIR) { + if (mat == VanillaMaterials.AIR) { throw new IllegalArgumentException("Can't store air block"); } @@ -155,8 +185,8 @@ public class SpoutPlayerBlockBag extends BlockBag { int freeSlot = -1; - for (int slot = 0; slot < items.length; ++slot) { - ItemStack spoutItem = items[slot]; + for (int slot = 0; slot < items.inventory.length; ++slot) { + ItemStack spoutItem = items.inventory[slot]; if (spoutItem == null) { // Delay using up a free slot until we know there are no stacks @@ -194,7 +224,7 @@ public class SpoutPlayerBlockBag extends BlockBag { } if (freeSlot > -1) { - items[freeSlot] = new ItemStack(mat, amount); + items.inventory[freeSlot] = new ItemStack(mat, amount); return; } @@ -207,9 +237,13 @@ public class SpoutPlayerBlockBag extends BlockBag { @Override public void flushChanges() { if (items != null) { - InventoryBase inv = VanillaPlayerUtil.getInventory(player); - for (int i = 0; i < items.length && i < inv.getSize(); ++i) { - inv.setItem(i, items[i]); + PlayerInventory inv = player.get(Human.class).getInventory(); + for (int i = 0; i < inv.getQuickbar().size(); i++) { + inv.getQuickbar().set(i, items.inventory[i]); + } + + for (int i = 0; i < inv.getMain().size(); ++i) { + inv.getMain().set(i, items.inventory[inv.getQuickbar().size() + i]); } items = null; } @@ -217,7 +251,7 @@ public class SpoutPlayerBlockBag extends BlockBag { /** * Adds a position to be used a source. - * + * (TODO: Figure out what this does) * @param pos */ @Override @@ -226,7 +260,7 @@ public class SpoutPlayerBlockBag extends BlockBag { /** * Adds a position to be used a source. - * + * (TODO: Figure out what this does) * @param pos */ @Override diff --git a/src/main/java/com/sk89q/worldedit/spout/SpoutUtil.java b/src/main/java/com/sk89q/worldedit/spout/SpoutUtil.java index 55b960acc..d4fddef91 100644 --- a/src/main/java/com/sk89q/worldedit/spout/SpoutUtil.java +++ b/src/main/java/com/sk89q/worldedit/spout/SpoutUtil.java @@ -110,6 +110,6 @@ public class SpoutUtil { } public static Location toLocation(Entity ent) { - return new Location(getLocalWorld(ent.getWorld()), toVector(ent.getPosition()), ent.getYaw(), ent.getPitch()); + return new Location(getLocalWorld(ent.getWorld()), toVector(ent.getTransform().getPosition()), ent.getTransform().getYaw(), ent.getTransform().getPitch()); } } diff --git a/src/main/java/com/sk89q/worldedit/spout/SpoutWorld.java b/src/main/java/com/sk89q/worldedit/spout/SpoutWorld.java index 6e67c2998..03b38886f 100644 --- a/src/main/java/com/sk89q/worldedit/spout/SpoutWorld.java +++ b/src/main/java/com/sk89q/worldedit/spout/SpoutWorld.java @@ -21,6 +21,10 @@ package com.sk89q.worldedit.spout; +import com.google.common.base.Function; +import com.google.common.collect.Collections2; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; import com.sk89q.worldedit.BiomeType; import com.sk89q.worldedit.BlockVector2D; import com.sk89q.worldedit.EditSession; @@ -35,6 +39,7 @@ import com.sk89q.worldedit.blocks.BaseItemStack; import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.util.TreeGenerator; +import org.spout.api.component.Component; import org.spout.api.entity.Entity; import org.spout.api.generator.biome.BiomeGenerator; import org.spout.api.geo.LoadOption; @@ -44,17 +49,21 @@ import org.spout.api.inventory.ItemStack; import org.spout.api.material.BlockMaterial; import org.spout.api.material.Material; import org.spout.api.math.Vector3; -import org.spout.vanilla.entity.object.moving.Item; -import org.spout.vanilla.entity.object.moving.PrimedTnt; -import org.spout.vanilla.entity.object.projectile.Arrow; -import org.spout.vanilla.entity.object.vehicle.Boat; -import org.spout.vanilla.entity.object.vehicle.Minecart; +import org.spout.vanilla.component.substance.Item; +import org.spout.vanilla.component.substance.Painting; +import org.spout.vanilla.component.substance.XPOrb; +import org.spout.vanilla.component.substance.object.Tnt; +import org.spout.vanilla.component.substance.object.projectile.Arrow; +import org.spout.vanilla.component.substance.object.vehicle.Boat; +import org.spout.vanilla.component.substance.object.vehicle.Minecart; import org.spout.vanilla.material.VanillaMaterial; import org.spout.vanilla.material.VanillaMaterials; import org.spout.vanilla.world.generator.normal.object.tree.TreeObject; import org.spout.vanilla.world.generator.normal.object.tree.SmallTreeObject; +import javax.annotation.Nullable; import java.util.ArrayList; +import java.util.Collection; import java.util.List; public class SpoutWorld extends LocalWorld { @@ -98,7 +107,10 @@ public class SpoutWorld extends LocalWorld { public boolean setBlockType(Vector pt, int type) { Material mat = VanillaMaterials.getMaterial((short) type); if (mat != null && mat instanceof BlockMaterial) { - return world.setBlockMaterial(pt.getBlockX(), pt.getBlockY(), pt.getBlockZ(), (BlockMaterial) mat, (short)0, WorldEditPlugin.getInstance()); + final int x = pt.getBlockX(); + final int y = pt.getBlockY(); + final int z = pt.getBlockZ(); + return world.getChunkFromBlock(x, y, z, LoadOption.LOAD_GEN).setBlockMaterial(x, y, z, (BlockMaterial) mat, (short) 0, WorldEditPlugin.getInstance()); } return false; } @@ -124,9 +136,12 @@ public class SpoutWorld extends LocalWorld { */ @Override public boolean setTypeIdAndData(Vector pt, int type, int data) { - Material mat = VanillaMaterials.getMaterial((short) type); + Material mat = VanillaMaterials.getMaterial((short) type, (short) data); if (mat != null && mat instanceof BlockMaterial) { - return world.setBlockMaterial(pt.getBlockX(), pt.getBlockY(), pt.getBlockZ(), (BlockMaterial) mat, (short)data, WorldEditPlugin.getInstance()); + final int x = pt.getBlockX(); + final int y = pt.getBlockY(); + final int z = pt.getBlockZ(); + return world.getChunkFromBlock(x, y, z, LoadOption.LOAD_GEN).setBlockMaterial(x, y, z, (BlockMaterial) mat, (short) data, WorldEditPlugin.getInstance()); } return false; } @@ -152,8 +167,11 @@ public class SpoutWorld extends LocalWorld { */ @Override public int getBlockType(Vector pt) { - Material mat = world.getBlockMaterial(pt.getBlockX(), pt.getBlockY(), pt.getBlockZ()); - return mat instanceof VanillaMaterial? ((VanillaMaterial) mat).getMinecraftId() : 0; + final int x = pt.getBlockX(); + final int y = pt.getBlockY(); + final int z = pt.getBlockZ(); + Material mat = world.getChunkFromBlock(x, y, z, LoadOption.LOAD_GEN).getBlockMaterial(x, y, z); + return mat instanceof VanillaMaterial ? ((VanillaMaterial) mat).getMinecraftId() : 0; } /** @@ -164,7 +182,10 @@ public class SpoutWorld extends LocalWorld { */ @Override public void setBlockData(Vector pt, int data) { - world.setBlockData(pt.getBlockX(), pt.getBlockY(), pt.getBlockZ(), (short) data, WorldEditPlugin.getInstance()); + final int x = pt.getBlockX(); + final int y = pt.getBlockY(); + final int z = pt.getBlockZ(); + world.getChunkFromBlock(x, y, z, LoadOption.LOAD_GEN).setBlockData(x, y, z, (short) data, WorldEditPlugin.getInstance()); } /** @@ -186,7 +207,10 @@ public class SpoutWorld extends LocalWorld { */ @Override public int getBlockData(Vector pt) { - return world.getBlockData(pt.getBlockX(), pt.getBlockY(), pt.getBlockZ()); + final int x = pt.getBlockX(); + final int y = pt.getBlockY(); + final int z = pt.getBlockZ(); + return world.getChunkFromBlock(x, y, z, LoadOption.LOAD_GEN).getBlockData(x, y, z); } /** @@ -197,7 +221,10 @@ public class SpoutWorld extends LocalWorld { */ @Override public int getBlockLightLevel(Vector pt) { - return world.getBlockLight(pt.getBlockX(), pt.getBlockY(), pt.getBlockZ()); + final int x = pt.getBlockX(); + final int y = pt.getBlockY(); + final int z = pt.getBlockZ(); + return world.getChunkFromBlock(x, y, z, LoadOption.LOAD_GEN).getBlockLight(x, y, z); } /** @@ -447,7 +474,7 @@ public class SpoutWorld extends LocalWorld { mat = mat.getSubMaterial(item.getData()); } ItemStack spoutItem = new ItemStack(mat, item.getData(), item.getAmount()); - world.createAndSpawnEntity(SpoutUtil.toPoint(world, pt), new Item(spoutItem, new Vector3(pt.getX(), pt.getY(), pt.getZ()))); + world.createEntity(SpoutUtil.toPoint(world, pt), Item.class).get(Item.class).setItemStack(spoutItem); } /** @@ -513,46 +540,46 @@ public class SpoutWorld extends LocalWorld { for (Entity ent : world.getAll()) { if (radius != -1 - && origin.distanceSq(SpoutUtil.toVector(ent.getPosition())) > radiusSq) { + && origin.distanceSq(SpoutUtil.toVector(ent.getTransform().getPosition())) > radiusSq) { continue; } if (type == EntityType.ARROWS) { - if (ent.getController() instanceof Arrow) { - ent.kill(); + if (ent.has(Arrow.class)) { + ent.remove(); ++num; } } else if (type == EntityType.BOATS) { - if (ent.getController() instanceof Boat) { - ent.kill(); + if (ent.has(Boat.class)) { + ent.remove(); ++num; } } else if (type == EntityType.ITEMS) { - if (ent.getController() instanceof Item) { - ent.kill(); + if (ent.has(Item.class)) { + ent.remove(); ++num; } } else if (type == EntityType.MINECARTS) { - if (ent.getController() instanceof Minecart) { - ent.kill(); + if (ent.has(Minecart.class)) { + ent.remove(); ++num; } - } /*else if (type == EntityType.PAINTINGS) { - if (ent.getController() instanceof Painting) { - ent.kill(); + } else if (type == EntityType.PAINTINGS) { + if (ent.has(Painting.class)) { + ent.remove(); ++num; } - }*/ else if (type == EntityType.TNT) { - if (ent.getController() instanceof PrimedTnt) { - ent.kill(); + } else if (type == EntityType.TNT) { + if (ent.has(Tnt.class)) { + ent.remove(); ++num; } - } /*else if (type == EntityType.XP_ORBS) { - if (ent instanceof ExperienceOrb) { - ent.kill(); + } else if (type == EntityType.XP_ORBS) { + if (ent.has(XPOrb.class)) { + ent.remove(); ++num; } - }*/ + } } return num; @@ -699,7 +726,6 @@ public class SpoutWorld extends LocalWorld { @Override public void checkLoadedChunk(Vector pt) { - world.getChunk(pt.getBlockX() << Chunk.BLOCKS.BITS, pt.getBlockY() << Chunk.BLOCKS.BITS, pt.getBlockZ() << Chunk.BLOCKS.BITS); } @Override @@ -753,13 +779,19 @@ public class SpoutWorld extends LocalWorld { public SpoutEntity[] getEntities(Region region) { List entities = new ArrayList(); for (Vector pt : region.getChunkCubes()) { - Chunk chunk = world.getChunk(pt.getBlockX(), pt.getBlockY(), pt.getBlockZ(), LoadOption.NO_LOAD); + Chunk chunk = world.getChunkFromBlock(pt.getBlockX(), pt.getBlockY(), pt.getBlockZ(), LoadOption.LOAD_GEN); if (chunk == null) { continue; } for (Entity ent : chunk.getEntities()) { - if (region.contains(SpoutUtil.toVector(ent.getPosition()))) { - entities.add(new SpoutEntity(SpoutUtil.toLocation(ent), ent.getId(), ent.getController())); + if (region.contains(SpoutUtil.toVector(ent.getTransform().getPosition()))) { + Collection> revisedComponents = Collections2.transform(ent.values(), new Function>() { + @Override + public Class apply(@Nullable Component component) { + return component == null ? null : component.getClass(); + } + }); + entities.add(new SpoutEntity(SpoutUtil.toLocation(ent), ent.getId(), revisedComponents, ent.getData().getBaseMap())); // TODO:; Fix entity adding } } } @@ -773,7 +805,7 @@ public class SpoutWorld extends LocalWorld { SpoutEntity entity = (SpoutEntity) weEnt; Entity spoutEntity = world.getEntity(entity.getEntityId()); if (spoutEntity != null) { - spoutEntity.kill(); + spoutEntity.remove(); ++amount; } } diff --git a/src/main/java/com/sk89q/worldedit/spout/WorldEditPlugin.java b/src/main/java/com/sk89q/worldedit/spout/WorldEditPlugin.java index 1edc420b9..c9dbaff34 100644 --- a/src/main/java/com/sk89q/worldedit/spout/WorldEditPlugin.java +++ b/src/main/java/com/sk89q/worldedit/spout/WorldEditPlugin.java @@ -121,12 +121,6 @@ public class WorldEditPlugin extends CommonPlugin { * Called on plugin disable. */ public void onDisable() { - for (Player player : getServer().getOnlinePlayers()) { - LocalPlayer lPlayer = wrapPlayer(player); - if (controller.getSession(lPlayer).hasCUISupport()) { - lPlayer.dispatchCUIHandshake(); - } - } controller.clearSessions(); config.unload(); getEngine().getScheduler().cancelTasks(this);