mcMMO/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java

152 lines
4.3 KiB
Java
Raw Normal View History

2013-01-07 18:51:39 +01:00
package com.gmail.nossr50.skills.mining;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
2013-01-10 01:45:34 +01:00
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.entity.ExplosionPrimeEvent;
2013-01-07 18:51:39 +01:00
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.datatypes.PlayerProfile;
import com.gmail.nossr50.datatypes.SkillType;
2013-01-08 18:52:16 +01:00
import com.gmail.nossr50.util.Misc;
2013-01-07 18:51:39 +01:00
import com.gmail.nossr50.util.Permissions;
import com.gmail.nossr50.util.Users;
public class MiningManager {
private Player player;
private PlayerProfile profile;
private int skillLevel;
public MiningManager (Player player) {
this.player = player;
this.profile = Users.getProfile(player);
this.skillLevel = profile.getSkillLevel(SkillType.MINING);
}
2013-01-10 01:45:34 +01:00
/**
* Handler for explosion drops and XP gain.
*
* @param event Event whose explosion is being processed
*/
public void blastMiningDropProcessing(EntityExplodeEvent event) {
if (Misc.isCitizensNPC(player)) {
return;
}
if (skillLevel < BlastMining.BLAST_MINING_RANK_1) {
return;
}
BlastMiningDropEventHandler eventHandler = new BlastMiningDropEventHandler(this, event);
eventHandler.sortExplosionBlocks();
eventHandler.modifyEventYield();
eventHandler.calcuateDropModifiers();
eventHandler.processDroppedBlocks();
eventHandler.processXPGain();
}
/**
* Decreases damage dealt by the explosion from TNT activated by Blast Mining.
*
* @param event Event whose explosion damage is being reduced
*/
public void demolitionsExpertise(EntityDamageEvent event) {
if (Misc.isCitizensNPC(player)) {
return;
}
DemoltionsExpertiseEventHandler eventHandler = new DemoltionsExpertiseEventHandler(this, event);
eventHandler.calculateDamageModifier();
eventHandler.modifyEventDamage();
}
/**
* Increases the blast radius of the explosion.
*
* @param player Player triggering the explosion
* @param event Event whose explosion radius is being changed
*/
public void biggerBombs(ExplosionPrimeEvent event) {
if (Misc.isCitizensNPC(player)) {
return;
}
BiggerBombsEventHandler eventHandler = new BiggerBombsEventHandler(this, event);
eventHandler.calculateRadiusIncrease();
eventHandler.modifyBlastRadius();
}
2013-01-07 18:51:39 +01:00
/**
* Process Mining block drops.
*
* @param block The block being broken
*/
public void miningBlockCheck(Block block) {
if (mcMMO.placeStore.isTrue(block)) {
return;
}
2013-01-08 15:42:37 +01:00
MiningBlockEventHandler eventHandler = new MiningBlockEventHandler(this, block);
2013-01-10 01:45:34 +01:00
eventHandler.processXPGain();
2013-01-07 18:51:39 +01:00
if (!Permissions.miningDoubleDrops(player)) {
return;
}
int randomChance = 100;
if (Permissions.luckyMining(player)) {
randomChance = (int) (randomChance * 0.75);
}
2013-01-08 18:52:16 +01:00
float chance = ((float) Mining.DOUBLE_DROPS_MAX_CHANCE / Mining.DOUBLE_DROPS_MAX_BONUS_LEVEL) * eventHandler.skillModifier;
2013-01-07 18:51:39 +01:00
if (chance > Mining.getRandom().nextInt(randomChance)) {
eventHandler.processDrops();
2013-01-07 18:51:39 +01:00
}
}
2013-01-08 18:52:16 +01:00
/**
* Handle the Super Breaker ability.
*
* @param player The player using the ability
* @param block The block being affected
*/
public void superBreakerBlockCheck(Block block) {
if (mcMMO.placeStore.isTrue(block) || !Misc.blockBreakSimulate(block, player, true)) {
2013-01-08 18:52:16 +01:00
return;
}
SuperBreakerEventHandler eventHandler = new SuperBreakerEventHandler(this, block);
2013-01-08 18:52:16 +01:00
if (eventHandler.tierCheck()) {
return;
}
eventHandler.callFakeArmswing();
eventHandler.processDurabilityLoss();
eventHandler.processDropsAndXP();
eventHandler.playSpoutSound();
}
2013-01-07 18:51:39 +01:00
protected int getSkillLevel() {
return skillLevel;
}
protected Player getPlayer() {
return player;
}
2013-01-08 15:42:37 +01:00
protected PlayerProfile getProfile() {
return profile;
}
2013-01-07 18:51:39 +01:00
}