use of com.elmakers.mine.bukkit.api.magic.Mage in project MagicPlugin by elBukkit.
the class CycleEntityAction method perform.
@Override
public SpellResult perform(CastContext context) {
Entity entity = context.getTargetEntity();
EntityType entityType = entity.getType();
Mage mage = context.getMage();
switch(entityType) {
case PAINTING:
context.registerModified(entity);
Painting painting = (Painting) entity;
Art[] artValues = Art.values();
Art oldArt = painting.getArt();
Art newArt = oldArt;
int ordinal = (oldArt.ordinal() + 1);
for (int i = 0; i < artValues.length; i++) {
newArt = artValues[ordinal++ % artValues.length];
painting.setArt(newArt);
newArt = painting.getArt();
if (oldArt != newArt) {
break;
}
}
if (oldArt == newArt) {
return SpellResult.FAIL;
}
mage.sendDebugMessage("Altering art from " + oldArt + " to " + newArt);
break;
case ITEM_FRAME:
ItemFrame itemFrame = (ItemFrame) entity;
ItemStack frameItem = itemFrame.getItem();
if (frameItem == null || frameItem.getType() != Material.MAP) {
return SpellResult.NO_TARGET;
}
short data = frameItem.getDurability();
data++;
MapView mapView = DeprecatedUtils.getMap(data);
if (mapView == null) {
data = 0;
mapView = DeprecatedUtils.getMap(data);
if (mapView == null) {
return SpellResult.NO_TARGET;
}
}
context.registerModified(entity);
frameItem.setDurability(data);
itemFrame.setItem(frameItem);
break;
case HORSE:
context.registerModified(entity);
Horse horse = (Horse) entity;
Horse.Color color = horse.getColor();
Horse.Color[] colorValues = Horse.Color.values();
color = colorValues[(color.ordinal() + 1) % colorValues.length];
Horse.Style horseStyle = horse.getStyle();
Horse.Style[] styleValues = Horse.Style.values();
horseStyle = styleValues[(horseStyle.ordinal() + 1) % styleValues.length];
horse.setStyle(horseStyle);
horse.setColor(color);
break;
case OCELOT:
context.registerModified(entity);
Ocelot ocelot = (Ocelot) entity;
Ocelot.Type catType = ocelot.getCatType();
Ocelot.Type[] typeValues = Ocelot.Type.values();
catType = typeValues[(catType.ordinal() + 1) % typeValues.length];
ocelot.setCatType(catType);
break;
case VILLAGER:
context.registerModified(entity);
Villager villager = (Villager) entity;
Villager.Profession profession = villager.getProfession();
Villager.Profession[] professionValues = Villager.Profession.values();
int villagerOrdinal = (profession.ordinal() + 1) % professionValues.length;
// Special-cases for zombie-reserved professions
if (villagerOrdinal == 0 || villagerOrdinal == 7) {
villagerOrdinal = 1;
}
profession = professionValues[villagerOrdinal];
villager.setProfession(profession);
break;
case WOLF:
context.registerModified(entity);
Wolf wolf = (Wolf) entity;
DyeColor wolfColor = wolf.getCollarColor();
DyeColor[] wolfColorValues = DyeColor.values();
wolfColor = wolfColorValues[(wolfColor.ordinal() + 1) % wolfColorValues.length];
wolf.setCollarColor(wolfColor);
break;
case SHEEP:
context.registerModified(entity);
Sheep sheep = (Sheep) entity;
DyeColor dyeColor = sheep.getColor();
DyeColor[] dyeColorValues = DyeColor.values();
dyeColor = dyeColorValues[(dyeColor.ordinal() + 1) % dyeColorValues.length];
sheep.setColor(dyeColor);
break;
default:
return SpellResult.NO_TARGET;
}
;
return SpellResult.CAST;
}
use of com.elmakers.mine.bukkit.api.magic.Mage in project MagicPlugin by elBukkit.
the class DebuggerAction method perform.
@Override
public SpellResult perform(CastContext context) {
Entity entity = context.getTargetEntity();
MageController controller = context.getController();
Mage mage = null;
if (entity != null && controller.isMage(entity)) {
mage = controller.getMage(entity);
} else {
Block block = context.getTargetBlock();
if (block.getType() == Material.COMMAND) {
CommandBlock commandBlock = (CommandBlock) block.getState();
// This is a bit of hacky ..
String commandName = commandBlock.getName();
String mageId = "COMMAND";
if (commandName != null && commandName.length() > 0) {
mageId = "COMMAND-" + commandBlock.getName();
}
mage = controller.getRegisteredMage(mageId);
}
}
if (mage == null) {
return SpellResult.NO_TARGET;
}
int currentLevel = mage.getDebugLevel();
if (currentLevel == debugLevel || debugLevel == 0) {
mage.setDebugLevel(0);
mage.setDebugger(null);
return SpellResult.DEACTIVATE;
}
mage.setDebugLevel(debugLevel);
mage.setDebugger(context.getMage().getCommandSender());
if (check) {
mage.debugPermissions(context.getMage().getCommandSender(), null);
}
return SpellResult.CAST;
}
use of com.elmakers.mine.bukkit.api.magic.Mage in project MagicPlugin by elBukkit.
the class DisarmAction method perform.
@Override
public SpellResult perform(CastContext context) {
Entity target = context.getTargetEntity();
if (target == null || !(target instanceof LivingEntity)) {
return SpellResult.NO_TARGET;
}
LivingEntity entity = (LivingEntity) target;
EntityEquipment equipment = entity.getEquipment();
ItemStack stack = null;
Integer originalSlot = null;
boolean isMainHand = false;
if (displayName == null) {
stack = equipment.getItemInMainHand();
isMainHand = true;
} else {
// This is not compatible
keepInInventory = false;
// Must be a player in this case
if (!(entity instanceof Player)) {
return SpellResult.PLAYER_REQUIRED;
}
PlayerInventory playerInventory = ((Player) entity).getInventory();
for (originalSlot = 0; originalSlot < playerInventory.getSize(); originalSlot++) {
ItemStack item = playerInventory.getItem(originalSlot);
if (InventoryUtils.isEmpty(item))
continue;
ItemMeta meta = item.getItemMeta();
if (meta == null || !meta.hasDisplayName())
continue;
if (meta.getDisplayName().equals(displayName)) {
stack = item;
isMainHand = originalSlot == playerInventory.getHeldItemSlot();
break;
}
}
}
if (InventoryUtils.isEmpty(stack)) {
return SpellResult.NO_TARGET;
}
// Special case for wands
MageController controller = context.getController();
Mage targetMage = controller.getMage(entity);
if (com.elmakers.mine.bukkit.wand.Wand.isWand(stack) && controller.isMage(entity)) {
Mage mage = context.getMage();
// This gets overridden by superpower...
if (!mage.isSuperPowered() && targetMage.isSuperProtected()) {
return SpellResult.NO_TARGET;
}
Wand activeWand = targetMage.getActiveWand();
if (activeWand != null && isMainHand) {
targetMage.getActiveWand().deactivate();
stack = equipment.getItemInMainHand();
}
}
Integer targetSlot = null;
PlayerInventory targetInventory = null;
ItemStack swapItem = null;
Random random = context.getRandom();
if (entity instanceof Player && keepInInventory) {
Player targetPlayer = (Player) entity;
targetInventory = targetPlayer.getInventory();
originalSlot = targetInventory.getHeldItemSlot();
List<Integer> validSlots = new ArrayList<>();
ItemStack[] contents = targetInventory.getContents();
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);
}
if (displayName != null) {
((Player) entity).getInventory().setItem(originalSlot, null);
} else {
equipment.setItemInMainHand(swapItem);
}
if (targetSlot != null && targetInventory != null) {
targetInventory.setItem(targetSlot, stack);
if (originalSlot != null) {
DisarmUndoAction disarmUndo = new DisarmUndoAction(targetMage, originalSlot, targetSlot);
context.registerForUndo(disarmUndo);
}
} 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 EntitySelectAction method start.
@Override
public SpellResult start(CastContext context) {
Mage mage = context.getMage();
MageController controller = context.getController();
Player player = mage.getPlayer();
if (player == null) {
return SpellResult.PLAYER_REQUIRED;
}
final Location location = context.getLocation();
List<Entity> allEntities = new ArrayList<>(location.getWorld().getNearbyEntities(location, radius, radius, radius));
entities.clear();
Collections.sort(allEntities, new Comparator<Entity>() {
@Override
public int compare(Entity entity1, Entity entity2) {
return Double.compare(location.distanceSquared(entity1.getLocation()), location.distanceSquared(entity2.getLocation()));
}
});
int index = 0;
for (Entity targetEntity : allEntities) {
if (!context.getTargetsCaster() && targetEntity == player)
continue;
if (targetEntity instanceof LivingEntity && ((LivingEntity) targetEntity).hasPotionEffect(PotionEffectType.INVISIBILITY))
continue;
if (!context.canTarget(targetEntity))
continue;
entities.put(index++, new WeakReference<>(targetEntity));
if (entities.size() >= limit)
break;
}
if (entities.size() == 0)
return SpellResult.NO_TARGET;
String inventoryTitle = context.getMessage("title", "Select Target");
int invSize = ((entities.size() + 9) / 9) * 9;
Inventory displayInventory = CompatibilityUtils.createInventory(null, invSize, inventoryTitle);
for (Map.Entry<Integer, WeakReference<Entity>> entry : entities.entrySet()) {
Entity targetEntity = entry.getValue().get();
if (targetEntity == null)
continue;
String displayName = DeprecatedUtils.getDisplayName(targetEntity);
ItemStack skull = controller.getSkull(targetEntity, displayName);
displayInventory.setItem(entry.getKey(), skull);
}
active = true;
mage.activateGUI(this, displayInventory);
return SpellResult.NO_ACTION;
}
use of com.elmakers.mine.bukkit.api.magic.Mage in project MagicPlugin by elBukkit.
the class MountArmorStandAction method mountNewArmorStand.
protected boolean mountNewArmorStand(CastContext context) {
Mage mage = context.getMage();
Entity entity = context.getEntity();
ArmorStand armorStand = CompatibilityUtils.createArmorStand(mage.getLocation());
if (armorStandInvisible) {
CompatibilityUtils.setInvisible(armorStand, true);
}
if (armorStandMarker) {
armorStand.setMarker(true);
}
if (!armorStandGravity) {
armorStand.setGravity(false);
}
CompatibilityUtils.setDisabledSlots(armorStand, 2039552);
if (armorStandSmall) {
armorStand.setSmall(true);
}
MageController controller = context.getController();
controller.setForceSpawn(true);
try {
CompatibilityUtils.addToWorld(entity.getWorld(), armorStand, armorStandSpawnReason);
} catch (Exception ex) {
ex.printStackTrace();
return false;
}
controller.setForceSpawn(false);
if (mountWand) {
armorStand.setHelmet(item);
} else if (helmetItem != null) {
armorStand.setHelmet(helmetItem);
}
if (mountName != null && !mountName.isEmpty()) {
armorStand.setCustomName(mountName);
}
context.setTargetEntity(armorStand);
return true;
}
Aggregations