Untitled
unknown
plain_text
2 years ago
25 kB
6
Indexable
package org.lifestealsmp.itemskinner;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.persistence.PersistentDataType;
import org.bukkit.plugin.java.JavaPlugin;
public class main extends JavaPlugin implements Listener{
private FileConfiguration data;
private File dfile;
private FileConfiguration furnitures;
private File ffile;
private FileConfiguration hats;
private File hfile;
private FileConfiguration armors;
private File afile;
private FileConfiguration tools;
private File tfile;
public void onEnable() {
Bukkit.getServer().getPluginManager().registerEvents(this, this);
saveDefaultConfig();
setupFiles();
}
public void setupFiles() {
// data.yml setup
dfile = new File(this.getDataFolder(), "data.yml");
setupFile(dfile);
data = YamlConfiguration.loadConfiguration(dfile);
// furnitures.yml setup
ffile = new File(this.getDataFolder(), "furnitures.yml");
setupFile(ffile);
furnitures = YamlConfiguration.loadConfiguration(ffile);
// hats.yml setup
hfile = new File(this.getDataFolder(), "hats.yml");
setupFile(hfile);
hats = YamlConfiguration.loadConfiguration(hfile);
// armors.yml setup
afile = new File(this.getDataFolder(), "armors.yml");
setupFile(afile);
armors = YamlConfiguration.loadConfiguration(afile);
// tools.yml setup
tfile = new File(this.getDataFolder(), "tools.yml");
setupFile(tfile);
tools = YamlConfiguration.loadConfiguration(tfile);
}
public void setupFile(File file) {
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
Bukkit.getServer().getLogger().severe(ChatColor.RED + "Could not create " + file.getName() + "!");
}
}
}
public FileConfiguration getData() {
return data;
}
public FileConfiguration getFurnitures() {
return furnitures;
}
public FileConfiguration getHats() {
return hats;
}
public FileConfiguration getArmors() {
return armors;
}
public FileConfiguration getTools() {
return tools;
}
public void saveData() {
saveFile(data, dfile);
}
public void saveFurnitures() {
saveFile(furnitures, ffile);
}
public void saveHats() {
saveFile(hats, hfile);
}
public void saveArmors() {
saveFile(armors, afile);
}
public void saveTools() {
saveFile(tools, tfile);
}
public void saveFile(FileConfiguration config, File file) {
try {
config.save(file);
} catch (IOException e) {
Bukkit.getServer().getLogger().severe(ChatColor.RED + "Could not save " + file.getName() + "!");
}
}
public void reloadData() {
data = YamlConfiguration.loadConfiguration(dfile);
}
public void reloadFurnitures() {
furnitures = YamlConfiguration.loadConfiguration(ffile);
}
public void reloadHats() {
hats = YamlConfiguration.loadConfiguration(hfile);
}
public void reloadArmors() {
armors = YamlConfiguration.loadConfiguration(afile);
}
public void reloadTools() {
tools = YamlConfiguration.loadConfiguration(tfile);
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if(cmd.getName().equalsIgnoreCase("skin") || cmd.getName().equalsIgnoreCase("skins")) {
if (sender instanceof Player) {
Player player = (Player) sender;
SkinStationInventory(player);
} else {
sender.sendMessage("This command can only be run by a player!");
}
}
return false;
}
public void SkinStationInventory(Player player) {
Inventory inv = Bukkit.createInventory(null, 27, "Skin Station");
ItemStack blank = new ItemStack(Material.BLACK_STAINED_GLASS_PANE);
// Fill empty slots with the blank item
for (int i = 0; i < inv.getSize(); i++) {
if (inv.getItem(i) == null) {
inv.setItem(i, blank);
}
}
// Create the Furniture item
ItemStack furniture = new ItemStack(Material.PAPER);
ItemMeta furnitureMeta = furniture.getItemMeta();
furnitureMeta.setDisplayName("Furniture");
furnitureMeta.setCustomModelData(10029);
furnitureMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
furniture.setItemMeta(furnitureMeta);
// Create the Hats item
ItemStack hats = new ItemStack(Material.LEATHER_HELMET);
ItemMeta hatsMeta = hats.getItemMeta();
hatsMeta.setDisplayName("Hats");
hatsMeta.setCustomModelData(10005);
hatsMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
hats.setItemMeta(hatsMeta);
// Create the Armor item
ItemStack armor = new ItemStack(Material.LEATHER_CHESTPLATE);
ItemMeta armorMeta = armor.getItemMeta();
armorMeta.setDisplayName("Armor");
armorMeta.setCustomModelData(10121);
armorMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
armor.setItemMeta(armorMeta);
// Create the Tools item
ItemStack tools = new ItemStack(Material.DIAMOND_SWORD);
ItemMeta toolsMeta = tools.getItemMeta();
toolsMeta.setDisplayName("Tools");
toolsMeta.addEnchant(Enchantment.DURABILITY, 1, true);
toolsMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
toolsMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
tools.setItemMeta(toolsMeta);
// Add the items to the specified slots (0-based index)
inv.setItem(10, furniture); // Slot 11
inv.setItem(12, hats); // Slot 13
inv.setItem(14, armor); // Slot 15
inv.setItem(16, tools); // Slot 17
player.openInventory(inv);
}
private Map<UUID, Integer> currentPages = new HashMap<>();
private Map<UUID, Map<String, Long>> lastFurnitureClaim = new HashMap<>();
public void FurnitureInventory(Player player, int page) {
Inventory inv = Bukkit.createInventory(null, 27, "Furniture Skins");
ItemStack blank = new ItemStack(Material.BLACK_STAINED_GLASS_PANE);
ItemStack backButton = new ItemStack(Material.RED_WOOL);
ItemMeta backMeta = backButton.getItemMeta();
backMeta.setDisplayName("Back Page");
backButton.setItemMeta(backMeta);
ItemStack forwardButton = new ItemStack(Material.GREEN_WOOL);
ItemMeta forwardMeta = forwardButton.getItemMeta();
forwardMeta.setDisplayName("Next Page");
forwardButton.setItemMeta(forwardMeta);
inv.setItem(21, backButton);
inv.setItem(23, forwardButton);
String uuid = player.getUniqueId().toString();
FileConfiguration dataConfig = YamlConfiguration.loadConfiguration(new File(getDataFolder(), "data.yml"));
List<String> playerFurnitures = dataConfig.contains(uuid) ? dataConfig.getStringList(uuid + ".Furnitures") : new ArrayList<>();
int startIndex = page * 18;
int endIndex = Math.min(startIndex + 18, playerFurnitures.size());
Map<String, Long> playerFurnitureCooldowns = lastFurnitureClaim.getOrDefault(player.getUniqueId(), new HashMap<>());
for (int i = startIndex; i < endIndex; i++) {
String furniture = playerFurnitures.get(i);
if (getFurnitures().contains(furniture)) {
String itemType = getFurnitures().getString(furniture + ".Item_Type");
int customModelData = getFurnitures().getInt(furniture + ".Custom Model Data");
String displayName = getFurnitures().getString(furniture + ".Display_Name");
int cooldownMinutes = getFurnitures().getInt(furniture + ".Cooldown");
ItemStack itemStack = new ItemStack(Material.valueOf(itemType));
ItemMeta meta = itemStack.getItemMeta();
meta.setCustomModelData(customModelData);
meta.setDisplayName(displayName);
long lastClaimTime = playerFurnitureCooldowns.getOrDefault(furniture, 0L);
long remainingCooldownMillis = (cooldownMinutes * 60 * 1000) - (System.currentTimeMillis() - lastClaimTime);
if (remainingCooldownMillis > 0) {
long remainingMinutes = TimeUnit.MILLISECONDS.toMinutes(remainingCooldownMillis);
List<String> lore = new ArrayList<>();
lore.add("Cooldown: " + remainingMinutes + " mins");
meta.setLore(lore);
}
meta.getPersistentDataContainer().set(new NamespacedKey(this, "furnitureKey"), PersistentDataType.STRING, furniture);
itemStack.setItemMeta(meta);
inv.addItem(itemStack);
}
}
for (int i = 0; i < inv.getSize(); i++) {
if (inv.getItem(i) == null) {
inv.setItem(i, blank);
}
}
player.openInventory(inv);
}
private Map<UUID, Integer> hatCurrentPages = new HashMap<>();
private Map<UUID, Map<String, Long>> lastHatClaim = new HashMap<>();
public void HatsInventory(Player player, int page) {
Inventory inv = Bukkit.createInventory(null, 27, "Hat Skins");
ItemStack blank = new ItemStack(Material.BLACK_STAINED_GLASS_PANE);
ItemStack backButton = new ItemStack(Material.RED_WOOL);
ItemMeta backMeta = backButton.getItemMeta();
backMeta.setDisplayName("Back Page");
backButton.setItemMeta(backMeta);
ItemStack forwardButton = new ItemStack(Material.GREEN_WOOL);
ItemMeta forwardMeta = forwardButton.getItemMeta();
forwardMeta.setDisplayName("Next Page");
forwardButton.setItemMeta(forwardMeta);
inv.setItem(21, backButton);
inv.setItem(23, forwardButton);
String uuid = player.getUniqueId().toString();
FileConfiguration dataConfig = YamlConfiguration.loadConfiguration(new File(getDataFolder(), "data.yml"));
List<String> playerHats = dataConfig.contains(uuid) ? dataConfig.getStringList(uuid + ".Hats") : new ArrayList<>();
int startIndex = page * 18;
int endIndex = Math.min(startIndex + 18, playerHats.size());
Map<String, Long> playerHatCooldowns = lastHatClaim.getOrDefault(player.getUniqueId(), new HashMap<>());
for (int i = startIndex; i < endIndex; i++) {
String hat = playerHats.get(i);
if (getHats().contains(hat)) {
String itemType = getHats().getString(hat + ".Item_Type");
int customModelData = getHats().getInt(hat + ".Custom Model Data");
String displayName = getHats().getString(hat + ".Display_Name");
int cooldownMinutes = getHats().getInt(hat + ".Cooldown");
ItemStack itemStack = new ItemStack(Material.valueOf(itemType));
ItemMeta meta = itemStack.getItemMeta();
meta.setCustomModelData(customModelData);
meta.setDisplayName(displayName);
long lastClaimTime = playerHatCooldowns.getOrDefault(hat, 0L);
long remainingCooldownMillis = (cooldownMinutes * 60 * 1000) - (System.currentTimeMillis() - lastClaimTime);
if (remainingCooldownMillis > 0) {
long remainingMinutes = TimeUnit.MILLISECONDS.toMinutes(remainingCooldownMillis);
List<String> lore = new ArrayList<>();
lore.add("Cooldown: " + remainingMinutes + " mins");
meta.setLore(lore);
}
meta.getPersistentDataContainer().set(new NamespacedKey(this, "hatKey"), PersistentDataType.STRING, hat);
itemStack.setItemMeta(meta);
inv.addItem(itemStack);
}
}
for (int i = 0; i < inv.getSize(); i++) {
if (inv.getItem(i) == null) {
inv.setItem(i, blank);
}
}
player.openInventory(inv);
}
public void ArmorInventory(Player player) {
Inventory inv = Bukkit.createInventory(null, 27, "Armor Skins");
ItemStack blank = new ItemStack(Material.BLACK_STAINED_GLASS_PANE);
// Fill empty slots with the blank item
for (int i = 0; i < inv.getSize(); i++) {
if (inv.getItem(i) == null) {
inv.setItem(i, blank);
}
}
ItemStack backButton = new ItemStack(Material.RED_WOOL);
ItemMeta backMeta = backButton.getItemMeta();
backMeta.setDisplayName("Back");
backButton.setItemMeta(backMeta);
inv.setItem(21, backButton);
player.openInventory(inv);
}
public void ToolInventory(Player player) {
Inventory inv = Bukkit.createInventory(null, 27, "Tool Skins");
ItemStack blank = new ItemStack(Material.BLACK_STAINED_GLASS_PANE);
// Fill empty slots with the blank item
for (int i = 0; i < inv.getSize(); i++) {
if (inv.getItem(i) == null) {
inv.setItem(i, blank);
}
}
ItemStack backButton = new ItemStack(Material.RED_WOOL);
ItemMeta backMeta = backButton.getItemMeta();
backMeta.setDisplayName("Back");
backButton.setItemMeta(backMeta);
inv.setItem(21, backButton);
player.openInventory(inv);
}
public void ArmorCategoriesInventory(Player player) {
Inventory inv = Bukkit.createInventory(null, 27, "Armor Categories");
ItemStack blank = new ItemStack(Material.BLACK_STAINED_GLASS_PANE);
// Fill empty slots with the blank item
for (int i = 0; i < inv.getSize(); i++) {
if (inv.getItem(i) == null) {
inv.setItem(i, blank);
}
}
// Creating the Diamond Helmet item
ItemStack helmet = new ItemStack(Material.DIAMOND_HELMET);
ItemMeta helmetMeta = helmet.getItemMeta();
helmetMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
helmet.setItemMeta(helmetMeta);
// Creating the Diamond Chestplate item
ItemStack chestplate = new ItemStack(Material.DIAMOND_CHESTPLATE);
ItemMeta chestplateMeta = chestplate.getItemMeta();
chestplateMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
chestplate.setItemMeta(chestplateMeta);
// Creating the Diamond Leggings item
ItemStack leggings = new ItemStack(Material.DIAMOND_LEGGINGS);
ItemMeta leggingsMeta = leggings.getItemMeta();
leggingsMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
leggings.setItemMeta(leggingsMeta);
// Creating the Diamond Boots item
ItemStack boots = new ItemStack(Material.DIAMOND_BOOTS);
ItemMeta bootsMeta = boots.getItemMeta();
bootsMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
boots.setItemMeta(bootsMeta);
// Setting the items to the respective slots in the inventory
inv.setItem(10, helmet); // Slot 10 (0-based index)
inv.setItem(12, chestplate); // Slot 12 (0-based index)
inv.setItem(14, leggings); // Slot 14 (0-based index)
inv.setItem(16, boots); // Slot 16 (0-based index)
// Adding the back button
ItemStack backButton = new ItemStack(Material.RED_WOOL);
ItemMeta backMeta = backButton.getItemMeta();
backMeta.setDisplayName("Back");
backButton.setItemMeta(backMeta);
inv.setItem(22, backButton); // Slot 21 (0-based index)
player.openInventory(inv);
}
public void ToolCategoriesInventory(Player player) {
Inventory inv = Bukkit.createInventory(null, 27, "Tool Categories");
ItemStack blank = new ItemStack(Material.BLACK_STAINED_GLASS_PANE);
// Fill empty slots with the blank item
for (int i = 0; i < inv.getSize(); i++) {
if (inv.getItem(i) == null) {
inv.setItem(i, blank);
}
}
// Creating the Diamond Pickaxe item
ItemStack pickaxe = new ItemStack(Material.DIAMOND_PICKAXE);
ItemMeta pickaxeMeta = pickaxe.getItemMeta();
pickaxeMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
pickaxe.setItemMeta(pickaxeMeta);
// Creating the Diamond Sword item
ItemStack sword = new ItemStack(Material.DIAMOND_SWORD);
ItemMeta swordMeta = sword.getItemMeta();
swordMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
sword.setItemMeta(swordMeta);
// Creating the Diamond Axe item
ItemStack axe = new ItemStack(Material.DIAMOND_AXE);
ItemMeta axeMeta = axe.getItemMeta();
axeMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
axe.setItemMeta(axeMeta);
// Creating the Diamond Shovel item
ItemStack shovel = new ItemStack(Material.DIAMOND_SHOVEL);
ItemMeta shovelMeta = shovel.getItemMeta();
shovelMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
shovel.setItemMeta(shovelMeta);
// Setting the items to the respective slots in the inventory
inv.setItem(10, pickaxe); // Slot 10 (0-based index)
inv.setItem(12, sword); // Slot 12 (0-based index)
inv.setItem(14, axe); // Slot 14 (0-based index)
inv.setItem(16, shovel); // Slot 16 (0-based index)
// Adding the back button
ItemStack backButton = new ItemStack(Material.RED_WOOL);
ItemMeta backMeta = backButton.getItemMeta();
backMeta.setDisplayName("Back");
backButton.setItemMeta(backMeta);
inv.setItem(22, backButton); // Slot 21 (0-based index)
player.openInventory(inv);
}
@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
Player player = (Player) event.getWhoClicked();
if(event.getView().getTitle().startsWith("Skin Station")) {
event.setCancelled(true);
if(event.getSlot() == 10) {
FurnitureInventory(player, 0);
}
if(event.getSlot() == 12) {
HatsInventory(player, 0);
}
if(event.getSlot() == 14) {
ArmorCategoriesInventory(player);
}
if(event.getSlot() == 16) {
ToolCategoriesInventory(player);
}
}
if(event.getView().getTitle().startsWith("Furniture Skins")) {
event.setCancelled(true);
int currentPage = currentPages.getOrDefault(player.getUniqueId(), 0);
if(event.getSlot() == 21) {
if(currentPage > 0) {
FurnitureInventory(player, currentPage - 1);
currentPages.put(player.getUniqueId(), currentPage - 1);
} else {
SkinStationInventory(player); // You have this function elsewhere in your code.
}
} else if (event.getSlot() == 23) {
FurnitureInventory(player, currentPage + 1);
currentPages.put(player.getUniqueId(), currentPage + 1);
} else {
ItemStack clickedItem = event.getCurrentItem();
if (clickedItem != null && clickedItem.hasItemMeta()) {
NamespacedKey key = new NamespacedKey(this, "furnitureKey");
String furniture = clickedItem.getItemMeta().getPersistentDataContainer().get(key, PersistentDataType.STRING);
if (furniture != null) {
Map<String, Long> playerCooldowns = lastFurnitureClaim.getOrDefault(player.getUniqueId(), new HashMap<>());
long lastClaimTime = playerCooldowns.getOrDefault(furniture, 0L);
int cooldownMinutes = getFurnitures().getInt(furniture + ".Cooldown");
long remainingCooldownMillis = (cooldownMinutes * 60 * 1000) - (System.currentTimeMillis() - lastClaimTime);
if (remainingCooldownMillis <= 0) {
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "iagive " + player.getName() + " " + furniture + " 1");
playerCooldowns.put(furniture, System.currentTimeMillis());
lastFurnitureClaim.put(player.getUniqueId(), playerCooldowns);
// Refresh the inventory to display the cooldown lore.
FurnitureInventory(player, currentPage);
player.sendMessage(ChatColor.GREEN + "You've claimed " + ChatColor.BOLD + furniture + ChatColor.GREEN + "!");
} else {
player.sendMessage(ChatColor.RED + "This item is on cooldown. Please wait.");
}
}
}
}
}
if(event.getView().getTitle().startsWith("Hat Skins")) {
event.setCancelled(true);
int currentPage = hatCurrentPages.getOrDefault(player.getUniqueId(), 0);
if(event.getSlot() == 21) {
if(currentPage > 0) {
HatsInventory(player, currentPage - 1);
hatCurrentPages.put(player.getUniqueId(), currentPage - 1);
} else {
SkinStationInventory(player); // You have this function elsewhere in your code.
}
} else if (event.getSlot() == 23) {
HatsInventory(player, currentPage + 1);
hatCurrentPages.put(player.getUniqueId(), currentPage + 1);
} else {
ItemStack clickedItem = event.getCurrentItem();
if (clickedItem != null && clickedItem.hasItemMeta()) {
NamespacedKey key = new NamespacedKey(this, "hatKey");
String hat = clickedItem.getItemMeta().getPersistentDataContainer().get(key, PersistentDataType.STRING);
if (hat != null) {
Map<String, Long> playerCooldowns = lastHatClaim.getOrDefault(player.getUniqueId(), new HashMap<>());
long lastClaimTime = playerCooldowns.getOrDefault(hat, 0L);
int cooldownMinutes = getHats().getInt(hat + ".Cooldown");
long remainingCooldownMillis = (cooldownMinutes * 60 * 1000) - (System.currentTimeMillis() - lastClaimTime);
if (remainingCooldownMillis <= 0) {
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "iagive " + player.getName() + " " + hat + " 1");
playerCooldowns.put(hat, System.currentTimeMillis());
lastHatClaim.put(player.getUniqueId(), playerCooldowns);
// Refresh the inventory to display the cooldown lore.
HatsInventory(player, currentPage);
player.sendMessage(ChatColor.GREEN + "You've claimed " + ChatColor.BOLD + hat + ChatColor.GREEN + "!");
} else {
player.sendMessage(ChatColor.RED + "This item is on cooldown. Please wait.");
}
}
}
}
}
if(event.getView().getTitle().startsWith("Armor Skins")) {
event.setCancelled(true);
if(event.getSlot() == 21) {
SkinStationInventory(player);
}
}
if(event.getView().getTitle().startsWith("Tool Skins")) {
event.setCancelled(true);
if(event.getSlot() == 21) {
SkinStationInventory(player);
}
}
if(event.getView().getTitle().startsWith("Armor Categories")) {
event.setCancelled(true);
if(event.getSlot() == 22) {
SkinStationInventory(player);
}
}
if(event.getView().getTitle().startsWith("Tool Categories")) {
event.setCancelled(true);
if(event.getSlot() == 22) {
SkinStationInventory(player);
}
}
}
@EventHandler
public void onInventoryClose(InventoryCloseEvent event) {
if (event.getView().getTitle().startsWith("Furniture Skins")) {
currentPages.remove(event.getPlayer().getUniqueId());
}
}
}
Editor is loading...