mcMMO/mcMMO/com/gmail/nossr50/skills/Mining.java

485 lines
16 KiB
Java
Raw Normal View History

2011-04-20 22:56:25 +02:00
package com.gmail.nossr50.skills;
import org.bukkit.Location;
import org.bukkit.Material;
2011-05-04 08:24:08 +02:00
import org.bukkit.Statistic;
2011-04-20 22:56:25 +02:00
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.Plugin;
import org.bukkitcontrib.sound.SoundEffect;
2011-04-20 22:56:25 +02:00
import com.gmail.nossr50.Users;
import com.gmail.nossr50.m;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.config.LoadProperties;
import com.gmail.nossr50.contrib.contribStuff;
2011-04-20 22:56:25 +02:00
import com.gmail.nossr50.datatypes.PlayerProfile;
2011-07-19 16:17:14 +02:00
import com.gmail.nossr50.datatypes.SkillType;
import com.gmail.nossr50.locale.mcLocale;
2011-04-20 22:56:25 +02:00
2011-07-21 17:26:26 +02:00
public class Mining
{
2011-05-04 08:24:08 +02:00
public static void superBreakerCheck(Player player, Block block, Plugin pluginx)
{
2011-04-20 22:56:25 +02:00
PlayerProfile PP = Users.getProfile(player);
if(m.isMiningPick(player.getItemInHand())){
if(block != null){
if(!m.abilityBlockCheck(block))
return;
}
if(PP.getPickaxePreparationMode()){
PP.setPickaxePreparationMode(false);
}
int ticks = 2;
2011-07-19 16:17:14 +02:00
int x = PP.getSkillLevel(SkillType.MINING);
2011-07-10 02:18:00 +02:00
while(x >= 50)
{
2011-04-20 22:56:25 +02:00
x-=50;
ticks++;
}
if(!PP.getSuperBreakerMode() && Skills.cooldownOver(player, PP.getSuperBreakerDeactivatedTimeStamp(), LoadProperties.superBreakerCooldown)){
player.sendMessage(mcLocale.getString("Skills.SuperBreakerOn"));
2011-07-10 02:18:00 +02:00
for(Player y : pluginx.getServer().getOnlinePlayers())
{
2011-04-20 22:56:25 +02:00
if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10)
y.sendMessage(mcLocale.getString("Skills.SuperBreakerPlayer", new Object[] {player.getName()}));
2011-04-20 22:56:25 +02:00
}
PP.setSuperBreakerActivatedTimeStamp(System.currentTimeMillis());
2011-04-30 22:53:08 +02:00
PP.setSuperBreakerDeactivatedTimeStamp(System.currentTimeMillis() + (ticks * 1000));
2011-04-20 22:56:25 +02:00
PP.setSuperBreakerMode(true);
}
}
}
2011-05-04 08:24:08 +02:00
public static void blockProcSimulate(Block block)
{
2011-04-20 22:56:25 +02:00
Location loc = block.getLocation();
Material mat = Material.getMaterial(block.getTypeId());
byte damage = 0;
ItemStack item = new ItemStack(mat, 1, (byte)0, damage);
if(block.getTypeId() != 89 && block.getTypeId() != 73 && block.getTypeId() != 74 && block.getTypeId() != 56
&& block.getTypeId() != 21 && block.getTypeId() != 1 && block.getTypeId() != 16)
2011-04-20 22:56:25 +02:00
loc.getWorld().dropItemNaturally(loc, item);
if(block.getTypeId() == 89)
{
mat = Material.getMaterial(348);
item = new ItemStack(mat, 1, (byte)0, damage);
loc.getWorld().dropItemNaturally(loc, item);
}
if(block.getTypeId() == 73 || block.getTypeId() == 74)
{
mat = Material.getMaterial(331);
item = new ItemStack(mat, 1, (byte)0, damage);
loc.getWorld().dropItemNaturally(loc, item);
loc.getWorld().dropItemNaturally(loc, item);
loc.getWorld().dropItemNaturally(loc, item);
if(Math.random() * 10 > 5){
loc.getWorld().dropItemNaturally(loc, item);
}
}
if(block.getTypeId() == 21)
{
mat = Material.getMaterial(351);
item = new ItemStack(mat, 1, (byte)0,(byte)0x4);
loc.getWorld().dropItemNaturally(loc, item);
loc.getWorld().dropItemNaturally(loc, item);
loc.getWorld().dropItemNaturally(loc, item);
loc.getWorld().dropItemNaturally(loc, item);
}
if(block.getTypeId() == 56)
{
mat = Material.getMaterial(264);
item = new ItemStack(mat, 1, (byte)0, damage);
loc.getWorld().dropItemNaturally(loc, item);
}
if(block.getTypeId() == 1)
{
mat = Material.getMaterial(4);
item = new ItemStack(mat, 1, (byte)0, damage);
loc.getWorld().dropItemNaturally(loc, item);
}
if(block.getTypeId() == 16)
{
mat = Material.getMaterial(263);
item = new ItemStack(mat, 1, (byte)0, damage);
loc.getWorld().dropItemNaturally(loc, item);
}
}
public static void blockProcSmeltSimulate(Block block)
{
Location loc = block.getLocation();
Material mat = Material.getMaterial(block.getTypeId());
byte damage = 0;
ItemStack item = new ItemStack(mat, 1, (byte)0, damage);
if(block.getTypeId() != 14 && block.getTypeId() != 15 && block.getTypeId() != 89 && block.getTypeId() != 73 && block.getTypeId() != 74
&& block.getTypeId() != 56 && block.getTypeId() != 21 && block.getTypeId() != 1 && block.getTypeId() != 16)
loc.getWorld().dropItemNaturally(loc, item);
if(block.getTypeId() == 14)
{
mat = Material.getMaterial(266);
item = new ItemStack(mat, 1, (byte)0, damage);
loc.getWorld().dropItemNaturally(loc, item);
}
if(block.getTypeId() == 15)
{
mat = Material.getMaterial(265);
item = new ItemStack(mat, 1, (byte)0, damage);
loc.getWorld().dropItemNaturally(loc, item);
}
if(block.getTypeId() == 89)
{
2011-04-20 22:56:25 +02:00
mat = Material.getMaterial(348);
item = new ItemStack(mat, 1, (byte)0, damage);
loc.getWorld().dropItemNaturally(loc, item);
}
if(block.getTypeId() == 73 || block.getTypeId() == 74){
mat = Material.getMaterial(331);
item = new ItemStack(mat, 1, (byte)0, damage);
loc.getWorld().dropItemNaturally(loc, item);
loc.getWorld().dropItemNaturally(loc, item);
loc.getWorld().dropItemNaturally(loc, item);
if(Math.random() * 10 > 5){
loc.getWorld().dropItemNaturally(loc, item);
}
}
if(block.getTypeId() == 21){
mat = Material.getMaterial(351);
item = new ItemStack(mat, 1, (byte)0,(byte)0x4);
loc.getWorld().dropItemNaturally(loc, item);
loc.getWorld().dropItemNaturally(loc, item);
loc.getWorld().dropItemNaturally(loc, item);
loc.getWorld().dropItemNaturally(loc, item);
}
if(block.getTypeId() == 56){
mat = Material.getMaterial(264);
item = new ItemStack(mat, 1, (byte)0, damage);
loc.getWorld().dropItemNaturally(loc, item);
}
if(block.getTypeId() == 1){
mat = Material.getMaterial(4);
item = new ItemStack(mat, 1, (byte)0, damage);
loc.getWorld().dropItemNaturally(loc, item);
}
if(block.getTypeId() == 16){
mat = Material.getMaterial(263);
item = new ItemStack(mat, 1, (byte)0, damage);
loc.getWorld().dropItemNaturally(loc, item);
}
}
2011-07-21 15:35:49 +02:00
/*
public static void blockProcSmeltCheck(Block block, Player player)
2011-05-04 08:24:08 +02:00
{
2011-04-20 22:56:25 +02:00
PlayerProfile PP = Users.getProfile(player);
if(player != null)
{
if(Math.random() * 1000 <= PP.getSkillLevel(SkillType.MINING))
{
2011-07-21 15:35:49 +02:00
blockProcSmeltSimulate(block);
return;
2011-04-20 22:56:25 +02:00
}
2011-07-21 15:35:49 +02:00
}
2011-04-20 22:56:25 +02:00
}
2011-07-21 15:35:49 +02:00
*/
public static void blockProcCheck(Block block, Player player)
{
PlayerProfile PP = Users.getProfile(player);
if(player != null)
{
if(Math.random() * 1000 <= PP.getSkillLevel(SkillType.MINING))
{
2011-07-21 17:26:26 +02:00
blockProcSimulate(block);
return;
}
}
}
public static void miningBlockCheck(Boolean smelt, Player player, Block block, mcMMO plugin)
2011-05-04 08:24:08 +02:00
{
2011-04-20 22:56:25 +02:00
PlayerProfile PP = Users.getProfile(player);
2011-07-10 02:18:00 +02:00
if(plugin.misc.blockWatchList.contains(block) || block.getData() == (byte) 5)
2011-04-20 22:56:25 +02:00
return;
int xp = 0;
2011-07-21 15:35:49 +02:00
if(block.getTypeId() == 1 || block.getTypeId() == 24)
{
2011-07-10 02:18:00 +02:00
xp += LoadProperties.mstone;
if(smelt = false)
blockProcCheck(block, player);
else
2011-07-21 15:35:49 +02:00
blockProcCheck(block, player);
2011-04-20 22:56:25 +02:00
}
//OBSIDIAN
if(block.getTypeId() == 49)
{
2011-07-10 02:18:00 +02:00
xp += LoadProperties.mobsidian;
if(smelt = false)
blockProcCheck(block, player);
else
2011-07-21 15:35:49 +02:00
blockProcCheck(block, player);
2011-04-20 22:56:25 +02:00
}
//NETHERRACK
if(block.getTypeId() == 87)
{
2011-07-10 02:18:00 +02:00
xp += LoadProperties.mnetherrack;
if(smelt = false)
blockProcCheck(block, player);
else
2011-07-21 15:35:49 +02:00
blockProcCheck(block, player);
2011-04-20 22:56:25 +02:00
}
//GLOWSTONE
if(block.getTypeId() == 89)
{
2011-07-10 02:18:00 +02:00
xp += LoadProperties.mglowstone;
if(smelt = false)
blockProcCheck(block, player);
else
2011-07-21 15:35:49 +02:00
blockProcCheck(block, player);
2011-04-20 22:56:25 +02:00
}
//COAL
if(block.getTypeId() == 16)
{
2011-07-10 02:18:00 +02:00
xp += LoadProperties.mcoal;
if(smelt = false)
blockProcCheck(block, player);
else
2011-07-21 15:35:49 +02:00
blockProcCheck(block, player);
2011-04-20 22:56:25 +02:00
}
//GOLD
if(block.getTypeId() == 14)
{
2011-07-10 02:18:00 +02:00
xp += LoadProperties.mgold;
if(smelt = false)
blockProcCheck(block, player);
else
2011-07-21 15:35:49 +02:00
blockProcCheck(block, player);
2011-04-20 22:56:25 +02:00
}
//DIAMOND
if(block.getTypeId() == 56){
2011-07-10 02:18:00 +02:00
xp += LoadProperties.mdiamond;
if(smelt = false)
blockProcCheck(block, player);
else
2011-07-21 15:35:49 +02:00
blockProcCheck(block, player);
2011-04-20 22:56:25 +02:00
}
//IRON
if(block.getTypeId() == 15)
{
2011-07-10 02:18:00 +02:00
xp += LoadProperties.miron;
if(smelt = false)
blockProcCheck(block, player);
else
2011-07-21 15:35:49 +02:00
blockProcCheck(block, player);
2011-04-20 22:56:25 +02:00
}
//REDSTONE
if(block.getTypeId() == 73 || block.getTypeId() == 74)
{
2011-07-10 02:18:00 +02:00
xp += LoadProperties.mredstone;
if(smelt = false)
blockProcCheck(block, player);
else
2011-07-21 15:35:49 +02:00
blockProcCheck(block, player);
2011-04-20 22:56:25 +02:00
}
//LAPUS
if(block.getTypeId() == 21)
{
2011-07-10 02:18:00 +02:00
xp += LoadProperties.mlapus;
if(smelt = false)
blockProcCheck(block, player);
else
2011-07-21 15:35:49 +02:00
blockProcCheck(block, player);
2011-04-20 22:56:25 +02:00
}
2011-07-19 16:17:14 +02:00
PP.addXP(SkillType.MINING, xp * LoadProperties.xpGainMultiplier);
Skills.XpCheckSkill(SkillType.MINING, player);
2011-04-20 22:56:25 +02:00
}
/*
* Handling SuperBreaker stuff
*/
public static Boolean canBeSuperBroken(Block block){
int t = block.getTypeId();
if(t == 49 || t == 87 || t == 89 || t == 73 || t == 74 || t == 56 || t == 21 || t == 1 || t == 16 || t == 14 || t == 15){
return true;
} else {
return false;
}
}
2011-07-12 23:59:53 +02:00
public static void SuperBreakerBlockCheck(Player player, Block block, mcMMO plugin)
{
2011-04-20 22:56:25 +02:00
PlayerProfile PP = Users.getProfile(player);
if(LoadProperties.toolsLoseDurabilityFromAbilities)
m.damageTool(player, (short) LoadProperties.abilityDurabilityLoss);
Location loc = block.getLocation();
Material mat = Material.getMaterial(block.getTypeId());
int xp = 0;
byte damage = 0;
ItemStack item = new ItemStack(mat, 1, (byte)0, damage);
2011-05-04 08:24:08 +02:00
if(block.getTypeId() == 1 || block.getTypeId() == 24)
{
2011-07-10 02:18:00 +02:00
if(block.getTypeId() == 1)
{
2011-04-20 22:56:25 +02:00
mat = Material.COBBLESTONE;
2011-07-12 23:59:53 +02:00
if(!plugin.misc.blockWatchList.contains(block) && block.getData() != (byte) 5)
{
xp += LoadProperties.mstone;
blockProcCheck(block, player);
blockProcCheck(block, player);
}
2011-07-10 02:18:00 +02:00
} else
{
2011-04-20 22:56:25 +02:00
mat = Material.SANDSTONE;
2011-07-12 23:59:53 +02:00
if(!plugin.misc.blockWatchList.contains(block) && block.getData() != (byte) 5)
{
xp += LoadProperties.msandstone;
blockProcCheck(block, player);
blockProcCheck(block, player);
}
2011-04-20 22:56:25 +02:00
}
item = new ItemStack(mat, 1, (byte)0, damage);
loc.getWorld().dropItemNaturally(loc, item);
2011-05-04 08:24:08 +02:00
player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
2011-04-20 22:56:25 +02:00
block.setType(Material.AIR);
}
//NETHERRACK
2011-05-04 08:24:08 +02:00
if(block.getTypeId() == 87)
{
2011-07-10 02:18:00 +02:00
if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
2011-07-12 23:59:53 +02:00
xp += LoadProperties.mnetherrack;
2011-04-20 22:56:25 +02:00
blockProcCheck(block, player);
blockProcCheck(block, player);
}
mat = Material.getMaterial(87);
item = new ItemStack(mat, 1, (byte)0, damage);
loc.getWorld().dropItemNaturally(loc, item);
2011-05-04 08:24:08 +02:00
player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
2011-04-20 22:56:25 +02:00
block.setType(Material.AIR);
}
//GLOWSTONE
2011-05-04 08:24:08 +02:00
if(block.getTypeId() == 89)
{
2011-07-10 02:18:00 +02:00
if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
2011-07-12 23:59:53 +02:00
xp += LoadProperties.mglowstone;
2011-04-20 22:56:25 +02:00
blockProcCheck(block, player);
blockProcCheck(block, player);
}
mat = Material.getMaterial(348);
item = new ItemStack(mat, 1, (byte)0, damage);
loc.getWorld().dropItemNaturally(loc, item);
2011-05-04 08:24:08 +02:00
player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
2011-04-20 22:56:25 +02:00
block.setType(Material.AIR);
}
//COAL
2011-05-04 08:24:08 +02:00
if(block.getTypeId() == 16)
{
2011-07-10 02:18:00 +02:00
if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
2011-07-12 23:59:53 +02:00
xp += LoadProperties.mcoal;
2011-04-20 22:56:25 +02:00
blockProcCheck(block, player);
blockProcCheck(block, player);
}
mat = Material.getMaterial(263);
item = new ItemStack(mat, 1, (byte)0, damage);
loc.getWorld().dropItemNaturally(loc, item);
2011-05-04 08:24:08 +02:00
player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
2011-04-20 22:56:25 +02:00
block.setType(Material.AIR);
}
//GOLD
2011-05-04 08:24:08 +02:00
if(block.getTypeId() == 14 && m.getTier(player) >= 3)
{
2011-07-10 02:18:00 +02:00
if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
2011-07-12 23:59:53 +02:00
xp += LoadProperties.mgold;
2011-04-20 22:56:25 +02:00
blockProcCheck(block, player);
blockProcCheck(block, player);
}
item = new ItemStack(mat, 1, (byte)0, damage);
loc.getWorld().dropItemNaturally(loc, item);
2011-05-04 08:24:08 +02:00
player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
2011-04-20 22:56:25 +02:00
block.setType(Material.AIR);
}
//OBSIDIAN
2011-05-04 08:24:08 +02:00
if(block.getTypeId() == 49 && m.getTier(player) >= 4)
{
2011-04-20 22:56:25 +02:00
if(LoadProperties.toolsLoseDurabilityFromAbilities)
2011-07-10 02:18:00 +02:00
m.damageTool(player, (short) LoadProperties.abilityDurabilityLoss);
if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
2011-07-12 23:59:53 +02:00
xp += LoadProperties.mobsidian;
2011-04-20 22:56:25 +02:00
blockProcCheck(block, player);
blockProcCheck(block, player);
}
mat = Material.getMaterial(49);
item = new ItemStack(mat, 1, (byte)0, damage);
loc.getWorld().dropItemNaturally(loc, item);
2011-05-04 08:24:08 +02:00
player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
2011-04-20 22:56:25 +02:00
block.setType(Material.AIR);
}
//DIAMOND
2011-05-04 08:24:08 +02:00
if(block.getTypeId() == 56 && m.getTier(player) >= 3)
{
2011-07-10 02:18:00 +02:00
if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
2011-07-12 23:59:53 +02:00
xp += LoadProperties.mdiamond;
2011-04-20 22:56:25 +02:00
blockProcCheck(block, player);
blockProcCheck(block, player);
}
mat = Material.getMaterial(264);
item = new ItemStack(mat, 1, (byte)0, damage);
loc.getWorld().dropItemNaturally(loc, item);
2011-05-04 08:24:08 +02:00
player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
2011-04-20 22:56:25 +02:00
block.setType(Material.AIR);
}
//IRON
2011-05-04 08:24:08 +02:00
if(block.getTypeId() == 15 && m.getTier(player) >= 2)
{
2011-07-10 02:18:00 +02:00
if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
2011-07-12 23:59:53 +02:00
xp += LoadProperties.miron;
2011-04-20 22:56:25 +02:00
blockProcCheck(block, player);
blockProcCheck(block, player);
}
item = new ItemStack(mat, 1, (byte)0, damage);
loc.getWorld().dropItemNaturally(loc, item);
2011-05-04 08:24:08 +02:00
player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
2011-04-20 22:56:25 +02:00
block.setType(Material.AIR);
}
//REDSTONE
2011-05-04 08:24:08 +02:00
if((block.getTypeId() == 73 || block.getTypeId() == 74) && m.getTier(player) >= 4)
{
2011-07-10 02:18:00 +02:00
if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5)
2011-05-04 08:24:08 +02:00
{
2011-07-12 23:59:53 +02:00
xp += LoadProperties.mredstone;
2011-04-20 22:56:25 +02:00
blockProcCheck(block, player);
blockProcCheck(block, player);
}
mat = Material.getMaterial(331);
item = new ItemStack(mat, 1, (byte)0, damage);
loc.getWorld().dropItemNaturally(loc, item);
loc.getWorld().dropItemNaturally(loc, item);
loc.getWorld().dropItemNaturally(loc, item);
2011-05-04 08:24:08 +02:00
if(Math.random() * 10 > 5)
{
2011-04-20 22:56:25 +02:00
loc.getWorld().dropItemNaturally(loc, item);
}
2011-05-04 08:24:08 +02:00
player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
2011-04-20 22:56:25 +02:00
block.setType(Material.AIR);
}
//LAPUS
if(block.getTypeId() == 21 && m.getTier(player) >= 3){
2011-07-10 02:18:00 +02:00
if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
2011-07-12 23:59:53 +02:00
xp += LoadProperties.mlapus;
2011-04-20 22:56:25 +02:00
blockProcCheck(block, player);
blockProcCheck(block, player);
}
mat = Material.getMaterial(351);
item = new ItemStack(mat, 1, (byte)0,(byte)0x4);
loc.getWorld().dropItemNaturally(loc, item);
loc.getWorld().dropItemNaturally(loc, item);
loc.getWorld().dropItemNaturally(loc, item);
loc.getWorld().dropItemNaturally(loc, item);
2011-05-04 08:24:08 +02:00
player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
2011-04-20 22:56:25 +02:00
block.setType(Material.AIR);
}
if(block.getData() != (byte) 5)
2011-07-19 16:17:14 +02:00
PP.addXP(SkillType.MINING, xp * LoadProperties.xpGainMultiplier);
contribStuff.playSoundForPlayer(SoundEffect.POP, player, block.getLocation());
2011-07-19 16:17:14 +02:00
Skills.XpCheckSkill(SkillType.MINING, player);
2011-04-20 22:56:25 +02:00
}
}