Created
December 14, 2011 22:32
-
-
Save macalinao/1478873 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* To change this template, choose Tools | Templates | |
* and open the template in the editor. | |
*/ | |
package com.simplyian.iconomystore; | |
import com.iConomy.iConomy; | |
import com.nijiko.permissions.PermissionHandler; | |
import com.nijikokun.bukkit.Permissions.Permissions; | |
import java.io.File; | |
import java.io.FileInputStream; | |
import java.io.FileNotFoundException; | |
import java.io.FileOutputStream; | |
import java.io.IOException; | |
import java.util.Properties; | |
import java.util.logging.Level; | |
import java.util.logging.Logger; | |
import org.bukkit.Bukkit; | |
import org.bukkit.command.Command; | |
import org.bukkit.command.CommandSender; | |
import org.bukkit.entity.Player; | |
import org.bukkit.event.Event.Priority; | |
import org.bukkit.event.Event.Type; | |
import org.bukkit.event.player.PlayerEvent; | |
import org.bukkit.event.player.PlayerJoinEvent; | |
import org.bukkit.event.player.PlayerKickEvent; | |
import org.bukkit.event.player.PlayerListener; | |
import org.bukkit.event.player.PlayerQuitEvent; | |
import org.bukkit.event.server.PluginDisableEvent; | |
import org.bukkit.event.server.PluginEnableEvent; | |
import org.bukkit.event.server.ServerListener; | |
import org.bukkit.plugin.Plugin; | |
import org.bukkit.plugin.PluginManager; | |
import org.bukkit.plugin.java.JavaPlugin; | |
/** | |
* | |
* @author simplyianm | |
*/ | |
public class IconomyStore extends JavaPlugin { | |
public static final Logger LOGGER = Logger.getLogger("Minecraft"); | |
private static File propsFile = new File("./plugins/IconomyStore/config.props"); | |
private PermissionHandler permissions; | |
private Properties props; | |
public void onDisable() { | |
save(); | |
LOGGER.info("[IconomyStore] Plugin disabled."); | |
} | |
public void onEnable() { | |
PluginManager pluginManager = Bukkit.getPluginManager(); | |
PListener playerListener = new PListener(); | |
pluginManager.registerEvent(Type.PLAYER_JOIN, playerListener, Priority.Monitor, this); | |
pluginManager.registerEvent(Type.PLAYER_KICK, playerListener, Priority.Monitor, this); | |
pluginManager.registerEvent(Type.PLAYER_QUIT, playerListener, Priority.Monitor, this); | |
//The code here assumes you have permissions. | |
Plugin p = getServer().getPluginManager().getPlugin("Permissions"); | |
if (p != null) { | |
permissions = ((Permissions) p).getHandler(); | |
LOGGER.info("[IconomyStore] Found and using permissions."); | |
} else { | |
LOGGER.info("[IconomyStore] The server doesn't have permissions installed."); | |
} | |
load(); | |
LOGGER.info("[IconomyStore] Plugin enabled."); | |
} | |
@Override | |
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { | |
if ((sender instanceof Player) && !canTransfer((Player) sender)) { | |
return false; | |
} | |
for (Player player : Bukkit.getOnlinePlayers()) { | |
if (!canTransfer(player)) { | |
continue; | |
} | |
props.setProperty(player.getName(), | |
Double.toString(iConomy.getAccount(player.getName()).getHoldings().balance())); | |
} | |
save(); | |
return true; | |
} | |
/** | |
* Gets the balance for the player. | |
* | |
* @param player | |
* @return | |
*/ | |
public double getBalance(String player) { | |
String val = (String) props.get(player); | |
if (val == null) { | |
return 0.0d; | |
} | |
try { | |
double balance = Double.parseDouble(val); | |
return balance; | |
} catch (NumberFormatException ex) { | |
LOGGER.info("[IconomyStore] Invalid data in properties for player " + player + "!"); | |
} | |
return 0.0d; | |
} | |
/** | |
* Sets the balance of a player. | |
* | |
* @param player | |
* @param balance | |
*/ | |
public void setBalance(String player, double balance) { | |
props.put(player, balance); | |
save(); | |
} | |
/** | |
* Checks permissions. | |
* | |
* @param player | |
* @return | |
*/ | |
private boolean canTransfer(Player player) { | |
return (permissions != null) | |
? permissions.has(player, "iconomytransfer.use") | |
: player.isOp(); | |
} | |
/** | |
* Loads the properties. | |
*/ | |
private void load() { | |
FileInputStream s = null; | |
try { | |
props = new Properties(); | |
s = new FileInputStream(propsFile); | |
props.load(s); | |
} catch (IOException ex) { | |
LOGGER.info("[IconomyStore] Failed to load the properties file."); | |
} finally { | |
try { | |
s.close(); | |
} catch (IOException ex) { | |
LOGGER.info("[IconomyStore] Could not close the stream."); | |
} | |
} | |
} | |
/** | |
* Saves the properties. | |
*/ | |
private void save() { | |
FileOutputStream s = null; | |
try { | |
s = new FileOutputStream(propsFile); | |
props.store(s, ""); | |
} catch (IOException ex) { | |
LOGGER.info("[IconomyStore] Failed to save the properties file."); | |
} finally { | |
try { | |
s.close(); | |
} catch (IOException ex) { | |
LOGGER.info("[IconomyStore] Could not close the stream."); | |
} | |
} | |
} | |
/** | |
* The player listener. | |
*/ | |
private class PListener extends PlayerListener { | |
@Override | |
public void onPlayerJoin(PlayerJoinEvent event) { | |
if (!canTransfer(event.getPlayer())) { | |
return; | |
} | |
Player player = event.getPlayer(); | |
props.setProperty(player.getName(), | |
Double.toString(iConomy.getAccount(player.getName()).getHoldings().balance())); | |
save(); | |
} | |
@Override | |
public void onPlayerKick(PlayerKickEvent event) { | |
onPlayerLeave(event); | |
} | |
@Override | |
public void onPlayerQuit(PlayerQuitEvent event) { | |
onPlayerLeave(event); | |
} | |
private void onPlayerLeave(PlayerEvent event) { | |
if (!canTransfer(event.getPlayer())) { | |
return; | |
} | |
Player player = event.getPlayer(); | |
props.setProperty(player.getName(), | |
Double.toString(iConomy.getAccount(player.getName()).getHoldings().balance())); | |
save(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment