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 extends Component> 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 extends Component> 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 extends Component> 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);