223 lines
11 KiB
Java

package io.github.officereso;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.PotionMeta;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.potion.PotionData;
import org.bukkit.potion.PotionType;
import org.ipvp.canvas.Menu;
import org.ipvp.canvas.MenuFunctionListener;
import org.ipvp.canvas.slot.Slot;
import org.ipvp.canvas.type.ChestMenu;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class pvp extends JavaPlugin implements Listener {
private final FileConfiguration config = this.getConfig();
private HashMap<Integer, Kit> kits = configToKit();
private HashMap<Player, Menu> signMenus = new HashMap<>();
private HashMap<Player, PlayerSelectionWrapper> selectedKits = new HashMap<>();
Block signBlock;
@Override
public void onEnable() {
Bukkit.getPluginManager().registerEvents(new MenuFunctionListener(), this);
load();
this.saveDefaultConfig();
getServer().getPluginManager().registerEvents(this, this);
}
@Override
public void onDisable() {
getLogger().info("onDisable is called!");
}
@EventHandler
public void onClick(PlayerInteractEvent event) {
Menu menu;
Player player = event.getPlayer();
if (signMenus.get(player) == null) {
signMenus.put(player, ChestMenu.builder(6).title("PVP Selection Menu").build());
menu = signMenus.get(player);
PlayerSelectionWrapper selectionWrapper;
if (selectedKits.get(player) == null) { // Gets the selectionWrapper
selectionWrapper = new PlayerSelectionWrapper(player); // for the current player.
selectedKits.put(player, selectionWrapper); // Makes one if doesnt exist.
} else {
selectionWrapper = selectedKits.get(player);
}
for (Map.Entry<Integer, Kit> entryKit : kits.entrySet()) {
Kit kit = entryKit.getValue();
int slotPos = entryKit.getKey();
Slot slot = menu.getSlot(slotPos);
slot.setItem(kit.getInventoryItemList().get(0).getItemStack());
slotFunction(slot, kit, selectionWrapper, menu);
}
} else {
menu = signMenus.get(player);
}
menu.open(player);
}
public void slotFunction(Slot slot, Kit kit, PlayerSelectionWrapper selectionWrapper, Menu menu) {
slot.setClickHandler((player, info) -> {
if (kit.getType() == Kit.Type.KIT) {
if (selectionWrapper.getSelectedKit() != kit) {
for (Map.Entry<Integer, Kit> entryKit : kits.entrySet()) {
Kit updateKit = entryKit.getValue();
int slotPos = entryKit.getKey();
Slot updateSlot = menu.getSlot(slotPos);
selectionWrapper.setSelectedKit(kit);
if (selectionWrapper.getGreenSlots().get(slotPos) != null) {
updateSlot.setItem(new ItemStack(Material.GREEN_WOOL));
} else {
updateSlot.setItem(updateKit.getInventoryItemList().get(0).getItemStack());
}
}
}
}
if (kit.getType() == Kit.Type.HELMET)
System.out.println("ldkfsjld");
});
}
public void load() {
World world = Bukkit.getWorld("world");
String[] signPos = config.getString("sign_pos").split(" ");
signBlock = world.getBlockAt(Integer.parseInt(signPos[0]), Integer.parseInt(signPos[1]), Integer.parseInt(signPos[2]));
configToKit();
}
private HashMap<Integer, Kit> configToKit() {
HashMap<Integer, Kit> kits = new HashMap<>();
for (String root : config.getConfigurationSection("").getKeys(false)) {
if (root.equals("maps") || root.equals("sign_pos") || root.equals("giveSteak")) {
continue;
}
root = root + '.';
for (String kit : config.getConfigurationSection(root).getKeys(false)) {
String name = config.getString(root + kit + ".name");
Integer cost = (Integer) config.get(root + kit + ".cost");
Integer position = (Integer) config.get(root + kit + ".position");
String lore = config.getString(root + kit + ".lore");
if (name == null) {
getLogger().severe(root + ' ' + kit + " has invalid name");
return null;
} // Checks for bad names.
if (cost == null) {
getLogger().severe(root + ' ' + kit + " has invalid cost");
return null;
} // Checks for bad cost.
if (position == null) {
getLogger().severe(root + ' ' + kit + " has invalid position");
return null;
} // Checks for bad position.
List<InventoryItem> inventoryItemList = new ArrayList<>();
if (root.equals("kits.") || root.equals("additional.")) {
for (String item : config.getConfigurationSection(root + kit + ".items").getKeys(false)) {
Integer inventoryPos = (Integer) config.get(root + kit + ".items." + item + ".inventoryPos");
ItemStack itemStack = new ItemStack(
Material.valueOf(config.getString(root + kit + ".items." + item + ".material")), // Material located in config
(config.getInt(root + kit + ".items." + item + ".amount"))); // Amount of the item
String enchantments = config.getString(root + kit + ".items." + item + ".enchantments");
if (enchantments != null) {
List<String[]> list = new ArrayList<>();
for (String enchantment : enchantments.split(", ")) {
list.add(enchantment.split(" "));
}
ItemMeta itemMeta = itemStack.getItemMeta();
for (String[] enchantmentData : list) {
itemMeta.addEnchant(Enchantment.getByKey(NamespacedKey.minecraft(enchantmentData[0].toLowerCase())), Integer.parseInt(enchantmentData[1]), true);
itemStack.setItemMeta(itemMeta);
}
}
inventoryItemList.add(new InventoryItem(itemStack, inventoryPos));
}
Kit kitClass;
if (root.equals("kits.")) {
kitClass = new Kit(name, inventoryItemList, cost, position, lore, Kit.Type.KIT);
} else {
kitClass = new Kit(name, inventoryItemList, cost, position, lore, Kit.Type.ADDITIONAL);
}
kits.put(kitClass.getViewPosition(), kitClass);
}
if (root.equals("potions.")) {
for (String item : config.getConfigurationSection(root + kit + ".items").getKeys(false)) {
Integer inventoryPos = (Integer) config.get(root + kit + ".items." + item + ".inventoryPos");
ItemStack itemStack = new ItemStack(
Material.valueOf(config.getString(root + kit + ".items." + item + ".material")), // Material located in config
(config.getInt(root + kit + ".items." + item + ".amount"))); // Amount of the item
PotionMeta potionMeta = (PotionMeta) itemStack.getItemMeta();
potionMeta.setBasePotionData(new PotionData(
PotionType.valueOf(config.getString(root + kit + ".items." + item + ".basePotionData")),
config.getBoolean(root + kit + ".items." + item + ".extended"),
config.getBoolean(root + kit + ".items." + item + ".upgraded")));
itemStack.setItemMeta(potionMeta);
inventoryItemList.add(new InventoryItem(itemStack, inventoryPos));
}
Kit kitClass = new Kit(name, inventoryItemList, cost, position, lore, Kit.Type.POTION);
kits.put(kitClass.getViewPosition(), kitClass);
}
if (root.equals("armor.")) {
String type = config.getString(root + kit + ".type");
for (String item : config.getConfigurationSection(root + kit + ".items").getKeys(false)) {
Integer inventoryPos = (Integer) config.get(root + kit + ".items." + item + ".inventoryPos");
ItemStack itemStack = new ItemStack(
Material.valueOf(config.getString(root + kit + ".items." + item + ".material")), // Material located in config
(config.getInt(root + kit + ".items." + item + ".amount"))); // Amount of the item
String enchantments = config.getString(root + kit + ".items." + item + ".enchantments");
if (enchantments != null) {
List<String[]> list = new ArrayList<>();
for (String enchantment : enchantments.split(", ")) {
list.add(enchantment.split(" "));
}
ItemMeta itemMeta = itemStack.getItemMeta();
for (String[] enchantmentData : list) {
itemMeta.addEnchant(Enchantment.getByKey(NamespacedKey.minecraft(enchantmentData[0].toLowerCase())), Integer.parseInt(enchantmentData[1]), true);
itemStack.setItemMeta(itemMeta);
}
}
inventoryItemList.add(new InventoryItem(itemStack, inventoryPos));
}
Kit kitClass = new Kit(name, inventoryItemList, cost, position, lore, Kit.Type.valueOf(type));
kits.put(kitClass.getViewPosition(), kitClass);
}
}
}
return kits;
}
}