@Override @Nullable public ItemType convert(final Object o) { final SkullType type; if (o instanceof Skeleton || o instanceof SkeletonData) { if (o instanceof SkeletonData ? ((SkeletonData) o).isWither() : ((Skeleton) o).getSkeletonType() == SkeletonType.WITHER) { type = SkullType.WITHER; } else { type = SkullType.SKELETON; } } else if (o instanceof Zombie || o instanceof EntityData && Zombie.class.isAssignableFrom(((EntityData<?>) o).getType())) { type = SkullType.ZOMBIE; } else if (o instanceof OfflinePlayer || o instanceof PlayerData) { type = SkullType.PLAYER; } else if (o instanceof Creeper || o instanceof CreeperData) { type = SkullType.CREEPER; } else { return null; } @SuppressWarnings("deprecation") final ItemType i = new ItemType(Material.SKULL_ITEM.getId(), (short) type.ordinal()); if (o instanceof OfflinePlayer) { final SkullMeta s = (SkullMeta) Bukkit.getItemFactory().getItemMeta(Material.SKULL_ITEM); s.setOwner(((OfflinePlayer) o).getName()); i.setItemMeta(s); } return i; }
@Override public RequirementState getState() { YamlConfiguration myState = new YamlConfiguration(); myState.set("type", "vr"); ConfigurationSection foeSection = myState.createSection("foe"); foeSection.set("type", foe.getType().name()); foeSection.set("maxhp", foe.getMaxHealth()); foeSection.set("hp", foe.getHealth()); foeSection.set("name", foe.getCustomName()); foeSection.set("location", foe.getLocation()); if (foe instanceof Guardian) { foeSection.set("elder", ((Guardian) foe).isElder()); } if (foe instanceof Slime) { foeSection.set("size", ((Slime) foe).getSize()); } if (foe instanceof Skeleton) { foeSection.set("wither", ((Skeleton) foe).getSkeletonType() == SkeletonType.WITHER); } EquipmentConfiguration econ = new EquipmentConfiguration(foe.getEquipment()); foeSection.set("equipment", econ.getConfiguration()); return new RequirementState(myState); }
@Override public LivingEntity spawnWitherSkeleton(Location loc) { Skeleton entity = (Skeleton) loc.getWorld().spawnEntity(loc, EntityType.SKELETON); entity.setSkeletonType(SkeletonType.WITHER); return entity; }
@Override public void effect(Event e, ItemStack item, int level) { EntityDamageByEntityEvent event = (EntityDamageByEntityEvent) e; final Player player = (Player) event.getDamager(); final LivingEntity ent = (LivingEntity) event.getEntity(); new BukkitRunnable() { @Override public void run() { if (ent.getHealth() <= 0) { byte type = 3; if (ent instanceof Skeleton) { type = 0; if (((Skeleton) ent).getSkeletonType().equals(SkeletonType.WITHER)) type = 1; } else if (ent instanceof Zombie) type = 2; else if (ent instanceof Creeper) type = 4; ItemStack skull = new ItemStack(Material.SKULL_ITEM, 1, type); if (type == 3) { SkullMeta sm = (SkullMeta) skull.getItemMeta(); sm.setOwner(ent.getName()); skull.setItemMeta(sm); } ent.getWorld().dropItem(ent.getLocation(), skull); EffectManager.playSound(player.getLocation(), "BLOCK_ANVIL_LAND", 0.1f, 1.5f); } } }.runTaskLater(getPlugin(), 5l); }
@EventHandler(priority=EventPriority.HIGHEST) public void onDeath(final EntityDeathEvent e) { if (e.getEntity().hasMetadata("android_killer")) { for (MetadataValue value: e.getEntity().getMetadata("android_killer")) { final AndroidObject obj = (AndroidObject) value.value(); Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() { @SuppressWarnings("deprecation") @Override public void run() { List<ItemStack> items = new ArrayList<ItemStack>(); for (Entity n: e.getEntity().getNearbyEntities(0.5D, 0.5D, 0.5D)) { if (n instanceof Item && !n.hasMetadata("no_pickup")) { items.add(((Item) n).getItemStack()); n.remove(); } } switch (e.getEntityType()) { case BLAZE: { items.add(new ItemStack(Material.BLAZE_ROD, 1 + CSCoreLib.randomizer().nextInt(2))); break; } case PIG_ZOMBIE: { items.add(new ItemStack(Material.GOLD_NUGGET, 1 + CSCoreLib.randomizer().nextInt(3))); break; } case SKELETON: { if (((Skeleton) e.getEntity()).getSkeletonType().equals(SkeletonType.WITHER)) { if (CSCoreLib.randomizer().nextInt(250) < 2) items.add(new MaterialData(Material.SKULL_ITEM, (byte) 1).toItemStack(1)); } break; } default: break; } obj.getAndroid().addItems(obj.getBlock(), items.toArray(new ItemStack[items.size()])); ExperienceOrb exp = (ExperienceOrb) e.getEntity().getWorld().spawnEntity(e.getEntity().getLocation(), EntityType.EXPERIENCE_ORB); exp.setExperience(1 + CSCoreLib.randomizer().nextInt(6)); } }, 1L); return; } } }
@Override protected boolean init(final @Nullable Class<? extends Skeleton> c, final @Nullable Skeleton e) { wither = (e == null || !hasWither) ? false : e.getSkeletonType() == SkeletonType.WITHER; return true; }
@Override public void set(final Skeleton entity) { if (hasWither) entity.setSkeletonType(wither ? SkeletonType.WITHER : SkeletonType.NORMAL); }
@Override protected boolean match(final Skeleton entity) { return hasWither ? (entity.getSkeletonType() == SkeletonType.WITHER) == wither : true; }
@Override public void activate() { ConfigurationSection myState = foeStateRecord.getConfig(); //get rid of any entities we already have if (foe != null && !foe.isDead()) { foe.remove(); } ConfigurationSection foeState = myState.getConfigurationSection("foe"); Location loc = ((LocationState) foeState.get("location")).getLocation(); //load chunk before creating foe loc.getChunk(); foe = (LivingEntity) loc.getWorld().spawnEntity(loc, EntityType.valueOf(foeState.getString("type"))); this.id = foe.getUniqueId(); foe.setMaxHealth(foeState.getDouble("maxhp")); foe.setHealth(foeState.getDouble("hp")); foe.setCustomName(foeState.getString("name")); foe.setRemoveWhenFarAway(false); EntityEquipment equipment = foe.getEquipment(); EquipmentConfiguration econ = new EquipmentConfiguration(); try { econ.load( foeState.getConfigurationSection("equipment")); } catch (InvalidConfigurationException e) { e.printStackTrace(); } equipment.setHelmet(econ.getHead()); equipment.setChestplate(econ.getChest()); equipment.setLeggings(econ.getLegs()); equipment.setBoots(econ.getBoots()); equipment.setItemInMainHand(econ.getHeldMain()); equipment.setItemInOffHand(econ.getHeldOff()); //special checks if (foe instanceof Guardian) { if (foeState.getBoolean("elder", false)) { ((Guardian) foe).setElder(true); } } if (foe instanceof Slime) { if (foeState.getInt("size", 1) > 1) { ((Slime) foe).setSize(foeState.getInt("size")); } } if (foe instanceof Skeleton) { if (foeState.getBoolean("wither", false)) { ((Skeleton) foe).setSkeletonType(SkeletonType.WITHER); } } if (desc == null) { desc = foeState.getString("description", "Slay " + foe.getCustomName()); } //add as NPC for non-removal foeNPC = new QuestMonsterNPC(); foeNPC.setEntity(foe); QuestManagerPlugin.questManagerPlugin.getManager().registerNPC(foeNPC); update(); Bukkit.getPluginManager().registerEvents(this, QuestManagerPlugin.questManagerPlugin); }
@Override public void onSpawn() { Skeleton skeleton = (Skeleton) getNPC().getEntity(); skeleton.setSkeletonType(isWitherSkeleton ? SkeletonType.WITHER : SkeletonType.NORMAL); }
public void setWitherSkeleton(boolean isWitherSkeleton) { this.isWitherSkeleton = isWitherSkeleton; if (getNPC().isSpawned()) ((Skeleton) getNPC().getEntity()).setSkeletonType(isWitherSkeleton ? SkeletonType.WITHER : SkeletonType.NORMAL); }
/** * Handle the Shake ability * * @param target The {@link LivingEntity} affected by the ability */ public void shakeCheck(LivingEntity target) { fishingTries--; // Because autoclicking to shake is OK. SecondaryAbilityWeightedActivationCheckEvent activationEvent = new SecondaryAbilityWeightedActivationCheckEvent(getPlayer(), SecondaryAbility.SHAKE, getShakeProbability() / activationChance); mcMMO.p.getServer().getPluginManager().callEvent(activationEvent); if ((activationEvent.getChance() * activationChance) > Misc.getRandom().nextInt(activationChance)) { List<ShakeTreasure> possibleDrops = Fishing.findPossibleDrops(target); if (possibleDrops == null || possibleDrops.isEmpty()) { return; } ItemStack drop = Fishing.chooseDrop(possibleDrops); // It's possible that chooseDrop returns null if the sum of probability in possibleDrops is inferior than 100 if (drop == null) { return; } // Extra processing depending on the mob and drop type switch (target.getType()) { case SHEEP: Sheep sheep = (Sheep) target; if (drop.getType() == Material.WOOL) { if (sheep.isSheared()) { return; } drop = new Wool(sheep.getColor()).toItemStack(drop.getAmount()); sheep.setSheared(true); } break; case SKELETON: if (((Skeleton) target).getSkeletonType() == SkeletonType.WITHER) { switch (drop.getType()) { case SKULL_ITEM: drop.setDurability((short) 1); break; case ARROW: drop.setType(Material.COAL); break; default: break; } } break; default: break; } McMMOPlayerShakeEvent shakeEvent = new McMMOPlayerShakeEvent(getPlayer(), drop); drop = shakeEvent.getDrop(); if (shakeEvent.isCancelled() || drop == null) { return; } Misc.dropItem(target.getLocation(), drop); CombatUtils.dealDamage(target, Math.max(target.getMaxHealth() / 4, 1)); // Make it so you can shake a mob no more than 4 times. applyXpGain(ExperienceConfig.getInstance().getFishingShakeXP(), XPGainReason.PVE); } }
@EventHandler(priority = EventPriority.MONITOR) public void onEntityDeath(EntityDeathEvent event) { Player killer = event.getEntity().getKiller(); if (killer == null) { return; } SPlayer sply = plugin.players.get(killer.getName()); int currencyGain = 0; if (plugin.silverManager.mobPayouts.containsKey(event.getEntityType())) { currencyGain = plugin.silverManager.mobPayouts.get(event.getEntityType()); } if (plugin.silverManager.mobAwardsPrimary.containsKey(event.getEntityType())) { plugin.awardManager.updateAward(plugin.silverManager.mobAwardsPrimary.get(event.getEntityType()), 1, killer); if (killer.getInventory().getItemInHand().getType() == Material.BOW) { plugin.awardManager.updateAward(AwardType.KATNISS_EVERDEEN, 1, killer); } if (killer.getInventory().getItemInHand().getAmount() == 0) { plugin.awardManager.updateAward(AwardType.NINJA, 1, killer); } if (killer.getInventory().getItemInHand().getType() == Material.IRON_AXE) { plugin.awardManager.updateAward(AwardType.EXECUTIONER, 1, killer); } if (killer.getInventory().getItemInHand().getType() == Material.IRON_SWORD || killer.getInventory().getItemInHand().getType() == Material.DIAMOND_SWORD || killer.getInventory().getItemInHand().getType() == Material.STONE_SWORD) { plugin.awardManager.updateAward(AwardType.SWORDSMAN, 1, killer); } } if (plugin.silverManager.mobAwardsSecondary.containsKey(event.getEntityType())) { plugin.awardManager.updateAward(plugin.silverManager.mobAwardsSecondary.get(event.getEntityType()), 1, killer); } if (event.getEntityType() == EntityType.WOLF) { Wolf w = (Wolf) event.getEntity(); if (w.isAngry()) { plugin.awardManager.updateAward(AwardType.LYCAN_HUNTER, 1, killer); } } if (event.getEntityType() == EntityType.VILLAGER) { plugin.awardManager.updateAward(AwardType.MARAUDER, 1, killer); } if (event.getEntityType() == EntityType.SKELETON) { Skeleton skeleton = (Skeleton) event.getEntity(); if (skeleton.getSkeletonType() == SkeletonType.WITHER) { plugin.awardManager.updateAward(AwardType.THE_DAMNED, 1, killer); } } if (event.getEntityType() == EntityType.ENDER_DRAGON) { for (Player p : plugin.getServer().getOnlinePlayers()) { if (p.getWorld().getName().contains("end")) { plugin.awardManager.addAward(AwardType.VOID_KING, p); plugin.awardManager.updateAward(AwardType.DARK_ONE, 1, p); } } } if (currencyGain == 0) { return; } plugin.getServer().getLogger().log(Level.INFO, "Silver Transaction: " + sply.getPlayer().getName() + " gained currency for killing " + event.getEntityType().getName() + "."); sply.addCurrency(currencyGain); sply.tickMobsDestroyed(); }
@Deprecated public static SkeletonType getType(int id) { return null; }
public void spawnEntity(Location loc) { Skeleton e = (Skeleton) loc.getWorld().spawnEntity(loc, EntityType.SKELETON); e.setSkeletonType(SkeletonType.WITHER); e.setCanPickupItems(true); }
Skeleton.SkeletonType getSkeletonType();
void setSkeletonType(Skeleton.SkeletonType type);