Mirror von
https://github.com/IntellectualSites/FastAsyncWorldEdit.git
synchronisiert 2024-12-25 10:30:04 +01:00
Added support for features added to Spout (now depends on Vanilla)
Dieser Commit ist enthalten in:
Ursprung
86011a0d0d
Commit
0bd3b346fc
7
pom.xml
7
pom.xml
@ -32,7 +32,7 @@
|
|||||||
</repository>
|
</repository>
|
||||||
<repository>
|
<repository>
|
||||||
<id>spout-repo</id>
|
<id>spout-repo</id>
|
||||||
<url>http://nexus.spout.org/content/groups/public/</url>
|
<url>http://repo.spout.org/</url>
|
||||||
</repository>
|
</repository>
|
||||||
</repositories>
|
</repositories>
|
||||||
|
|
||||||
@ -90,6 +90,11 @@
|
|||||||
<artifactId>spoutapi</artifactId>
|
<artifactId>spoutapi</artifactId>
|
||||||
<version>dev-SNAPSHOT</version>
|
<version>dev-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.spout</groupId>
|
||||||
|
<artifactId>vanilla</artifactId>
|
||||||
|
<version>dev-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
@ -30,6 +30,7 @@ import com.sk89q.worldedit.blocks.BlockID;
|
|||||||
import com.sk89q.worldedit.blocks.ItemType;
|
import com.sk89q.worldedit.blocks.ItemType;
|
||||||
import org.spout.api.inventory.Inventory;
|
import org.spout.api.inventory.Inventory;
|
||||||
import org.spout.api.inventory.ItemStack;
|
import org.spout.api.inventory.ItemStack;
|
||||||
|
import org.spout.api.material.Material;
|
||||||
import org.spout.api.material.MaterialData;
|
import org.spout.api.material.MaterialData;
|
||||||
import org.spout.api.player.Player;
|
import org.spout.api.player.Player;
|
||||||
|
|
||||||
@ -45,7 +46,7 @@ public class SpoutPlayerBlockBag extends BlockBag {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct the object.
|
* Construct the object.
|
||||||
*
|
*
|
||||||
* @param player
|
* @param player
|
||||||
*/
|
*/
|
||||||
public SpoutPlayerBlockBag(Player player) {
|
public SpoutPlayerBlockBag(Player player) {
|
||||||
@ -63,7 +64,7 @@ public class SpoutPlayerBlockBag extends BlockBag {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the player.
|
* Get the player.
|
||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public Player getPlayer() {
|
public Player getPlayer() {
|
||||||
@ -77,11 +78,11 @@ public class SpoutPlayerBlockBag extends BlockBag {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void fetchItem(BaseItem item) throws BlockBagException {
|
public void fetchItem(BaseItem item) throws BlockBagException {
|
||||||
final int id = item.getType();
|
final short id = (short)item.getType();
|
||||||
final int damage = item.getDamage();
|
final short damage = item.getDamage();
|
||||||
int amount = (item instanceof BaseItemStack) ? ((BaseItemStack) item).getAmount() : 1;
|
int amount = (item instanceof BaseItemStack) ? ((BaseItemStack) item).getAmount() : 1;
|
||||||
assert(amount == 1);
|
assert(amount == 1);
|
||||||
boolean usesDamageValue = ItemType.usesDamageValue(id);
|
final Material mat = MaterialData.getMaterial(id, damage);
|
||||||
|
|
||||||
if (id == BlockID.AIR) {
|
if (id == BlockID.AIR) {
|
||||||
throw new IllegalArgumentException("Can't fetch air block");
|
throw new IllegalArgumentException("Can't fetch air block");
|
||||||
@ -98,13 +99,8 @@ public class SpoutPlayerBlockBag extends BlockBag {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bukkitItem.getMaterial().getId() != id) {
|
if (!bukkitItem.getMaterial().equals(mat)) {
|
||||||
// Type id doesn't fit
|
// Type id or damage value doesn't fit
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (usesDamageValue && bukkitItem.getDamage() != damage) {
|
|
||||||
// Damage value doesn't fit.
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,16 +128,16 @@ public class SpoutPlayerBlockBag extends BlockBag {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Store a block.
|
* Store a block.
|
||||||
*
|
*
|
||||||
* @param item
|
* @param item
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void storeItem(BaseItem item) throws BlockBagException {
|
public void storeItem(BaseItem item) throws BlockBagException {
|
||||||
final int id = item.getType();
|
final int id = item.getType();
|
||||||
final int damage = item.getDamage();
|
final short damage = item.getDamage();
|
||||||
|
final Material mat = MaterialData.getMaterial((short) id, damage);
|
||||||
int amount = (item instanceof BaseItemStack) ? ((BaseItemStack) item).getAmount() : 1;
|
int amount = (item instanceof BaseItemStack) ? ((BaseItemStack) item).getAmount() : 1;
|
||||||
assert(amount <= 64);
|
assert(amount <= mat.getMaxStackSize());
|
||||||
boolean usesDamageValue = ItemType.usesDamageValue(id);
|
|
||||||
|
|
||||||
if (id == BlockID.AIR) {
|
if (id == BlockID.AIR) {
|
||||||
throw new IllegalArgumentException("Can't store air block");
|
throw new IllegalArgumentException("Can't store air block");
|
||||||
@ -164,13 +160,8 @@ public class SpoutPlayerBlockBag extends BlockBag {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bukkitItem.getMaterial().getId() != id) {
|
if (!bukkitItem.getMaterial().equals(mat)) {
|
||||||
// Type id doesn't fit
|
// Type id or damage value doesn't fit
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (usesDamageValue && bukkitItem.getDamage() != damage) {
|
|
||||||
// Damage value doesn't fit.
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -179,23 +170,23 @@ public class SpoutPlayerBlockBag extends BlockBag {
|
|||||||
// Unlimited
|
// Unlimited
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (currentAmount >= 64) {
|
if (currentAmount >= mat.getMaxStackSize()) {
|
||||||
// Full stack
|
// Full stack
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
int spaceLeft = 64 - currentAmount;
|
int spaceLeft = mat.getMaxStackSize() - currentAmount;
|
||||||
if (spaceLeft >= amount) {
|
if (spaceLeft >= amount) {
|
||||||
bukkitItem.setAmount(currentAmount + amount);
|
bukkitItem.setAmount(currentAmount + amount);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bukkitItem.setAmount(64);
|
bukkitItem.setAmount(mat.getMaxStackSize());
|
||||||
amount -= spaceLeft;
|
amount -= spaceLeft;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (freeSlot > -1) {
|
if (freeSlot > -1) {
|
||||||
items[freeSlot] = new ItemStack(MaterialData.getMaterial((short)id), amount);
|
items[freeSlot] = new ItemStack(mat, amount);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,8 +30,17 @@ import com.sk89q.worldedit.blocks.BaseItemStack;
|
|||||||
import com.sk89q.worldedit.regions.Region;
|
import com.sk89q.worldedit.regions.Region;
|
||||||
|
|
||||||
import com.sk89q.worldedit.util.TreeGenerator;
|
import com.sk89q.worldedit.util.TreeGenerator;
|
||||||
|
import org.spout.api.entity.Entity;
|
||||||
import org.spout.api.geo.World;
|
import org.spout.api.geo.World;
|
||||||
|
import org.spout.api.geo.cuboid.Chunk;
|
||||||
|
import org.spout.api.inventory.ItemStack;
|
||||||
import org.spout.api.material.MaterialData;
|
import org.spout.api.material.MaterialData;
|
||||||
|
import org.spout.api.math.Vector3;
|
||||||
|
import org.spout.vanilla.entity.object.Item;
|
||||||
|
import org.spout.vanilla.entity.object.falling.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;
|
||||||
|
|
||||||
public class SpoutWorld extends LocalWorld {
|
public class SpoutWorld extends LocalWorld {
|
||||||
private World world;
|
private World world;
|
||||||
@ -381,10 +390,8 @@ public class SpoutWorld extends LocalWorld {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void dropItem(Vector pt, BaseItemStack item) {
|
public void dropItem(Vector pt, BaseItemStack item) {
|
||||||
/*ItemStack bukkitItem = new ItemStack(item.getType(), item.getAmount(),
|
ItemStack bukkitItem = new ItemStack(MaterialData.getMaterial((short)item.getType(), item.getDamage()), item.getAmount(), item.getDamage());
|
||||||
(byte) item.getDamage());
|
world.createAndSpawnEntity(SpoutUtil.toPoint(world, pt), new Item(bukkitItem, new Vector3(pt.getX(), pt.getY(), pt.getZ())));
|
||||||
world.dropItemNaturally(SpoutUtil.toLocation(world, pt), bukkitItem);*/
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -446,51 +453,51 @@ public class SpoutWorld extends LocalWorld {
|
|||||||
@Override
|
@Override
|
||||||
public int removeEntities(EntityType type, Vector origin, int radius) {
|
public int removeEntities(EntityType type, Vector origin, int radius) {
|
||||||
int num = 0;
|
int num = 0;
|
||||||
/*double radiusSq = radius * radius;
|
double radiusSq = radius * radius;
|
||||||
|
|
||||||
for (Entity ent : world.getEntities()) {
|
for (Entity ent : world.getAll()) {
|
||||||
if (radius != -1
|
if (radius != -1
|
||||||
&& origin.distanceSq(SpoutUtil.toVector(ent.getTransform().getPosition())) > radiusSq) {
|
&& origin.distanceSq(SpoutUtil.toVector(ent.getPosition())) > radiusSq) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == EntityType.ARROWS) {
|
if (type == EntityType.ARROWS) {
|
||||||
if (ent instanceof Arrow) {
|
if (ent.getController() instanceof Arrow) {
|
||||||
ent.remove();
|
ent.kill();
|
||||||
++num;
|
++num;
|
||||||
}
|
}
|
||||||
} else if (type == EntityType.BOATS) {
|
} else if (type == EntityType.BOATS) {
|
||||||
if (ent instanceof Boat) {
|
if (ent.getController() instanceof Boat) {
|
||||||
ent.remove();
|
ent.kill();
|
||||||
++num;
|
++num;
|
||||||
}
|
}
|
||||||
} else if (type == EntityType.ITEMS) {
|
} else if (type == EntityType.ITEMS) {
|
||||||
if (ent instanceof Item) {
|
if (ent.getController() instanceof Item) {
|
||||||
ent.remove();
|
ent.kill();
|
||||||
++num;
|
++num;
|
||||||
}
|
}
|
||||||
} else if (type == EntityType.MINECARTS) {
|
} else if (type == EntityType.MINECARTS) {
|
||||||
if (ent instanceof Minecart) {
|
if (ent.getController() instanceof Minecart) {
|
||||||
ent.remove();
|
ent.kill();
|
||||||
++num;
|
++num;
|
||||||
}
|
}
|
||||||
} else if (type == EntityType.PAINTINGS) {
|
} /*else if (type == EntityType.PAINTINGS) {
|
||||||
if (ent instanceof Painting) {
|
if (ent.getController() instanceof Painting) {
|
||||||
ent.remove();
|
ent.kill();
|
||||||
++num;
|
++num;
|
||||||
}
|
}
|
||||||
} else if (type == EntityType.TNT) {
|
}*/ else if (type == EntityType.TNT) {
|
||||||
if (ent instanceof TNTPrimed) {
|
if (ent.getController() instanceof PrimedTnt) {
|
||||||
ent.remove();
|
ent.kill();
|
||||||
++num;
|
++num;
|
||||||
}
|
}
|
||||||
} else if (type == EntityType.XP_ORBS) {
|
} /*else if (type == EntityType.XP_ORBS) {
|
||||||
if (ent instanceof ExperienceOrb) {
|
if (ent instanceof ExperienceOrb) {
|
||||||
ent.remove();
|
ent.kill();
|
||||||
++num;
|
++num;
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
}*/
|
}
|
||||||
|
|
||||||
return num;
|
return num;
|
||||||
}
|
}
|
||||||
@ -636,9 +643,7 @@ public class SpoutWorld extends LocalWorld {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void checkLoadedChunk(Vector pt) {
|
public void checkLoadedChunk(Vector pt) {
|
||||||
/*if (!world.isChunkLoaded(pt.getBlockX() >> 4, pt.getBlockZ() >> 4)) {
|
world.getChunk(pt.getBlockX() << Chunk.CHUNK_SIZE_BITS, pt.getBlockY() << Chunk.CHUNK_SIZE_BITS, pt.getBlockZ() << Chunk.CHUNK_SIZE_BITS);
|
||||||
world.loadChunk(pt.getBlockX() >> 4, pt.getBlockZ() >> 4);
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren