FabledSkyBlock/src/main/java/com/craftaro/skyblock/menus/Ownership.java

275 lines
14 KiB
Java

package com.craftaro.skyblock.menus;
import com.craftaro.core.gui.AnvilGui;
import com.craftaro.third_party.com.cryptomorin.xseries.SkullUtils;
import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial;
import com.craftaro.third_party.com.cryptomorin.xseries.XSound;
import com.craftaro.core.utils.ItemUtils;
import com.craftaro.skyblock.SkyBlock;
import com.craftaro.skyblock.island.Island;
import com.craftaro.skyblock.island.IslandManager;
import com.craftaro.skyblock.island.IslandRole;
import com.craftaro.skyblock.message.MessageManager;
import com.craftaro.skyblock.placeholder.Placeholder;
import com.craftaro.skyblock.playerdata.PlayerData;
import com.craftaro.skyblock.playerdata.PlayerDataManager;
import com.craftaro.skyblock.sound.SoundManager;
import com.craftaro.skyblock.utils.item.nInventoryUtil;
import com.craftaro.skyblock.utils.player.OfflinePlayer;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.UUID;
public class Ownership {
private static Ownership instance;
public static Ownership getInstance() {
if (instance == null) {
instance = new Ownership();
}
return instance;
}
public void open(Player player) {
SkyBlock plugin = SkyBlock.getPlugin(SkyBlock.class);
PlayerDataManager playerDataManager = plugin.getPlayerDataManager();
MessageManager messageManager = plugin.getMessageManager();
IslandManager islandManager = plugin.getIslandManager();
SoundManager soundManager = plugin.getSoundManager();
if (playerDataManager.hasPlayerData(player)) {
FileConfiguration configLoad = plugin.getLanguage();
nInventoryUtil nInv = new nInventoryUtil(player, event -> {
if (playerDataManager.hasPlayerData(player)) {
PlayerData playerData = plugin.getPlayerDataManager().getPlayerData(player);
Island island = islandManager.getIsland(player);
if (island == null) {
messageManager.sendMessage(player,
configLoad.getString("Command.Island.Ownership.Owner.Message"));
soundManager.playSound(player, XSound.BLOCK_ANVIL_LAND);
return;
} else if (!island.hasRole(IslandRole.OWNER, player.getUniqueId())) {
messageManager.sendMessage(player,
configLoad.getString("Command.Island.Ownership.Role.Message"));
soundManager.playSound(player, XSound.ENTITY_VILLAGER_NO);
return;
}
if (playerData.getType() == null) {
playerData.setType(Visibility.HIDDEN);
}
ItemStack is = event.getItem();
if ((XMaterial.OAK_FENCE_GATE.isSimilar(is)) && (is.hasItemMeta())
&& (is.getItemMeta().getDisplayName().equals(ChatColor.translateAlternateColorCodes('&',
configLoad.getString("Menu.Ownership.Item.Exit.Displayname"))))) {
soundManager.playSound(player, XSound.BLOCK_CHEST_CLOSE);
} else if ((XMaterial.PLAYER_HEAD.isSimilar(is)) && (is.hasItemMeta())
&& (is.getItemMeta().getDisplayName().equals(ChatColor.translateAlternateColorCodes('&',
configLoad.getString("Menu.Ownership.Item.Original.Displayname"))))) {
soundManager.playSound(player, XSound.ENTITY_VILLAGER_YES);
event.setWillClose(false);
event.setWillDestroy(false);
} else if ((XMaterial.BLACK_STAINED_GLASS_PANE.isSimilar(is))
&& (is.hasItemMeta())
&& (is.getItemMeta().getDisplayName().equals(ChatColor.translateAlternateColorCodes('&',
configLoad.getString("Menu.Ownership.Item.Barrier.Displayname"))))) {
soundManager.playSound(player, XSound.BLOCK_GLASS_BREAK);
event.setWillClose(false);
event.setWillDestroy(false);
} else if ((XMaterial.WRITABLE_BOOK.isSimilar(is)) && (is.hasItemMeta())
&& (is.getItemMeta().getDisplayName().equals(ChatColor.translateAlternateColorCodes('&',
configLoad.getString("Menu.Ownership.Item.Assign.Displayname"))))) {
soundManager.playSound(player, XSound.BLOCK_WOODEN_BUTTON_CLICK_ON);
Bukkit.getServer().getScheduler().runTaskLater(plugin, () -> {
AnvilGui gui = new AnvilGui(player);
gui.setAction(event1 -> {
if (playerDataManager.hasPlayerData(player)) {
Island island1 = islandManager.getIsland(player);
if (island1 == null) {
messageManager.sendMessage(player, configLoad
.getString("Command.Island.Ownership.Owner.Message"));
soundManager.playSound(player, XSound.BLOCK_ANVIL_LAND);
return;
} else if (!island1.hasRole(IslandRole.OWNER, player.getUniqueId())) {
messageManager.sendMessage(player, configLoad
.getString("Command.Island.Ownership.Role.Message"));
soundManager.playSound(player, XSound.ENTITY_VILLAGER_NO);
return;
}
Bukkit.getScheduler().runTask(plugin, () -> Bukkit.getServer().dispatchCommand(player,
"island ownership " + gui.getInputText()));
}
player.closeInventory();
});
ItemStack is1 = new ItemStack(Material.NAME_TAG);
ItemMeta im = is1.getItemMeta();
im.setDisplayName(configLoad.getString("Menu.Ownership.Item.Assign.Word.Enter"));
is1.setItemMeta(im);
gui.setInput(is);
plugin.getGuiManager().showGUI(player, gui);
}, 1L);
} else if ((XMaterial.MAP.isSimilar(is)) && (is.hasItemMeta())
&& (is.getItemMeta().getDisplayName().equals(ChatColor.translateAlternateColorCodes('&',
configLoad.getString("Menu.Ownership.Item.Password.Displayname"))))) {
if (island.hasPassword()) {
if (event.getClick() == ClickType.MIDDLE) {
Visibility visibility = (Visibility) playerData.getType();
if (visibility == Visibility.HIDDEN) {
playerData.setType(Visibility.VISIBLE);
} else {
playerData.setType(Visibility.HIDDEN);
}
soundManager.playSound(player, XSound.BLOCK_WOODEN_BUTTON_CLICK_ON);
Bukkit.getServer().getScheduler().runTaskLater(plugin, () -> open(player), 1L);
return;
} else if (event.getClick() == ClickType.RIGHT) {
island.setPassword(null);
soundManager.playSound(player, XSound.ENTITY_GENERIC_EXPLODE);
Bukkit.getServer().getScheduler().runTaskLater(plugin, () -> open(player), 1L);
return;
} else if (event.getClick() != ClickType.LEFT) {
event.setWillClose(false);
event.setWillDestroy(false);
return;
}
}
soundManager.playSound(player, XSound.BLOCK_WOODEN_BUTTON_CLICK_ON);
Bukkit.getServer().getScheduler().runTaskLater(plugin, () -> {
AnvilGui gui = new AnvilGui(player);
gui.setAction(event1 -> {
if (playerDataManager.hasPlayerData(player)) {
Island island12 = islandManager.getIsland(player);
if (island12 == null) {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Ownership.Owner.Message"));
soundManager.playSound(player, XSound.BLOCK_ANVIL_LAND);
return;
} else if (!island12.hasRole(IslandRole.OWNER, player.getUniqueId())) {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Ownership.Role.Message"));
soundManager.playSound(player, XSound.ENTITY_VILLAGER_NO);
return;
}
island12.setPassword(gui.getInputText().replace("&", "").replace(" ", ""));
soundManager.playSound(player, XSound.BLOCK_ANVIL_USE);
Bukkit.getServer().getScheduler()
.runTaskLater(plugin, () -> open(player), 1L);
}
player.closeInventory();
});
ItemStack is12 = new ItemStack(Material.NAME_TAG);
ItemMeta im = is12.getItemMeta();
im.setDisplayName(
configLoad.getString("Menu.Ownership.Item.Password.Hidden.Word.Enter"));
is12.setItemMeta(im);
gui.setInput(is);
plugin.getGuiManager().showGUI(player, gui);
}, 1L);
}
}
});
Island island = plugin.getIslandManager().getIsland(player);
UUID originalOwnerUUID = island.getOriginalOwnerUUID();
String originalOwnerName, ownershipPassword = island.getPassword();
String[] playerTexture;
org.bukkit.OfflinePlayer targetPlayer = Bukkit.getServer().getPlayer(island.getOriginalOwnerUUID());
if (targetPlayer == null) {
OfflinePlayer offlinePlayer = new OfflinePlayer(originalOwnerUUID);
originalOwnerName = offlinePlayer.getName();
playerTexture = offlinePlayer.getTexture();
} else {
originalOwnerName = targetPlayer.getName();
playerTexture = playerDataManager.getPlayerData(targetPlayer.getUniqueId()).getTexture();
}
ItemStack phead = SkullUtils.getSkull(targetPlayer.getUniqueId());
nInv.addItem(nInv.createItem(XMaterial.OAK_FENCE_GATE.parseItem(),
configLoad.getString("Menu.Ownership.Item.Exit.Displayname"), null, null, null, null), 0);
nInv.addItem(nInv.createItem(phead,
configLoad.getString("Menu.Ownership.Item.Original.Displayname"),
configLoad.getStringList("Menu.Ownership.Item.Original.Lore"),
new Placeholder[]{new Placeholder("%player", originalOwnerName)}, null, null), 1);
nInv.addItem(
nInv.createItem(XMaterial.BLACK_STAINED_GLASS_PANE.parseItem(),
configLoad.getString("Menu.Ownership.Item.Barrier.Displayname"), null, null, null, null),
2);
nInv.addItem(nInv.createItem(XMaterial.WRITABLE_BOOK.parseItem(),
configLoad.getString("Menu.Ownership.Item.Assign.Displayname"),
configLoad.getStringList("Menu.Ownership.Item.Assign.Lore"), null, null, null), 3);
if (island.hasPassword()) {
if (playerDataManager.getPlayerData(player).getType() == Ownership.Visibility.HIDDEN) {
nInv.addItem(nInv.createItem(XMaterial.MAP.parseItem(),
configLoad.getString("Menu.Ownership.Item.Password.Displayname"),
configLoad.getStringList("Menu.Ownership.Item.Password.Hidden.Lore"), null, null, null), 4);
} else {
nInv.addItem(
nInv.createItem(XMaterial.MAP.parseItem(),
configLoad.getString("Menu.Ownership.Item.Password.Displayname"),
configLoad.getStringList("Menu.Ownership.Item.Password.Visible.Lore"),
new Placeholder[]{new Placeholder("%password", ownershipPassword)}, null, null),
4);
}
} else {
nInv.addItem(
nInv.createItem(XMaterial.MAP.parseItem(),
configLoad.getString("Menu.Ownership.Item.Password.Displayname"),
configLoad.getStringList("Menu.Ownership.Item.Password.Unset.Lore"), null, null, null),
4);
}
nInv.setTitle(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Ownership.Title")));
nInv.setType(InventoryType.HOPPER);
Bukkit.getServer().getScheduler().runTask(plugin, nInv::open);
}
}
public enum Visibility {
VISIBLE, HIDDEN
}
}