Search in sources :

Example 1 with IslandMission

use of com.iridium.iridiumskyblock.database.IslandMission in project IridiumSkyblock by Iridium-Development.

the class MissionManager method hasCompletedMission.

/**
 * Checks whether the Island has completed the provided mission.
 *
 * @param island  The Island which should be checked
 * @param mission The mission which should be checked
 * @param key     The key of the mission
 * @return Whether this mission has been completed
 */
private boolean hasCompletedMission(@NotNull Island island, @NotNull Mission mission, @NotNull String key) {
    List<String> missions = mission.getMissions();
    for (int i = 0; i < mission.getMissions().size(); i++) {
        String missionRequirement = missions.get(i).toUpperCase();
        IslandMission islandMission = IridiumSkyblock.getInstance().getIslandManager().getIslandMission(island, mission, key, i);
        String[] conditions = missionRequirement.split(":");
        String number = conditions[conditions.length - 1];
        // Validate the required number for this condition
        if (number.matches("^[0-9]+$")) {
            int requiredAmount = Integer.parseInt(number);
            if (islandMission.getProgress() < requiredAmount) {
                return false;
            }
        } else {
            IridiumSkyblock.getInstance().getLogger().warning("Unknown format " + missionRequirement);
            IridiumSkyblock.getInstance().getLogger().warning(number + " Is not a number");
        }
    }
    return true;
}
Also used : IslandMission(com.iridium.iridiumskyblock.database.IslandMission)

Example 2 with IslandMission

use of com.iridium.iridiumskyblock.database.IslandMission in project IridiumSkyblock by Iridium-Development.

the class MissionManager method incrementMission.

/**
 * Increments a mission's data based on requirements.
 *
 * @param island      The island
 * @param missionData The mission data e.g. BREAK:COBBLESTONE
 * @param amount      The amount we are incrementing by
 */
public synchronized void incrementMission(@NotNull Island island, @NotNull String missionData, int amount) {
    String[] missionConditions = missionData.toUpperCase().split(":");
    for (Map.Entry<String, Mission> entry : IridiumSkyblock.getInstance().getMissionsList().entrySet()) {
        boolean completedBefore = true;
        List<String> missions = entry.getValue().getMissions();
        for (int i = 0; i < entry.getValue().getMissions().size(); i++) {
            String missionRequirement = missions.get(i).toUpperCase();
            String[] conditions = missionRequirement.split(":");
            // If the conditions are the same length (+1 because missionConditions doesn't include amount)
            if (missionConditions.length + 1 != conditions.length)
                continue;
            // Check if this is a mission we want to increment
            boolean matches = matchesMission(missionConditions, conditions);
            if (!matches)
                continue;
            IslandMission islandMission = IridiumSkyblock.getInstance().getIslandManager().getIslandMission(island, entry.getValue(), entry.getKey(), i);
            String number = conditions[missionData.split(":").length];
            // Validate the required number for this condition
            if (number.matches("^[0-9]+$")) {
                int totalAmount = Integer.parseInt(number);
                if (islandMission.getProgress() >= totalAmount)
                    break;
                completedBefore = false;
                islandMission.setProgress(Math.min(islandMission.getProgress() + amount, totalAmount));
            } else {
                IridiumSkyblock.getInstance().getLogger().warning("Unknown format " + missionRequirement);
                IridiumSkyblock.getInstance().getLogger().warning(number + " Is not a number");
            }
        }
        // Check if this mission is now completed
        if (!completedBefore && hasCompletedMission(island, entry.getValue(), entry.getKey())) {
            island.getMembers().stream().map(user -> Bukkit.getPlayer(user.getUuid())).filter(Objects::nonNull).forEach(player -> {
                entry.getValue().getMessage().stream().map(string -> StringUtils.color(string.replace("%prefix%", IridiumSkyblock.getInstance().getConfiguration().prefix))).forEach(player::sendMessage);
                entry.getValue().getCompleteSound().play(player);
            });
            IridiumSkyblock.getInstance().getDatabaseManager().getIslandRewardTableManager().addEntry(new IslandReward(island, entry.getValue().getReward()));
        }
    }
}
Also used : IslandMission(com.iridium.iridiumskyblock.database.IslandMission) Objects(java.util.Objects) List(java.util.List) Map(java.util.Map) Island(com.iridium.iridiumskyblock.database.Island) Mission(com.iridium.iridiumskyblock.Mission) NotNull(org.jetbrains.annotations.NotNull) StringUtils(com.iridium.iridiumcore.utils.StringUtils) IridiumSkyblock(com.iridium.iridiumskyblock.IridiumSkyblock) IslandReward(com.iridium.iridiumskyblock.database.IslandReward) Bukkit(org.bukkit.Bukkit) IslandReward(com.iridium.iridiumskyblock.database.IslandReward) IslandMission(com.iridium.iridiumskyblock.database.IslandMission) IslandMission(com.iridium.iridiumskyblock.database.IslandMission) Mission(com.iridium.iridiumskyblock.Mission) Map(java.util.Map)

Aggregations

IslandMission (com.iridium.iridiumskyblock.database.IslandMission)2 StringUtils (com.iridium.iridiumcore.utils.StringUtils)1 IridiumSkyblock (com.iridium.iridiumskyblock.IridiumSkyblock)1 Mission (com.iridium.iridiumskyblock.Mission)1 Island (com.iridium.iridiumskyblock.database.Island)1 IslandReward (com.iridium.iridiumskyblock.database.IslandReward)1 List (java.util.List)1 Map (java.util.Map)1 Objects (java.util.Objects)1 Bukkit (org.bukkit.Bukkit)1 NotNull (org.jetbrains.annotations.NotNull)1