diff --git a/src/lishid/openinv/commands/AnyChestPluginCommand.java b/src/lishid/openinv/commands/AnyChestPluginCommand.java new file mode 100644 index 0000000..4e4ffb5 --- /dev/null +++ b/src/lishid/openinv/commands/AnyChestPluginCommand.java @@ -0,0 +1,39 @@ +package lishid.openinv.commands; + +import lishid.openinv.PermissionRelay; +import lishid.openinv.OpenInv; + +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class AnyChestPluginCommand implements CommandExecutor { + public AnyChestPluginCommand(OpenInv plugin) { + + } + + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!PermissionRelay.hasPermission((Player) sender, "anychest")) { + sender.sendMessage(ChatColor.RED + "You do not have permission to use anychest."); + return true; + } + + if(args.length > 0) + { + if(args[0].equalsIgnoreCase("check")) + { + if(OpenInv.GetPlayerAnyChestStatus(sender.getName())) + sender.sendMessage("AnyChest is ON."); + else + sender.sendMessage("AnyChest is OFF."); + } + } + + OpenInv.SetPlayerAnyChestStatus(sender.getName(), !OpenInv.GetPlayerAnyChestStatus(sender.getName())); + sender.sendMessage("AnyChest is now " + (OpenInv.GetPlayerAnyChestStatus(sender.getName())?"On":"Off") + "."); + + return true; + } +} diff --git a/src/lishid/openinv/commands/SilentChestPluginCommand.java b/src/lishid/openinv/commands/SilentChestPluginCommand.java new file mode 100644 index 0000000..cdbf488 --- /dev/null +++ b/src/lishid/openinv/commands/SilentChestPluginCommand.java @@ -0,0 +1,39 @@ +package lishid.openinv.commands; + +import lishid.openinv.PermissionRelay; +import lishid.openinv.OpenInv; + +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class SilentChestPluginCommand implements CommandExecutor { + public SilentChestPluginCommand(OpenInv plugin) { + + } + + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!PermissionRelay.hasPermission((Player) sender, "silent")) { + sender.sendMessage(ChatColor.RED + "You do not have permission to use silent chest."); + return true; + } + + if(args.length > 0) + { + if(args[0].equalsIgnoreCase("check")) + { + if(OpenInv.GetPlayerSilentChestStatus(sender.getName())) + sender.sendMessage("SilentChest is ON."); + else + sender.sendMessage("SilentChest is OFF."); + } + } + + OpenInv.SetPlayerSilentChestStatus(sender.getName(), !OpenInv.GetPlayerSilentChestStatus(sender.getName())); + sender.sendMessage("SilentChest is now " + (OpenInv.GetPlayerSilentChestStatus(sender.getName())?"On":"Off") + "."); + + return true; + } +} diff --git a/src/lishid/openinv/commands/ToggleOpenInvPluginCommand.java b/src/lishid/openinv/commands/ToggleOpenInvPluginCommand.java new file mode 100644 index 0000000..6906490 --- /dev/null +++ b/src/lishid/openinv/commands/ToggleOpenInvPluginCommand.java @@ -0,0 +1,44 @@ +package lishid.openinv.commands; + +import lishid.openinv.OpenInv; +import lishid.openinv.PermissionRelay; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ToggleOpenInvPluginCommand implements CommandExecutor { + + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!PermissionRelay.hasPermission((Player)sender, "openinv")) { + sender.sendMessage(ChatColor.RED + "You do not have permission to access player inventories"); + return true; + } + + Player player = (Player)sender; + if(args.length > 0) + { + if(args[0].equalsIgnoreCase("check")) + { + if(OpenInv.GetPlayerItemOpenInvStatus(player.getName())) + player.sendMessage("OpenInv with " + Material.getMaterial(OpenInv.GetItemOpenInvItem()).toString() + " is ON."); + else + player.sendMessage("OpenInv with " + Material.getMaterial(OpenInv.GetItemOpenInvItem()).toString() + " is OFF."); + } + } + if(OpenInv.GetPlayerItemOpenInvStatus(player.getName())) + { + OpenInv.SetPlayerItemOpenInvStatus(player.getName(), false); + player.sendMessage("OpenInv with " + Material.getMaterial(OpenInv.GetItemOpenInvItem()).toString() + " is OFF."); + } + else + { + OpenInv.SetPlayerItemOpenInvStatus(player.getName(), true); + player.sendMessage("OpenInv with " + Material.getMaterial(OpenInv.GetItemOpenInvItem()).toString() + " is ON."); + } + return true; + } +} diff --git a/src/lishid/openinv/utils/Metrics.java b/src/lishid/openinv/utils/Metrics.java new file mode 100644 index 0000000..b0342cf --- /dev/null +++ b/src/lishid/openinv/utils/Metrics.java @@ -0,0 +1,190 @@ +package lishid.openinv.utils; + +/* + * Copyright 2011 Tyler Blair. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and contributors and should not be interpreted as representing official policies, + * either expressed or implied, of anybody else. + */ + +import org.bukkit.Bukkit; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.plugin.Plugin; + +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.UnsupportedEncodingException; +import java.net.URL; +import java.net.URLConnection; +import java.net.URLEncoder; +import java.util.UUID; + +/** + * Tooling to post to metrics.griefcraft.com + */ +public class Metrics { + + /** + * The metrics revision number + */ + private final static int REVISION = 2; + + /** + * The base url of the metrics domain + */ + private static final String BASE_URL = "http://metrics.griefcraft.com"; + + /** + * The url used to report a server's status + */ + private static final String REPORT_URL = "/report/%s"; + + /** + * The file where guid and opt out is stored in + */ + private static final String CONFIG_FILE = "plugins/PluginMetrics/config.yml"; + + /** + * Interval of time to ping in minutes + */ + private final static long PING_INTERVAL = 20L; + + /** + * The plugin configuration file + */ + private final YamlConfiguration configuration; + + + /** + * Unique server id + */ + private String guid; + + public Metrics() throws IOException { + // load the config + File file = new File(CONFIG_FILE); + configuration = YamlConfiguration.loadConfiguration(file); + + // add some defaults + configuration.addDefault("opt-out", false); + configuration.addDefault("guid", UUID.randomUUID().toString()); + + // Do we need to create the file? + if (configuration.get("guid", null) == null) { + configuration.options().header("http://metrics.griefcraft.com").copyDefaults(true); + configuration.save(file); + } + + // Load the guid then + guid = configuration.getString("guid"); + } + + /** + * Begin measuring a plugin + * + * @param plugin + */ + public void beginMeasuringPlugin(final Plugin plugin) throws IOException { + // Did we opt out? + if (configuration.getBoolean("opt-out", false)) { + return; + } + + // First tell the server about us + postPlugin(plugin, false); + + // Ping the server in intervals + plugin.getServer().getScheduler().scheduleAsyncRepeatingTask(plugin, new Runnable() { + public void run() { + try { + postPlugin(plugin, true); + } catch (IOException e) { + System.out.println("[Metrics] " + e.getMessage()); + } + } + }, 0, PING_INTERVAL * 1200); + } + + /** + * Generic method that posts a plugin to the metrics website + * + * @param plugin + */ + private void postPlugin(Plugin plugin, boolean isPing) throws IOException { + // Construct the post data + String response = "ERR No response"; + String data = encode("guid") + "=" + encode(guid) + + "&" + encode("version") + "=" + encode(plugin.getDescription().getVersion()) + + "&" + encode("server") + "=" + encode(Bukkit.getVersion()) + + "&" + encode("players") + "=" + encode(Bukkit.getServer().getOnlinePlayers().length + "") + + "&" + encode("revision") + "=" + encode(REVISION + ""); + + // If we're pinging, append it + if (isPing) { + data += "&" + encode("ping") + "=" + encode("true"); + } + + // Create the url + URL url = new URL(BASE_URL + String.format(REPORT_URL, plugin.getDescription().getName())); + + // Connect to the website + URLConnection connection = url.openConnection(); + connection.setDoOutput(true); + + // Write the data + OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream()); + writer.write(data); + writer.flush(); + + // Now read the response + BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); + response = reader.readLine(); + + // close resources + writer.close(); + reader.close(); + + if (response.startsWith("OK")) { + // Useless return, but it documents that we should be receiving OK followed by an optional description + return; + } else if (response.startsWith("ERR")) { + // Throw it to whoever is catching us + throw new IOException(response); + } + } + + /** + * Encode text as UTF-8 + * + * @param text + * @return + */ + private String encode(String text) throws UnsupportedEncodingException { + return URLEncoder.encode(text, "UTF-8"); + } + +} \ No newline at end of file diff --git a/src/lishid/openinv/utils/SilentContainerChest.java b/src/lishid/openinv/utils/SilentContainerChest.java new file mode 100644 index 0000000..291a0cc --- /dev/null +++ b/src/lishid/openinv/utils/SilentContainerChest.java @@ -0,0 +1,18 @@ +package lishid.openinv.utils; + +import net.minecraft.server.* ; + +public class SilentContainerChest extends ContainerChest { + public IInventory inv; + public SilentContainerChest(IInventory i1, IInventory i2) { + super(i1, i2); + inv = i2; + inv.g();//close signal + } + + @Override + public void a(EntityHuman paramEntityHuman) { + super.a(paramEntityHuman); + inv.f();//open signal + } +} \ No newline at end of file