commit dddde6270f182496f98d4b813d4831ffbc254005 Author: ValEw Date: Tue Jul 29 12:44:34 2025 +0200 Innitial update diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..f5cd4e8 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/discord.xml b/.idea/discord.xml new file mode 100644 index 0000000..d8e9561 --- /dev/null +++ b/.idea/discord.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/.idea/discordrp.xml b/.idea/discordrp.xml new file mode 100644 index 0000000..cd0365c --- /dev/null +++ b/.idea/discordrp.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..8c89be5 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..ef964bb --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..aebed63 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/InsaneDuels.iml b/InsaneDuels.iml new file mode 100644 index 0000000..3cf00db --- /dev/null +++ b/InsaneDuels.iml @@ -0,0 +1,13 @@ + + + + + + + PAPER + + 1 + + + + \ No newline at end of file diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml new file mode 100644 index 0000000..42e8c39 --- /dev/null +++ b/dependency-reduced-pom.xml @@ -0,0 +1,61 @@ + + + 4.0.0 + lnmpro + InsaneDuels + InsaneDuels + 1.0-SNAPSHOT + + clean package + + + true + src/main/resources + + + + + maven-compiler-plugin + 3.13.0 + + ${java.version} + ${java.version} + + + + maven-shade-plugin + 3.5.3 + + + package + + shade + + + + + + + + + papermc-repo + https://repo.papermc.io/repository/maven-public/ + + + sonatype + https://oss.sonatype.org/content/groups/public/ + + + + + io.papermc.paper + paper-api + 1.21-R0.1-SNAPSHOT + provided + + + + 21 + UTF-8 + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..d4f87d6 --- /dev/null +++ b/pom.xml @@ -0,0 +1,77 @@ + + + 4.0.0 + + lnmpro + InsaneDuels + 1.0-SNAPSHOT + jar + + InsaneDuels + + + 21 + UTF-8 + + + + clean package + + + org.apache.maven.plugins + maven-compiler-plugin + 3.13.0 + + ${java.version} + ${java.version} + + + + org.apache.maven.plugins + maven-shade-plugin + 3.5.3 + + + package + + shade + + + + + + + + src/main/resources + true + + + + + + + papermc-repo + https://repo.papermc.io/repository/maven-public/ + + + sonatype + https://oss.sonatype.org/content/groups/public/ + + + + + + io.papermc.paper + paper-api + 1.21-R0.1-SNAPSHOT + provided + + + com.mojang + authlib + 1.5.25 + + + diff --git a/src/main/java/lnmpro/Commands/AcceptDuelCommand.java b/src/main/java/lnmpro/Commands/AcceptDuelCommand.java new file mode 100644 index 0000000..c5d2ef4 --- /dev/null +++ b/src/main/java/lnmpro/Commands/AcceptDuelCommand.java @@ -0,0 +1,45 @@ +package lnmpro.Commands; + +import lnmpro.Main; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; +import java.util.UUID; + +public class AcceptDuelCommand implements CommandExecutor, TabCompleter { + private final Main plugin; + + public AcceptDuelCommand(Main plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { + if (sender instanceof Player player) { + if (player.hasMetadata("DueledBy")) { + UUID targetUUID = UUID.fromString(player.getMetadata("DueledBy").get(0).asString()); + Player enemy = Bukkit.getPlayer(targetUUID); + String gamemode = player.getMetadata("DueledWithGamemode").get(0).asString(); + enemy.sendMessage("cica " + gamemode); + player.sendMessage("cica " + gamemode); + player.removeMetadata("DueledBy", plugin); + player.removeMetadata("DueledWithGamemode", plugin); + } + } else { + sender.sendMessage("nem vagy player nem fog sikerulni"); + } + return true; + } + + @Override + public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { + return List.of(); + } +} diff --git a/src/main/java/lnmpro/Commands/DenyDuelCommand.java b/src/main/java/lnmpro/Commands/DenyDuelCommand.java new file mode 100644 index 0000000..1bbfb19 --- /dev/null +++ b/src/main/java/lnmpro/Commands/DenyDuelCommand.java @@ -0,0 +1,45 @@ +package lnmpro.Commands; + +import lnmpro.Main; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; +import java.util.UUID; + +public class DenyDuelCommand implements CommandExecutor, TabCompleter { + private final Main plugin; + + public DenyDuelCommand(Main plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { + if (sender instanceof Player player) { + if (player.hasMetadata("DueledBy")) { + UUID targetUUID = UUID.fromString(player.getMetadata("DueledBy").get(0).asString()); + Player enemy = Bukkit.getPlayer(targetUUID); + String gamemode = player.getMetadata("DueledWithGamemode").get(0).asString(); + enemy.sendMessage("nem cica " + gamemode); + player.sendMessage("nem cica " + gamemode); + player.removeMetadata("DueledBy", plugin); + player.removeMetadata("DueledWithGamemode", plugin); + } + } else { + sender.sendMessage("nem vagy player nem fog sikerulni"); + } + return true; + } + + @Override + public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { + return List.of(); + } +} diff --git a/src/main/java/lnmpro/Commands/DuelsCommand.java b/src/main/java/lnmpro/Commands/DuelsCommand.java new file mode 100644 index 0000000..0b3a5f9 --- /dev/null +++ b/src/main/java/lnmpro/Commands/DuelsCommand.java @@ -0,0 +1,196 @@ +package lnmpro.Commands; + +import lnmpro.Main; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.PotionMeta; +import org.bukkit.inventory.meta.SkullMeta; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.properties.Property; +import org.bukkit.profile.PlayerProfile; +import org.bukkit.profile.PlayerTextures; + +import java.lang.reflect.Field; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.List; +import java.util.UUID; +import java.util.Collections; + +public class DuelsCommand implements CommandExecutor, TabCompleter { + private final Main plugin; + + public DuelsCommand(Main plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (sender instanceof Player player) { + + if (args.length != 1) { + player.sendMessage("§a Használat"); + player.sendMessage("§a----------------------------------------"); + player.sendMessage("§a/duel [játékos] » Meghívás egy párbajra"); //valew ez rohadtul ainak hangzik ird mar at + return true; + } + + Player target = Bukkit.getPlayer(args[0]); + if (target == null || !target.isOnline()) { + player.sendMessage("§7[§9§lInsane§e§lDuels§7] §7» §cA megadott játékos nem elérhető"); + return true; + } + if (target.hasMetadata("DueledBy") && target.getMetadata("DueledBy").get(0).asString().equals(player.getUniqueId().toString())) { + player.sendMessage(target.getName() + "-nek má' kűté' duel rikvesztet"); + return true; + } + + Inventory gui = Bukkit.createInventory(null, 36, "Játékmód Választás"); + ItemStack vanilla = new ItemStack(Material.END_CRYSTAL); + ItemMeta vanillaMeta = vanilla.getItemMeta(); + vanillaMeta.setDisplayName("§dVanilla"); + + ItemStack uhc = new ItemStack(Material.LAVA_BUCKET); + ItemMeta uhcMeta = uhc.getItemMeta(); + uhcMeta.setDisplayName("§cUHC"); + uhc.setItemMeta(uhcMeta); + + ItemStack pot = new ItemStack(Material.POTION); + PotionMeta potMeta = (PotionMeta) pot.getItemMeta(); + potMeta.setDisplayName("§cPot"); + potMeta.addCustomEffect(new PotionEffect(PotionEffectType.INSTANT_HEALTH, 20, 0), true); + pot.setItemMeta(potMeta); + + ItemStack nethpot = new ItemStack(Material.NETHERITE_HELMET); + nethpot.addEnchantment(Enchantment.MENDING, 1); + ItemMeta nethpotMeta = nethpot.getItemMeta(); + nethpotMeta.setDisplayName("§5NethPot"); + nethpot.setItemMeta(nethpotMeta); + + ItemStack smp = new ItemStack(Material.ENDER_PEARL); + ItemMeta smpMeta = smp.getItemMeta(); + smpMeta.setDisplayName("§2SMP"); + smp.setItemMeta(smpMeta); + + ItemStack sword = new ItemStack(Material.DIAMOND_SWORD); + ItemMeta swordMeta = sword.getItemMeta(); + swordMeta.setDisplayName("§bSword"); + sword.setItemMeta(swordMeta); + + ItemStack axe = new ItemStack(Material.DIAMOND_AXE); + ItemMeta axeMeta = axe.getItemMeta(); + axeMeta.setDisplayName("§bAxe"); + axe.setItemMeta(axeMeta); + + ItemStack mace = new ItemStack(Material.MACE); + ItemMeta maceMeta = mace.getItemMeta(); + maceMeta.setDisplayName("§7Mace"); + mace.setItemMeta(maceMeta); + + ItemStack cart = new ItemStack(Material.TNT_MINECART); + ItemMeta cartMeta = cart.getItemMeta(); + cartMeta.setDisplayName("§cCart"); + cart.setItemMeta(cartMeta); + + ItemStack diasmp = new ItemStack(Material.CHORUS_FRUIT); + ItemMeta diasmpMeta = diasmp.getItemMeta(); + diasmpMeta.setDisplayName("§dDiaSMP"); + diasmp.setItemMeta(diasmpMeta); + + ItemStack shieldlessuhc = new ItemStack(Material.PLAYER_HEAD); + SkullMeta skullMeta = (SkullMeta) shieldlessuhc.getItemMeta(); + + PlayerProfile profile = Bukkit.createProfile(UUID.randomUUID(), "Schicsial"); + + try { + PlayerTextures textures = profile.getTextures(); + + textures.setSkin(new URL("https://textures.minecraft.net/texture/566a87460173adf067cb356ae200d030504378c552e3428b4774c4c11a599c24")); + + profile.setTextures(textures); + + skullMeta.setPlayerProfile((com.destroystokyo.paper.profile.PlayerProfile) profile); + + skullMeta.setDisplayName("§eShieldlessUHC"); + shieldlessuhc.setItemMeta(skullMeta); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + + ItemStack pirosuveg = new ItemStack(Material.RED_STAINED_GLASS_PANE); + ItemMeta pirosuvegMeta = pirosuveg.getItemMeta(); + pirosuvegMeta.setDisplayName("§cItt még nincs játékmód!"); + pirosuveg.setItemMeta(pirosuvegMeta); + + ItemStack kekuveg = new ItemStack(Material.BLUE_STAINED_GLASS_PANE); + ItemMeta kekuvegMeta = kekuveg.getItemMeta(); + kekuvegMeta.setDisplayName(" "); + kekuveg.setItemMeta(kekuvegMeta); + + gui.setItem(0, kekuveg); + gui.setItem(1, kekuveg); + gui.setItem(2, kekuveg); + gui.setItem(3, kekuveg); + gui.setItem(4, kekuveg); + gui.setItem(5, kekuveg); + gui.setItem(6, kekuveg); + gui.setItem(7, kekuveg); + gui.setItem(8, kekuveg); + gui.setItem(9, kekuveg); + gui.setItem(10, vanilla); + gui.setItem(11, uhc); + gui.setItem(12, pot); + gui.setItem(13, nethpot); + gui.setItem(14, smp); + gui.setItem(15, sword); + gui.setItem(16, axe); + gui.setItem(17, kekuveg); + gui.setItem(18, kekuveg); + gui.setItem(19, mace); + gui.setItem(20, cart); + gui.setItem(21, diasmp); + gui.setItem(22, shieldlessuhc); + gui.setItem(23, pirosuveg); + gui.setItem(24, pirosuveg); + gui.setItem(25, pirosuveg); + gui.setItem(26, kekuveg); + gui.setItem(27, kekuveg); + gui.setItem(28, kekuveg); + gui.setItem(29, kekuveg); + gui.setItem(30, kekuveg); + gui.setItem(31, kekuveg); + gui.setItem(32, kekuveg); + gui.setItem(33, kekuveg); + gui.setItem(34, kekuveg); + gui.setItem(35, kekuveg); + + player.openInventory(gui); + player.setMetadata("DuelRequest", new FixedMetadataValue(plugin, target.getUniqueId().toString())); + + } else { + sender.sendMessage("szia nem vagy player ez nem vicces"); + } + return true; + } + + @Override + public List onTabComplete(CommandSender sender, Command command, String s, String[] args) { + if (args.length == 1) { + return null; + } + return List.of(); + } +} diff --git a/src/main/java/lnmpro/Listeners/DuelRequestListener.java b/src/main/java/lnmpro/Listeners/DuelRequestListener.java new file mode 100644 index 0000000..2fefe69 --- /dev/null +++ b/src/main/java/lnmpro/Listeners/DuelRequestListener.java @@ -0,0 +1,91 @@ +package lnmpro.Listeners; + +import lnmpro.Main; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; +import net.md_5.bungee.api.chat.TextComponent; +import net.md_5.bungee.api.chat.HoverEvent; +import org.bukkit.entity.Player; + +import java.util.UUID; + +public class DuelRequestListener implements Listener { + private final Main plugin; + + public DuelRequestListener(Main plugin) { + this.plugin = plugin; + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent event) { + if (!(event.getWhoClicked() instanceof Player player)) return; + + if (event.getView().getTitle().equals("Játékmód Választás")) { + event.setCancelled(true); + } + } + + @EventHandler + public void onDuelRequest(InventoryClickEvent e) { + Player player = (Player) e.getWhoClicked(); + + if (!e.getView().getTitle().equals("Játékmód Választás")) return; + + if (e.getClick() != ClickType.LEFT) return; + + ItemStack clickedItem = e.getCurrentItem(); + if (clickedItem == null || clickedItem.getType() == Material.AIR) return; + + if (clickedItem.getType() == Material.RED_STAINED_GLASS_PANE || clickedItem.getType() == Material.BLUE_STAINED_GLASS_PANE) + return; + + if (player.hasMetadata("DuelRequest")) { + e.setCancelled(true); + + UUID targetUUID = UUID.fromString(player.getMetadata("DuelRequest").get(0).asString()); + Player target = Bukkit.getPlayer(targetUUID); + + if (target == null) { + player.sendMessage("§cA meghívott játékos nincs jelen a szerveren."); + player.removeMetadata("DuelRequest", plugin); + return; + } + + player.removeMetadata("DuelRequest", plugin); + + TextComponent accept = new TextComponent("§a[fogadd el]"); + accept.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/acceptduel")); + accept.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, + new ComponentBuilder("de fogadd baby").create())); + + TextComponent decline = new TextComponent("[ne]"); + decline.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/denyduel")); + decline.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, + new ComponentBuilder("nefgoasdel").create())); + + TextComponent fullMessage = new TextComponent("higy elfogadd kerlek "); + fullMessage.addExtra(accept); + fullMessage.addExtra(" vagy "); + fullMessage.addExtra(decline); + fullMessage.addExtra(" koszi!"); + + target.sendMessage("szia §f" + player.getName() + " fájtolni akar veled!"); + target.spigot().sendMessage(fullMessage); + target.sendMessage("duel takemod amit valasztot:" + clickedItem.getItemMeta().getDisplayName().toLowerCase()); + + target.setMetadata("DueledBy", new FixedMetadataValue(plugin, player.getUniqueId().toString())); + target.setMetadata("DueledWithGamemode", new FixedMetadataValue(plugin, clickedItem.getItemMeta().getDisplayName().toLowerCase())); + + player.closeInventory(); + } + } +} \ No newline at end of file diff --git a/src/main/java/lnmpro/Listeners/KitListener.java b/src/main/java/lnmpro/Listeners/KitListener.java new file mode 100644 index 0000000..7c80560 --- /dev/null +++ b/src/main/java/lnmpro/Listeners/KitListener.java @@ -0,0 +1,116 @@ +package lnmpro.Listeners; + +import lnmpro.Main; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; + +import java.util.HashMap; +import java.util.Map; + +public class KitListener implements Listener { + private final Main plugin; + + public KitListener(Main plugin) { + this.plugin = plugin; + } + + @EventHandler + public void onJoin(PlayerJoinEvent event) { + Player player = event.getPlayer(); + if (plugin.getConfig().getString("kits.sword." + player.getUniqueId()) == null) { + Map kit = new HashMap<>(); + kit.put("sword", 0); + plugin.getConfig().set("kits.sword." + player.getUniqueId(), kit); + plugin.saveConfig(); + plugin.reloadConfig(); + } + if (plugin.getConfig().getString("kits.uhc." + player.getUniqueId()) == null) { + Map kit = new HashMap<>(); + int[] shield = new int[]{13, 40}; + int[] water = new int[]{6, 22, 23, 24}; + int[] lava = new int[]{2, 21}; + kit.put("axe", 0); + kit.put("sword", 1); + kit.put("lava", lava); + kit.put("cobweb", 3); + kit.put("cobblestone", 4); + kit.put("goldenapple", 5); + kit.put("water", water); + kit.put("crossbow", 7); + kit.put("bow", 8); + kit.put("arrow", 9); + kit.put("planks", 17); + kit.put("pickaxe", 20); + kit.put("shield", shield); + plugin.getConfig().set("kits.uhc." + player.getUniqueId(), kit); + plugin.saveConfig(); + plugin.reloadConfig(); + } + if (plugin.getConfig().getString("kits.mace." + player.getUniqueId()) == null) { + Map kit = new HashMap<>(); + int[] strength = new int[]{10, 11, 12, 13, 14, 15, 16, 28, 29, 30}; + int[] speed = new int[]{19, 20, 21, 22, 23, 24, 25, 31, 32, 33}; + int[] totem = new int[]{35, 40}; + int[] enderpearl = new int[]{2, 9, 18, 27}; + int[] goldenapple = new int[]{5, 17}; + int[] windcharge = new int[]{7, 34}; + kit.put("axe", 0); + kit.put("sword", 1); + kit.put("enderpearl", enderpearl); + kit.put("shield", 3); + kit.put("density", 4); + kit.put("goldenapple", goldenapple); + kit.put("breach", 6); + kit.put("windcharge", windcharge); + kit.put("elytra", 8); + kit.put("strength", strength); + kit.put("speed", speed); + kit.put("totem", totem); + kit.put("shulker", 26); + plugin.getConfig().set("kits.mace." + player.getUniqueId(), kit); + plugin.saveConfig(); + plugin.reloadConfig(); + } + if (plugin.getConfig().getString("kits.axe." + player.getUniqueId()) == null) { + Map kit = new HashMap<>(); + kit.put("axe", 0); + kit.put("sword", 1); + kit.put("crossbow", 2); + kit.put("bow", 3); + kit.put("arrow", 8); + kit.put("shield", 40); + plugin.getConfig().set("kits.axe." + player.getUniqueId(), kit); + plugin.saveConfig(); + plugin.reloadConfig(); + } + if (plugin.getConfig().getString("kits.diasmp." + player.getUniqueId()) == null) { + Map kit = new HashMap<>(); + int[] goldenapple = new int[]{5, 32}; + int[] strength = new int[]{7, 12, 13, 14, 15, 19, 20, 21, 22, 23, 24, 29, 30, 31, 33}; + int[] speed = new int[]{16, 25, 34}; + int[] fireresistance = new int[]{17, 26, 35}; + int[] water = new int[]{4, 10, 11}; + int[] xp = new int[]{18, 27}; + kit.put("axe", 0); + kit.put("sword", 1); + kit.put("enderpearl", 2); + kit.put("log", 3); + kit.put("water", water); + kit.put("goldenapple", goldenapple); + kit.put("cobweb", 6); + kit.put("strength", strength); + kit.put("totem", 8); + kit.put("pickaxe", 9); + kit.put("speed", speed); + kit.put("fireresistance", fireresistance); + kit.put("xp", xp); + kit.put("chorusfruit", 28); + kit.put("shield", 40); + plugin.getConfig().set("kits.diasmp." + player.getUniqueId(), kit); + plugin.saveConfig(); + plugin.reloadConfig(); + } + } +} \ No newline at end of file diff --git a/src/main/java/lnmpro/Main.java b/src/main/java/lnmpro/Main.java new file mode 100644 index 0000000..61a0d8f --- /dev/null +++ b/src/main/java/lnmpro/Main.java @@ -0,0 +1,24 @@ +package lnmpro; + +import org.bukkit.Bukkit; +import org.bukkit.plugin.java.JavaPlugin; +import lnmpro.Commands.*; +import lnmpro.Listeners.*; + +public final class Main extends JavaPlugin { + + private static Main instance; + + @Override + public void onEnable() { + instance = this; + getCommand("duel").setExecutor(new DuelsCommand(this)); + getCommand("acceptduel").setExecutor(new AcceptDuelCommand(this)); + getCommand("denyduel").setExecutor(new DenyDuelCommand(this)); + Bukkit.getPluginManager().registerEvents(new DuelRequestListener(this), this); + } + + public static Main getInstance() { + return instance; + } +} \ No newline at end of file diff --git a/src/main/java/lnmpro/Utils/Kits.java b/src/main/java/lnmpro/Utils/Kits.java new file mode 100644 index 0000000..6109e69 --- /dev/null +++ b/src/main/java/lnmpro/Utils/Kits.java @@ -0,0 +1,344 @@ +package lnmpro.Utils; + +import lnmpro.Main; +import org.bukkit.Material; +import org.bukkit.block.ShulkerBox; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Item; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; +import org.bukkit.inventory.meta.BlockStateMeta; +import org.bukkit.inventory.meta.PotionMeta; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.jetbrains.annotations.NotNull; + +import java.util.Collections; +import java.util.List; + +public class Kits { + + private final Main plugin; + + public Kits(Main plugin) { + this.plugin = plugin; + } + + private int getItemSlot(String key, String kit, Player player) { + String path = "kits." + kit + "." + player.getUniqueId() + "." + key; + + if (plugin.getConfig().contains(path)) { + try { + return plugin.getConfig().getInt(path); + } catch (NumberFormatException e) { + plugin.getLogger().warning("Invalid slot number in config for " + path); + } + } + + return -1; + } + + private @NotNull List getItemSlotArray(String key, String kit, Player player) { + String path = "kits." + kit + "." + player.getUniqueId() + "." + key; + + if (plugin.getConfig().contains(path)) { + List slots = plugin.getConfig().getIntegerList(path); + + if (!slots.isEmpty()) { + return slots; + } else { + plugin.getLogger().warning("Invalid or empty slot numbers in config for " + path); + } + } + + return Collections.singletonList(-1); + } + + public PlayerInventory getSwordKit(Player player) { + + PlayerInventory inv = player.getInventory(); + + ItemStack helmet = new ItemStack(Material.DIAMOND_HELMET); + ItemStack chestplate = new ItemStack(Material.DIAMOND_CHESTPLATE); + ItemStack leggings = new ItemStack(Material.DIAMOND_LEGGINGS); + ItemStack boots = new ItemStack(Material.DIAMOND_BOOTS); + ItemStack sword = new ItemStack(Material.DIAMOND_SWORD); + + helmet.addEnchantment(Enchantment.PROTECTION, 3); + chestplate.addEnchantment(Enchantment.PROTECTION, 3); + leggings.addEnchantment(Enchantment.PROTECTION, 3); + boots.addEnchantment(Enchantment.PROTECTION, 3); + sword.addEnchantment(Enchantment.SWEEPING_EDGE, 3); + + inv.setArmorContents(new ItemStack[]{boots, leggings, chestplate, helmet}); + inv.setItem(getItemSlot("sword", "sword", player), sword); + + return inv; + } + + public PlayerInventory getUhcKit(Player player) { + + PlayerInventory inv = player.getInventory(); + + ItemStack helmet = new ItemStack(Material.DIAMOND_HELMET); + ItemStack chestplate = new ItemStack(Material.DIAMOND_CHESTPLATE); + ItemStack leggings = new ItemStack(Material.DIAMOND_LEGGINGS); + ItemStack boots = new ItemStack(Material.DIAMOND_BOOTS); + ItemStack axe = new ItemStack(Material.DIAMOND_AXE); + ItemStack sword = new ItemStack(Material.DIAMOND_SWORD); + ItemStack lava = new ItemStack(Material.LAVA_BUCKET); + ItemStack cobweb = new ItemStack(Material.COBWEB, 8); + ItemStack cobblestone = new ItemStack(Material.COBBLESTONE, 64); + ItemStack goldenapple = new ItemStack(Material.GOLDEN_APPLE, 13); + ItemStack water = new ItemStack(Material.WATER_BUCKET); + ItemStack crossbow = new ItemStack(Material.CROSSBOW); + ItemStack bow = new ItemStack(Material.BOW); + ItemStack arrow = new ItemStack(Material.ARROW, 16); + ItemStack shield = new ItemStack(Material.SHIELD); + ItemStack planks = new ItemStack(Material.OAK_PLANKS, 64); + ItemStack pickaxe = new ItemStack(Material.DIAMOND_PICKAXE); + + helmet.addEnchantment(Enchantment.PROTECTION, 3); + chestplate.addEnchantment(Enchantment.PROTECTION, 2); + leggings.addEnchantment(Enchantment.PROTECTION, 3); + boots.addEnchantment(Enchantment.PROTECTION, 3); + axe.addEnchantment(Enchantment.SHARPNESS, 1); + axe.addEnchantment(Enchantment.EFFICIENCY, 3); + sword.addEnchantment(Enchantment.SHARPNESS, 4); + crossbow.addEnchantment(Enchantment.PIERCING, 1); + bow.addEnchantment(Enchantment.POWER, 1); + pickaxe.addEnchantment(Enchantment.UNBREAKING,3); + pickaxe.addEnchantment(Enchantment.EFFICIENCY, 3); + + inv.setArmorContents(new ItemStack[]{boots, leggings, chestplate, helmet}); + inv.setItem(getItemSlot("axe", "uhc", player), axe); + inv.setItem(getItemSlot("sword", "uhc", player), sword); + for (int slot : getItemSlotArray("lava", "uhc", player)) { + inv.setItem(slot, lava); + } + inv.setItem(getItemSlot("cobweb", "uhc", player), cobweb); + inv.setItem(getItemSlot("cobblestone", "uhc", player), cobblestone); + inv.setItem(getItemSlot("goldenapple", "uhc", player), goldenapple); + for (int slot : getItemSlotArray("water", "uhc", player)) { + inv.setItem(slot, water); + } + inv.setItem(getItemSlot("crossbow", "uhc", player), crossbow); + inv.setItem(getItemSlot("bow", "uhc", player), bow); + inv.setItem(getItemSlot("arrow", "uhc", player), arrow); + for (int slot : getItemSlotArray("shield", "uhc", player)) { + inv.setItem(slot, shield); + } + inv.setItem(getItemSlot("planks", "uhc", player), planks); + inv.setItem(getItemSlot("pickaxe", "uhc", player), pickaxe); + + return inv; + } + + public PlayerInventory getMaceKit(Player player) { + + PlayerInventory inv = player.getInventory(); + + ItemStack helmet = new ItemStack(Material.NETHERITE_HELMET); + ItemStack chestplate = new ItemStack(Material.NETHERITE_CHESTPLATE); + ItemStack leggings = new ItemStack(Material.NETHERITE_LEGGINGS); + ItemStack boots = new ItemStack(Material.NETHERITE_BOOTS); + ItemStack axe = new ItemStack(Material.NETHERITE_AXE); + ItemStack sword = new ItemStack(Material.NETHERITE_SWORD); + ItemStack enderpearl = new ItemStack(Material.ENDER_PEARL, 16); + ItemStack shield = new ItemStack(Material.SHIELD); + ItemStack density = new ItemStack(Material.MACE); + ItemStack goldenapple = new ItemStack(Material.GOLDEN_APPLE, 64); + ItemStack breach = new ItemStack(Material.MACE); + ItemStack windchare = new ItemStack(Material.WIND_CHARGE, 64); + ItemStack elytra = new ItemStack(Material.ELYTRA); + ItemStack totem = new ItemStack(Material.TOTEM_OF_UNDYING); + ItemStack shulker = new ItemStack(Material.SHULKER_BOX); + ItemStack strength = new ItemStack(Material.SPLASH_POTION); + ItemStack speed = new ItemStack(Material.SPLASH_POTION); + + helmet.addEnchantment(Enchantment.PROTECTION, 4); + chestplate.addEnchantment(Enchantment.PROTECTION, 4); + leggings.addEnchantment(Enchantment.PROTECTION, 4); + boots.addEnchantment(Enchantment.FEATHER_FALLING, 4); + boots.addEnchantment(Enchantment.PROTECTION, 4); + sword.addEnchantment(Enchantment.SHARPNESS, 5); + sword.addEnchantment(Enchantment.UNBREAKING, 3); + axe.addEnchantment(Enchantment.SHARPNESS, 5); + axe.addEnchantment(Enchantment.UNBREAKING, 3); + shield.addEnchantment(Enchantment.UNBREAKING, 3); + density.addEnchantment(Enchantment.WIND_BURST, 1); + density.addEnchantment(Enchantment.DENSITY, 5); + density.addEnchantment(Enchantment.UNBREAKING, 3); + breach.addEnchantment(Enchantment.BREACH, 4); + breach.addEnchantment(Enchantment.UNBREAKING, 3); + + PotionMeta strengthmeta = (PotionMeta) strength.getItemMeta(); + strengthmeta.addCustomEffect(new PotionEffect(PotionEffectType.STRENGTH, 1800, 1), true); + strengthmeta.setMainEffect(PotionEffectType.STRENGTH); + strength.setItemMeta(strengthmeta); + PotionMeta speedmeta = (PotionMeta) speed.getItemMeta(); + speedmeta.addCustomEffect(new PotionEffect(PotionEffectType.SPEED, 1800, 1), true); + speedmeta.setMainEffect(PotionEffectType.SPEED); + speed.setItemMeta(speedmeta); + + BlockStateMeta shulkermeta = (BlockStateMeta) shulker.getItemMeta(); + ShulkerBox shulkerbox = (ShulkerBox) shulkermeta.getBlockState(); + Inventory shulkerinv = shulkerbox.getInventory(); + for (int i = 0; i < 14; i++) { + shulkerinv.setItem(i, strength); + } + for (int i = 14; i < 27; i++) { + shulkerinv.setItem(i, speed); + } + shulkermeta.setBlockState(shulkerbox); + shulker.setItemMeta(shulkermeta); + + inv.setArmorContents(new ItemStack[]{boots, leggings, chestplate, helmet}); + inv.setItem(getItemSlot("axe", "mace", player), axe); + inv.setItem(getItemSlot("sword", "mace", player), sword); + for (int slot : getItemSlotArray("enderpearl", "mace", player)) { + inv.setItem(slot, enderpearl); + } + inv.setItem(getItemSlot("shield", "mace", player), shield); + inv.setItem(getItemSlot("density", "mace", player), density); + for (int slot : getItemSlotArray("goldenapple", "mace", player)) { + inv.setItem(slot, goldenapple); + } + inv.setItem(getItemSlot("breach", "mace", player), breach); + for (int slot : getItemSlotArray("windcharge", "mace", player)) { + inv.setItem(slot, windchare); + } + inv.setItem(getItemSlot("elytra", "mace", player), elytra); + inv.setItem(getItemSlot("shulker", "mace", player), shulker); + for (int slot : getItemSlotArray("strength", "mace", player)) { + inv.setItem(slot, strength); + } + for (int slot : getItemSlotArray("speed", "mace", player)) { + inv.setItem(slot, speed); + } + for (int slot : getItemSlotArray("totem", "mace", player)) { + inv.setItem(slot, totem); + } + + return inv; + } + + public PlayerInventory getAxeKit(Player player) { + + PlayerInventory inv = player.getInventory(); + + ItemStack axe = new ItemStack(Material.DIAMOND_AXE); + ItemStack sword = new ItemStack(Material.DIAMOND_SWORD); + ItemStack crossbow = new ItemStack(Material.CROSSBOW); + ItemStack bow = new ItemStack(Material.BOW); + ItemStack arrow = new ItemStack(Material.ARROW, 6); + ItemStack shield = new ItemStack(Material.SHIELD); + + inv.setItem(getItemSlot("axe", "axe", player), axe); + inv.setItem(getItemSlot("sword", "axe", player), sword); + inv.setItem(getItemSlot("crossbow", "axe", player), crossbow); + inv.setItem(getItemSlot("bow", "axe", player), bow); + inv.setItem(getItemSlot("arrow", "axe", player), arrow); + inv.setItem(getItemSlot("shield", "axe", player), shield); + + return inv; + } + + public PlayerInventory getDiaSMPKit(Player player) { + + PlayerInventory inv = player.getInventory(); + + ItemStack helmet = new ItemStack(Material.DIAMOND_HELMET); + ItemStack chestplate = new ItemStack(Material.DIAMOND_CHESTPLATE); + ItemStack leggings = new ItemStack(Material.DIAMOND_LEGGINGS); + ItemStack boots = new ItemStack(Material.DIAMOND_BOOTS); + ItemStack axe = new ItemStack(Material.DIAMOND_AXE); + ItemStack sword = new ItemStack(Material.DIAMOND_SWORD); + ItemStack enderpearl = new ItemStack(Material.ENDER_PEARL, 16); + ItemStack log = new ItemStack(Material.OAK_LOG, 64); + ItemStack water = new ItemStack(Material.WATER_BUCKET); + ItemStack goldenapple = new ItemStack(Material.GOLDEN_APPLE, 64); + ItemStack cobweb = new ItemStack(Material.COBWEB, 64); + ItemStack strength = new ItemStack(Material.SPLASH_POTION); + ItemStack totem = new ItemStack(Material.TOTEM_OF_UNDYING); + ItemStack pickaxe = new ItemStack(Material.NETHERITE_PICKAXE); + ItemStack speed = new ItemStack(Material.SPLASH_POTION); + ItemStack fireresistance = new ItemStack(Material.SPLASH_POTION); + ItemStack xp = new ItemStack(Material.EXPERIENCE_BOTTLE, 64); + ItemStack chorusfruit = new ItemStack(Material.CHORUS_FRUIT, 64); + ItemStack shield = new ItemStack(Material.SHIELD); + + helmet.addEnchantment(Enchantment.PROTECTION, 4); + helmet.addEnchantment(Enchantment.UNBREAKING, 3); + helmet.addEnchantment(Enchantment.MENDING, 1); + chestplate.addEnchantment(Enchantment.PROTECTION, 4); + chestplate.addEnchantment(Enchantment.UNBREAKING, 3); + chestplate.addEnchantment(Enchantment.MENDING, 1); + leggings.addEnchantment(Enchantment.PROTECTION, 4); + leggings.addEnchantment(Enchantment.SWIFT_SNEAK, 3); + leggings.addEnchantment(Enchantment.UNBREAKING, 3); + leggings.addEnchantment(Enchantment.MENDING, 1); + boots.addEnchantment(Enchantment.PROTECTION, 4); + boots.addEnchantment(Enchantment.FEATHER_FALLING, 4); + boots.addEnchantment(Enchantment.DEPTH_STRIDER, 3); + boots.addEnchantment(Enchantment.UNBREAKING, 3); + boots.addEnchantment(Enchantment.MENDING, 1); + axe.addEnchantment(Enchantment.SHARPNESS, 5); + axe.addEnchantment(Enchantment.UNBREAKING, 3); + sword.addEnchantment(Enchantment.SHARPNESS, 5); + sword.addEnchantment(Enchantment.FIRE_ASPECT, 2); + sword.addEnchantment(Enchantment.UNBREAKING, 3); + pickaxe.addEnchantment(Enchantment.SILK_TOUCH, 1); + pickaxe.addEnchantment(Enchantment.EFFICIENCY, 5); + pickaxe.addEnchantment(Enchantment.UNBREAKING, 3); + pickaxe.addEnchantment(Enchantment.MENDING, 1); + shield.addEnchantment(Enchantment.UNBREAKING, 3); + shield.addEnchantment(Enchantment.MENDING, 1); + + PotionMeta fireresistancemeta = (PotionMeta) fireresistance.getItemMeta(); + fireresistancemeta.addCustomEffect(new PotionEffect(PotionEffectType.FIRE_RESISTANCE, 9600, 0), true); + fireresistancemeta.setMainEffect(PotionEffectType.FIRE_RESISTANCE); + fireresistance.setItemMeta(fireresistancemeta); + PotionMeta strengthmeta = (PotionMeta) strength.getItemMeta(); + strengthmeta.addCustomEffect(new PotionEffect(PotionEffectType.STRENGTH, 1800, 1), true); + strengthmeta.setMainEffect(PotionEffectType.STRENGTH); + strength.setItemMeta(strengthmeta); + PotionMeta speedmeta = (PotionMeta) speed.getItemMeta(); + speedmeta.addCustomEffect(new PotionEffect(PotionEffectType.SPEED, 9600, 0), true); + speedmeta.setMainEffect(PotionEffectType.SPEED); + speed.setItemMeta(speedmeta); + + inv.setArmorContents(new ItemStack[]{boots, leggings, chestplate, helmet}); + inv.setItem(getItemSlot("axe", "diasmp", player), axe); + inv.setItem(getItemSlot("sword", "diasmp", player), sword); + inv.setItem(getItemSlot("enderpearl", "diasmp", player), enderpearl); + inv.setItem(getItemSlot("log", "diasmp", player), log); + for (int slot : getItemSlotArray("water", "diasmp", player)) { + inv.setItem(slot, water); + } + for (int slot : getItemSlotArray("goldenapple", "diasmp", player)) { + inv.setItem(slot, goldenapple); + } + inv.setItem(getItemSlot("cobweb", "diasmp", player), cobweb); + for (int slot : getItemSlotArray("strength", "diasmp", player)) { + inv.setItem(slot, strength); + } + inv.setItem(getItemSlot("totem", "diasmp", player), totem); + inv.setItem(getItemSlot("pickaxe", "diasmp", player), pickaxe); + for (int slot : getItemSlotArray("speed", "diasmp", player)) { + inv.setItem(slot, speed); + } + for (int slot : getItemSlotArray("fireresistance", "diasmp", player)) { + inv.setItem(slot, fireresistance); + } + for (int slot : getItemSlotArray("xp", "diasmp", player)) { + inv.setItem(slot, xp); + } + inv.setItem(getItemSlot("chorusfruit", "diasmp", player), chorusfruit); + inv.setItem(getItemSlot("shield", "diasmp", player), shield); + + return inv; + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..ee0c49e --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,9 @@ +name: InsaneDuels +version: '1.0' +main: lnmpro.Main +api-version: '1.21' +authors: [ LnmPro, JGJ52 ] +commands: + duel: + acceptduel: + denyduel: \ No newline at end of file diff --git a/target/InsaneDuels-1.0-SNAPSHOT-shaded.jar b/target/InsaneDuels-1.0-SNAPSHOT-shaded.jar new file mode 100644 index 0000000..62969b3 Binary files /dev/null and b/target/InsaneDuels-1.0-SNAPSHOT-shaded.jar differ diff --git a/target/InsaneDuels-1.0-SNAPSHOT.jar b/target/InsaneDuels-1.0-SNAPSHOT.jar new file mode 100644 index 0000000..62969b3 Binary files /dev/null and b/target/InsaneDuels-1.0-SNAPSHOT.jar differ diff --git a/target/classes/lnmpro/Commands/AcceptDuelCommand.class b/target/classes/lnmpro/Commands/AcceptDuelCommand.class new file mode 100644 index 0000000..739f593 Binary files /dev/null and b/target/classes/lnmpro/Commands/AcceptDuelCommand.class differ diff --git a/target/classes/lnmpro/Commands/DenyDuelCommand.class b/target/classes/lnmpro/Commands/DenyDuelCommand.class new file mode 100644 index 0000000..6bdd97f Binary files /dev/null and b/target/classes/lnmpro/Commands/DenyDuelCommand.class differ diff --git a/target/classes/lnmpro/Commands/DuelsCommand.class b/target/classes/lnmpro/Commands/DuelsCommand.class new file mode 100644 index 0000000..26197d5 Binary files /dev/null and b/target/classes/lnmpro/Commands/DuelsCommand.class differ diff --git a/target/classes/lnmpro/Listeners/DuelRequestListener.class b/target/classes/lnmpro/Listeners/DuelRequestListener.class new file mode 100644 index 0000000..a791e32 Binary files /dev/null and b/target/classes/lnmpro/Listeners/DuelRequestListener.class differ diff --git a/target/classes/lnmpro/Listeners/KitListener.class b/target/classes/lnmpro/Listeners/KitListener.class new file mode 100644 index 0000000..047cca1 Binary files /dev/null and b/target/classes/lnmpro/Listeners/KitListener.class differ diff --git a/target/classes/lnmpro/Main.class b/target/classes/lnmpro/Main.class new file mode 100644 index 0000000..1406bc2 Binary files /dev/null and b/target/classes/lnmpro/Main.class differ diff --git a/target/classes/lnmpro/Utils/Kits.class b/target/classes/lnmpro/Utils/Kits.class new file mode 100644 index 0000000..80eb8cb Binary files /dev/null and b/target/classes/lnmpro/Utils/Kits.class differ diff --git a/target/classes/plugin.yml b/target/classes/plugin.yml new file mode 100644 index 0000000..ee0c49e --- /dev/null +++ b/target/classes/plugin.yml @@ -0,0 +1,9 @@ +name: InsaneDuels +version: '1.0' +main: lnmpro.Main +api-version: '1.21' +authors: [ LnmPro, JGJ52 ] +commands: + duel: + acceptduel: + denyduel: \ No newline at end of file diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties new file mode 100644 index 0000000..fe099d2 --- /dev/null +++ b/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=InsaneDuels +groupId=lnmpro +version=1.0-SNAPSHOT diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..b45021b --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,7 @@ +lnmpro\Main.class +lnmpro\Commands\AcceptDuelCommand.class +lnmpro\Listeners\DuelRequestListener.class +lnmpro\Commands\DenyDuelCommand.class +lnmpro\Listeners\KitListener.class +lnmpro\Commands\DuelsCommand.class +lnmpro\Utils\Kits.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..2136b8f --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,7 @@ +E:\InsaneDuels\InsaneDuels\src\main\java\lnmpro\Commands\AcceptDuelCommand.java +E:\InsaneDuels\InsaneDuels\src\main\java\lnmpro\Commands\DenyDuelCommand.java +E:\InsaneDuels\InsaneDuels\src\main\java\lnmpro\Commands\DuelsCommand.java +E:\InsaneDuels\InsaneDuels\src\main\java\lnmpro\Listeners\DuelRequestListener.java +E:\InsaneDuels\InsaneDuels\src\main\java\lnmpro\Listeners\KitListener.java +E:\InsaneDuels\InsaneDuels\src\main\java\lnmpro\Main.java +E:\InsaneDuels\InsaneDuels\src\main\java\lnmpro\Utils\Kits.java diff --git a/target/original-InsaneDuels-1.0-SNAPSHOT.jar b/target/original-InsaneDuels-1.0-SNAPSHOT.jar new file mode 100644 index 0000000..809c0cd Binary files /dev/null and b/target/original-InsaneDuels-1.0-SNAPSHOT.jar differ