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} + ${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