Skip to content

Instantly share code, notes, and snippets.

@macalinao
Created December 14, 2011 22:32
Show Gist options
  • Save macalinao/1478873 to your computer and use it in GitHub Desktop.
Save macalinao/1478873 to your computer and use it in GitHub Desktop.
/*
* 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