From 5e01f50d93d4f93b03357945a9f56d4e628db7c6 Mon Sep 17 00:00:00 2001 From: sk89q Date: Wed, 26 Jan 2011 12:04:53 -0800 Subject: [PATCH] Fixed /butcher. (I also added necessary methods to Bukkit.) --- .../sk89q/worldedit/bukkit/BukkitUtil.java | 53 +++++++++++++++++++ .../sk89q/worldedit/bukkit/BukkitWorld.java | 20 +++++-- 2 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 src/com/sk89q/worldedit/bukkit/BukkitUtil.java diff --git a/src/com/sk89q/worldedit/bukkit/BukkitUtil.java b/src/com/sk89q/worldedit/bukkit/BukkitUtil.java new file mode 100644 index 000000000..8e32efa34 --- /dev/null +++ b/src/com/sk89q/worldedit/bukkit/BukkitUtil.java @@ -0,0 +1,53 @@ +// $Id$ +/* + * WorldEdit + * Copyright (C) 2010 sk89q + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . +*/ + +package com.sk89q.worldedit.bukkit; + +import java.util.List; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.Location; +import org.bukkit.Server; +import com.sk89q.worldedit.BlockVector; +import com.sk89q.worldedit.Vector; + +public class BukkitUtil { + private BukkitUtil() { + } + + public static BlockVector toVector(Block block) { + return new BlockVector(block.getX(), block.getY(), block.getZ()); + } + + public static Vector toVector(Location loc) { + return new Vector(loc.getX(), loc.getY(), loc.getZ()); + } + + public static Vector toVector(org.bukkit.util.Vector vector) { + return new Vector(vector.getX(), vector.getY(), vector.getZ()); + } + + public static Player matchSinglePlayer(Server server, String name) { + List players = server.matchPlayer(name); + if (players.size() == 0) { + return null; + } + return players.get(0); + } +} diff --git a/src/com/sk89q/worldedit/bukkit/BukkitWorld.java b/src/com/sk89q/worldedit/bukkit/BukkitWorld.java index 6dbfa22a5..9c677f245 100644 --- a/src/com/sk89q/worldedit/bukkit/BukkitWorld.java +++ b/src/com/sk89q/worldedit/bukkit/BukkitWorld.java @@ -26,6 +26,8 @@ import org.bukkit.block.BlockState; import org.bukkit.block.Furnace; import org.bukkit.block.MobSpawner; import org.bukkit.block.Sign; +import org.bukkit.entity.Creature; +import org.bukkit.entity.LivingEntity; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.Location; @@ -298,13 +300,25 @@ public class BukkitWorld extends LocalWorld { * Kill mobs in an area. * * @param origin - * @param radius + * @param radius -1 for all mobs * @return */ @Override public int killMobs(Vector origin, int radius) { - // TODO Auto-generated method stub - return 0; + int num = 0; + double radiusSq = Math.pow(radius, 2); + + for (LivingEntity ent : world.getLivingEntities()) { + if (ent instanceof Creature) { + if (radius == -1 + || origin.distanceSq(BukkitUtil.toVector(ent.getLocation())) <= radiusSq) { + ent.setHealth(0); + num++; + } + } + } + + return num; } private Location toLocation(Vector pt) {