@EventHandler public void onBlockPlace(BlockPlaceEvent event) { String playerID = PlayerConverter.getID(event.getPlayer()); // if the player has this objective, the event isn't canceled, // the block is correct and conditions are met if (containsPlayer(playerID) && !event.isCancelled() && event.getBlock().getType().equals(material) && (data < 0 || event.getBlock().getData() == data) && checkConditions(playerID)) { // add the block to the total amount BlockData playerData = (BlockData) dataMap.get(playerID); playerData.add(); // complete the objective if (playerData.getAmount() == neededAmount) { completeObjective(playerID); } else if (notify) { // or maybe display a notification if (playerData.getAmount() > neededAmount) { Config.sendMessage( playerID, "blocks_to_break", new String[] {String.valueOf(playerData.getAmount() - neededAmount)}); } else { Config.sendMessage( playerID, "blocks_to_place", new String[] {String.valueOf(neededAmount - playerData.getAmount())}); } } } }
@EventHandler public void onTaming(EntityTameEvent event) { if (event.getOwner() instanceof Player) { String playerID = PlayerConverter.getID((Player) event.getOwner()); if (!dataMap.containsKey(playerID)) { return; } LivingEntity entity = event.getEntity(); TameData playerData = (TameData) dataMap.get(playerID); switch (type) { case WOLF: if (entity.getType().equals(EntityType.WOLF) && checkConditions(playerID)) { playerData.subtract(); } break; case OCELOT: if (entity.getType().equals(EntityType.OCELOT) && checkConditions(playerID)) { playerData.subtract(); } break; case HORSE: if (entity.getType().equals(EntityType.HORSE) && checkConditions(playerID)) { playerData.subtract(); } break; default: break; } if (playerData.isZero()) { completeObjective(playerID); } } }
@Override public String getValue(String playerID) { Player player = PlayerConverter.getPlayer(playerID); int playersAmount = 0; for (ItemStack item : player.getInventory().getContents()) { if (item == null) { continue; } if (!questItem.equalsI(item)) { continue; } playersAmount += item.getAmount(); } List<ItemStack> backpackItems = BetonQuest.getInstance().getDBHandler(playerID).getBackpack(); for (ItemStack item : backpackItems) { if (item == null) { continue; } if (!questItem.equalsI(item)) { continue; } playersAmount += item.getAmount(); } switch (type) { case AMOUNT: return Integer.toString(playersAmount); case LEFT: return Integer.toString(amount - playersAmount); default: return ""; } }
@EventHandler public void onLevelUp(PlayerLevelChangeEvent event) { String playerID = PlayerConverter.getID(event.getPlayer()); if (!containsPlayer(playerID)) { return; } if (event.getNewLevel() >= level && checkConditions(playerID)) { completeObjective(playerID); } }
@Override public void run(String playerID) { Player player = PlayerConverter.getPlayer(playerID); for (Item theItem : questItems) { QuestItem questItem = theItem.getItem(); int amount = theItem.getAmount(); if (notify) { player.sendMessage( Config.getMessage("items_given") .replaceAll( "%name%", (questItem.getName() != null) ? questItem.getName() : questItem.getMaterial().toString()) .replaceAll("%amount%", String.valueOf(amount)) .replaceAll("&", "§")); } while (amount > 0) { int stackSize; if (amount > 64) { stackSize = 64; } else { stackSize = amount; } ItemStack item = questItem.generateItem(stackSize); HashMap<Integer, ItemStack> left = player.getInventory().addItem(item); for (Integer leftNumber : left.keySet()) { ItemStack itemStack = left.get(leftNumber); if (Utils.isQuestItem(itemStack)) { BetonQuest.getInstance().getDBHandler(playerID).addItem(itemStack, stackSize); } else { player.getWorld().dropItem(player.getLocation(), itemStack); } } amount = amount - stackSize; } } }
public void run(String playerID) { PlayerConverter.getPlayer(playerID).teleport(loc); }