use of com.elmakers.mine.bukkit.api.magic.Mage in project MagicPlugin by elBukkit.
the class MagicGiveCommandExecutor method onCommand.
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!api.hasPermission(sender, "Magic.commands.mgive")) {
sendNoPermission(sender);
return true;
}
if (args.length == 0 || args.length > 3) {
sender.sendMessage("Usage: mgive [player] <item> [count]");
return true;
}
String playerName = null;
String itemName = null;
String countString = null;
if (args.length == 1) {
itemName = args[0];
} else if (args.length == 3) {
playerName = args[0];
itemName = args[1];
countString = args[2];
} else {
playerName = args[0];
Player testPlayer = DeprecatedUtils.getPlayer(playerName);
if (testPlayer == null) {
itemName = args[0];
countString = args[1];
} else {
itemName = args[1];
}
}
int count = 1;
if (countString != null) {
try {
count = Integer.parseInt(countString);
} catch (Exception ex) {
sender.sendMessage("Error parsing count: " + countString + ", should be an integer.");
return true;
}
}
Player player = null;
if (playerName != null && sender.hasPermission("Magic.commands.mgive.others")) {
player = DeprecatedUtils.getPlayer(playerName);
}
if (player == null) {
if (!(sender instanceof Player)) {
sender.sendMessage("Console usage: mgive <player> <item> [count]");
return true;
}
player = (Player) sender;
}
if (!api.hasPermission(sender, "Magic.create." + itemName) && !api.hasPermission(sender, "Magic.create.*")) {
sender.sendMessage(ChatColor.RED + "You do not have permission to create " + itemName);
return true;
}
if (itemName.equalsIgnoreCase("xp")) {
api.giveExperienceToPlayer(player, count);
sender.sendMessage("Gave " + count + " experience to " + player.getName());
return true;
} else if (itemName.equalsIgnoreCase("sp")) {
Mage mage = controller.getMage(player);
mage.addSkillPoints(count);
sender.sendMessage("Gave " + count + " skill points to " + player.getName());
return true;
} else {
Mage mage = controller.getMage(player);
ItemStack item = api.createItem(itemName, mage);
if (item == null) {
sender.sendMessage(ChatColor.RED + "Unknown item type " + itemName);
return true;
}
item.setAmount(count);
String displayName = api.describeItem(item);
sender.sendMessage("Gave " + count + " " + displayName + " to " + player.getName());
api.giveItemToPlayer(player, item);
}
return true;
}
use of com.elmakers.mine.bukkit.api.magic.Mage in project MagicPlugin by elBukkit.
the class MinigamesListener method onQuitMinigame.
@EventHandler
public void onQuitMinigame(QuitMinigameEvent event) {
Player player = event.getPlayer();
if (player == null)
return;
Mage mage = controller.getRegisteredMage(player.getUniqueId().toString());
if (mage == null)
return;
mage.deactivate();
}
use of com.elmakers.mine.bukkit.api.magic.Mage in project MagicPlugin by elBukkit.
the class MobController method onEntityTargetEnttiy.
@EventHandler
public void onEntityTargetEnttiy(EntityTargetLivingEntityEvent event) {
Entity source = event.getEntity();
if (source instanceof Player || event.isCancelled())
return;
Entity target = event.getTarget();
Mage mage = controller.getRegisteredMage(source);
if (mage == null)
return;
Entity currentTarget = mage.getTopDamager();
if (currentTarget != null && currentTarget != target) {
event.setCancelled(true);
}
}
use of com.elmakers.mine.bukkit.api.magic.Mage in project MagicPlugin by elBukkit.
the class DisarmSpell method onCast.
@Override
public SpellResult onCast(ConfigurationSection parameters) {
Target target = getTarget();
if (!target.hasEntity() || !(target.getEntity() instanceof LivingEntity)) {
return SpellResult.NO_TARGET;
}
LivingEntity entity = (LivingEntity) target.getEntity();
EntityEquipment equipment = entity.getEquipment();
ItemStack stack = equipment.getItemInHand();
if (stack == null || stack.getType() == Material.AIR) {
return SpellResult.NO_TARGET;
}
// Special case for wands
if (Wand.isWand(stack) && controller.isMage(entity)) {
Mage targetMage = controller.getMage(entity);
// This gets overridden by superpower...
if (!mage.isSuperPowered() && isSuperProtected(targetMage)) {
return SpellResult.NO_TARGET;
}
if (targetMage.getActiveWand() != null) {
targetMage.getActiveWand().deactivate();
}
}
Integer targetSlot = null;
PlayerInventory targetInventory = null;
ItemStack swapItem = null;
if (entity instanceof Player && parameters.getBoolean("keep_in_inventory", false)) {
Player targetPlayer = (Player) entity;
targetInventory = targetPlayer.getInventory();
List<Integer> validSlots = new ArrayList<>();
ItemStack[] contents = targetInventory.getContents();
int minSlot = parameters.getInt("min_slot", Wand.HOTBAR_SIZE);
int maxSlot = parameters.getInt("max_slot", contents.length - 1);
for (int i = minSlot; i <= maxSlot; i++) {
if (contents[i] == null || contents[i].getType() == Material.AIR) {
validSlots.add(i);
}
}
// Randomly choose a slot if no empty one was found
if (validSlots.size() == 0) {
int swapSlot = random.nextInt(maxSlot - minSlot) + minSlot;
swapItem = targetInventory.getItem(swapSlot);
validSlots.add(swapSlot);
}
int chosen = random.nextInt(validSlots.size());
targetSlot = validSlots.get(chosen);
}
equipment.setItemInHand(swapItem);
if (targetSlot != null && targetInventory != null) {
targetInventory.setItem(targetSlot, stack);
} else {
Location location = entity.getLocation();
location.setY(location.getY() + 1);
Item item = entity.getWorld().dropItemNaturally(location, stack);
Vector velocity = item.getVelocity();
velocity.setY(velocity.getY() * 5);
SafetyUtils.setVelocity(item, velocity);
}
return SpellResult.CAST;
}
use of com.elmakers.mine.bukkit.api.magic.Mage in project MagicPlugin by elBukkit.
the class UndoableSpell method applyPotionEffects.
public void applyPotionEffects(Location location, int radius, Collection<PotionEffect> potionEffects) {
if (potionEffects == null || radius <= 0 || potionEffects.size() == 0)
return;
int radiusSquared = radius * 2;
List<Entity> entities = CompatibilityUtils.getNearbyEntities(location, radius, radius, radius);
for (Entity entity : entities) {
if (entity instanceof LivingEntity) {
Mage targetMage = null;
if (controller.isMage(entity)) {
targetMage = controller.getMage(entity);
}
boolean isSourcePlayer = entity == mage.getEntity();
if (isSourcePlayer && getTargetType() != TargetType.ANY && getTargetType() != TargetType.SELF) {
continue;
}
// Check for protected players
if (targetMage != null && isSuperProtected(targetMage) && !isSourcePlayer) {
continue;
}
if (!canTarget(entity))
continue;
if (entity.getLocation().distanceSquared(location) < radiusSquared) {
registerPotionEffects(entity);
CompatibilityUtils.applyPotionEffects((LivingEntity) entity, potionEffects);
if (targetMage != null) {
String playerMessage = getMessage("cast_player_message");
if (playerMessage.length() > 0) {
playerMessage = playerMessage.replace("$spell", getName());
targetMage.sendMessage(playerMessage);
}
}
}
}
}
}
Aggregations