Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package loot;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Random;
- import org.bukkit.Bukkit;
- import org.bukkit.ChatColor;
- import org.bukkit.Location;
- import org.bukkit.Material;
- import org.bukkit.World;
- import org.bukkit.block.Block;
- import org.bukkit.block.BlockFace;
- import org.bukkit.block.Chest;
- import org.bukkit.command.Command;
- import org.bukkit.command.CommandSender;
- import org.bukkit.entity.Player;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.Listener;
- import org.bukkit.event.inventory.InventoryOpenEvent;
- import org.bukkit.inventory.ItemStack;
- import org.bukkit.plugin.java.JavaPlugin;
- import org.bukkit.scheduler.BukkitRunnable;
- public final class LootChests
- extends JavaPlugin
- implements Listener
- {
- private static final Random random = new Random();
- private static final String prefix = "[" + ChatColor.LIGHT_PURPLE + "LootChest" + ChatColor.RESET + "] ";
- private static LootChests instance;
- private World world;
- private int minX;
- private int minZ;
- private int maxX;
- private int maxZ;
- private int maxUnique;
- private List<ItemStack> contents;
- private boolean donePrevious = true;
- public static LootChests get()
- {
- return instance;
- }
- @SuppressWarnings({ "unchecked", "rawtypes" })
- public void onEnable()
- {
- instance = this;
- saveDefaultConfig();
- getServer().getPluginManager().registerEvents(this, this);
- getServer().getScheduler().cancelTasks(this);
- this.world = getServer().getWorld(getConfig().getString("world"));
- if (this.world != null )
- {
- this.minX = getConfig().getInt("min.x");
- this.minZ = getConfig().getInt("min.z");
- this.maxX = getConfig().getInt("max.x");
- this.maxZ = getConfig().getInt("max.z");
- this.maxUnique = getConfig().getInt("max-unique-items");
- this.contents = new ArrayList();
- for (String s : getConfig().getConfigurationSection("contents").getKeys(false))
- {
- Material mat = Material.matchMaterial(s);
- if (mat != null)
- {
- int amount = getConfig().getInt("contents." + s + ".amount", 1);
- int data = getConfig().getInt("contents." + s + ".data", 0);
- ItemStack stack = new ItemStack(mat, amount, (short)data);
- this.contents.add(stack);
- }
- else
- {
- getLogger().severe("Could not get Material from " + s);
- }
- }
- new BukkitRunnable()
- {
- public void run()
- {
- LootChests.this.spawnChest();
- }
- }.runTaskTimer(this, 0L, getConfig().getInt("delay") * 20);
- }
- else
- {
- getLogger().severe(getConfig().getString("world") + " is not a world!");
- }
- }
- @EventHandler
- public void onInventoryOpen(InventoryOpenEvent e)
- {
- if (e.getInventory().getName().equalsIgnoreCase("LootChest"))
- {
- Player p = (Player)e.getPlayer();
- String message = getConfig().getString("chest-found");
- ChatColor.translateAlternateColorCodes('&', message);
- message = message.replaceAll("%p", p.getName());
- Bukkit.broadcastMessage(message);
- }
- }
- public boolean onCommand(CommandSender cs, Command c, String l, String[] args)
- {
- if (args.length == 0) {
- cs.sendMessage(prefix);
- } else if (args.length == 1) {
- if (args[0].equalsIgnoreCase("reload"))
- {
- reloadConfig();
- getServer().getPluginManager().disablePlugin(this);
- getServer().getPluginManager().enablePlugin(this);
- cs.sendMessage(prefix + "Plugin reloaded!");
- }
- else if (args[0].equalsIgnoreCase("spawn"))
- {
- spawnChest();
- cs.sendMessage(prefix + "Chest spawned!");
- }
- }
- return true;
- }
- @SuppressWarnings("unchecked")
- public void spawnChest()
- {
- if (this.donePrevious)
- {
- this.donePrevious = false;
- Block block;
- do
- {
- int x = random.nextInt(this.maxX - this.minX) + this.minX;
- int z = random.nextInt(this.maxZ - this.minZ) + this.minZ;
- block = this.world.getHighestBlockAt(x, z);
- } while (!block.getRelative(BlockFace.DOWN).getType().isSolid());
- block.setType(Material.CHEST);
- Location loc = block.getLocation();
- Chest chest = (Chest)block.getState();
- if (this.contents.size() == this.maxUnique)
- {
- for (int i = 0; i < this.contents.size(); i++) {
- chest.getInventory().setItem(i, ((ItemStack)this.contents.get(i)).clone());
- }
- }
- else
- {
- @SuppressWarnings("rawtypes")
- List<ItemStack> localContents = new ArrayList(this.contents);
- for (int i = 0; i < this.maxUnique; i++) {
- do
- {
- ItemStack stack = ((ItemStack)localContents.get(random.nextInt(localContents.size()))).clone();
- if (!chest.getInventory().contains(stack.getType()))
- {
- chest.getInventory().setItem(i, stack);
- localContents.remove(stack);
- }
- } while (chest.getInventory().getItem(i) == null);
- }
- }
- String message = getConfig().getString("chest-spawned");
- message = message.replace("%x", String.valueOf(loc.getBlockX())).replace("%y", String.valueOf(loc.getBlockY())).replace("%z", String.valueOf(loc.getBlockZ()));
- ChatColor.translateAlternateColorCodes('&', message);
- Bukkit.broadcastMessage(message);
- this.donePrevious = true;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment