Skip to content

Instantly share code, notes, and snippets.

@ScruffyRules
Created August 25, 2014 04:00
Show Gist options
  • Save ScruffyRules/a51957a9c03fdd187cf4 to your computer and use it in GitHub Desktop.
Save ScruffyRules/a51957a9c03fdd187cf4 to your computer and use it in GitHub Desktop.
package com.scruffyrules.lootcrate;
import java.util.Random;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
import com.scruffyrules.lootcrate.util.Utility;
public class LootCrate extends JavaPlugin {
// TODO Random Items
// TODO Store in config
// TODO
// TODO
// TODO
// TODO
// TODO
public static FileConfiguration config;
public void onDisable() {
config = null;
}
public void onEnable() {
saveDefaultConfig();
config = getConfig();
getServer().getPluginManager().registerEvents(new LootCrateListener(), this);
getCommand("lootcrate");
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!(sender instanceof Player)) {sender.sendMessage("Only a player can do this!");return true;}
Player player = (Player) sender;
ItemStack LootCrateItem = new ItemStack(Material.CHEST, 1);
Utility.nameItem(LootCrateItem, ChatColor.DARK_PURPLE + "LootCrate");
player.getInventory().addItem(LootCrateItem);
return true;
}
public static String getRandomCrate() {
String hi = "";
for (String str : config.getKeys(true)) {
hi += str + ";";
}
return hi.split(";")[new Random().nextInt(hi.split(";").length)];
}
public static ItemStack getItemFromCustomString(String string) {
String[] split = string.split(",");
String item = split[0];
int min = Integer.parseInt(split[1]);
int max = Integer.parseInt(split[2]);
int amount = new Random().nextInt((max - min) + 1) + min;
if (amount == 0) {
return new ItemStack(Material.AIR);
}
return new ItemStack(Material.getMaterial(item), amount);
}
public static int getRandomInventorySlot(Inventory inventory) {
int random = new Random().nextInt(inventory.getSize());
if (inventory.getItem(random) != null) {
getRandomInventorySlot(inventory);
}
return random;
}
public static void setCrateInventory(Inventory inventory) {
for (String string : config.getString(getRandomCrate()).substring(1).split("-")) {
inventory.setItem(getRandomInventorySlot(inventory), getItemFromCustomString(string.trim()));
}
}
}
package com.scruffyrules.lootcrate;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.metadata.FixedMetadataValue;
public class LootCrateListener implements Listener {
@EventHandler
public void openCrate(PlayerInteractEvent event) {
if (!event.getAction().equals(Action.RIGHT_CLICK_BLOCK)) return;
if (!event.getClickedBlock().hasMetadata("LootCrate")) return;
if (event.getClickedBlock().hasMetadata("LootCrate-Active")) return;
if (event.getPlayer().isSneaking()) return;
event.getClickedBlock().setMetadata("LootCrate-Active", new FixedMetadataValue(LootCrate.getPlugin(LootCrate.class), true));
Player player = event.getPlayer();
player.setMetadata("LootCrate-Block", new FixedMetadataValue(LootCrate.getPlugin(LootCrate.class), event.getClickedBlock().getLocation()));
Inventory inventory = Bukkit.createInventory(player, InventoryType.CHEST, ChatColor.DARK_PURPLE + "LootCrate");
LootCrate.setCrateInventory(inventory);
player.openInventory(inventory);
}
@EventHandler
public void closeCrate(InventoryCloseEvent event) {
if (event.getInventory().getTitle() == null) return;
if (!event.getInventory().getTitle().equals(ChatColor.DARK_PURPLE + "LootCrate")) return;
if (!event.getPlayer().hasMetadata("LootCrate-Block")) return;
Block block = Bukkit.getWorld("world").getBlockAt((Location)event.getPlayer().getMetadata("LootCrate-Block").get(0).value());
block.removeMetadata("LootCrate-Active", LootCrate.getPlugin(LootCrate.class));
block.setType(Material.AIR);
event.getPlayer().removeMetadata("LootCrate-Block", LootCrate.getPlugin(LootCrate.class));
}
@SuppressWarnings("deprecation")
@EventHandler
public void placeCrate(BlockPlaceEvent event) {
if (event.getItemInHand().getItemMeta().getDisplayName() == null) return;
if (!event.getItemInHand().getItemMeta().getDisplayName().equals(ChatColor.DARK_PURPLE + "LootCrate")) return;
event.getBlock().setType(Material.PISTON_BASE);
event.getBlock().setData((byte) 7);
event.getBlock().setMetadata("LootCrate", new FixedMetadataValue(LootCrate.getPlugin(LootCrate.class), true));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment