diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..4788b4b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,113 @@
+# User-specific stuff
+.idea/
+
+*.iml
+*.ipr
+*.iws
+
+# IntelliJ
+out/
+
+# Compiled class file
+*.class
+
+# Log file
+*.log
+
+# BlueJ files
+*.ctxt
+
+# Package Files #
+*.jar
+*.war
+*.nar
+*.ear
+*.zip
+*.tar.gz
+*.rar
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+
+*~
+
+# temporary files which can be created if a process still has a handle open of a deleted file
+.fuse_hidden*
+
+# KDE directory preferences
+.directory
+
+# Linux trash folder which might appear on any partition or disk
+.Trash-*
+
+# .nfs files are created when an open file is removed but is still being accessed
+.nfs*
+
+# General
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+# Windows thumbnail cache files
+Thumbs.db
+Thumbs.db:encryptable
+ehthumbs.db
+ehthumbs_vista.db
+
+# Dump file
+*.stackdump
+
+# Folder config file
+[Dd]esktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Windows Installer files
+*.cab
+*.msi
+*.msix
+*.msm
+*.msp
+
+# Windows shortcuts
+*.lnk
+
+target/
+
+pom.xml.tag
+pom.xml.releaseBackup
+pom.xml.versionsBackup
+pom.xml.next
+
+release.properties
+dependency-reduced-pom.xml
+buildNumber.properties
+.mvn/timing.properties
+.mvn/wrapper/maven-wrapper.jar
+.flattened-pom.xml
+
+# Common working directory
+run/
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..115dd75
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,75 @@
+
+
+ 4.0.0
+
+ kz.hxncus.mc
+ Duels
+ 1.0-SNAPSHOT
+ jar
+
+ Duels
+
+ Дуэли для сервера MineSon
+
+ 1.8
+ UTF-8
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+
+ ${java.version}
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.2.4
+
+
+ package
+
+ shade
+
+
+ false
+
+
+
+
+
+
+
+ src/main/resources
+ true
+
+
+
+
+
+
+ papermc-repo
+ https://repo.papermc.io/repository/maven-public/
+
+
+ sonatype
+ https://oss.sonatype.org/content/groups/public/
+
+
+
+
+
+ com.destroystokyo.paper
+ paper-api
+ 1.16.5-R0.1-SNAPSHOT
+ provided
+
+
+
diff --git a/src/main/java/kz/hxncus/mc/duels/Duels.java b/src/main/java/kz/hxncus/mc/duels/Duels.java
new file mode 100644
index 0000000..c74957d
--- /dev/null
+++ b/src/main/java/kz/hxncus/mc/duels/Duels.java
@@ -0,0 +1,101 @@
+package kz.hxncus.mc.duels;
+
+import kz.hxncus.mc.duels.commands.DuelCommand;
+import kz.hxncus.mc.duels.commands.SpawnCommand;
+import kz.hxncus.mc.duels.methods.ItemStacker;
+import org.bukkit.Bukkit;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.attribute.Attribute;
+import org.bukkit.attribute.AttributeInstance;
+import org.bukkit.configuration.file.YamlConfiguration;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+import org.bukkit.plugin.java.JavaPlugin;
+import org.jetbrains.annotations.NotNull;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.*;
+
+public final class Duels extends JavaPlugin {
+ private static Duels instance;
+ private static final Map queues = new HashMap<>();
+ private final List arenas = new ArrayList<>();
+ private static final Map playerChecks = new HashMap<>();
+ private static File kitsFile;
+ private static YamlConfiguration kits;
+ @Override
+ public void onEnable() {
+ instance = this;
+ new SpawnCommand();
+ new DuelCommand();
+ arenas.add(new DuelsArenas("cowboy", new Location(Bukkit.getWorld("arenas"), 132.5, 28, -85.5), new Location(Bukkit.getWorld("arenas"), 134.5, 28, -38.5), true));
+ arenas.add(new DuelsArenas("dragon", new Location(Bukkit.getWorld("arenas"), 257.5, 27, -122.5), new Location(Bukkit.getWorld("arenas"), 257.5, 27, -0.5), true));
+ kitsFile = new File(getDataFolder(), "kits.yml");
+ kits = YamlConfiguration.loadConfiguration(kitsFile);
+ getServer().getPluginManager().registerEvents(new EventListener(), instance);
+ for(Player player : Bukkit.getOnlinePlayers()){
+ Map playerChecks = Duels.getPlayerChecks();
+ if(playerChecks.isEmpty() || playerChecks.get(player) == null){
+ playerChecks.put(player, new PlayerChecks(null));
+ }
+ Inventory inventory = player.getInventory();
+ inventory.clear();
+ player.teleport(new Location(Bukkit.getWorld("world"), 1422.5, 159, 1729.5));
+ player.setHealth(20);
+ player.setFoodLevel(20);
+
+ inventory.setItem(0, ItemStacker.setDisplayName(new ItemStack(Material.IRON_SWORD), "§fДуэли"));
+ player.updateInventory();
+
+ AttributeInstance attack_speed = player.getAttribute(Attribute.GENERIC_ATTACK_SPEED);
+ if(attack_speed != null) {
+ attack_speed.setBaseValue(attack_speed.getDefaultValue());
+ }
+ }
+ }
+
+ @Override
+ public void onDisable() {
+ try {
+ kits.save(kitsFile);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ public DuelsArenas getFreeArena() {
+ DuelsArenas[] duelsArenas = new DuelsArenas[arenas.size()];
+ int i = 0;
+ for (DuelsArenas arena : arenas) {
+ if (arena.isAvailable()) {
+ duelsArenas[i] = arena;
+ i++;
+ }
+ }
+ if(i > 0) {
+ return duelsArenas[new Random().nextInt(i)];
+ } else {
+ return null;
+ }
+ }
+ public static Map getQueues() { return queues; }
+ public static Map getPlayerChecks(){
+ return playerChecks;
+ }
+ public static void setKit(String key, Object value) { kits.set(key, value); }
+ public static Object getKit(String key) {
+ return kits.get(key);
+ }
+ public static Set getKitsKeys(boolean deep) { return kits.getKeys(deep); }
+ public static Map getValues(boolean deep) { return kits.getValues(deep); }
+ public void reloadConfig() {
+ kitsFile = new File(getDataFolder(), "kits.yml");
+ kits = YamlConfiguration.loadConfiguration(kitsFile);
+ }
+ public static Duels getInstance() {
+ return instance;
+ }
+}
diff --git a/src/main/java/kz/hxncus/mc/duels/DuelsArenas.java b/src/main/java/kz/hxncus/mc/duels/DuelsArenas.java
new file mode 100644
index 0000000..378790d
--- /dev/null
+++ b/src/main/java/kz/hxncus/mc/duels/DuelsArenas.java
@@ -0,0 +1,35 @@
+package kz.hxncus.mc.duels;
+
+import org.bukkit.Location;
+
+public class DuelsArenas {
+ private String name;
+ private Location spawnPoint1;
+ private Location spawnPoint2;
+ private boolean isAvailable;
+
+ public DuelsArenas(String name, Location spawnPoint1, Location spawnPoint2, boolean isAvailable) {
+ this.name = name;
+ this.spawnPoint1 = spawnPoint1;
+ this.spawnPoint2 = spawnPoint2;
+ this.isAvailable = isAvailable;
+ }
+
+ public String getName() { return name; }
+
+ public Location getSpawnPoint1() {
+ return spawnPoint1;
+ }
+
+ public Location getSpawnPoint2() {
+ return spawnPoint2;
+ }
+
+ public boolean isAvailable() {
+ return isAvailable;
+ }
+
+ public void setAvailable(boolean isAvailable) {
+ this.isAvailable = isAvailable;
+ }
+}
diff --git a/src/main/java/kz/hxncus/mc/duels/DuelsQueue.java b/src/main/java/kz/hxncus/mc/duels/DuelsQueue.java
new file mode 100644
index 0000000..81cabe7
--- /dev/null
+++ b/src/main/java/kz/hxncus/mc/duels/DuelsQueue.java
@@ -0,0 +1,147 @@
+package kz.hxncus.mc.duels;
+
+import kz.hxncus.mc.duels.kits.BowKit;
+import kz.hxncus.mc.duels.kits.DiamondKit;
+import kz.hxncus.mc.duels.kits.IronKit;
+import org.bukkit.Bukkit;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.attribute.Attribute;
+import org.bukkit.attribute.AttributeInstance;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.Queue;
+
+public class DuelsQueue {
+ private final Queue queue;
+ private final Map game;
+ private final String queueName;
+ private final int maxQueueSize;
+ private final int teamSize;
+
+ public DuelsQueue(String queueName, int maxQueueSize, int teamSize) {
+ this.queue = new LinkedList<>();
+ this.game = new HashMap<>();
+ this.queueName = queueName;
+ this.maxQueueSize = maxQueueSize;
+ this.teamSize = teamSize;
+ }
+ public void addToQueue(Player player) {
+ if(queue.size() >= maxQueueSize) {
+ player.sendMessage("The queue is full. Please wait for a match.");
+ return;
+ }
+ PlayerChecks checks = Duels.getPlayerChecks().get(player);
+ checks.setQueue(this);
+ queue.add(player);
+ player.sendMessage("You have been added to the queue.");
+ checkQueue();
+ }
+ public boolean isPlayerInQueue(Player player) {
+ return queue.contains(player);
+ }
+ public boolean isPlayerInGame(Player player) {
+ return game.containsKey(player);
+ }
+ public Map getGame(){
+ return game;
+ }
+ public void removeFromQueue(Player player) {
+ queue.remove(player);
+ PlayerChecks checks = Duels.getPlayerChecks().get(player);
+ checks.setQueue(null);
+ player.sendMessage("You have been removed from the queue.");
+ Inventory inventory = player.getInventory();
+ inventory.clear();
+
+ ItemStack slot0 = new ItemStack(Material.IRON_SWORD);
+ ItemMeta slot0meta = slot0.getItemMeta();
+ slot0meta.setDisplayName("Дуэли");
+ slot0.setItemMeta(slot0meta);
+ inventory.setItem(0, slot0);
+
+ player.updateInventory();
+ }
+ public void removeFromGame(Player player) {
+ game.remove(player);
+
+ player.teleport(new Location(Bukkit.getWorld("world"), 1422.5, 159, 1729.5));
+ player.setHealth(20);
+ player.setFoodLevel(20);
+
+ Inventory inventory = player.getInventory();
+ inventory.clear();
+ ItemStack slot0 = new ItemStack(Material.IRON_SWORD);
+ ItemMeta slot0meta = slot0.getItemMeta();
+ slot0meta.setDisplayName("Дуэли");
+ slot0.setItemMeta(slot0meta);
+ inventory.setItem(0, slot0);
+ player.updateInventory();
+ player.setMaximumNoDamageTicks(20);
+ AttributeInstance attack_speed = player.getAttribute(Attribute.GENERIC_ATTACK_SPEED);
+ if(attack_speed != null) {
+ attack_speed.setBaseValue(attack_speed.getDefaultValue());
+ }
+
+ player.sendMessage("You have been leaved from the game.");
+ }
+ private void checkQueue() {
+ if(queue.size() >= (teamSize * 2)) {
+ Player player1 = queue.poll();
+ Player player2 = queue.poll();
+ // start the duel between player1 and player2
+ startGame(player1, player2);
+ }
+ }
+ public void startGame(Player player1, Player player2){
+ DuelsArenas arena = Duels.getInstance().getFreeArena();
+ if (arena != null) {
+ arena.setAvailable(false);
+ doKit(arena, player1);
+ player1.teleport(arena.getSpawnPoint1());
+ doKit(arena, player2);
+ player2.teleport(arena.getSpawnPoint2());
+ } else {
+ removeFromQueue(player1);
+ removeFromQueue(player2);
+ player1.sendMessage("Все арены забиты игроками, подождите несколько минут");
+ player2.sendMessage("Все арены забиты игроками, подождите несколько минут");
+ }
+ Bukkit.getScheduler().runTaskLater(
+ Duels.getInstance(),
+ () -> {
+ removeFromGame(player1);
+ removeFromGame(player2);
+ },
+ 18000L
+ );
+ }
+ private void doKit(DuelsArenas arena, Player player){
+ if (player != null) {
+ player.updateInventory();
+ game.put(player, arena);
+ PlayerChecks playerChecks = Duels.getPlayerChecks().get(player);
+ playerChecks.setQueue(this);
+ if(queueName.contains("8")){
+ AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_ATTACK_SPEED);
+ if(attribute != null){
+ attribute.setBaseValue(1000);
+ }
+ }
+ if (queueName.contains("iron")) {
+ new IronKit().getKit(player);
+ } else if (queueName.contains("diamond")) {
+ new DiamondKit().getKit(player);
+ } else if (queueName.contains("bow")){
+ new BowKit().getKit(player);
+ }
+ }
+ }
+}
diff --git a/src/main/java/kz/hxncus/mc/duels/EventListener.java b/src/main/java/kz/hxncus/mc/duels/EventListener.java
new file mode 100644
index 0000000..12326f1
--- /dev/null
+++ b/src/main/java/kz/hxncus/mc/duels/EventListener.java
@@ -0,0 +1,372 @@
+package kz.hxncus.mc.duels;
+
+import kz.hxncus.mc.duels.inventory.BrowserInventory;
+import kz.hxncus.mc.duels.inventory.DuelsInventory;
+import kz.hxncus.mc.duels.inventory.KitCreatorInventory;
+import kz.hxncus.mc.duels.methods.ItemStacker;
+import org.bukkit.*;
+import org.bukkit.attribute.Attribute;
+import org.bukkit.attribute.AttributeInstance;
+import org.bukkit.block.Block;
+import org.bukkit.entity.Arrow;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.block.BlockBreakEvent;
+import org.bukkit.event.block.BlockPlaceEvent;
+import org.bukkit.event.entity.EntityDamageByEntityEvent;
+import org.bukkit.event.entity.EntityDamageEvent;
+import org.bukkit.event.entity.PlayerDeathEvent;
+import org.bukkit.event.inventory.InventoryClickEvent;
+import org.bukkit.event.inventory.InventoryType;
+import org.bukkit.event.player.*;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+import org.bukkit.projectiles.ProjectileSource;
+
+import java.util.Iterator;
+import java.util.Map;
+
+public class EventListener implements Listener {
+ @EventHandler
+ public void onPlayerJoin(PlayerJoinEvent event){
+ Player player = event.getPlayer();
+ Map playerChecks = Duels.getPlayerChecks();
+ if(playerChecks.isEmpty() || playerChecks.get(player) == null){
+ playerChecks.put(player, new PlayerChecks(null));
+ }
+ player.teleport(new Location(Bukkit.getWorld("world"), 1422.5, 159, 1729.5));
+ Inventory inventory = player.getInventory();
+ inventory.clear();
+
+ inventory.setItem(0, ItemStacker.setDisplayName(new ItemStack(Material.IRON_SWORD), "§fДуэли"));
+
+ player.updateInventory();
+ }
+ @EventHandler
+ public void onPlayerDamage(EntityDamageEvent event){
+ if(event.getEntity() instanceof Player){
+ Player player = (Player) event.getEntity();
+ if(event.getCause() == EntityDamageEvent.DamageCause.VOID && player.getLocation().getY() < 0) {
+ player.teleportAsync(new Location(Bukkit.getWorld("world"), 1422.5, 159, 1729.5));
+ }
+ if (player.getWorld() == Bukkit.getWorld("world")) {
+ event.setCancelled(true);
+ }
+ }
+ }
+ @EventHandler
+ public void onEntityDamageEntity(EntityDamageByEntityEvent event){
+ Entity entity = event.getEntity();
+ if(entity instanceof Player){
+ Player victim = (Player) entity;
+ if(event.getDamager() instanceof Arrow) {
+ Entity damager = event.getDamager();
+ ProjectileSource entityShooter = ((Arrow) damager).getShooter();
+ if(entityShooter instanceof Player) {
+ Player shooter = (Player) entityShooter;
+ double victimHp = victim.getHealth() - event.getFinalDamage();
+ shooter.sendMessage("§7[§aDuel§7] §fВы попали в §e" + victim.getName() + " §fу него осталось §c" + String.format("%.2f", victimHp) + "❤");
+ }
+ } else if(event.getDamager() instanceof Player) {
+ Player damager = (Player) event.getDamager();
+ AttributeInstance attack_speed = damager.getAttribute(Attribute.GENERIC_ATTACK_SPEED);
+ if(attack_speed != null && attack_speed.getValue() >= 999) {
+ if(event.getFinalDamage() >= 0.5) {
+ victim.setVelocity(damager.getLocation().getDirection().multiply(1.05).setY(0.3));
+ victim.setMaximumNoDamageTicks(15);
+ }
+ }
+ }
+ }
+ }
+ @EventHandler
+ public void onPlayerDrop(PlayerDropItemEvent event){
+ Player player = event.getPlayer();
+ World world = player.getWorld();
+ if (world == Bukkit.getWorld("world")){
+ event.setCancelled(true);
+ }
+ }
+ @EventHandler
+ public void onPlayerClickInventory(InventoryClickEvent event){
+ Player player = (Player) event.getWhoClicked();
+ ItemStack item = event.getCurrentItem();
+ if(item == null || item.getType() == Material.AIR) {
+ ItemStack cursor = event.getCursor();
+ if (cursor == null) {
+ return;
+ }
+ if (cursor.getItemMeta().getDisplayName().contains("§fДуэли")) {
+ event.setCursor(null);
+ }
+ return;
+ }
+ World world = player.getWorld();
+ if (!world.getName().equals("world")) {
+ return;
+ }
+ Inventory inventory = player.getInventory();
+ String inventoryName = event.getView().getTitle();
+ if (item.getItemMeta().getDisplayName().contains("§fАлмазник")) {
+ event.setCancelled(true);
+ Map queues = Duels.getQueues();
+ DuelsQueue duelsQueue = null;
+ if(inventoryName.contains("Дуэли 1.9+ пвп")) {
+ duelsQueue = queues.get("diamond9kit");
+ if(duelsQueue == null) {
+ duelsQueue = new DuelsQueue("diamond9kit", 16, 1);
+ queues.put("diamond9kit", duelsQueue);
+ }
+ }else if(inventoryName.contains("Дуэли 1.8 пвп")) {
+ duelsQueue = queues.get("diamond8kit");
+ if (duelsQueue == null) {
+ duelsQueue = new DuelsQueue("diamond8kit", 16, 1);
+ queues.put("diamond8kit", duelsQueue);
+ }
+ }
+ if(duelsQueue != null) {
+ if (!duelsQueue.isPlayerInQueue(player)) {
+ inventory.remove(player.getItemInHand());
+ inventory.setItem(8, new ItemStack(Material.REDSTONE));
+ duelsQueue.addToQueue(player);
+ }
+ }
+ if(inventoryName.contains("1.9+ Запрос игроку")){
+ Player getter = Bukkit.getPlayer(inventoryName.split(" ")[3]);
+ PlayerChecks playerChecks = Duels.getPlayerChecks().get(getter);
+ duelsQueue = queues.get("diamond9kit");
+ if (duelsQueue == null) {
+ duelsQueue = new DuelsQueue("diamond9kit", 16, 1);
+ playerChecks.addInvites(player, duelsQueue);
+ queues.put("diamond9kit", duelsQueue);
+ }
+ }else if(inventoryName.contains("1.8 Запрос игроку")){
+ Player getter = Bukkit.getPlayer(inventoryName.split(" ")[3]);
+ PlayerChecks playerChecks = Duels.getPlayerChecks().get(getter);
+ duelsQueue = queues.get("diamond8kit");
+ if (duelsQueue == null) {
+ duelsQueue = new DuelsQueue("diamond8kit", 16, 1);
+ playerChecks.addInvites(player, duelsQueue);
+ queues.put("diamond8kit", duelsQueue);
+ }
+ }
+ player.closeInventory();
+ } else if (item.getItemMeta().getDisplayName().contains("§fЖелезник")) {
+ event.setCancelled(true);
+ Map queues = Duels.getQueues();
+ DuelsQueue duelsQueue = null;
+ if(inventoryName.contains("Дуэли 1.9+ пвп")) {
+ duelsQueue = queues.get("iron9kit");
+ if (duelsQueue == null) {
+ duelsQueue = new DuelsQueue("iron9kit", 16, 1);
+ queues.put("iron9kit", duelsQueue);
+ }
+ }else if(inventoryName.contains("Дуэли 1.8 пвп")) {
+ duelsQueue = queues.get("iron8kit");
+ if (duelsQueue == null) {
+ duelsQueue = new DuelsQueue("iron8kit", 16, 1);
+ queues.put("iron8kit", duelsQueue);
+ }
+ }
+ if(duelsQueue != null) {
+ if (!duelsQueue.isPlayerInQueue(player)) {
+ inventory.remove(player.getItemInHand());
+ inventory.setItem(8, new ItemStack(Material.REDSTONE));
+ duelsQueue.addToQueue(player);
+ }
+ }
+ if(inventoryName.contains("1.9+ Запрос игроку")){
+ Player getter = Bukkit.getPlayer(inventoryName.split(" ")[3]);
+ PlayerChecks playerChecks = Duels.getPlayerChecks().get(getter);
+ duelsQueue = queues.get("iron8kit");
+ if (duelsQueue == null) {
+ duelsQueue = new DuelsQueue("iron9kit", 16, 1);
+ playerChecks.addInvites(player, duelsQueue);
+ queues.put("iron9kit", duelsQueue);
+ }
+ }else if(inventoryName.contains("1.8 Запрос игроку")){
+ Player getter = Bukkit.getPlayer(inventoryName.split(" ")[3]);
+ PlayerChecks playerChecks = Duels.getPlayerChecks().get(getter);
+ duelsQueue = queues.get("iron8kit");
+ if (duelsQueue == null) {
+ duelsQueue = new DuelsQueue("iron8kit", 16, 1);
+ playerChecks.addInvites(player, duelsQueue);
+ queues.put("iron8kit", duelsQueue);
+ }
+ }
+ player.closeInventory();
+ } else if (item.getItemMeta().getDisplayName().contains("§fЛучник")) {
+ event.setCancelled(true);
+ Map queues = Duels.getQueues();
+ DuelsQueue duelsQueue = null;
+ if(inventoryName.contains("Дуэли 1.9+ пвп")) {
+ duelsQueue = queues.get("bow9kit");
+ if (duelsQueue == null) {
+ duelsQueue = new DuelsQueue("bow9kit", 16, 1);
+ queues.put("bow9kit", duelsQueue);
+ }
+ }else if(inventoryName.contains("Дуэли 1.8 пвп")) {
+ duelsQueue = queues.get("bow8kit");
+ if (duelsQueue == null) {
+ duelsQueue = new DuelsQueue("bow8kit", 16, 1);
+ queues.put("bow8kit", duelsQueue);
+ }
+ }
+ if(duelsQueue != null) {
+ if (!duelsQueue.isPlayerInQueue(player)) {
+ inventory.remove(player.getItemInHand());
+ inventory.setItem(8, new ItemStack(Material.REDSTONE));
+ duelsQueue.addToQueue(player);
+ }
+ }
+ if(inventoryName.contains("1.9+ Запрос игроку")){
+ Player getter = Bukkit.getPlayer(inventoryName.split(" ")[3]);
+ PlayerChecks playerChecks = Duels.getPlayerChecks().get(getter);
+ duelsQueue = queues.get("bow9kit");
+ if (duelsQueue == null) {
+ duelsQueue = new DuelsQueue("bow9kit", 16, 1);
+ playerChecks.addInvites(player, duelsQueue);
+ queues.put("bow9kit", duelsQueue);
+ }
+ }else if(inventoryName.contains("1.8 Запрос игроку")){
+ Player getter = Bukkit.getPlayer(inventoryName.split(" ")[3]);
+ PlayerChecks playerChecks = Duels.getPlayerChecks().get(getter);
+ duelsQueue = queues.get("bow8kit");
+ if (duelsQueue == null) {
+ duelsQueue = new DuelsQueue("bow8kit", 16, 1);
+ playerChecks.addInvites(player, duelsQueue);
+ queues.put("bow8kit", duelsQueue);
+ }
+ }
+ player.closeInventory();
+ } else if (item.getItemMeta().getDisplayName().contains("§fДуэли 1.8 пвп")){
+ event.setCancelled(true);
+ if(inventoryName.contains("1.9+")) {
+ Inventory duelInventory = DuelsInventory.getInventory(inventoryName.replace("1.9+", "1.8"));
+ player.openInventory(duelInventory);
+ }
+ } else if (item.getItemMeta().getDisplayName().contains("§fДуэли 1.9+ пвп")){
+ event.setCancelled(true);
+ if(inventoryName.contains("1.8")) {
+ Inventory duelInventory = DuelsInventory.getInventory(inventoryName.replace("1.8", "1.9+"));
+ player.openInventory(duelInventory);
+ }
+ } else if (item.getItemMeta().getDisplayName().contains("§eБраузер китов")) {
+ event.setCancelled(true);
+ player.openInventory(BrowserInventory.getInventory());
+ } else if (item.getItemMeta().getDisplayName().contains("§fДуэли")) {
+ event.setCancelled(true);
+ }
+ if (inventoryName.contains("§eБраузер китов")) {
+ event.setCancelled(true);
+ if (item.getType() == Material.IRON_PICKAXE) {
+ player.openInventory(KitCreatorInventory.getInventory());
+ }
+ } else if (inventoryName.contains("§cСоздать кит")) {
+ event.setCancelled(true);
+ if (item.getType() == Material.BEDROCK) {
+ player.getInventory().clear();
+ player.teleport(new Location(Bukkit.getWorld("world"), 1396.5, 156, 1707.5));
+ player.setGameMode(GameMode.CREATIVE);
+ }
+ }
+ player.updateInventory();
+ }
+ @EventHandler
+ public void onPlayerInteract(PlayerInteractEvent event){
+ Player player = event.getPlayer();
+ Inventory inventory = player.getInventory();
+ Inventory openInventory = player.getOpenInventory().getTopInventory();
+ ItemStack item = event.getItem();
+ if (item != null) {
+ if(player.getWorld().getName().equals("world")) {
+ if(openInventory.getType().equals(InventoryType.CRAFTING)) {
+ if (item.getType().equals(Material.IRON_SWORD)) {
+ Inventory duelInv = DuelsInventory.getInventory("Дуэли 1.9+ пвп");
+ player.openInventory(duelInv);
+ } else if (item.getType().equals(Material.REDSTONE)) {
+ PlayerChecks playerChecks = Duels.getPlayerChecks().get(player);
+ DuelsQueue duelsQueue = playerChecks.getQueue();
+ if (duelsQueue.isPlayerInQueue(player)) {
+ duelsQueue.removeFromQueue(player);
+ inventory.remove(item);
+ ItemStack slot0 = new ItemStack(Material.IRON_SWORD);
+ ItemMeta slot0meta = slot0.getItemMeta();
+ slot0meta.setDisplayName("Дуэли");
+ slot0.setItemMeta(slot0meta);
+ inventory.setItem(0, slot0);
+ }
+ }
+ }
+ }
+ }
+ }
+ @EventHandler
+ public void onBlockBreak(BlockBreakEvent event){
+ Player player = event.getPlayer();
+ Block block = event.getBlock();
+ event.setCancelled(true);
+ }
+ @EventHandler
+ public void onBlockPlace(BlockPlaceEvent event){
+ Player player = event.getPlayer();
+ Block block = event.getBlock();
+ event.setCancelled(true);
+ }
+ @EventHandler
+ public void onPlayerRespawn(PlayerRespawnEvent event){
+ Player player = event.getPlayer();
+ PlayerChecks checks = Duels.getPlayerChecks().get(player);
+ DuelsQueue duelsQueue = checks.getQueue();
+ if(duelsQueue.isPlayerInGame(player)){
+ event.setRespawnLocation(new Location(Bukkit.getWorld("world"), 1422.5, 159, 1729.5));
+ duelsQueue.removeFromGame(player);
+ }
+ }
+ @EventHandler
+ public void onPlayerDeath(PlayerDeathEvent event){
+ Player player = event.getEntity();
+ PlayerChecks checks = Duels.getPlayerChecks().get(player);
+ DuelsQueue duelsQueue = checks.getQueue();
+ if(duelsQueue.isPlayerInGame(player)){
+ Map game = duelsQueue.getGame();
+ Iterator iterator = game.keySet().iterator();
+ while(iterator.hasNext()) {
+ Player key = iterator.next();
+ if(key != player && game.get(key) == game.get(player)){
+ iterator.remove();
+ key.sendMessage("§7[§aDuel§7] §e" + key.getName() + " §fубил игрока §e" + player.getName() + " §fу него осталось §c" + String.format("%.2f", key.getHealth()) + "❤");
+ player.sendMessage("§7[§aDuel§7] §e" + key.getName() + " §fубил игрока §e" + player.getName() + " §fу него осталось §c" + String.format("%.2f", key.getHealth()) + "❤");
+ duelsQueue.removeFromGame(key);
+ game.get(player).setAvailable(true);
+ }
+ }
+ }
+ }
+ @EventHandler
+ public void onPlayerQuit(PlayerQuitEvent event){
+ Player player = event.getPlayer();
+ PlayerChecks playerChecks = Duels.getPlayerChecks().get(player);
+ DuelsQueue duelsQueue = playerChecks.getQueue();
+ if(duelsQueue != null) {
+ if (duelsQueue.isPlayerInQueue(player)) {
+ duelsQueue.removeFromQueue(player);
+ } else if (duelsQueue.isPlayerInGame(player)) {
+ Map game = duelsQueue.getGame();
+ Iterator iterator = game.keySet().iterator();
+ duelsQueue.removeFromGame(player);
+ while (iterator.hasNext()) {
+ Player key = iterator.next();
+ if (key != player && game.get(key) == game.get(player)) {
+ iterator.remove();
+ duelsQueue.removeFromGame(key);
+ game.get(player).setAvailable(true);
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/java/kz/hxncus/mc/duels/PlayerChecks.java b/src/main/java/kz/hxncus/mc/duels/PlayerChecks.java
new file mode 100644
index 0000000..f968ee7
--- /dev/null
+++ b/src/main/java/kz/hxncus/mc/duels/PlayerChecks.java
@@ -0,0 +1,27 @@
+package kz.hxncus.mc.duels;
+
+import org.bukkit.entity.Player;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+public class PlayerChecks {
+ private DuelsQueue queue;
+ private final Map invites;
+ public PlayerChecks(DuelsQueue queue) {
+ this.invites = new HashMap<>();
+ this.queue = queue;
+ }
+ public DuelsQueue getQueue() { return queue; }
+ public void setQueue(DuelsQueue queue) { this.queue = queue; }
+ public void addInvites(Player player, DuelsQueue queue){
+ invites.put(player, queue);
+ }
+ public void removeInvites(Player player){
+ invites.remove(player);
+ }
+ public boolean containsInvites(Player player) { return invites.containsKey(player); }
+ public DuelsQueue getKeyInvites(Player player) { return invites.get(player); }
+ public Set getKeySetInvites() { return invites.keySet(); }
+}
diff --git a/src/main/java/kz/hxncus/mc/duels/commands/AbstractCommand.java b/src/main/java/kz/hxncus/mc/duels/commands/AbstractCommand.java
new file mode 100644
index 0000000..2d831ba
--- /dev/null
+++ b/src/main/java/kz/hxncus/mc/duels/commands/AbstractCommand.java
@@ -0,0 +1,42 @@
+package kz.hxncus.mc.duels.commands;
+
+import kz.hxncus.mc.duels.Duels;
+import org.bukkit.command.*;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public abstract class AbstractCommand implements CommandExecutor, TabCompleter {
+ public AbstractCommand(String command) {
+ PluginCommand pluginCommand = Duels.getInstance().getCommand(command);
+ if(pluginCommand != null) {
+ pluginCommand.setExecutor(this);
+ pluginCommand.setTabCompleter(this);
+ }
+ }
+ public abstract void execute(CommandSender sender, String label, String[] args);
+ public List complete(CommandSender sender, String[] args) {
+ return null;
+ }
+ @Override
+ public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
+ execute(sender, label, args);
+ return true;
+ }
+
+ @Override
+ public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) {
+ return filter(complete(sender, args), args);
+ }
+ private List filter(List list, String[] args) {
+ if(list == null) return null;
+ String last = args[args.length - 1];
+ List result = new ArrayList<>();
+ for(String arg : list) {
+ if(arg.toLowerCase().startsWith(last.toLowerCase())) result.add(arg);
+ }
+ return result;
+ }
+}
diff --git a/src/main/java/kz/hxncus/mc/duels/commands/DuelCommand.java b/src/main/java/kz/hxncus/mc/duels/commands/DuelCommand.java
new file mode 100644
index 0000000..8ff7f84
--- /dev/null
+++ b/src/main/java/kz/hxncus/mc/duels/commands/DuelCommand.java
@@ -0,0 +1,93 @@
+package kz.hxncus.mc.duels.commands;
+
+import com.google.common.collect.Lists;
+import kz.hxncus.mc.duels.Duels;
+import kz.hxncus.mc.duels.DuelsQueue;
+import kz.hxncus.mc.duels.PlayerChecks;
+import kz.hxncus.mc.duels.inventory.DuelsInventory;
+import org.bukkit.Bukkit;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.Inventory;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class DuelCommand extends AbstractCommand{
+ public DuelCommand() { super("duel"); }
+ @Override
+ public void execute(CommandSender sender, String label, String[] args){
+ if (args.length == 0) {
+ sender.sendMessage("§7[§aDuel§7] §7/duel invite <Никнейм> §8| §eОтправить запрос на дуэль определённому игроку\n" +
+ "§7[§aDuel§7] §7/duel accept <Никнейм> §8| §eПринять запрос на дуэль от определённого игрока\n" +
+ "§7[§aDuel§7] §7/duel deny <Никнейм> §8| §eОтклонить запрос на дуэль от определённого игрока");
+ return;
+ }
+ if(sender instanceof Player){
+ PlayerChecks playerChecks = Duels.getPlayerChecks().get(sender);
+ DuelsQueue duelsQueue = playerChecks.getQueue();
+ if(duelsQueue == null || !duelsQueue.isPlayerInGame((Player) sender) || !duelsQueue.isPlayerInQueue((Player) sender)) {
+ if (args[0].equalsIgnoreCase("invite") && args.length > 1) {
+ Player player = Bukkit.getPlayer(args[1]);
+ if (player != null && player != sender) {
+ Inventory inventory = DuelsInventory.getInventory("1.9+ Запрос игроку " + player.getName());
+ ((Player) sender).openInventory(inventory);
+ } else if (player == null) {
+ sender.sendMessage("§7[§aDuel§7] §cИгрок оффлайн");
+ } else {
+ sender.sendMessage("§7[§aDuel§7] §cНельзя отправить запрос самому себе.");
+ }
+ } else if (args[0].equalsIgnoreCase("accept")) {
+ Player player = Bukkit.getPlayer(args[1]);
+ if (player != null) {
+ if(playerChecks.containsInvites(player)) {
+ DuelsQueue duelsQueue1 = playerChecks.getKeyInvites(player);
+ playerChecks.removeInvites(player);
+ duelsQueue1.startGame(player, (Player) sender);
+ }
+ } else {
+ sender.sendMessage("§7[§aDuel§7] §cИгрок оффлайн");
+ }
+ } else if (args[0].equalsIgnoreCase("deny")) {
+ Player player = Bukkit.getPlayer(args[1]);
+ if (player != null) {
+ if(playerChecks.containsInvites(player)) {
+ playerChecks.removeInvites(player);
+ }
+ } else {
+ sender.sendMessage("§7[§aDuel§7] §cИгрок оффлайн");
+ }
+ } else if (args[0].equalsIgnoreCase("menu")) {
+ ((Player) sender).openInventory(DuelsInventory.getInventory("Дуэли 1.9+ пвп"));
+ } else if (args[0].equalsIgnoreCase("reload")) {
+ if (sender.hasPermission("*")) {
+ long millis = System.currentTimeMillis();
+ Duels.getInstance().reloadConfig();
+ sender.sendMessage("§7[§aDuel§7] §fКонфиг перезагружен за " + (System.currentTimeMillis() - millis) + "ms.");
+ }
+ }
+ }
+ }
+ }
+ @Override
+ public List complete(CommandSender sender, String[] args) {
+ if(args.length == 1) return Lists.newArrayList("accept", "deny", "invite", "menu", "reload");
+ else if(args.length == 2) {
+ List players = new ArrayList<>();
+ if(args[0].equalsIgnoreCase("invite")){
+ for (Player player : Bukkit.getOnlinePlayers()){
+ if(player != sender) {
+ players.add(player.getName());
+ }
+ }
+ }else if(args[0].equalsIgnoreCase("accept") || args[0].equalsIgnoreCase("deny")){
+ for (Player player : Duels.getPlayerChecks().get((Player) sender).getKeySetInvites()){
+ players.add(player.getName());
+ }
+ }
+ return players;
+ }
+ return Lists.newArrayList();
+ }
+}
diff --git a/src/main/java/kz/hxncus/mc/duels/commands/SpawnCommand.java b/src/main/java/kz/hxncus/mc/duels/commands/SpawnCommand.java
new file mode 100644
index 0000000..c64ee77
--- /dev/null
+++ b/src/main/java/kz/hxncus/mc/duels/commands/SpawnCommand.java
@@ -0,0 +1,48 @@
+package kz.hxncus.mc.duels.commands;
+
+import kz.hxncus.mc.duels.Duels;
+import kz.hxncus.mc.duels.DuelsArenas;
+import kz.hxncus.mc.duels.DuelsQueue;
+import kz.hxncus.mc.duels.PlayerChecks;
+import kz.hxncus.mc.duels.methods.ItemStacker;
+import org.bukkit.Bukkit;
+import org.bukkit.GameMode;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.ItemStack;
+
+import java.util.Iterator;
+import java.util.Map;
+
+public class SpawnCommand extends AbstractCommand{
+ public SpawnCommand() { super("spawn"); }
+ @Override
+ public void execute(CommandSender sender, String label, String[] args){
+ if(sender instanceof Player){
+ Player player = (Player) sender;
+ PlayerChecks playerChecks = Duels.getPlayerChecks().get(player);
+ DuelsQueue duelsQueue = playerChecks.getQueue();
+ Inventory inventory = player.getInventory();
+ player.setGameMode(GameMode.SURVIVAL);
+ inventory.clear();
+ inventory.setItem(0, ItemStacker.setDisplayName(new ItemStack(Material.IRON_SWORD), "§fДуэли"));
+ player.teleport(new Location(Bukkit.getWorld("world"), 1422.5, 159, 1729.5));
+ if (duelsQueue != null && duelsQueue.isPlayerInGame(player)) {
+ Map game = duelsQueue.getGame();
+ Iterator iterator = game.keySet().iterator();
+ duelsQueue.removeFromGame(player);
+ while (iterator.hasNext()) {
+ Player key = iterator.next();
+ if (key != player && game.get(key) == game.get(player)) {
+ iterator.remove();
+ duelsQueue.removeFromGame(key);
+ game.get(player).setAvailable(true);
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/java/kz/hxncus/mc/duels/inventory/BrowserInventory.java b/src/main/java/kz/hxncus/mc/duels/inventory/BrowserInventory.java
new file mode 100644
index 0000000..252275d
--- /dev/null
+++ b/src/main/java/kz/hxncus/mc/duels/inventory/BrowserInventory.java
@@ -0,0 +1,20 @@
+package kz.hxncus.mc.duels.inventory;
+
+import kz.hxncus.mc.duels.Duels;
+import kz.hxncus.mc.duels.methods.ItemStacker;
+import org.bukkit.Bukkit;
+import org.bukkit.Material;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.ItemStack;
+
+public class BrowserInventory {
+ public static Inventory getInventory() {
+ Inventory inventory = Bukkit.createInventory(null, 54, "§eБраузер китов");
+ for (String kit : Duels.getKitsKeys(false)) {
+ System.out.println(kit);
+ }
+ inventory.setItem(45, ItemStacker.setDisplayName(new ItemStack(Material.IRON_PICKAXE), "§cСоздать кит"));
+
+ return inventory;
+ }
+}
diff --git a/src/main/java/kz/hxncus/mc/duels/inventory/DuelsInventory.java b/src/main/java/kz/hxncus/mc/duels/inventory/DuelsInventory.java
new file mode 100644
index 0000000..38d18fe
--- /dev/null
+++ b/src/main/java/kz/hxncus/mc/duels/inventory/DuelsInventory.java
@@ -0,0 +1,54 @@
+package kz.hxncus.mc.duels.inventory;
+
+import javafx.beans.property.Property;
+import kz.hxncus.mc.duels.methods.ItemStacker;
+import org.bukkit.Bukkit;
+import org.bukkit.Material;
+import org.bukkit.enchantments.Enchantment;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.ItemFlag;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+import org.bukkit.inventory.meta.SkullMeta;
+
+import java.lang.reflect.Field;
+import java.util.Base64;
+import java.util.UUID;
+
+public class DuelsInventory {
+ public static Inventory getInventory(String name){
+ Inventory inventory = Bukkit.createInventory(null, 54, name);
+
+ ItemStack duel = new ItemStack(Material.DIAMOND_SWORD);
+ ItemMeta duelMeta = duel.getItemMeta();
+ duelMeta.setDisplayName("§fДуэли 1.9+ пвп");
+ if (name.contains("1.9")) {
+ duelMeta.addEnchant(Enchantment.DAMAGE_ALL, 1, false);
+ duelMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
+ }
+ duel.setItemMeta(duelMeta);
+ inventory.setItem(4, duel);
+
+ ItemStack duel8 = new ItemStack(Material.IRON_SWORD);
+ ItemMeta duel8Meta = duel8.getItemMeta();
+ duel8Meta.setDisplayName("§fДуэли 1.8 пвп");
+ if (name.contains("1.8")) {
+ duel8Meta.addEnchant(Enchantment.DAMAGE_ALL, 1, false);
+ duel8Meta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
+ }
+ duel8.setItemMeta(duel8Meta);
+ inventory.setItem(5, duel8);
+ inventory.setItem(19, ItemStacker.setDisplayName(new ItemStack(Material.DIAMOND_CHESTPLATE), "§fАлмазник"));
+ inventory.setItem(28, ItemStacker.setDisplayName(new ItemStack(Material.IRON_CHESTPLATE), "§fЖелезник"));
+ inventory.setItem(20, ItemStacker.setDisplayName(new ItemStack(Material.BOW), "§fЛучник"));
+
+ ItemStack head = new ItemStack(Material.PLAYER_HEAD);
+ SkullMeta headMeta = (SkullMeta) head.getItemMeta();
+ headMeta.setOwner("cake");
+ headMeta.setDisplayName("§eБраузер китов");
+ head.setItemMeta(headMeta);
+ inventory.setItem(53, head);
+
+ return inventory;
+ }
+}
diff --git a/src/main/java/kz/hxncus/mc/duels/inventory/KitCreatorInventory.java b/src/main/java/kz/hxncus/mc/duels/inventory/KitCreatorInventory.java
new file mode 100644
index 0000000..58fa9a4
--- /dev/null
+++ b/src/main/java/kz/hxncus/mc/duels/inventory/KitCreatorInventory.java
@@ -0,0 +1,15 @@
+package kz.hxncus.mc.duels.inventory;
+
+import kz.hxncus.mc.duels.methods.ItemStacker;
+import org.bukkit.Bukkit;
+import org.bukkit.Material;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.ItemStack;
+
+public class KitCreatorInventory {
+ public static Inventory getInventory() {
+ Inventory inventory = Bukkit.createInventory(null, 45, "§cСоздать кит");
+ inventory.setItem(22, ItemStacker.setDisplayName(new ItemStack(Material.BEDROCK), "§eКреатив"));
+ return inventory;
+ }
+}
diff --git a/src/main/java/kz/hxncus/mc/duels/kits/BowKit.java b/src/main/java/kz/hxncus/mc/duels/kits/BowKit.java
new file mode 100644
index 0000000..fb84973
--- /dev/null
+++ b/src/main/java/kz/hxncus/mc/duels/kits/BowKit.java
@@ -0,0 +1,25 @@
+package kz.hxncus.mc.duels.kits;
+
+import org.bukkit.Material;
+import org.bukkit.enchantments.Enchantment;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.ItemStack;
+
+public class BowKit {
+ public void getKit(Player player){
+ Inventory inventory = player.getInventory();
+ inventory.clear();
+ inventory.setItem(40, new ItemStack(Material.GOLDEN_APPLE, 4));
+ inventory.setItem(39, new ItemStack(Material.IRON_HELMET));
+ inventory.setItem(38, new ItemStack(Material.IRON_CHESTPLATE));
+ inventory.setItem(37, new ItemStack(Material.IRON_LEGGINGS));
+ inventory.setItem(36, new ItemStack(Material.IRON_BOOTS));
+ inventory.setItem(9, new ItemStack(Material.ARROW, 1));
+ inventory.setItem(2, new ItemStack(Material.COOKED_BEEF, 8));
+ ItemStack bow = new ItemStack(Material.BOW);
+ bow.addEnchantment(Enchantment.ARROW_INFINITE, 1);
+ inventory.setItem(0, bow);
+ player.updateInventory();
+ }
+}
diff --git a/src/main/java/kz/hxncus/mc/duels/kits/DiamondKit.java b/src/main/java/kz/hxncus/mc/duels/kits/DiamondKit.java
new file mode 100644
index 0000000..6eba17a
--- /dev/null
+++ b/src/main/java/kz/hxncus/mc/duels/kits/DiamondKit.java
@@ -0,0 +1,23 @@
+package kz.hxncus.mc.duels.kits;
+
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.ItemStack;
+
+public class DiamondKit {
+ public void getKit(Player player){
+ Inventory inventory = player.getInventory();
+ inventory.clear();
+ inventory.setItem(40, new ItemStack(Material.GOLDEN_APPLE, 8));
+ inventory.setItem(39, new ItemStack(Material.DIAMOND_HELMET));
+ inventory.setItem(38, new ItemStack(Material.DIAMOND_CHESTPLATE));
+ inventory.setItem(37, new ItemStack(Material.DIAMOND_LEGGINGS));
+ inventory.setItem(36, new ItemStack(Material.DIAMOND_BOOTS));
+ inventory.setItem(9, new ItemStack(Material.ARROW, 8));
+ inventory.setItem(2, new ItemStack(Material.COOKED_BEEF, 16));
+ inventory.setItem(1, new ItemStack(Material.BOW));
+ inventory.setItem(0, new ItemStack(Material.DIAMOND_SWORD));
+ player.updateInventory();
+ }
+}
diff --git a/src/main/java/kz/hxncus/mc/duels/kits/IronKit.java b/src/main/java/kz/hxncus/mc/duels/kits/IronKit.java
new file mode 100644
index 0000000..e423516
--- /dev/null
+++ b/src/main/java/kz/hxncus/mc/duels/kits/IronKit.java
@@ -0,0 +1,23 @@
+package kz.hxncus.mc.duels.kits;
+
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.ItemStack;
+
+public class IronKit {
+ public void getKit(Player player){
+ Inventory inventory = player.getInventory();
+ inventory.clear();
+ inventory.setItem(40, new ItemStack(Material.GOLDEN_APPLE, 8));
+ inventory.setItem(39, new ItemStack(Material.IRON_HELMET));
+ inventory.setItem(38, new ItemStack(Material.IRON_CHESTPLATE));
+ inventory.setItem(37, new ItemStack(Material.IRON_LEGGINGS));
+ inventory.setItem(36, new ItemStack(Material.IRON_BOOTS));
+ inventory.setItem(9, new ItemStack(Material.ARROW, 8));
+ inventory.setItem(2, new ItemStack(Material.COOKED_BEEF, 16));
+ inventory.setItem(1, new ItemStack(Material.BOW));
+ inventory.setItem(0, new ItemStack(Material.IRON_SWORD));
+ player.updateInventory();
+ }
+}
diff --git a/src/main/java/kz/hxncus/mc/duels/kits/KitManager.java b/src/main/java/kz/hxncus/mc/duels/kits/KitManager.java
new file mode 100644
index 0000000..0d122ba
--- /dev/null
+++ b/src/main/java/kz/hxncus/mc/duels/kits/KitManager.java
@@ -0,0 +1,7 @@
+package kz.hxncus.mc.duels.kits;
+
+public class KitManager {
+ public void createKit() {
+
+ }
+}
diff --git a/src/main/java/kz/hxncus/mc/duels/methods/ItemSerialize.java b/src/main/java/kz/hxncus/mc/duels/methods/ItemSerialize.java
new file mode 100644
index 0000000..720b295
--- /dev/null
+++ b/src/main/java/kz/hxncus/mc/duels/methods/ItemSerialize.java
@@ -0,0 +1,25 @@
+package kz.hxncus.mc.duels.methods;
+
+import org.bukkit.configuration.file.YamlConstructor;
+import org.bukkit.configuration.file.YamlRepresenter;
+import org.bukkit.inventory.ItemStack;
+import org.yaml.snakeyaml.DumperOptions;
+import org.yaml.snakeyaml.Yaml;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+public class ItemSerialize {
+ private static final DumperOptions yamlOptions = new DumperOptions();
+ private static final Yaml yaml = new Yaml(new YamlConstructor(), new YamlRepresenter(), yamlOptions);
+ public ItemSerialize() {}
+ public static String serialize(ItemStack item) {
+ Map root = new LinkedHashMap<>();
+ root.put("item", item);
+ return yaml.dumpAs(root, null, DumperOptions.FlowStyle.BLOCK);
+ }
+ public static ItemStack deserial(String textItem) {
+ Map root = yaml.load(textItem);
+ return (ItemStack) root.get("item");
+ }
+}
diff --git a/src/main/java/kz/hxncus/mc/duels/methods/ItemStacker.java b/src/main/java/kz/hxncus/mc/duels/methods/ItemStacker.java
new file mode 100644
index 0000000..c63a3e5
--- /dev/null
+++ b/src/main/java/kz/hxncus/mc/duels/methods/ItemStacker.java
@@ -0,0 +1,14 @@
+package kz.hxncus.mc.duels.methods;
+
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+
+public class ItemStacker {
+ public ItemStacker() {}
+ public static ItemStack setDisplayName(ItemStack itemStack, String name) {
+ ItemMeta itemMeta = itemStack.getItemMeta();
+ itemMeta.setDisplayName(name);
+ itemStack.setItemMeta(itemMeta);
+ return itemStack;
+ }
+}
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
new file mode 100644
index 0000000..aebb151
--- /dev/null
+++ b/src/main/resources/plugin.yml
@@ -0,0 +1,15 @@
+name: Duels
+version: '${project.version}'
+main: kz.hxncus.mc.duels.Duels
+api-version: 1.16
+authors: [Hxncus]
+description: Дуэли для сервера MineSon
+commands:
+ spawn: {}
+ duel:
+ aliases:
+ - duels
+ - ds
+ - dl
+ - deul
+ - deuls
\ No newline at end of file