mcMMO/src/main/java/com/gmail/nossr50/skills/WoodCutting.java

210 lines
6.9 KiB
Java
Raw Normal View History

2012-01-09 20:00:13 +01:00
/*
This file is part of mcMMO.
mcMMO is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
mcMMO is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with mcMMO. If not, see <http://www.gnu.org/licenses/>.
*/
package com.gmail.nossr50.skills;
import java.util.ArrayList;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.event.player.PlayerAnimationEvent;
import org.bukkit.Bukkit;
2012-01-09 20:00:13 +01:00
import com.gmail.nossr50.Users;
import com.gmail.nossr50.m;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.datatypes.AbilityType;
2012-01-09 20:00:13 +01:00
import com.gmail.nossr50.datatypes.PlayerProfile;
import com.gmail.nossr50.datatypes.SkillType;
import com.gmail.nossr50.locale.mcLocale;
2012-02-04 07:36:03 +01:00
import com.gmail.nossr50.spout.SpoutStuff;
2012-01-09 20:00:13 +01:00
import com.gmail.nossr50.config.*;
2012-02-04 07:59:31 +01:00
import org.getspout.spoutapi.sound.SoundEffect;
2012-01-09 20:00:13 +01:00
public class WoodCutting
{
public static void woodCuttingProcCheck(Player player, Block block)
{
PlayerProfile PP = Users.getProfile(player);
byte type = block.getData();
Material mat = Material.getMaterial(block.getTypeId());
if(player != null)
{
2012-02-09 18:47:17 +01:00
if(PP.getSkillLevel(SkillType.WOODCUTTING) > 1000 || (Math.random() * 1000 <= PP.getSkillLevel(SkillType.WOODCUTTING)))
2012-01-09 20:00:13 +01:00
{
ItemStack item = new ItemStack(mat, 1, (short) 0, type);
m.mcDropItem(block.getLocation(), item);
2012-01-09 20:00:13 +01:00
}
}
}
public static void treeFellerCheck(Player player, Block block)
{
PlayerProfile PP = Users.getProfile(player);
if(m.isAxes(player.getItemInHand()))
{
if(block != null)
{
if(!m.abilityBlockCheck(block))
return;
}
/*
* CHECK FOR AXE PREP MODE
*/
if(PP.getAxePreparationMode())
{
PP.setAxePreparationMode(false);
}
int ticks = 2;
int x = PP.getSkillLevel(SkillType.WOODCUTTING);
while(x >= 50)
{
x-=50;
ticks++;
}
if(!PP.getTreeFellerMode() && Skills.cooldownOver(player, (PP.getSkillDATS(AbilityType.TREE_FELLER)*1000), LoadProperties.treeFellerCooldown))
2012-01-09 20:00:13 +01:00
{
player.sendMessage(mcLocale.getString("Skills.TreeFellerOn"));
for(Player y : player.getWorld().getPlayers())
{
if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10)
y.sendMessage(mcLocale.getString("Skills.TreeFellerPlayer", new Object[] {player.getName()}));
}
PP.setSkillDATS(AbilityType.TREE_FELLER, System.currentTimeMillis()+(ticks*1000));
2012-01-09 20:00:13 +01:00
PP.setTreeFellerMode(true);
}
if(!PP.getTreeFellerMode() && !Skills.cooldownOver(player, (PP.getSkillDATS(AbilityType.TREE_FELLER)*1000), LoadProperties.treeFellerCooldown)){
2012-01-09 20:00:13 +01:00
player.sendMessage(ChatColor.RED+"You are too tired to use that ability again."
+ChatColor.YELLOW+" ("+Skills.calculateTimeLeft(player, (PP.getSkillDATS(AbilityType.TREE_FELLER)*1000), LoadProperties.treeFellerCooldown)+"s)");
2012-01-09 20:00:13 +01:00
}
}
}
public static ArrayList<Block> treeFeller(Block block, Player player) {
2012-01-09 20:00:13 +01:00
PlayerProfile PP = Users.getProfile(player);
2012-01-09 20:00:13 +01:00
int radius = 1;
if(PP.getSkillLevel(SkillType.WOODCUTTING) >= 500)
radius++;
if(PP.getSkillLevel(SkillType.WOODCUTTING) >= 950)
radius++;
ArrayList<Block> blockList = new ArrayList<Block>();
ArrayList<Block> returnList = new ArrayList<Block>();
2012-01-09 20:00:13 +01:00
if(block != null)
blockList.add(block);
boolean isDone = false;
while(isDone == false){
isDone = addBlocksToTreeFelling(blockList, returnList, radius);
2012-01-09 20:00:13 +01:00
}
return returnList;
2012-01-09 20:00:13 +01:00
}
public static boolean addBlocksToTreeFelling(ArrayList<Block> blocklist, ArrayList<Block> toAdd, Integer radius)
2012-01-09 20:00:13 +01:00
{
int u = 0;
for (Block x : blocklist)
{
u++;
if(toAdd.contains(x))
continue;
Location loc = x.getLocation();
int vx = x.getX();
int vy = x.getY();
int vz = x.getZ();
/*
* Run through the blocks around the broken block to see if they qualify to be 'felled'
*/
for (int cx = -radius; cx <= radius; cx++) {
for (int cy = -radius; cy <= radius; cy++) {
for (int cz = -radius; cz <= radius; cz++) {
Block blocktarget = loc.getWorld().getBlockAt(vx + cx, vy + cy, vz + cz);
if (!blocklist.contains(blocktarget) && !toAdd.contains(blocktarget) && (blocktarget.getTypeId() == 17 || blocktarget.getTypeId() == 18)) {
toAdd.add(blocktarget);
}
}
}
}
}
/*
* Add more blocks to blocklist so they can be 'felled'
*/
for(Block xx : toAdd)
{
if(!blocklist.contains(xx))
blocklist.add(xx);
}
if(u >= blocklist.size())
{
return true;
2012-01-09 20:00:13 +01:00
} else {
return false;
2012-01-09 20:00:13 +01:00
}
}
public static void woodcuttingBlockCheck(Player player, Block block, mcMMO plugin)
{
PlayerProfile PP = Users.getProfile(player);
int xp = 0;
byte data = block.getData();
if(plugin.misc.blockWatchList.contains(block))
return;
switch(data)
{
case 0:
xp += LoadProperties.mpine;
break;
case 1:
xp += LoadProperties.mspruce;
break;
case 2:
xp += LoadProperties.mbirch;
break;
}
if(block.getTypeId() == 17)
2012-02-05 18:53:40 +01:00
{
WoodCutting.woodCuttingProcCheck(player, block);
2012-02-05 18:53:40 +01:00
PP.addXP(SkillType.WOODCUTTING, xp, player);
Skills.XpCheckSkill(SkillType.WOODCUTTING, player);
}
}
2012-02-04 07:36:03 +01:00
public static void leafBlower(Player player, Block block){
PlayerAnimationEvent armswing = new PlayerAnimationEvent(player);
Bukkit.getPluginManager().callEvent(armswing);
if(LoadProperties.toolsLoseDurabilityFromAbilities)
2012-02-04 07:36:03 +01:00
{
if(!player.getItemInHand().containsEnchantment(Enchantment.DURABILITY))
2012-02-04 07:36:03 +01:00
m.damageTool(player, (short) LoadProperties.abilityDurabilityLoss);
}
if(LoadProperties.spoutEnabled)
SpoutStuff.playSoundForPlayer(SoundEffect.POP, player, block.getLocation());
}
2012-01-09 20:00:13 +01:00
}