Merge branch 'master' of github.com:mcMMO-Dev/mcMMO

Conflicts:
	Changelog.txt
This commit is contained in:
nossr50 2012-03-08 17:07:34 -08:00
commit 1107e9f36a
12 changed files with 1337 additions and 911 deletions

View File

@ -13,10 +13,14 @@ Version 2.0.00-dev
+ Added offline user functionality to mmoedit + Added offline user functionality to mmoedit
+ Added bookshelves to list of blocks that don't trigger abilities. + Added bookshelves to list of blocks that don't trigger abilities.
= Fixed ClassCastException from Taming preventDamage checks = Fixed ClassCastException from Taming preventDamage checks
= Fixed issue with Blast Mining not seeing TNT for detonation due to snow = Fixed issue with Blast Mining not seeing TNT for detonation due to snow
! Changed mmoedit to save a profile when used (this will make mctop update) = Fixed issue with block interaction returning NPEs
= Fixed issue where every block broken had a mining check applied
= Fixed issue where every block broken had a herbalism check applied
= Fixed issue where blocks weren't being removed from the watchlist
! Changed Call of the Wild to activate on left-click rather than right-click ! Changed Call of the Wild to activate on left-click rather than right-click
! Changed Blast Mining to track based on Entity ID vs. Location ! Changed Blast Mining to track based on Entity ID vs. Location
! Changed mmoedit to save a profile when used (this will make mctop update)
Version 1.3.02 Version 1.3.02
+ Added in game guides for Mining, Excavation, and Acrobatics. Simply type /skillname ? to access them + Added in game guides for Mining, Excavation, and Acrobatics. Simply type /skillname ? to access them

View File

@ -0,0 +1,161 @@
package com.gmail.nossr50;
import org.bukkit.Material;
import org.bukkit.block.Block;
import com.gmail.nossr50.config.LoadProperties;
public class BlockChecks {
/**
* Checks to see if a block type awards XP.
*
* @param material The type of Block to check
* @return true if the block type awards XP, false otherwise
*/
public static boolean shouldBeWatched(Material material) {
switch (material) {
case BROWN_MUSHROOM:
case CACTUS:
case CLAY:
case COAL_ORE:
case DIAMOND_ORE:
case DIRT:
case ENDER_STONE:
case GLOWING_REDSTONE_ORE:
case GLOWSTONE:
case GOLD_ORE:
case GRASS:
case GRAVEL:
case IRON_ORE:
case JACK_O_LANTERN:
case LAPIS_ORE:
case LOG:
case MELON_BLOCK:
case MOSSY_COBBLESTONE:
case MYCEL:
case NETHERRACK:
case OBSIDIAN:
case PUMPKIN:
case RED_MUSHROOM:
case RED_ROSE:
case REDSTONE_ORE:
case SAND:
case SANDSTONE:
case SOUL_SAND:
case STONE:
case SUGAR_CANE_BLOCK:
case VINE:
case WATER_LILY:
case YELLOW_FLOWER:
return true;
default:
return false;
}
}
/**
* Check if a block should allow for the activation of abilities.
*
* @param material The type of Block to check
* @return true if the block should allow ability activation, false otherwise
*/
public static boolean abilityBlockCheck(Material material) {
switch (material) {
case BED_BLOCK:
case BREWING_STAND:
case BOOKSHELF:
case BURNING_FURNACE:
case CAKE_BLOCK:
case CHEST:
case DISPENSER:
case ENCHANTMENT_TABLE:
case FENCE_GATE:
case FURNACE:
case IRON_DOOR_BLOCK:
case JUKEBOX:
case LEVER:
case NOTE_BLOCK:
case STONE_BUTTON:
case TRAP_DOOR:
case WALL_SIGN:
case WOODEN_DOOR:
case WORKBENCH:
return false;
default:
break;
}
if (Material.getMaterial(LoadProperties.anvilID).equals(material)) {
return false;
}
else {
return true;
}
}
/**
* Check if a block type is an ore.
*
* @param material The type of Block to check
* @return true if the Block is an ore, false otherwise
*/
public static boolean isOre(Material material) {
switch (material) {
case COAL_ORE:
case DIAMOND_ORE:
case GLOWING_REDSTONE_ORE:
case GOLD_ORE:
case IRON_ORE:
case LAPIS_ORE:
case REDSTONE_ORE:
return true;
default:
return false;
}
}
/**
* Adds the block the the appropriate watchlist.
*
* @param material the type of Block to watch
* @param block the Block to watch
* @param plugin mcMMO plugin instance
*/
public static void watchBlock(Material material, Block block, mcMMO plugin) {
boolean addToChangeQueue = true;
switch (material) {
case CACTUS:
case GLOWING_REDSTONE_ORE:
case JACK_O_LANTERN:
case LOG:
case PUMPKIN:
case REDSTONE_ORE:
case SUGAR_CANE_BLOCK:
case VINE:
addToChangeQueue = false; //We don't want these added to changeQueue - these use their data
plugin.misc.blockWatchList.add(block);
break;
case BROWN_MUSHROOM:
case RED_MUSHROOM:
case RED_ROSE:
case YELLOW_FLOWER:
case WATER_LILY:
addToChangeQueue = false; //We don't want these added to chaneQueue - they're already being added to the fast queue
plugin.fastChangeQueue.push(block);
break;
default:
break;
}
if(addToChangeQueue)
plugin.changeQueue.push(block);
}
}

View File

@ -84,7 +84,7 @@ public class Combat {
} }
else if (itemInHand.getType().equals(Material.AIR) && mcPermissions.getInstance().unarmed(attacker)) { else if (itemInHand.getType().equals(Material.AIR) && mcPermissions.getInstance().unarmed(attacker)) {
Unarmed.unarmedBonus(attacker, event); Unarmed.unarmedBonus(attacker, event);
if (PPa.getBerserkMode()) { if (PPa.getBerserkMode()) {
event.setDamage(damage + (damage / 2)); event.setDamage(damage + (damage / 2));
} }
@ -99,16 +99,16 @@ public class Combat {
} }
else if (itemInHand.getType().equals(Material.BONE) && mcPermissions.getInstance().taming(attacker) && targetType.equals(EntityType.WOLF)) { else if (itemInHand.getType().equals(Material.BONE) && mcPermissions.getInstance().taming(attacker) && targetType.equals(EntityType.WOLF)) {
Wolf wolf = (Wolf) target; Wolf wolf = (Wolf) target;
String message = "Combat.BeastLore" + " "; String message = mcLocale.getString("Combat.BeastLore") + " ";
int health = wolf.getHealth(); int health = wolf.getHealth();
event.setCancelled(true); event.setCancelled(true);
if (wolf.isTamed()) { if (wolf.isTamed()) {
message.concat(mcLocale.getString("Combat.BeastLoreOwner", new Object[] {Taming.getOwnerName(wolf)}) + " "); message = message.concat(mcLocale.getString("Combat.BeastLoreOwner", new Object[] {Taming.getOwnerName(wolf)}) + " ");
message.concat(mcLocale.getString("Combat.BeastLoreHealthWolfTamed", new Object[] {health})); message = message.concat(mcLocale.getString("Combat.BeastLoreHealthWolfTamed", new Object[] {health}));
} }
else { else {
message.concat(mcLocale.getString("Combat.BeastLoreHealthWolf", new Object[] {health})); message = message.concat(mcLocale.getString("Combat.BeastLoreHealthWolf", new Object[] {health}));
} }
attacker.sendMessage(message); attacker.sendMessage(message);
@ -187,7 +187,7 @@ public class Combat {
else if (Math.random() * 1000 <= (PPd.getSkillLevel(SkillType.UNARMED) / 2)) { else if (Math.random() * 1000 <= (PPd.getSkillLevel(SkillType.UNARMED) / 2)) {
deflect = true; deflect = true;
} }
if (deflect) { if (deflect) {
event.setCancelled(true); event.setCancelled(true);
defender.sendMessage(mcLocale.getString("Combat.ArrowDeflect")); defender.sendMessage(mcLocale.getString("Combat.ArrowDeflect"));

View File

@ -1,114 +1,136 @@
package com.gmail.nossr50; package com.gmail.nossr50;
import java.io.*; import java.io.*;
import java.util.Properties;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.HashMap; import java.util.HashMap;
import org.bukkit.entity.*; import org.bukkit.entity.Player;
import com.gmail.nossr50.datatypes.PlayerProfile; import com.gmail.nossr50.datatypes.PlayerProfile;
public class Users { public class Users {
private static volatile Users instance; private static volatile Users instance;
protected static final Logger log = Logger.getLogger("Minecraft"); protected static final Logger log = Logger.getLogger("Minecraft");
String location = "plugins/mcMMO/FlatFileStuff/mcmmo.users"; String location = "plugins/mcMMO/FlatFileStuff/mcmmo.users";
String directory = "plugins/mcMMO/FlatFileStuff/"; String directory = "plugins/mcMMO/FlatFileStuff/";
String directoryb = "plugins/mcMMO/FlatFileStuff/Leaderboards/"; String directoryb = "plugins/mcMMO/FlatFileStuff/Leaderboards/";
//public static ArrayList<PlayerProfile> players;
public static HashMap<Player, PlayerProfile> players = new HashMap<Player, PlayerProfile>(); public static HashMap<Player, PlayerProfile> players = new HashMap<Player, PlayerProfile>();
private Properties properties = new Properties();
/**
//To load * Load users.
public void load() throws IOException { */
properties.load(new FileInputStream(location)); public void loadUsers() {
} new File(directory).mkdir();
//To save new File(directoryb).mkdir();
public void save()
{
try
{
properties.store(new FileOutputStream(location), null);
}catch(IOException ex) {
}
}
public void loadUsers()
{
new File(directory).mkdir();
new File(directoryb).mkdir();
File theDir = new File(location); File theDir = new File(location);
if(!theDir.exists())
{ if (!theDir.exists()) {
try { try {
FileWriter writer = new FileWriter(theDir); FileWriter writer = new FileWriter(theDir);
writer.close(); writer.close();
} catch (IOException e) { }
// TODO Auto-generated catch block catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
} }
/**
public static void addUser(Player player) * Add a new user.
{ *
if(!players.containsKey(player)) * @param player The player to create a user record for
players.put(player, new PlayerProfile(player.getName())); */
public static void addUser(Player player) {
if (!players.containsKey(player)) {
players.put(player, new PlayerProfile(player.getName()));
}
} }
public static void clearUsers()
{ /**
players.clear(); * Clear all users.
*/
public static void clearUsers() {
players.clear();
} }
public static HashMap<Player, PlayerProfile> getProfiles(){
return players; /**
* Get all PlayerProfiles.
*
* @return a HashMap containing the PlayerProfile of everyone in the database
*/
public static HashMap<Player, PlayerProfile> getProfiles() {
return players;
} }
public static void removeUser(Player player) /**
{ * Remove a user from the database.
//Only remove PlayerProfile if user is offline and we have it in memory *
if(!player.isOnline() && players.containsKey(player)) * @param player The player to remove
{ */
players.get(player).save(); public static void removeUser(Player player) {
players.remove(player);
} //Only remove PlayerProfile if user is offline and we have it in memory
if (!player.isOnline() && players.containsKey(player)) {
players.get(player).save();
players.remove(player);
}
} }
public static void removeUserByName(String playerName) /**
{ * Remove a user from the DB by name.
*
* @param playerName The name of the player to remove
*/
public static void removeUserByName(String playerName) {
Player target = null; Player target = null;
for(Player player : players.keySet())
{ for (Player player : players.keySet()) {
PlayerProfile PP = players.get(player); PlayerProfile PP = players.get(player);
if(PP.getPlayerName().equals(playerName))
{ if (PP.getPlayerName().equals(playerName)) {
target = player; target = player;
} }
} }
players.remove(target); players.remove(target);
} }
public static PlayerProfile getProfile(Player player){ /**
if(players.get(player) != null) * Get the profile of an online player.
return players.get(player); *
else * @param player The player whose profile to retrieve
{ * @return the player's profile
players.put(player, new PlayerProfile(player.getName())); */
return players.get(player); public static PlayerProfile getProfile(Player player) {
} if(players.get(player) != null) {
return players.get(player);
}
else {
players.put(player, new PlayerProfile(player.getName()));
return players.get(player);
}
} }
public static PlayerProfile getOfflineProfile(String playerName){ /**
* Get the profile of an offline player.
*
* @param playerName Name of the player whose profile to retrieve
* @return the player's profile
*/
public static PlayerProfile getOfflineProfile(String playerName) {
return new PlayerProfile(playerName, false); return new PlayerProfile(playerName, false);
} }
public static Users getInstance() {
if (instance == null) {
instance = new Users();
}
return instance;
}
} /**
* Get an instance of this class.
*
* @return an instance of this class
*/
public static Users getInstance() {
if (instance == null) {
instance = new Users();
}
return instance;
}
}

View File

@ -1,5 +1,6 @@
package com.gmail.nossr50.listeners; package com.gmail.nossr50.listeners;
import com.gmail.nossr50.BlockChecks;
import com.gmail.nossr50.ItemChecks; import com.gmail.nossr50.ItemChecks;
import com.gmail.nossr50.Users; import com.gmail.nossr50.Users;
import com.gmail.nossr50.m; import com.gmail.nossr50.m;
@ -30,269 +31,260 @@ import com.gmail.nossr50.locale.mcLocale;
import com.gmail.nossr50.skills.*; import com.gmail.nossr50.skills.*;
import com.gmail.nossr50.events.FakeBlockBreakEvent; import com.gmail.nossr50.events.FakeBlockBreakEvent;
public class mcBlockListener implements Listener public class mcBlockListener implements Listener {
{
private final mcMMO plugin; private final mcMMO plugin;
public mcBlockListener(final mcMMO plugin) public mcBlockListener(final mcMMO plugin) {
{
this.plugin = plugin; this.plugin = plugin;
} }
/**
* Monitor BlockPlace events.
*
* @param event The event to monitor
*/
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onBlockPlace(BlockPlaceEvent event) public void onBlockPlace(BlockPlaceEvent event) {
{ Block block;
//Setup some basic variables Player player = event.getPlayer();
Block block;
Player player = event.getPlayer(); //When blocks are placed on snow this event reports the wrong block.
if (event.getBlockReplacedState() != null && event.getBlockReplacedState().getType().equals(Material.SNOW)) {
//When blocks are placed on snow this event reports the wrong block. block = event.getBlockAgainst();
if (event.getBlockReplacedState() != null && event.getBlockReplacedState().getType().equals(Material.SNOW)) }
block = event.getBlockAgainst(); else {
else block = event.getBlock();
block = event.getBlock(); }
int id = block.getTypeId(); int id = block.getTypeId();
Material mat = block.getType(); Material mat = block.getType();
//Check if the blocks placed should be monitored so they do not give out XP in the future //Check if the blocks placed should be monitored so they do not give out XP in the future
if(m.shouldBeWatched(mat)) if (BlockChecks.shouldBeWatched(mat)) {
{ BlockChecks.watchBlock(mat, block, plugin);
//Only needed for blocks that use their block data (wood, pumpkins, etc.) }
boolean shouldBeChanged = true;
if (id == LoadProperties.anvilID && LoadProperties.anvilmessages) {
switch(mat) PlayerProfile PP = Users.getProfile(player);
{
case CACTUS: if (!PP.getPlacedAnvil()) {
case GLOWING_REDSTONE_ORE: if (LoadProperties.spoutEnabled) {
case JACK_O_LANTERN: SpoutPlayer sPlayer = SpoutManager.getPlayer(player);
case LOG:
case PUMPKIN: if (sPlayer.isSpoutCraftEnabled()) {
case REDSTONE_ORE: sPlayer.sendNotification("[mcMMO] Anvil Placed", "Right click to repair!", Material.getMaterial(id));
case SUGAR_CANE_BLOCK: }
case VINE: }
shouldBeChanged = false; //We don't want these added to changeQueue else {
plugin.misc.blockWatchList.add(block); event.getPlayer().sendMessage(mcLocale.getString("mcBlockListener.PlacedAnvil"));
break; }
case BROWN_MUSHROOM:
case RED_MUSHROOM: PP.togglePlacedAnvil();
case RED_ROSE: }
case YELLOW_FLOWER: }
case WATER_LILY:
plugin.fastChangeQueue.push(block);
break;
}
if(shouldBeChanged)
plugin.changeQueue.push(block);
}
if(id == LoadProperties.anvilID && LoadProperties.anvilmessages)
{
PlayerProfile PP = Users.getProfile(player);
if(!PP.getPlacedAnvil())
{
if(LoadProperties.spoutEnabled)
{
SpoutPlayer sPlayer = SpoutManager.getPlayer(player);
if(sPlayer.isSpoutCraftEnabled())
sPlayer.sendNotification("[mcMMO] Anvil Placed", "Right click to repair!", Material.IRON_BLOCK);
}
else
event.getPlayer().sendMessage(mcLocale.getString("mcBlockListener.PlacedAnvil")); //$NON-NLS-1$
PP.togglePlacedAnvil();
}
}
} }
/**
* Monitor BlockBreak events.
*
* @param event The event to monitor
*/
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onBlockBreak(BlockBreakEvent event) public void onBlockBreak(BlockBreakEvent event) {
{ Player player = event.getPlayer();
Player player = event.getPlayer(); PlayerProfile PP = Users.getProfile(player);
PlayerProfile PP = Users.getProfile(player); Block block = event.getBlock();
Block block = event.getBlock(); Material mat = block.getType();
int id = block.getTypeId(); ItemStack inhand = player.getItemInHand();
ItemStack inhand = player.getItemInHand();
if(event instanceof FakeBlockBreakEvent) {
if(event instanceof FakeBlockBreakEvent) return;
return; }
/* /*
* HERBALISM * HERBALISM
*/ */
//Green Terra //Green Terra
if(PP.getHoePreparationMode() && mcPermissions.getInstance().herbalismAbility(player) && ((id == 59 && block.getData() == (byte) 0x07) || Herbalism.canBeGreenTerra(block))) if (PP.getHoePreparationMode() && mcPermissions.getInstance().herbalismAbility(player) && ((mat.equals(Material.CROPS) && block.getData() == (byte) 0x7) || Herbalism.canBeGreenTerra(block))) {
Skills.abilityCheck(player, SkillType.HERBALISM); Skills.abilityCheck(player, SkillType.HERBALISM);
}
//Wheat && Triple drops
if(PP.getGreenTerraMode() && Herbalism.canBeGreenTerra(block)) //Wheat && Triple drops
Herbalism.herbalismProcCheck(block, player, event, plugin); if (PP.getGreenTerraMode() && Herbalism.canBeGreenTerra(block)) {
Herbalism.herbalismProcCheck(block, player, event, plugin);
if(mcPermissions.getInstance().herbalism(player) && block.getData() != (byte) 5) }
Herbalism.herbalismProcCheck(block, player, event, plugin);
if (mcPermissions.getInstance().herbalism(player) && block.getData() != (byte) 0x5 && Herbalism.canBeGreenTerra(block)) {
/* Herbalism.herbalismProcCheck(block, player, event, plugin);
* MINING }
*/
if(mcPermissions.getInstance().mining(player)) /*
{ * MINING
if(LoadProperties.miningrequirespickaxe && ItemChecks.isMiningPick(inhand)) */
Mining.miningBlockCheck(player, block, plugin);
else if(!LoadProperties.miningrequirespickaxe) if (mcPermissions.getInstance().mining(player) && Mining.canBeSuperBroken(block)) {
Mining.miningBlockCheck(player, block, plugin); if (LoadProperties.miningrequirespickaxe && ItemChecks.isMiningPick(inhand)) {
} Mining.miningBlockCheck(player, block, plugin);
}
/* else if (!LoadProperties.miningrequirespickaxe) {
* WOOD CUTTING Mining.miningBlockCheck(player, block, plugin);
*/ }
}
if(mcPermissions.getInstance().woodcutting(player) && id == 17)
{ /*
if(LoadProperties.woodcuttingrequiresaxe && ItemChecks.isAxe(inhand)) * WOOD CUTTING
WoodCutting.woodcuttingBlockCheck(player, block, plugin); */
else if(!LoadProperties.woodcuttingrequiresaxe)
WoodCutting.woodcuttingBlockCheck(player, block, plugin); if(mcPermissions.getInstance().woodcutting(player) && mat.equals(Material.LOG)) {
if (LoadProperties.woodcuttingrequiresaxe && ItemChecks.isAxe(inhand)) {
if(PP.getTreeFellerMode()) WoodCutting.woodcuttingBlockCheck(player, block, plugin);
WoodCutting.treeFeller(event, plugin); }
} else if (!LoadProperties.woodcuttingrequiresaxe) {
WoodCutting.woodcuttingBlockCheck(player, block, plugin);
/* }
* EXCAVATION
*/ if (PP.getTreeFellerMode()) {
if(Excavation.canBeGigaDrillBroken(block) && mcPermissions.getInstance().excavation(player) && block.getData() != (byte) 5) WoodCutting.treeFeller(event, plugin);
{ }
if(LoadProperties.excavationRequiresShovel && ItemChecks.isShovel(inhand)) }
Excavation.excavationProcCheck(block, player);
else if(!LoadProperties.excavationRequiresShovel) /*
Excavation.excavationProcCheck(block, player); * EXCAVATION
} */
//Change the byte back when broken if (Excavation.canBeGigaDrillBroken(block) && mcPermissions.getInstance().excavation(player) && block.getData() != (byte) 0x5) {
if(block.getData() == 5 && m.shouldBeWatched(block.getType())) if(LoadProperties.excavationRequiresShovel && ItemChecks.isShovel(inhand)) {
{ Excavation.excavationProcCheck(block, player);
block.setData((byte) 0); }
if(plugin.misc.blockWatchList.contains(block)) else if(!LoadProperties.excavationRequiresShovel) {
plugin.misc.blockWatchList.remove(block); Excavation.excavationProcCheck(block, player);
} }
}
//Change the byte back when broken
if (block.getData() == (byte) 0x5 && BlockChecks.shouldBeWatched(mat)) {
block.setData((byte) 0x0);
}
else if(plugin.misc.blockWatchList.contains(block)) {
plugin.misc.blockWatchList.remove(block);
}
} }
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onBlockDamage(BlockDamageEvent event) public void onBlockDamage(BlockDamageEvent event)
{ {
Player player = event.getPlayer(); Player player = event.getPlayer();
PlayerProfile PP = Users.getProfile(player); PlayerProfile PP = Users.getProfile(player);
ItemStack inhand = player.getItemInHand(); ItemStack inhand = player.getItemInHand();
Block block = event.getBlock(); Block block = event.getBlock();
int id = block.getTypeId(); int id = block.getTypeId();
Material mat = block.getType(); Material mat = block.getType();
/* /*
* ABILITY PREPARATION CHECKS * ABILITY PREPARATION CHECKS
*/ */
if(m.abilityBlockCheck(mat)) if(BlockChecks.abilityBlockCheck(mat))
{ {
if(PP.getHoePreparationMode() && Herbalism.canBeGreenTerra(block)) if(PP.getHoePreparationMode() && Herbalism.canBeGreenTerra(block))
Skills.abilityCheck(player, SkillType.HERBALISM); Skills.abilityCheck(player, SkillType.HERBALISM);
if(PP.getAxePreparationMode() && mat.equals(Material.LOG) && mcPermissions.getInstance().woodCuttingAbility(player)) if(PP.getAxePreparationMode() && mat.equals(Material.LOG) && mcPermissions.getInstance().woodCuttingAbility(player))
Skills.abilityCheck(player, SkillType.WOODCUTTING); Skills.abilityCheck(player, SkillType.WOODCUTTING);
if(PP.getPickaxePreparationMode() && Mining.canBeSuperBroken(block)) if(PP.getPickaxePreparationMode() && Mining.canBeSuperBroken(block))
Skills.abilityCheck(player, SkillType.MINING); Skills.abilityCheck(player, SkillType.MINING);
if(PP.getShovelPreparationMode() && Excavation.canBeGigaDrillBroken(block)) if(PP.getShovelPreparationMode() && Excavation.canBeGigaDrillBroken(block))
Skills.abilityCheck(player, SkillType.EXCAVATION); Skills.abilityCheck(player, SkillType.EXCAVATION);
} }
if(PP.getFistsPreparationMode() && (Excavation.canBeGigaDrillBroken(block) || mat.equals(Material.SNOW))) if(PP.getFistsPreparationMode() && (Excavation.canBeGigaDrillBroken(block) || mat.equals(Material.SNOW)))
Skills.abilityCheck(player, SkillType.UNARMED); Skills.abilityCheck(player, SkillType.UNARMED);
/* /*
* TREE FELLER STUFF * TREE FELLER STUFF
*/ */
if(LoadProperties.spoutEnabled && mat.equals(Material.LOG) && PP.getTreeFellerMode()) if(LoadProperties.spoutEnabled && mat.equals(Material.LOG) && PP.getTreeFellerMode())
SpoutStuff.playSoundForPlayer(SoundEffect.FIZZ, player, block.getLocation()); SpoutStuff.playSoundForPlayer(SoundEffect.FIZZ, player, block.getLocation());
/* /*
* GREEN TERRA STUFF * GREEN TERRA STUFF
*/ */
if(PP.getGreenTerraMode() && mcPermissions.getInstance().herbalismAbility(player)) if(PP.getGreenTerraMode() && mcPermissions.getInstance().herbalismAbility(player))
Herbalism.greenTerra(player, block); Herbalism.greenTerra(player, block);
/* /*
* GIGA DRILL BREAKER CHECKS * GIGA DRILL BREAKER CHECKS
*/ */
if(PP.getGigaDrillBreakerMode() && Excavation.canBeGigaDrillBroken(block) && m.blockBreakSimulate(block, player, true) && mcPermissions.getInstance().excavationAbility(player)) if(PP.getGigaDrillBreakerMode() && Excavation.canBeGigaDrillBroken(block) && m.blockBreakSimulate(block, player, true) && mcPermissions.getInstance().excavationAbility(player))
{ {
if(LoadProperties.excavationRequiresShovel && ItemChecks.isShovel(inhand)) if(LoadProperties.excavationRequiresShovel && ItemChecks.isShovel(inhand))
{ {
event.setInstaBreak(true); event.setInstaBreak(true);
Excavation.gigaDrillBreaker(player, block); Excavation.gigaDrillBreaker(player, block);
} }
else if(!LoadProperties.excavationRequiresShovel) else if(!LoadProperties.excavationRequiresShovel)
{ {
event.setInstaBreak(true); event.setInstaBreak(true);
Excavation.gigaDrillBreaker(player, block); Excavation.gigaDrillBreaker(player, block);
} }
} }
/* /*
* BERSERK MODE CHECKS * BERSERK MODE CHECKS
*/ */
if(PP.getBerserkMode() if(PP.getBerserkMode()
&& m.blockBreakSimulate(block, player, true) && m.blockBreakSimulate(block, player, true)
&& player.getItemInHand().getTypeId() == 0 && player.getItemInHand().getTypeId() == 0
&& (Excavation.canBeGigaDrillBroken(block) || id == 78) && (Excavation.canBeGigaDrillBroken(block) || id == 78)
&& mcPermissions.getInstance().unarmedAbility(player)) && mcPermissions.getInstance().unarmedAbility(player))
{ {
event.setInstaBreak(true); event.setInstaBreak(true);
if(LoadProperties.spoutEnabled) if(LoadProperties.spoutEnabled)
SpoutStuff.playSoundForPlayer(SoundEffect.POP, player, block.getLocation()); SpoutStuff.playSoundForPlayer(SoundEffect.POP, player, block.getLocation());
} }
/* /*
* SUPER BREAKER CHECKS * SUPER BREAKER CHECKS
*/ */
if(PP.getSuperBreakerMode() if(PP.getSuperBreakerMode()
&& Mining.canBeSuperBroken(block) && Mining.canBeSuperBroken(block)
&& m.blockBreakSimulate(block, player, true) && m.blockBreakSimulate(block, player, true)
&& mcPermissions.getInstance().miningAbility(player)) && mcPermissions.getInstance().miningAbility(player))
{ {
if(LoadProperties.miningrequirespickaxe) if(LoadProperties.miningrequirespickaxe)
{ {
if(ItemChecks.isMiningPick(inhand)){ if(ItemChecks.isMiningPick(inhand)){
event.setInstaBreak(true); event.setInstaBreak(true);
Mining.SuperBreakerBlockCheck(player, block, plugin); Mining.SuperBreakerBlockCheck(player, block, plugin);
} }
} else { } else {
event.setInstaBreak(true); event.setInstaBreak(true);
Mining.SuperBreakerBlockCheck(player, block, plugin); Mining.SuperBreakerBlockCheck(player, block, plugin);
} }
} }
/* /*
* LEAF BLOWER CHECKS * LEAF BLOWER CHECKS
*/ */
if(id == 18 if(id == 18
&& mcPermissions.getInstance().woodCuttingAbility(player) && mcPermissions.getInstance().woodCuttingAbility(player)
&& PP.getSkillLevel(SkillType.WOODCUTTING) >= 100 && PP.getSkillLevel(SkillType.WOODCUTTING) >= 100
&& m.blockBreakSimulate(block, player, true)) && m.blockBreakSimulate(block, player, true))
{ {
if(LoadProperties.woodcuttingrequiresaxe) if(LoadProperties.woodcuttingrequiresaxe)
{ {
if(ItemChecks.isAxe(inhand)){ if(ItemChecks.isAxe(inhand)){
event.setInstaBreak(true); event.setInstaBreak(true);
WoodCutting.leafBlower(player, block); WoodCutting.leafBlower(player, block);
} }
} }
else if(inhand.getTypeId() != 359) else if(inhand.getTypeId() != 359)
{ {
event.setInstaBreak(true); event.setInstaBreak(true);
WoodCutting.leafBlower(player, block); WoodCutting.leafBlower(player, block);
} }
} }
} }
@EventHandler @EventHandler
@ -300,7 +292,7 @@ public class mcBlockListener implements Listener
{ {
Block blockFrom = event.getBlock(); Block blockFrom = event.getBlock();
Block blockTo = event.getToBlock(); Block blockTo = event.getToBlock();
if(m.shouldBeWatched(blockFrom.getType()) && blockFrom.getData() == (byte)5) if(BlockChecks.shouldBeWatched(blockFrom.getType()) && blockFrom.getData() == (byte)5)
blockTo.setData((byte)5); blockTo.setData((byte)5);
} }
} }

View File

@ -60,8 +60,10 @@ public class mcEntityListener implements Listener
{ {
if(!defender.getWorld().getPVP()) if(!defender.getWorld().getPVP())
return; return;
if(Party.getInstance().inSameParty((Player)defender, (Player)attacker)) if(Party.getInstance().inSameParty((Player)defender, (Player)attacker)) {
event.setCancelled(true); event.setCancelled(true);
return;
}
} }
//Make sure defender is not invincible //Make sure defender is not invincible
@ -91,8 +93,10 @@ public class mcEntityListener implements Listener
*/ */
Player player = (Player) entity; Player player = (Player) entity;
PlayerProfile PP = Users.getProfile(player); PlayerProfile PP = Users.getProfile(player);
if(PP.getGodMode()) if(PP.getGodMode()) {
event.setCancelled(true); event.setCancelled(true);
return;
}
if(!m.isInvincible(player, event)) if(!m.isInvincible(player, event))
{ {

View File

@ -28,6 +28,7 @@ import org.bukkit.event.player.PlayerPickupItemEvent;
import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import com.gmail.nossr50.BlockChecks;
import com.gmail.nossr50.Combat; import com.gmail.nossr50.Combat;
import com.gmail.nossr50.Item; import com.gmail.nossr50.Item;
import com.gmail.nossr50.ItemChecks; import com.gmail.nossr50.ItemChecks;
@ -156,7 +157,13 @@ public class mcPlayerListener implements Listener
Action action = event.getAction(); Action action = event.getAction();
Block block = event.getClickedBlock(); Block block = event.getClickedBlock();
ItemStack is = player.getItemInHand(); ItemStack is = player.getItemInHand();
Material mat = block.getType(); Material mat;
if (block == null) {
mat = Material.AIR;
}
else {
mat = block.getType();
}
/* /*
* Ability checks * Ability checks
@ -171,7 +178,7 @@ public class mcPlayerListener implements Listener
player.updateInventory(); player.updateInventory();
} }
if(LoadProperties.enableAbilities && m.abilityBlockCheck(mat)) if(LoadProperties.enableAbilities && BlockChecks.abilityBlockCheck(mat))
{ {
if(block != null && ItemChecks.isHoe(is) && !mat.equals(Material.DIRT) && !mat.equals(Material.GRASS) && !mat.equals(Material.SOIL)) if(block != null && ItemChecks.isHoe(is) && !mat.equals(Material.DIRT) && !mat.equals(Material.GRASS) && !mat.equals(Material.SOIL))
Skills.activationCheck(player, SkillType.HERBALISM); Skills.activationCheck(player, SkillType.HERBALISM);
@ -241,7 +248,7 @@ public class mcPlayerListener implements Listener
*/ */
if(action == Action.RIGHT_CLICK_AIR) if(action == Action.RIGHT_CLICK_AIR)
Item.itemchecks(player); Item.itemchecks(player);
if(action == Action.RIGHT_CLICK_BLOCK && m.abilityBlockCheck(mat)) if(action == Action.RIGHT_CLICK_BLOCK && BlockChecks.abilityBlockCheck(mat))
Item.itemchecks(player); Item.itemchecks(player);
if(player.isSneaking() && mcPermissions.getInstance().taming(player) && (action == Action.LEFT_CLICK_AIR || action == Action.LEFT_CLICK_BLOCK)) if(player.isSneaking() && mcPermissions.getInstance().taming(player) && (action == Action.LEFT_CLICK_AIR || action == Action.LEFT_CLICK_BLOCK))
@ -331,4 +338,4 @@ public class mcPlayerListener implements Listener
event.getPlayer().chat(message.replaceFirst(command, plugin.aliasMap.get(command))); event.getPlayer().chat(message.replaceFirst(command, plugin.aliasMap.get(command)));
} }
} }
} }

View File

@ -7,7 +7,6 @@ import java.util.logging.Logger;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.entity.*; import org.bukkit.entity.*;
import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent;
@ -73,54 +72,6 @@ public class m {
} }
} }
/**
* Checks to see if a block type awards XP.
*
* @param material Block type to check
* @return true if the block type awards XP, false otherwise
*/
public static boolean shouldBeWatched(Material material) {
switch (material) {
case BROWN_MUSHROOM:
case CACTUS:
case CLAY:
case COAL_ORE:
case DIAMOND_ORE:
case DIRT:
case ENDER_STONE:
case GLOWING_REDSTONE_ORE:
case GLOWSTONE:
case GOLD_ORE:
case GRASS:
case GRAVEL:
case IRON_ORE:
case JACK_O_LANTERN:
case LAPIS_ORE:
case LOG:
case MELON_BLOCK:
case MOSSY_COBBLESTONE:
case MYCEL:
case NETHERRACK:
case OBSIDIAN:
case PUMPKIN:
case RED_MUSHROOM:
case RED_ROSE:
case REDSTONE_ORE:
case SAND:
case SANDSTONE:
case SOUL_SAND:
case STONE:
case SUGAR_CANE_BLOCK:
case VINE:
case WATER_LILY:
case YELLOW_FLOWER:
return true;
default:
return false;
}
}
/** /**
* Gets the power level of a player. * Gets the power level of a player.
* *
@ -173,199 +124,282 @@ public class m {
* @param inHand The item to check the tier of * @param inHand The item to check the tier of
* @return the tier of the item * @return the tier of the item
*/ */
public static Integer getTier(ItemStack inHand) public static Integer getTier(ItemStack inHand) {
{ int tier = 0;
if(Repair.isWoodTools(inHand))
return 1; if (Repair.isWoodTools(inHand)) {
if(Repair.isStoneTools(inHand)) tier = 1;
return 2; }
if(Repair.isIronTools(inHand)) else if (Repair.isStoneTools(inHand)) {
return 3; tier = 2;
if(Repair.isGoldTools(inHand)) }
return 1; else if (Repair.isIronTools(inHand)) {
if(Repair.isDiamondTools(inHand)) tier = 3;
return 4; }
else if(Repair.isGoldTools(inHand)) {
return 1; tier = 1;
}
else if(Repair.isDiamondTools(inHand))
tier = 4;
return tier;
} }
/**
* Determine if two locations are near each other.
*
* @param first The first location
* @param second The second location
* @param maxDistance The max distance apart
* @return true if the distance between <code>first</code> and <code>second</code> is less than <code>maxDistance</code>, false otherwise
*/
public static boolean isNear(Location first, Location second, int maxDistance) { public static boolean isNear(Location first, Location second, int maxDistance) {
double relX = first.getX() - second.getX(); double relX = first.getX() - second.getX();
double relY = first.getY() - second.getY(); double relY = first.getY() - second.getY();
double relZ = first.getZ() - second.getZ(); double relZ = first.getZ() - second.getZ();
double dist = relX * relX + relY * relY + relZ * relZ; double dist = (relX * relX) + (relY * relY) + (relZ * relZ);
if (dist < maxDistance * maxDistance) if (dist < maxDistance * maxDistance) {
return true; return true;
}
return false; else {
}
public static boolean abilityBlockCheck(Material material)
{
switch(material){
case BED_BLOCK:
case BREWING_STAND:
case BOOKSHELF:
case BURNING_FURNACE:
case CAKE_BLOCK:
case CHEST:
case DISPENSER:
case ENCHANTMENT_TABLE:
case FENCE_GATE:
case FURNACE:
case IRON_DOOR_BLOCK:
case JUKEBOX:
case LEVER:
case NOTE_BLOCK:
case STONE_BUTTON:
case TRAP_DOOR:
case WALL_SIGN:
case WOODEN_DOOR:
case WORKBENCH:
return false; return false;
} }
if(Material.getMaterial(LoadProperties.anvilID).equals(material))
return false;
return true;
} }
public static boolean isInt(String string) /**
{ * Determine if a string represents an Integer
try *
{ * @param string String to check
* @return true if the string is an Integer, false otherwise
*/
public static boolean isInt(String string) {
try {
Integer.parseInt(string); Integer.parseInt(string);
return true;
} }
catch(NumberFormatException nFE) catch (NumberFormatException nFE) {
{
return false; return false;
} }
return true;
} }
public static void mcDropItems(Location location, ItemStack is, int quantity) /**
{ * Drop items at a given location.
for(int i = 0; i < quantity; i++) *
* @param location The location to drop the items at
* @param is The items to drop
* @param quantity The amount of items to drop
*/
public static void mcDropItems(Location location, ItemStack is, int quantity) {
for (int i = 0; i < quantity; i++) {
mcDropItem(location, is); mcDropItem(location, is);
}
} }
public static void mcRandomDropItem(Location location, ItemStack is, int chance) /**
{ * Randomly drop an item at a given location.
if(Math.random() * 100 < chance) *
* @param location The location to drop the items at
* @param is The item to drop
* @param chance The percentage chance for the item to drop
*/
public static void mcRandomDropItem(Location location, ItemStack is, double chance) {
if (Math.random() * 100 < chance) {
mcDropItem(location, is); mcDropItem(location, is);
}
} }
public static void mcRandomDropItems(Location location, ItemStack is, int chance, int quantity) /**
{ * Randomly drop items at a given location.
for(int i = 0; i < quantity; i++) *
* @param location The location to drop the items at
* @param is The item to drop
* @param chance The percentage chance for the item to drop
* @param quantity The amount of items to drop
*/
public static void mcRandomDropItems(Location location, ItemStack is, int chance, int quantity) {
for(int i = 0; i < quantity; i++) {
mcRandomDropItem(location, is, chance); mcRandomDropItem(location, is, chance);
}
} }
/**
* Drop an item at a given location.
*
* @param location The location to drop the item at
* @param itemStack The item to drop
*/
public static void mcDropItem(Location location, ItemStack itemStack) { public static void mcDropItem(Location location, ItemStack itemStack) {
// We can't get the item until we spawn it and we want to make it cancellable, so we have a custom event. // We can't get the item until we spawn it and we want to make it cancellable, so we have a custom event.
McMMOItemSpawnEvent event = new McMMOItemSpawnEvent(location, itemStack); McMMOItemSpawnEvent event = new McMMOItemSpawnEvent(location, itemStack);
Bukkit.getPluginManager().callEvent(event); Bukkit.getPluginManager().callEvent(event);
if(event.isCancelled()) return;
if (event.isCancelled()) {
location.getWorld().dropItemNaturally(location, itemStack); return;
}
else {
location.getWorld().dropItemNaturally(location, itemStack);
}
} }
public static boolean isOre(Block block) /**
{ * Convert FlatFile data to MySQL data.
switch (block.getType()) { */
case COAL_ORE: public static void convertToMySQL() {
case DIAMOND_ORE: if (!LoadProperties.useMySQL) {
case GLOWING_REDSTONE_ORE:
case GOLD_ORE:
case IRON_ORE:
case LAPIS_ORE:
case REDSTONE_ORE:
return true;
}
return false;
}
public static void convertToMySQL()
{
if(!LoadProperties.useMySQL)
return; return;
}
Bukkit.getScheduler().scheduleAsyncDelayedTask(Bukkit.getServer().getPluginManager().getPlugin("mcMMO"), new Runnable(){
Bukkit.getScheduler().scheduleAsyncDelayedTask(Bukkit.getPluginManager().getPlugin("mcMMO"), new Runnable() {
public void run() { public void run() {
String location = "plugins/mcMMO/FlatFileStuff/mcmmo.users"; String location = "plugins/mcMMO/FlatFileStuff/mcmmo.users";
try { try {
//Open the user file //Open the user file
FileReader file = new FileReader(location); FileReader file = new FileReader(location);
BufferedReader in = new BufferedReader(file); BufferedReader in = new BufferedReader(file);
String line = ""; String line = "";
String playerName = null, mining = null, party = null, miningXP = null, woodcutting = null, woodCuttingXP = null, repair = null, unarmed = null, herbalism = null, excavation = null, archery = null, swords = null, axes = null, acrobatics = null, repairXP = null, unarmedXP = null, herbalismXP = null, excavationXP = null, archeryXP = null, swordsXP = null, axesXP = null, acrobaticsXP = null, taming = null, tamingXP = null, fishing = null, fishingXP = null; String playerName = null;
int id = 0, theCount = 0; String party = null;
String mining = null;
String woodcutting = null;
String repair = null;
String unarmed = null;
String herbalism = null;
String excavation = null;
String archery = null;
String swords = null;
String axes = null;
String acrobatics = null;
String taming = null;
String fishing = null;
String miningXP = null;
String woodCuttingXP = null;
String repairXP = null;
String unarmedXP = null;
String herbalismXP = null;
String excavationXP = null;
String archeryXP = null;
String swordsXP = null;
String axesXP = null;
String acrobaticsXP = null;
String tamingXP = null;
String fishingXP = null;
int id = 0;
int theCount = 0;
while ((line = in.readLine()) != null) { while ((line = in.readLine()) != null) {
//Find if the line contains the player we want. //Find if the line contains the player we want.
String[] character = line.split(":"); String[] character = line.split(":");
playerName = character[0]; playerName = character[0];
//Check for things we don't want put in the DB
if (playerName == null
|| playerName.equals("null")
|| playerName
.equals("#Storage place for user information"))
continue;
//Get Mining //Check for things we don't want put in the DB
if (character.length > 1) if (playerName == null || playerName.equals("null") || playerName.equals("#Storage place for user information")) {
continue;
}
if (character.length > 1) {
mining = character[1]; mining = character[1];
//Party }
if (character.length > 3)
if (character.length > 3) {
party = character[3]; party = character[3];
//Mining XP }
if (character.length > 4)
if (character.length > 4) {
miningXP = character[4]; miningXP = character[4];
if (character.length > 5) }
if (character.length > 5) {
woodcutting = character[5]; woodcutting = character[5];
if (character.length > 6) }
if (character.length > 6) {
woodCuttingXP = character[6]; woodCuttingXP = character[6];
if (character.length > 7) }
if (character.length > 7) {
repair = character[7]; repair = character[7];
if (character.length > 8) }
if (character.length > 8) {
unarmed = character[8]; unarmed = character[8];
if (character.length > 9) }
if (character.length > 9) {
herbalism = character[9]; herbalism = character[9];
if (character.length > 10) }
if (character.length > 10) {
excavation = character[10]; excavation = character[10];
if (character.length > 11) }
if (character.length > 11) {
archery = character[11]; archery = character[11];
if (character.length > 12) }
if (character.length > 12) {
swords = character[12]; swords = character[12];
if (character.length > 13) }
if (character.length > 13) {
axes = character[13]; axes = character[13];
if (character.length > 14) }
if (character.length > 14) {
acrobatics = character[14]; acrobatics = character[14];
if (character.length > 15) }
if (character.length > 15) {
repairXP = character[15]; repairXP = character[15];
if (character.length > 16) }
if (character.length > 16) {
unarmedXP = character[16]; unarmedXP = character[16];
if (character.length > 17) }
if (character.length > 17) {
herbalismXP = character[17]; herbalismXP = character[17];
if (character.length > 18) }
if (character.length > 18) {
excavationXP = character[18]; excavationXP = character[18];
if (character.length > 19) }
if (character.length > 19) {
archeryXP = character[19]; archeryXP = character[19];
if (character.length > 20) }
if (character.length > 20) {
swordsXP = character[20]; swordsXP = character[20];
if (character.length > 21) }
if (character.length > 21) {
axesXP = character[21]; axesXP = character[21];
if (character.length > 22) }
if (character.length > 22) {
acrobaticsXP = character[22]; acrobaticsXP = character[22];
if (character.length > 24) }
if (character.length > 24) {
taming = character[24]; taming = character[24];
if (character.length > 25) }
if (character.length > 25) {
tamingXP = character[25]; tamingXP = character[25];
if (character.length > 34) }
if (character.length > 34) {
fishing = character[34]; fishing = character[34];
if (character.length > 35) }
if (character.length > 35) {
fishingXP = character[35]; fishingXP = character[35];
}
//Check to see if the user is in the DB //Check to see if the user is in the DB
id = mcMMO.database.getInt("SELECT id FROM " id = mcMMO.database.getInt("SELECT id FROM "
@ -374,6 +408,7 @@ public class m {
if (id > 0) { if (id > 0) {
theCount++; theCount++;
//Update the skill values //Update the skill values
mcMMO.database.write("UPDATE " mcMMO.database.write("UPDATE "
+ LoadProperties.MySQLtablePrefix + LoadProperties.MySQLtablePrefix
@ -415,8 +450,10 @@ public class m {
+ getInt(acrobaticsXP) + ", fishing = " + getInt(acrobaticsXP) + ", fishing = "
+ getInt(fishingXP) + " WHERE user_id = " + getInt(fishingXP) + " WHERE user_id = "
+ id); + id);
} else { }
else {
theCount++; theCount++;
//Create the user in the DB //Create the user in the DB
mcMMO.database.write("INSERT INTO " mcMMO.database.write("INSERT INTO "
+ LoadProperties.MySQLtablePrefix + LoadProperties.MySQLtablePrefix
@ -478,16 +515,14 @@ public class m {
+ id); + id);
} }
} }
System.out
.println("[mcMMO] MySQL Updated from users file, " System.out.println("[mcMMO] MySQL Updated from users file, " + theCount + " items added/updated to MySQL DB");
+ theCount
+ " items added/updated to MySQL DB");
in.close(); in.close();
} catch (Exception e) { }
log.log(Level.SEVERE, "Exception while reading " + location catch (Exception e) {
+ " (Are you sure you formatted it correctly?)", e); log.log(Level.SEVERE, "Exception while reading " + location + " (Are you sure you formatted it correctly?)", e);
} }
} }
}, 1); }, 1);
} }
} }

View File

@ -17,8 +17,6 @@ import com.gmail.nossr50.locale.mcLocale;
import com.gmail.nossr50.party.Party; import com.gmail.nossr50.party.Party;
import com.gmail.nossr50.skills.*; import com.gmail.nossr50.skills.*;
import org.bukkit.Bukkit;
import java.io.BufferedInputStream; import java.io.BufferedInputStream;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.BufferedWriter; import java.io.BufferedWriter;
@ -35,6 +33,7 @@ import java.util.HashMap;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.bukkit.Bukkit;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
@ -46,367 +45,534 @@ import org.bukkit.entity.Player;
import org.getspout.spoutapi.SpoutManager; import org.getspout.spoutapi.SpoutManager;
import org.getspout.spoutapi.player.FileManager; import org.getspout.spoutapi.player.FileManager;
public class mcMMO extends JavaPlugin {
public class mcMMO extends JavaPlugin public static String maindirectory = "plugins" + File.separator + "mcMMO";
{ public static File file = new File(maindirectory + File.separator + "config.yml");
public static File versionFile = new File(maindirectory + File.separator + "VERSION");
public static String maindirectory = "plugins" + File.separator + "mcMMO"; public static final Logger log = Logger.getLogger("Minecraft");
File file = new File(maindirectory + File.separator + "config.yml");
static File versionFile = new File(maindirectory + File.separator + "VERSION");
public static final Logger log = Logger.getLogger("Minecraft");
private final mcPlayerListener playerListener = new mcPlayerListener(this);
private final mcBlockListener blockListener = new mcBlockListener(this);
private final mcEntityListener entityListener = new mcEntityListener(this);
//Queue for block data change for R2+ fix
public ArrayDeque<Block> changeQueue = new ArrayDeque<Block>();
public ArrayDeque<Block> fastChangeQueue = new ArrayDeque<Block>();
private Runnable mcMMO_Timer = new mcTimer(this); //BLEED AND REGENERATION private final mcPlayerListener playerListener = new mcPlayerListener(this);
private Runnable mcMMO_SaveTimer = new mcSaveTimer(this); //Periodic saving of Player Data private final mcBlockListener blockListener = new mcBlockListener(this);
private Runnable ChangeDataValueTimer = new ChangeDataValueTimer(changeQueue); //R2 block place workaround private final mcEntityListener entityListener = new mcEntityListener(this);
private Runnable FastChangeDataValueTimer = new ChangeDataValueTimer(fastChangeQueue);
//Alias - Command //Queue for block data change for R2+ fix
public HashMap<String, String> aliasMap = new HashMap<String, String>(); public ArrayDeque<Block> changeQueue = new ArrayDeque<Block>();
public ArrayDeque<Block> fastChangeQueue = new ArrayDeque<Block>();
public static Database database = null;
public Misc misc = new Misc(this);
//Config file stuff private Runnable mcMMO_Timer = new mcTimer(this); //BLEED AND REGENERATION
LoadProperties config; private Runnable mcMMO_SaveTimer = new mcSaveTimer(this); //Periodic saving of Player Data
LoadTreasures config2; private Runnable ChangeDataValueTimer = new ChangeDataValueTimer(changeQueue); //R2 block place workaround
private Runnable FastChangeDataValueTimer = new ChangeDataValueTimer(fastChangeQueue); //R2 block place workaround for instant-break stuff
//Jar stuff
public static File mcmmo;
public void onEnable() //Alias - Command
{ public HashMap<String, String> aliasMap = new HashMap<String, String>();
final Plugin thisPlugin = this;
mcmmo = this.getFile();
new File(maindirectory).mkdir();
if(!versionFile.exists())
{
updateVersion();
} else
{
String vnum = readVersion();
//This will be changed to whatever version preceded when we actually need updater code.
//Version 1.0.48 is the first to implement this, no checking before that version can be done.
if(vnum.equalsIgnoreCase("1.0.48")) {
updateFrom(1);
}
//Just add in more else if blocks for versions that need updater code. Increment the updateFrom age int as we do so.
//Catch all for versions not matching and no specific code being needed
else if(!vnum.equalsIgnoreCase(this.getDescription().getVersion())) updateFrom(-1);
}
this.config = new LoadProperties(this);
this.config.load();
this.config2 = new LoadTreasures(this);
this.config2.load();
Party.getInstance().loadParties();
new Party(this);
if(!LoadProperties.useMySQL)
Users.getInstance().loadUsers(); //Load Users file
/*
* REGISTER EVENTS
*/
PluginManager pm = getServer().getPluginManager(); public static Database database = null;
public Misc misc = new Misc(this);
if(pm.getPlugin("Spout") != null) //Config file stuff
LoadProperties.spoutEnabled = true; LoadProperties config;
else LoadTreasures config2;
LoadProperties.spoutEnabled = false;
//Register events
pm.registerEvents(playerListener, this);
pm.registerEvents(blockListener, this);
pm.registerEvents(entityListener, this);
PluginDescriptionFile pdfFile = this.getDescription(); //Jar stuff
public static File mcmmo;
if(LoadProperties.useMySQL) /**
{ * Things to be run when the plugin is enabled.
database = new Database(this); */
database.createStructure(); public void onEnable() {
} else final Plugin thisPlugin = this;
Leaderboard.makeLeaderboards(); //Make the leaderboards mcmmo = this.getFile();
new File(maindirectory).mkdir();
for(Player player : getServer().getOnlinePlayers()){Users.addUser(player);} //In case of reload add all users back into PlayerProfile if (!versionFile.exists()) {
System.out.println(pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!" ); updateVersion();
}
//Periodic save timer (Saves every 10 minutes) else {
Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, mcMMO_SaveTimer, 0, LoadProperties.saveInterval * 1200); String vnum = readVersion();
Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, mcMMO_Timer, 0, 20);
//R2+ block place fix
Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, ChangeDataValueTimer, 0, 10);
Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, FastChangeDataValueTimer, 0, 1);
registerCommands();
//Spout Stuff
if(LoadProperties.spoutEnabled)
{
SpoutStuff.setupSpoutConfigs();
SpoutStuff.registerCustomEvent();
SpoutStuff.extractFiles(); //Extract source materials
FileManager FM = SpoutManager.getFileManager();
FM.addToPreLoginCache(this, SpoutStuff.getFiles());
}
if(LoadProperties.statsTracking) {
//Plugin Metrics running in a new thread
new Thread(new Runnable() {
public void run() {
try {
// create a new metrics object
Metrics metrics = new Metrics();
// 'this' in this context is the Plugin object
metrics.beginMeasuringPlugin(thisPlugin);
} catch (IOException e) {
// Failed to submit the stats :-(
}
}
}).start();
}
}
public PlayerProfile getPlayerProfile(Player player) //This will be changed to whatever version preceded when we actually need updater code.
{ //Version 1.0.48 is the first to implement this, no checking before that version can be done.
return Users.getProfile(player); if (vnum.equalsIgnoreCase("1.0.48")) {
} updateFrom(1);
}
public void checkXp(Player player, SkillType skillType)
{
if(skillType == SkillType.ALL)
Skills.XpCheckAll(player);
else
Skills.XpCheckSkill(skillType, player);
}
public boolean inSameParty(Player playera, Player playerb)
{
if(Users.getProfile(playera).inParty() && Users.getProfile(playerb).inParty()){
if(Users.getProfile(playera).getParty().equals(Users.getProfile(playerb).getParty())){
return true;
} else {
return false;
}
} else {
return false;
}
}
public ArrayList<String> getParties(){
String location = "plugins/mcMMO/mcmmo.users";
ArrayList<String> parties = new ArrayList<String>();
try {
//Open the users file
FileReader file = new FileReader(location);
BufferedReader in = new BufferedReader(file);
String line = "";
while((line = in.readLine()) != null)
{
String[] character = line.split(":");
String theparty = null;
//Party
if(character.length > 3)
theparty = character[3];
if(!parties.contains(theparty))
parties.add(theparty);
}
in.close();
} catch (Exception e) {
log.log(Level.SEVERE, "Exception while reading "
+ location + " (Are you sure you formatted it correctly?)", e);
}
return parties;
}
public static String getPartyName(Player player){
PlayerProfile PP = Users.getProfile(player);
return PP.getParty();
}
public static boolean inParty(Player player){
PlayerProfile PP = Users.getProfile(player);
return PP.inParty();
}
public void onDisable() //Just add in more else if blocks for versions that need updater code. Increment the updateFrom age int as we do so.
{ //Catch all for versions not matching and no specific code being needed
//Make sure to save player information if the server shuts down else if (!vnum.equalsIgnoreCase(this.getDescription().getVersion())) {
for(Player x : Bukkit.getServer().getOnlinePlayers()) updateFrom(-1);
{ }
Users.getProfile(x).save(); }
}
Bukkit.getServer().getScheduler().cancelTasks(this); //This removes our tasks
System.out.println("mcMMO was disabled."); //How informative!
}
private void registerCommands() {
//Register aliases with the aliasmap (used in the playercommandpreprocessevent to ugly alias them to actual commands)
//Skills commands
aliasMap.put(mcLocale.getString("m.SkillAcrobatics").toLowerCase(), "acrobatics");
aliasMap.put(mcLocale.getString("m.SkillArchery").toLowerCase(), "archery");
aliasMap.put(mcLocale.getString("m.SkillAxes").toLowerCase(), "axes");
aliasMap.put(mcLocale.getString("m.SkillExcavation").toLowerCase(), "excavation");
aliasMap.put(mcLocale.getString("m.SkillFishing").toLowerCase(), "fishing");
aliasMap.put(mcLocale.getString("m.SkillHerbalism").toLowerCase(), "herbalism");
aliasMap.put(mcLocale.getString("m.SkillMining").toLowerCase(), "mining");
aliasMap.put(mcLocale.getString("m.SkillRepair").toLowerCase(), "repair");
aliasMap.put(mcLocale.getString("m.SkillSwords").toLowerCase(), "swords");
aliasMap.put(mcLocale.getString("m.SkillTaming").toLowerCase(), "taming");
aliasMap.put(mcLocale.getString("m.SkillUnarmed").toLowerCase(), "unarmed");
aliasMap.put(mcLocale.getString("m.SkillWoodCutting").toLowerCase(), "woodcutting");
//Register commands
//Skills commands
getCommand("acrobatics").setExecutor(new AcrobaticsCommand());
getCommand("archery").setExecutor(new ArcheryCommand());
getCommand("axes").setExecutor(new AxesCommand());
getCommand("excavation").setExecutor(new ExcavationCommand());
getCommand("fishing").setExecutor(new FishingCommand());
getCommand("herbalism").setExecutor(new HerbalismCommand());
getCommand("mining").setExecutor(new MiningCommand());
getCommand("repair").setExecutor(new RepairCommand());
getCommand("swords").setExecutor(new SwordsCommand());
getCommand("taming").setExecutor(new TamingCommand());
getCommand("unarmed").setExecutor(new UnarmedCommand());
getCommand("woodcutting").setExecutor(new WoodcuttingCommand());
//Mc* commands
if(LoadProperties.mcremoveEnable) getCommand("mcremove").setExecutor(new McremoveCommand());
if(LoadProperties.mcabilityEnable) getCommand("mcability").setExecutor(new McabilityCommand());
if(LoadProperties.mccEnable) getCommand("mcc").setExecutor(new MccCommand());
if(LoadProperties.mcgodEnable) getCommand("mcgod").setExecutor(new McgodCommand());
if(LoadProperties.mcmmoEnable) getCommand("mcmmo").setExecutor(new McmmoCommand());
if(LoadProperties.mcrefreshEnable) getCommand("mcrefresh").setExecutor(new McrefreshCommand(this));
if(LoadProperties.mctopEnable) getCommand("mctop").setExecutor(new MctopCommand());
//Party commands
if(LoadProperties.acceptEnable) getCommand("accept").setExecutor(new AcceptCommand());
if(LoadProperties.aEnable) getCommand("a").setExecutor(new ACommand());
if(LoadProperties.inviteEnable) getCommand("invite").setExecutor(new InviteCommand(this));
if(LoadProperties.partyEnable) getCommand("party").setExecutor(new PartyCommand());
if(LoadProperties.pEnable) getCommand("p").setExecutor(new PCommand());
if(LoadProperties.ptpEnable) getCommand("ptp").setExecutor(new PtpCommand(this));
//Other commands
if(LoadProperties.addxpEnable) getCommand("addxp").setExecutor(new AddxpCommand(this));
if(LoadProperties.addlevelsEnable) getCommand("addlevels").setExecutor(new AddlevelsCommand(this));
if(LoadProperties.mmoeditEnable) getCommand("mmoedit").setExecutor(new MmoeditCommand(this));
getCommand("mmoupdate").setExecutor(new MmoupdateCommand());
if(LoadProperties.mcstatsEnable) getCommand("mcstats").setExecutor(new McstatsCommand());
if(LoadProperties.inspectEnable) getCommand("inspect").setExecutor(new InspectCommand(this));
if(LoadProperties.xprateEnable) getCommand("xprate").setExecutor(new XprateCommand());
//Spout commands
getCommand("mchud").setExecutor(new MchudCommand());
if(LoadProperties.xplockEnable) getCommand("xplock").setExecutor(new XplockCommand());
}
/* this.config = new LoadProperties(this);
* It is important to always assume that you are updating from the lowest possible version. this.config.load();
* Thus, every block of updater code should be complete and self-contained; finishing all
* SQL transactions and closing all file handlers, such that the next block of updater code
* if called will handle updating as expected.
*/
public void updateFrom(int age) {
//No updater code needed, just update the version.
if(age == -1) {
updateVersion();
return;
}
//Updater code from age 1 goes here
if(age <= 1) {
//Since age 1 is an example for now, we will just let it do nothing.
}
//If we are updating from age 1 but we need more to reach age 2, this will run too.
if(age <= 2) {
}
updateVersion();
}
public void updateVersion() {
try {
versionFile.createNewFile();
BufferedWriter vout = new BufferedWriter(new FileWriter(versionFile));
vout.write(this.getDescription().getVersion());
vout.close();
} catch (IOException ex) {
ex.printStackTrace();
} catch (SecurityException ex) {
ex.printStackTrace();
}
}
public String readVersion() { this.config2 = new LoadTreasures(this);
byte[] buffer = new byte[(int) versionFile.length()]; this.config2.load();
BufferedInputStream f = null;
try { Party.getInstance().loadParties();
f = new BufferedInputStream(new FileInputStream(versionFile)); new Party(this);
f.read(buffer);
} catch (FileNotFoundException ex) { if (!LoadProperties.useMySQL) {
ex.printStackTrace(); Users.getInstance().loadUsers();
} catch (IOException ex) { }
ex.printStackTrace();
} finally { PluginManager pm = getServer().getPluginManager();
if (f != null) try { f.close(); } catch (IOException ignored) { }
} if (pm.getPlugin("Spout") != null) {
LoadProperties.spoutEnabled = true;
return new String(buffer); }
} else {
LoadProperties.spoutEnabled = false;
/* }
* Boilerplate Custom Config Stuff
*/ //Register events
pm.registerEvents(playerListener, this);
private FileConfiguration treasuresConfig = null; pm.registerEvents(blockListener, this);
private File treasuresConfigFile = null; pm.registerEvents(entityListener, this);
public void reloadTreasuresConfig() { PluginDescriptionFile pdfFile = this.getDescription();
if (treasuresConfigFile == null) {
treasuresConfigFile = new File(getDataFolder(), "treasures.yml"); //Setup the leaderboards
} if (LoadProperties.useMySQL) {
treasuresConfig = YamlConfiguration.loadConfiguration(treasuresConfigFile); database = new Database(this);
database.createStructure();
// Look for defaults in the jar }
InputStream defConfigStream = getResource("treasures.yml"); else {
if (defConfigStream != null) { Leaderboard.makeLeaderboards();
YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(defConfigStream); }
treasuresConfig.setDefaults(defConfig);
} for (Player player : getServer().getOnlinePlayers()) {
} Users.addUser(player); //In case of reload add all users back into PlayerProfile
}
public FileConfiguration getTreasuresConfig() {
if (treasuresConfig == null) { System.out.println(pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!" );
reloadTreasuresConfig();
} //Periodic save timer (Saves every 10 minutes)
return treasuresConfig; Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, mcMMO_SaveTimer, 0, LoadProperties.saveInterval * 1200);
}
//Bleed & Regen timer (Runs every 20 seconds)
public void saveTreasuresConfig() { Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, mcMMO_Timer, 0, 20);
if (treasuresConfig == null || treasuresConfigFile == null) {
return; //R2+ block place fix
} Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, ChangeDataValueTimer, 0, 10);
try { Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, FastChangeDataValueTimer, 0, 1);
treasuresConfig.save(treasuresConfigFile);
} catch (IOException ex) { registerCommands();
Logger.getLogger(JavaPlugin.class.getName()).log(Level.SEVERE, "Could not save config to " + treasuresConfigFile, ex);
} //Spout Stuff
} if (LoadProperties.spoutEnabled) {
} SpoutStuff.setupSpoutConfigs();
SpoutStuff.registerCustomEvent();
SpoutStuff.extractFiles(); //Extract source materials
FileManager FM = SpoutManager.getFileManager();
FM.addToPreLoginCache(this, SpoutStuff.getFiles());
}
if (LoadProperties.statsTracking) {
//Plugin Metrics running in a new thread
new Thread(new Runnable() {
public void run() {
try {
// create a new metrics object
Metrics metrics = new Metrics();
// 'this' in this context is the Plugin object
metrics.beginMeasuringPlugin(thisPlugin);
}
catch (IOException e) {
System.out.println("Failed to submit stats.");
}
}
}).start();
}
}
/**
* Get profile of the player.
* </br>
* This function is designed for API usage.
*
* @param player Player whose profile to get
* @return the PlayerProfile object
*/
public PlayerProfile getPlayerProfile(Player player) {
return Users.getProfile(player);
}
/**
* Check the XP of a player.
* </br>
* This function is designed for API usage.
*
* @param player
* @param skillType
*/
public void checkXp(Player player, SkillType skillType) {
if (skillType == SkillType.ALL) {
Skills.XpCheckAll(player);
}
else {
Skills.XpCheckSkill(skillType, player);
}
}
/**
* Check if two players are in the same party.
* </br>
* This function is designed for API usage.
*
* @param playera The first player to check
* @param playerb The second player to check
* @return true if the two players are in the same party, false otherwise
*/
public boolean inSameParty(Player playera, Player playerb) {
if (Users.getProfile(playera).inParty() && Users.getProfile(playerb).inParty()) {
if (Users.getProfile(playera).getParty().equals(Users.getProfile(playerb).getParty())) {
return true;
}
else {
return false;
}
}
else {
return false;
}
}
/**
* Get a list of all current party names.
* </br>
* This function is designed for API usage.
*
* @return the list of parties.
*/
public ArrayList<String> getParties() {
String location = "plugins/mcMMO/mcmmo.users";
ArrayList<String> parties = new ArrayList<String>();
try {
//Open the users file
FileReader file = new FileReader(location);
BufferedReader in = new BufferedReader(file);
String line = "";
while((line = in.readLine()) != null) {
String[] character = line.split(":");
String theparty = null;
//Party
if (character.length > 3) {
theparty = character[3];
}
if (!parties.contains(theparty)) {
parties.add(theparty);
}
}
in.close();
}
catch (Exception e) {
log.log(Level.SEVERE, "Exception while reading " + location + " (Are you sure you formatted it correctly?)", e);
}
return parties;
}
/**
* Get the name of the party a player is in.
* </br>
* This function is designed for API usage.
*
* @param player The player to check the party name of
* @return the name of the player's party
*/
public static String getPartyName(Player player) {
PlayerProfile PP = Users.getProfile(player);
return PP.getParty();
}
/**
* Checks if a player is in a party.
* </br>
* This function is designed for API usage.
*
* @param player The player to check
* @return true if the player is in a party, false otherwise
*/
public static boolean inParty(Player player) {
PlayerProfile PP = Users.getProfile(player);
return PP.inParty();
}
/**
* Things to be run when the plugin is disabled.
*/
public void onDisable() {
//Make sure to save player information if the server shuts down
for (Player x : Bukkit.getOnlinePlayers()) {
Users.getProfile(x).save();
}
Bukkit.getServer().getScheduler().cancelTasks(this); //This removes our tasks
System.out.println("mcMMO was disabled."); //How informative!
}
/**
* Register the commands.
*/
private void registerCommands() {
//Register aliases with the aliasmap (used in the playercommandpreprocessevent to ugly alias them to actual commands)
//Skills commands
aliasMap.put(mcLocale.getString("m.SkillAcrobatics").toLowerCase(), "acrobatics");
aliasMap.put(mcLocale.getString("m.SkillArchery").toLowerCase(), "archery");
aliasMap.put(mcLocale.getString("m.SkillAxes").toLowerCase(), "axes");
aliasMap.put(mcLocale.getString("m.SkillExcavation").toLowerCase(), "excavation");
aliasMap.put(mcLocale.getString("m.SkillFishing").toLowerCase(), "fishing");
aliasMap.put(mcLocale.getString("m.SkillHerbalism").toLowerCase(), "herbalism");
aliasMap.put(mcLocale.getString("m.SkillMining").toLowerCase(), "mining");
aliasMap.put(mcLocale.getString("m.SkillRepair").toLowerCase(), "repair");
aliasMap.put(mcLocale.getString("m.SkillSwords").toLowerCase(), "swords");
aliasMap.put(mcLocale.getString("m.SkillTaming").toLowerCase(), "taming");
aliasMap.put(mcLocale.getString("m.SkillUnarmed").toLowerCase(), "unarmed");
aliasMap.put(mcLocale.getString("m.SkillWoodCutting").toLowerCase(), "woodcutting");
//Register commands
//Skills commands
getCommand("acrobatics").setExecutor(new AcrobaticsCommand());
getCommand("archery").setExecutor(new ArcheryCommand());
getCommand("axes").setExecutor(new AxesCommand());
getCommand("excavation").setExecutor(new ExcavationCommand());
getCommand("fishing").setExecutor(new FishingCommand());
getCommand("herbalism").setExecutor(new HerbalismCommand());
getCommand("mining").setExecutor(new MiningCommand());
getCommand("repair").setExecutor(new RepairCommand());
getCommand("swords").setExecutor(new SwordsCommand());
getCommand("taming").setExecutor(new TamingCommand());
getCommand("unarmed").setExecutor(new UnarmedCommand());
getCommand("woodcutting").setExecutor(new WoodcuttingCommand());
//mc* commands
if (LoadProperties.mcremoveEnable) {
getCommand("mcremove").setExecutor(new McremoveCommand());
}
if (LoadProperties.mcabilityEnable) {
getCommand("mcability").setExecutor(new McabilityCommand());
}
if (LoadProperties.mccEnable) {
getCommand("mcc").setExecutor(new MccCommand());
}
if (LoadProperties.mcgodEnable) {
getCommand("mcgod").setExecutor(new McgodCommand());
}
if (LoadProperties.mcmmoEnable) {
getCommand("mcmmo").setExecutor(new McmmoCommand());
}
if (LoadProperties.mcrefreshEnable) {
getCommand("mcrefresh").setExecutor(new McrefreshCommand(this));
}
if (LoadProperties.mctopEnable) {
getCommand("mctop").setExecutor(new MctopCommand());
}
if (LoadProperties.mcstatsEnable) {
getCommand("mcstats").setExecutor(new McstatsCommand());
}
//Party commands
if (LoadProperties.acceptEnable) {
getCommand("accept").setExecutor(new AcceptCommand());
}
if (LoadProperties.aEnable) {
getCommand("a").setExecutor(new ACommand());
}
if (LoadProperties.inviteEnable) {
getCommand("invite").setExecutor(new InviteCommand(this));
}
if (LoadProperties.partyEnable) {
getCommand("party").setExecutor(new PartyCommand());
}
if (LoadProperties.pEnable) {
getCommand("p").setExecutor(new PCommand());
}
if (LoadProperties.ptpEnable) {
getCommand("ptp").setExecutor(new PtpCommand(this));
}
//Other commands
if (LoadProperties.addxpEnable) {
getCommand("addxp").setExecutor(new AddxpCommand(this));
}
if (LoadProperties.addlevelsEnable) {
getCommand("addlevels").setExecutor(new AddlevelsCommand(this));
}
if (LoadProperties.mmoeditEnable) {
getCommand("mmoedit").setExecutor(new MmoeditCommand(this));
}
if (LoadProperties.inspectEnable) {
getCommand("inspect").setExecutor(new InspectCommand(this));
}
if (LoadProperties.xprateEnable) {
getCommand("xprate").setExecutor(new XprateCommand());
}
getCommand("mmoupdate").setExecutor(new MmoupdateCommand());
//Spout commands
if (LoadProperties.xplockEnable) {
getCommand("xplock").setExecutor(new XplockCommand());
}
getCommand("mchud").setExecutor(new MchudCommand());
}
/**
* Update mcMMO from a given version
* </p>
* It is important to always assume that you are updating from the lowest possible version.
* Thus, every block of updater code should be complete and self-contained; finishing all
* SQL transactions and closing all file handlers, such that the next block of updater code
* if called will handle updating as expected.
*
* @param age Specifies which updater code to run
*/
public void updateFrom(int age) {
//No updater code needed, just update the version.
if (age == -1) {
updateVersion();
return;
}
//Updater code from age 1 goes here
if (age <= 1) {
//Since age 1 is an example for now, we will just let it do nothing.
}
//If we are updating from age 1 but we need more to reach age 2, this will run too.
if (age <= 2) {
}
updateVersion();
}
/**
* Update the version file.
*/
public void updateVersion() {
try {
versionFile.createNewFile();
BufferedWriter vout = new BufferedWriter(new FileWriter(versionFile));
vout.write(this.getDescription().getVersion());
vout.close();
}
catch (IOException ex) {
ex.printStackTrace();
}
catch (SecurityException ex) {
ex.printStackTrace();
}
}
/**
* Get the current mcMMO version.
*
* @return a String representing the current mcMMO version
*/
public String readVersion() {
byte[] buffer = new byte[(int) versionFile.length()];
BufferedInputStream f = null;
try {
f = new BufferedInputStream(new FileInputStream(versionFile));
f.read(buffer);
}
catch (FileNotFoundException ex) {
ex.printStackTrace();
}
catch (IOException ex) {
ex.printStackTrace();
}
finally {
if (f != null) {
try {
f.close();
}
catch (IOException ignored) {}
}
}
return new String(buffer);
}
/*
* Boilerplate Custom Config Stuff
*/
private FileConfiguration treasuresConfig = null;
private File treasuresConfigFile = null;
/**
* Reload the Treasures.yml file.
*/
public void reloadTreasuresConfig() {
if (treasuresConfigFile == null) {
treasuresConfigFile = new File(getDataFolder(), "treasures.yml");
}
treasuresConfig = YamlConfiguration.loadConfiguration(treasuresConfigFile);
InputStream defConfigStream = getResource("treasures.yml"); // Look for defaults in the jar
if (defConfigStream != null) {
YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(defConfigStream);
treasuresConfig.setDefaults(defConfig);
}
}
/**
* Get the Treasures config information.
*
* @return the configuration object for treasures.yml
*/
public FileConfiguration getTreasuresConfig() {
if (treasuresConfig == null) {
reloadTreasuresConfig();
}
return treasuresConfig;
}
/**
* Save the Treasures config informtion.
*/
public void saveTreasuresConfig() {
if (treasuresConfig == null || treasuresConfigFile == null) {
return;
}
try {
treasuresConfig.save(treasuresConfigFile);
}
catch (IOException ex) {
log.log(Level.SEVERE, "Could not save config to " + treasuresConfigFile, ex);
}
}
}

View File

@ -2,118 +2,153 @@ package com.gmail.nossr50;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
public class mcPermissions public class mcPermissions {
{
private static volatile mcPermissions instance; private static volatile mcPermissions instance;
public boolean permission(Player player, String perm) { public boolean permission(Player player, String perm) {
return player.hasPermission(perm); return player.hasPermission(perm);
} }
public boolean admin(Player player){
public boolean admin(Player player) {
return player.hasPermission("mcmmo.admin"); return player.hasPermission("mcmmo.admin");
} }
public boolean mcrefresh(Player player) { public boolean mcrefresh(Player player) {
return player.hasPermission("mcmmo.tools.mcrefresh"); return player.hasPermission("mcmmo.tools.mcrefresh");
} }
public boolean mcremove(Player player) { public boolean mcremove(Player player) {
return player.hasPermission("mcmmo.tools.mcremove"); return player.hasPermission("mcmmo.tools.mcremove");
} }
public boolean mmoedit(Player player) { public boolean mmoedit(Player player) {
return player.hasPermission("mcmmo.tools.mmoedit"); return player.hasPermission("mcmmo.tools.mmoedit");
} }
public boolean herbalismAbility(Player player){
public boolean herbalismAbility(Player player) {
return player.hasPermission("mcmmo.ability.herbalism"); return player.hasPermission("mcmmo.ability.herbalism");
} }
public boolean excavationAbility(Player player){
public boolean excavationAbility(Player player) {
return player.hasPermission("mcmmo.ability.excavation"); return player.hasPermission("mcmmo.ability.excavation");
} }
public boolean unarmedAbility(Player player){
return player.hasPermission("mcmmo.ability.unarmed"); public boolean unarmedAbility(Player player) {
return player.hasPermission("mcmmo.ability.unarmed");
} }
public boolean chimaeraWing(Player player){
return player.hasPermission("mcmmo.item.chimaerawing"); public boolean chimaeraWing(Player player) {
return player.hasPermission("mcmmo.item.chimaerawing");
} }
public boolean miningAbility(Player player){
return player.hasPermission("mcmmo.ability.mining"); public boolean miningAbility(Player player) {
return player.hasPermission("mcmmo.ability.mining");
} }
public boolean axesAbility(Player player){
return player.hasPermission("mcmmo.ability.axes"); public boolean axesAbility(Player player) {
return player.hasPermission("mcmmo.ability.axes");
} }
public boolean swordsAbility(Player player){
return player.hasPermission("mcmmo.ability.swords"); public boolean swordsAbility(Player player) {
return player.hasPermission("mcmmo.ability.swords");
} }
public boolean woodCuttingAbility(Player player) { public boolean woodCuttingAbility(Player player) {
return player.hasPermission("mcmmo.ability.woodcutting"); return player.hasPermission("mcmmo.ability.woodcutting");
} }
public boolean mcgod(Player player) { public boolean mcgod(Player player) {
return player.hasPermission("mcmmo.tools.mcgod"); return player.hasPermission("mcmmo.tools.mcgod");
} }
public boolean motd(Player player) { public boolean motd(Player player) {
return player.hasPermission("mcmmo.motd"); return player.hasPermission("mcmmo.motd");
} }
public boolean mcAbility(Player player) { public boolean mcAbility(Player player) {
return player.hasPermission("mcmmo.commands.ability"); return player.hasPermission("mcmmo.commands.ability");
} }
public boolean partyChat(Player player) { public boolean partyChat(Player player) {
return player.hasPermission("mcmmo.chat.partychat"); return player.hasPermission("mcmmo.chat.partychat");
} }
public boolean partyLock(Player player) { public boolean partyLock(Player player) {
return player.hasPermission("mcmmo.chat.partylock"); return player.hasPermission("mcmmo.chat.partylock");
} }
public boolean partyTeleport(Player player) { public boolean partyTeleport(Player player) {
return player.hasPermission("mcmmo.commands.ptp"); return player.hasPermission("mcmmo.commands.ptp");
} }
public boolean inspect(Player player) { public boolean inspect(Player player) {
return player.hasPermission("mcmmo.commands.inspect"); return player.hasPermission("mcmmo.commands.inspect");
} }
public boolean party(Player player) { public boolean party(Player player) {
return player.hasPermission("mcmmo.commands.party"); return player.hasPermission("mcmmo.commands.party");
} }
public boolean adminChat(Player player) { public boolean adminChat(Player player) {
return player.hasPermission("mcmmo.chat.adminchat"); return player.hasPermission("mcmmo.chat.adminchat");
} }
public static mcPermissions getInstance() { public static mcPermissions getInstance() {
if (instance == null) { if (instance == null) {
instance = new mcPermissions(); instance = new mcPermissions();
} }
return instance;
return instance;
} }
public boolean taming(Player player) { public boolean taming(Player player) {
return player.hasPermission("mcmmo.skills.taming"); return player.hasPermission("mcmmo.skills.taming");
} }
public boolean mining(Player player) { public boolean mining(Player player) {
return player.hasPermission("mcmmo.skills.mining"); return player.hasPermission("mcmmo.skills.mining");
} }
public boolean blastMining(Player player) { public boolean blastMining(Player player) {
return player.hasPermission("mcmmo.skills.blastmining"); return player.hasPermission("mcmmo.skills.blastmining");
} }
public boolean fishing(Player player) { public boolean fishing(Player player) {
return player.hasPermission("mcmmo.skills.fishing"); return player.hasPermission("mcmmo.skills.fishing");
} }
public boolean woodcutting(Player player) { public boolean woodcutting(Player player) {
return player.hasPermission("mcmmo.skills.woodcutting"); return player.hasPermission("mcmmo.skills.woodcutting");
} }
public boolean repair(Player player) { public boolean repair(Player player) {
return player.hasPermission("mcmmo.skills.repair"); return player.hasPermission("mcmmo.skills.repair");
} }
public boolean unarmed(Player player) { public boolean unarmed(Player player) {
return player.hasPermission("mcmmo.skills.unarmed"); return player.hasPermission("mcmmo.skills.unarmed");
} }
public boolean archery(Player player) { public boolean archery(Player player) {
return player.hasPermission("mcmmo.skills.archery"); return player.hasPermission("mcmmo.skills.archery");
} }
public boolean herbalism(Player player) { public boolean herbalism(Player player) {
return player.hasPermission("mcmmo.skills.herbalism"); return player.hasPermission("mcmmo.skills.herbalism");
} }
public boolean excavation(Player player) { public boolean excavation(Player player) {
return player.hasPermission("mcmmo.skills.excavation"); return player.hasPermission("mcmmo.skills.excavation");
} }
public boolean swords(Player player) { public boolean swords(Player player) {
return player.hasPermission("mcmmo.skills.swords"); return player.hasPermission("mcmmo.skills.swords");
} }
public boolean axes(Player player) { public boolean axes(Player player) {
return player.hasPermission("mcmmo.skills.axes"); return player.hasPermission("mcmmo.skills.axes");
} }
public boolean acrobatics(Player player) { public boolean acrobatics(Player player) {
return player.hasPermission("mcmmo.skills.acrobatics"); return player.hasPermission("mcmmo.skills.acrobatics");
} }

View File

@ -10,8 +10,8 @@ import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.entity.ExplosionPrimeEvent; import org.bukkit.event.entity.ExplosionPrimeEvent;
import com.gmail.nossr50.BlockChecks;
import com.gmail.nossr50.Users; import com.gmail.nossr50.Users;
import com.gmail.nossr50.m;
import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.datatypes.SkillType; import com.gmail.nossr50.datatypes.SkillType;
@ -89,7 +89,7 @@ public class BlastMining{
while(iterator.hasNext()) while(iterator.hasNext())
{ {
Block temp = iterator.next(); Block temp = iterator.next();
if(m.isOre(temp)) if(BlockChecks.isOre(temp.getType()))
ores.add(temp); ores.add(temp);
else else
debris.add(temp); debris.add(temp);

View File

@ -103,7 +103,7 @@ public class Taming
{ {
DamageCause cause = event.getCause(); DamageCause cause = event.getCause();
Wolf wolf = (Wolf) event.getEntity(); Wolf wolf = (Wolf) event.getEntity();
Player master = (Player) wolf.getOwner(); Player master = (Player) wolf.getOwner();
int skillLevel = Users.getProfile(master).getSkillLevel(SkillType.TAMING); int skillLevel = Users.getProfile(master).getSkillLevel(SkillType.TAMING);
switch(cause) switch(cause)