2013-03-01 06:52:01 +01:00
|
|
|
package com.gmail.nossr50.skills.smelting;
|
|
|
|
|
|
|
|
import org.bukkit.Location;
|
|
|
|
import org.bukkit.Material;
|
|
|
|
import org.bukkit.block.BlockState;
|
|
|
|
import org.bukkit.enchantments.Enchantment;
|
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
import org.bukkit.event.inventory.FurnaceBurnEvent;
|
|
|
|
import org.bukkit.inventory.ItemStack;
|
|
|
|
|
|
|
|
import com.gmail.nossr50.mcMMO;
|
|
|
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
|
|
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
|
|
|
import com.gmail.nossr50.locale.LocaleLoader;
|
|
|
|
import com.gmail.nossr50.skills.SkillManager;
|
|
|
|
import com.gmail.nossr50.skills.mining.Mining;
|
|
|
|
import com.gmail.nossr50.skills.smelting.Smelting.Tier;
|
|
|
|
import com.gmail.nossr50.util.BlockUtils;
|
|
|
|
import com.gmail.nossr50.util.ItemUtils;
|
|
|
|
import com.gmail.nossr50.util.Misc;
|
|
|
|
import com.gmail.nossr50.util.Permissions;
|
|
|
|
import com.gmail.nossr50.util.skills.SkillUtils;
|
|
|
|
|
|
|
|
public class SmeltingManager extends SkillManager {
|
|
|
|
public SmeltingManager(McMMOPlayer mcMMOPlayer) {
|
|
|
|
super(mcMMOPlayer, SkillType.SMELTING);
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean canUseFluxMining(BlockState blockState) {
|
|
|
|
Player player = getPlayer();
|
|
|
|
ItemStack heldItem = player.getItemInHand();
|
|
|
|
|
|
|
|
return BlockUtils.affectedByFluxMining(blockState) && ItemUtils.isPickaxe(heldItem) && !heldItem.containsEnchantment(Enchantment.SILK_TOUCH) && Permissions.fluxMining(player) && !mcMMO.placeStore.isTrue(blockState);
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean canUseVanillaXpBoost() {
|
|
|
|
Player player = getPlayer();
|
|
|
|
|
|
|
|
return SkillUtils.unlockLevelReached(player, skill, Smelting.Tier.ONE.getLevel()) && Permissions.vanillaXpBoost(player, skill);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Process the Flux Mining ability.
|
|
|
|
*
|
|
|
|
* @param blockState The {@link BlockState} to check ability activation for
|
|
|
|
* @return true if the ability was successful, false otherwise
|
|
|
|
*/
|
|
|
|
public boolean processFluxMining(BlockState blockState) {
|
|
|
|
Player player = getPlayer();
|
|
|
|
|
|
|
|
if (SkillUtils.unlockLevelReached(player, skill, Smelting.fluxMiningUnlockLevel) && SkillUtils.activationSuccessful(player, skill, Smelting.fluxMiningChance)) {
|
|
|
|
ItemStack item = null;
|
|
|
|
|
|
|
|
switch (blockState.getType()) {
|
|
|
|
case IRON_ORE:
|
|
|
|
item = new ItemStack(Material.IRON_INGOT);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case GOLD_ORE:
|
|
|
|
item = new ItemStack(Material.GOLD_INGOT);
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (item == null) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
Location location = blockState.getLocation();
|
|
|
|
|
|
|
|
Misc.dropItem(location, item);
|
|
|
|
|
|
|
|
if (Permissions.doubleDrops(player, skill) && SkillUtils.activationSuccessful(player, skill, Mining.doubleDropsMaxChance, Mining.doubleDropsMaxLevel)) {
|
|
|
|
Misc.dropItem(location, item);
|
|
|
|
}
|
|
|
|
|
|
|
|
blockState.setRawData((byte) 0x0);
|
|
|
|
blockState.setType(Material.AIR);
|
|
|
|
player.sendMessage(LocaleLoader.getString("Smelting.FluxMining.Success"));
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Increases burn time for furnace fuel.
|
|
|
|
*
|
|
|
|
* @param burnTime The initial burn time from the {@link FurnaceBurnEvent}
|
|
|
|
*/
|
|
|
|
public int fuelEfficiency(int burnTime) {
|
|
|
|
double burnModifier = 1 + (((double) getSkillLevel() / Smelting.burnModifierMaxLevel) * Smelting.burnTimeMultiplier);
|
|
|
|
|
|
|
|
return (int) (burnTime * burnModifier);
|
|
|
|
}
|
|
|
|
|
|
|
|
public ItemStack smeltProcessing(Material resourceType, ItemStack result) {
|
|
|
|
Player player = getPlayer();
|
|
|
|
|
|
|
|
applyXpGain(Smelting.getResourceXp(resourceType));
|
|
|
|
|
|
|
|
if (Permissions.doubleDrops(player, skill) && SkillUtils.activationSuccessful(player, skill, Smelting.secondSmeltMaxChance, Smelting.secondSmeltMaxLevel)) {
|
|
|
|
ItemStack newResult = new ItemStack(result.getType(), result.getAmount() + 1);
|
|
|
|
return newResult;
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
public int vanillaXPBoost(int experience) {
|
|
|
|
return experience * getVanillaXpMultiplier();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the vanilla XP multiplier
|
|
|
|
*
|
|
|
|
* @return the vanilla XP multiplier
|
|
|
|
*/
|
|
|
|
public int getVanillaXpMultiplier() {
|
|
|
|
int skillLevel = getSkillLevel();
|
|
|
|
|
|
|
|
for (Tier tier : Tier.values()) {
|
|
|
|
if (skillLevel >= tier.getLevel()) {
|
|
|
|
return tier.getVanillaXPBoostModifier();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|