mcMMO/src/main/java/com/gmail/nossr50/skills/excavation/Excavation.java

102 lines
3.7 KiB
Java
Raw Normal View History

package com.gmail.nossr50.skills.excavation;
2012-01-09 20:00:13 +01:00
import java.util.ArrayList;
2012-03-12 22:57:44 +01:00
import java.util.List;
2012-01-09 20:00:13 +01:00
import org.bukkit.Location;
import org.bukkit.block.BlockState;
2012-01-09 20:00:13 +01:00
import org.bukkit.entity.Player;
2012-04-26 16:27:57 +02:00
import com.gmail.nossr50.config.Config;
2012-05-17 16:26:21 +02:00
import com.gmail.nossr50.config.TreasuresConfig;
import com.gmail.nossr50.datatypes.McMMOPlayer;
import com.gmail.nossr50.datatypes.treasure.ExcavationTreasure;
2013-01-30 17:35:33 +01:00
import com.gmail.nossr50.mods.ModChecks;
import com.gmail.nossr50.skills.utilities.PerksUtils;
import com.gmail.nossr50.skills.utilities.SkillType;
2012-06-05 16:13:10 +02:00
import com.gmail.nossr50.util.Misc;
import com.gmail.nossr50.util.Permissions;
import com.gmail.nossr50.util.Users;
2012-01-09 20:00:13 +01:00
2012-03-12 22:57:44 +01:00
public class Excavation {
/**
* Process treasure drops & XP gain for Excavation.
2012-03-12 22:57:44 +01:00
*
* @param blockState The {@link BlockState} to check ability activation for
* @param player The {@link Player} using this ability
2012-03-12 22:57:44 +01:00
*/
public static void excavationBlockCheck(BlockState blockState, Player player) {
McMMOPlayer mcMMOPlayer = Users.getPlayer(player);
int xp = Config.getInstance().getXp(SkillType.EXCAVATION, blockState.getType());
if (xp == 0 && ModChecks.isCustomExcavationBlock(blockState)) {
xp = ModChecks.getCustomBlock(blockState).getXpGain();
}
2012-03-12 22:57:44 +01:00
if (Permissions.excavationTreasureHunter(player)) {
List<ExcavationTreasure> treasures = getTreasures(blockState);
2012-03-12 22:57:44 +01:00
if (!treasures.isEmpty()) {
int skillLevel = mcMMOPlayer.getProfile().getSkillLevel(SkillType.EXCAVATION);
int activationChance = PerksUtils.handleLuckyPerks(player, SkillType.EXCAVATION);
Location location = blockState.getLocation();
2012-03-12 22:57:44 +01:00
for (ExcavationTreasure treasure : treasures) {
if (skillLevel >= treasure.getDropLevel() && Misc.getRandom().nextDouble() * activationChance <= treasure.getDropChance()) {
xp += treasure.getXp();
Misc.dropItem(location, treasure.getDrop());
}
2012-03-12 22:57:44 +01:00
}
}
}
mcMMOPlayer.beginXpGain(SkillType.EXCAVATION, xp);
2012-03-12 22:57:44 +01:00
}
/**
* Process the Giga Drill Breaker ability.
2012-03-12 22:57:44 +01:00
*
* @param blockState The {@link BlockState} to check ability activation for
* @param player The {@link Player} using this ability
2012-03-12 22:57:44 +01:00
*/
public static void gigaDrillBreaker(BlockState blockState, Player player) {
Excavation.excavationBlockCheck(blockState, player);
Excavation.excavationBlockCheck(blockState, player);
}
/**
* Get the list of possible {@link ExcavationTreasure|ExcavationTreasures} obtained from a given block.
*
* @param blockState The {@link BlockState} of the block to check.
* @return the list of treasures that could be found
*/
private static List<ExcavationTreasure> getTreasures(BlockState blockState) {
switch (blockState.getType()) {
case DIRT:
return TreasuresConfig.getInstance().excavationFromDirt;
case GRASS:
return TreasuresConfig.getInstance().excavationFromGrass;
case SAND:
return TreasuresConfig.getInstance().excavationFromSand;
case GRAVEL:
return TreasuresConfig.getInstance().excavationFromGravel;
case CLAY:
return TreasuresConfig.getInstance().excavationFromClay;
case MYCEL:
return TreasuresConfig.getInstance().excavationFromMycel;
case SOUL_SAND:
return TreasuresConfig.getInstance().excavationFromSoulSand;
default:
return new ArrayList<ExcavationTreasure>();
}
}
}