下面列出了怎么用org.bukkit.event.player.PlayerExpChangeEvent的API类实例代码及写法,或者点击链接到github查看源代码。
@EventHandler
public void onPlayerExpChange(PlayerExpChangeEvent event) {
try {
final Player player = event.getPlayer();
final Location location = player.getLocation();
final IslandManager islandManager = IridiumSkyblock.getIslandManager();
if (!islandManager.isIslandWorld(location)) return;
final User user = User.getUser(player);
final Island island = user.getIsland();
if (island == null) return;
for (Mission mission : IridiumSkyblock.getMissions().missions) {
final Map<String, Integer> levels = island.getMissionLevels();
levels.putIfAbsent(mission.name, 1);
final MissionData level = mission.levels.get(levels.get(mission.name));
if (level.type == MissionType.EXPERIENCE)
island.addMission(mission.name, event.getAmount());
}
} catch (Exception e) {
IridiumSkyblock.getInstance().sendErrorMessage(e);
}
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onXPGain(final PlayerExpChangeEvent event) {
final PlayerStat stat = PlayerStat.XP_GAINED;
// Get player
final Player player = event.getPlayer();
// Do general check
if (!plugin.doGeneralCheck(player, stat))
return;
// Update value to new stat.
plugin.getDataManager().setPlayerInfo(player.getUniqueId(), stat,
new XPGainedSpecification(player.getUniqueId(), event.getAmount(), player.getWorld().getName())
.constructQuery());
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onExpEarn(PlayerExpChangeEvent e) {
QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(e.getPlayer().getUniqueId(), true);
QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile();
for (Quest quest : super.getRegisteredQuests()) {
if (questProgressFile.hasStartedQuest(quest)) {
QuestProgress questProgress = questProgressFile.getQuestProgress(quest);
for (Task task : quest.getTasksOfType(super.getType())) {
TaskProgress taskProgress = questProgress.getTaskProgress(task.getId());
if (taskProgress.isCompleted()) {
continue;
}
int amount = e.getAmount();
int expNeeded = (int) task.getConfigValue("amount");
int progressExp;
if (taskProgress.getProgress() == null) {
progressExp = 0;
} else {
progressExp = (int) taskProgress.getProgress();
}
taskProgress.setProgress(progressExp + amount);
if (((int) taskProgress.getProgress()) >= expNeeded) {
taskProgress.setCompleted(true);
}
}
}
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void onXpChange(PlayerExpChangeEvent event) {
sendDurabilityBossBar(event.getPlayer(), event.getPlayer().getInventory().getItemInMainHand(),
EquipmentSlot.HAND);
sendDurabilityBossBar(event.getPlayer(), event.getPlayer().getInventory().getItemInOffHand(),
EquipmentSlot.OFF_HAND);
}
private static void giveExp(Player p, int amount) {
if (amount <= 0) return;
List<ItemStack> candidate = new ArrayList<>(13);
for (ItemStack item : new ItemStack[]{
p.getInventory().getHelmet(),
p.getInventory().getChestplate(),
p.getInventory().getLeggings(),
p.getInventory().getBoots(),
p.getInventory().getItemInMainHand(),
p.getInventory().getItemInOffHand()}) {
if (item != null && item.hasItemMeta() && item.getItemMeta().hasEnchant(Enchantment.MENDING)) {
if (item.getType().getMaxDurability() > 0 && ((Damageable) item.getItemMeta()).getDamage() > 0) {
candidate.add(item);
}
}
}
ItemStack repair = null;
if (candidate.size() > 0) {
candidate.sort(LootProtectListener::compareByDamagePercentage);
repair = candidate.get(0);
}
if (repair != null) {
Damageable itemMeta = (Damageable) repair.getItemMeta();
int durability = itemMeta.getDamage();
int repairPoint = durability;
if (amount * 2 < repairPoint) repairPoint = amount * 2;
int expConsumption = ((repairPoint % 2) == 1) ? (repairPoint + 1) / 2 : repairPoint / 2;
itemMeta.setDamage(durability - repairPoint);
repair.setItemMeta((ItemMeta) itemMeta);
amount -= expConsumption;
}
if (amount > 0) p.giveExp(amount);
PlayerExpChangeEvent event = new PlayerExpChangeEvent(p, amount);
Bukkit.getServer().getPluginManager().callEvent(event);
}
@EventHandler(priority = EventPriority.LOW)
public void onPlayerExpChange(PlayerExpChangeEvent event) {
Resident resident = CivGlobal.getResident(event.getPlayer());
CivMessage.send(resident, CivColor.LightGreen+"Picked up "+CivColor.Yellow+event.getAmount()+CivColor.LightGreen+" coins.");
resident.getTreasury().deposit(event.getAmount());
event.setAmount(0);
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onExpGain(PlayerExpChangeEvent event) {
if (Settings.INDICATOR_ENABLE.getValue("exp")) {
Location l = event.getPlayer().getLocation().clone();
l.setY(l.getY() + Settings.INDICATOR_Y_OFFSET.getValue("exp"));
HoloAPI.getManager().createSimpleHologram(l, Settings.INDICATOR_TIME_VISIBLE.getValue("exp"), true, Settings.INDICATOR_FORMAT.getValue("exp", "default") + "+" + event.getAmount() + " exp");
}
}
@Override
public void splitWithPartner(PlayerExpChangeEvent event, Player partner, double xp, Object o, MarriagePlayer player, Marriage marriage)
{
int xpPlayer = (int) Math.round((xp)), xpPartner = (int) xp;
BonusXPSplitEvent xpSplitEvent = new BonusXPSplitEvent(player, marriage, xpPlayer);
Bukkit.getServer().getPluginManager().callEvent(xpSplitEvent);
if(!xpSplitEvent.isCancelled())
{
event.setAmount(xpSplitEvent.getAmount());
if(xpPartner > 0) partner.giveExp(xpPartner); // If the partner is near he/she must also be online
}
}
@EventHandler(ignoreCancelled = true)
public void onCivilianGainExp(PlayerExpChangeEvent event) {
Civilian civilian = CivilianManager.getInstance().getCivilian(event.getPlayer().getUniqueId());
civilian.setExpOrbs(event.getAmount());
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onEntityDeath(PlayerExpChangeEvent event)
{
calculator.process(event, event.getPlayer(), event.getAmount(), null);
}
@Override
public void setEventExp(PlayerExpChangeEvent event, double xp, Object o, MarriagePlayer player, Marriage marriage) {}