diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml
index a972847..134e98f 100644
--- a/dependency-reduced-pom.xml
+++ b/dependency-reduced-pom.xml
@@ -1,10 +1,10 @@
4.0.0
- lnmpro
- InsaneDuels
- InsaneDuels
- 1.0-SNAPSHOT
+ hu.jgj52.pvpcore
+ PvPCore
+ PvPCore
+ 1.0
clean package
@@ -73,6 +73,12 @@
2.13.0
provided
+
+ org.mvplugins.multiverse.core
+ multiverse-core
+ 5.1.2
+ provided
+
21
diff --git a/pom.xml b/pom.xml
index becf5f1..70e1034 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,12 +4,12 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- lnmpro
- InsaneDuels
- 1.0-SNAPSHOT
+ hu.jgj52.pvpcore
+ PvPCore
+ 1.0
jar
- InsaneDuels
+ PvPCore
21
@@ -97,5 +97,17 @@
5.1.2
provided
+
+
+ com.zaxxer
+ HikariCP
+ 5.0.1
+
+
+
+ org.postgresql
+ postgresql
+ 42.6.0
+
diff --git a/src/main/java/lnmpro/Commands/AcceptDuelCommand.java b/src/main/java/hu/jgj52/pvpcore/Commands/AcceptDuelCommand.java
similarity index 60%
rename from src/main/java/lnmpro/Commands/AcceptDuelCommand.java
rename to src/main/java/hu/jgj52/pvpcore/Commands/AcceptDuelCommand.java
index b1f4e54..a79215e 100644
--- a/src/main/java/lnmpro/Commands/AcceptDuelCommand.java
+++ b/src/main/java/hu/jgj52/pvpcore/Commands/AcceptDuelCommand.java
@@ -1,8 +1,9 @@
-package lnmpro.Commands;
+package hu.jgj52.pvpcore.Commands;
-import lnmpro.Main;
-import lnmpro.Utils.Kits;
-import lnmpro.Utils.SchematicManager;
+import hu.jgj52.pvpcore.Main;
+import hu.jgj52.pvpcore.Utils.Database;
+import hu.jgj52.pvpcore.Utils.Kits;
+import hu.jgj52.pvpcore.Utils.SchematicManager;
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
@@ -23,9 +24,8 @@ import net.kyori.adventure.text.Component;
import net.kyori.adventure.title.Title;
import java.time.Duration;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
+import java.util.*;
+import java.util.concurrent.ExecutionException;
import static java.util.Collections.min;
@@ -44,107 +44,64 @@ public class AcceptDuelCommand implements CommandExecutor, TabCompleter {
return true;
}
- Map requests = plugin.duelRequests.get(player.getUniqueId());
- if (requests == null) {
- player.sendMessage("§cNincs párbajkérelmed.");
- return true;
+
+ Database.QueryResult reqResult = null;
+ try {
+ reqResult = plugin.db.from("pvpcore_duel_requests").eq("player", Objects.requireNonNull(Bukkit.getPlayer(args[0])).getUniqueId()).eq("enemy", player.getUniqueId()).execute().get();
+ } catch (InterruptedException | ExecutionException e) {
+ throw new RuntimeException(e);
}
+ Map row = reqResult.data.get(0);
+
Player enemy = Bukkit.getPlayer(args[0]);
if (enemy == null) {
player.sendMessage("§cA megadott játékos nem található.");
return true;
}
- Main.DuelRequestData requestData = requests.get(enemy.getUniqueId());
-
- if (requestData == null) {
+ if (reqResult.isEmpty()) {
player.sendMessage("§cNincs párbajkérelmed ettől a játékostól.");
return true;
}
- if ((System.currentTimeMillis() - requestData.timestamp()) > 60000) {
- requests.remove(enemy.getUniqueId());
- if (requests.isEmpty()) {
- plugin.duelRequests.remove(player.getUniqueId());
- }
- player.sendMessage("§cEz a párbajkérelem lejárt.");
- return true;
- }
-
-
Kits kitManager = new Kits(plugin);
SchematicManager schematic = new SchematicManager(plugin);
- String gamemode = requestData.gamemode();
- plugin.duelRequests.remove(player.getUniqueId());
- plugin.duelRequests.remove(enemy.getUniqueId());
+ String gamemode = row.get("kit").toString();
+ Database.QueryResult result = null;
+ try {
+ result = plugin.db.from("pvpcore_kits")
+ .eq("name", gamemode)
+ .execute()
+ .get();
+ } catch (InterruptedException | ExecutionException e) {
+ throw new RuntimeException(e);
+ }
+
+ Map kitRow = result.data.get(0);
player.getInventory().clear();
enemy.getInventory().clear();
-
- int x = 0;
- String arena = "";
- boolean survival = false;
-
- if (gamemode.equals("uhc")) {
- x = 1000;
- arena = "football";
- survival = true;
- } else if (gamemode.equals("pot")) {
- x = 0;
- arena = "";
-
- } else if (gamemode.equals("nethpot")) {
- x = 0;
- arena = "";
-
- } else if (gamemode.equals("smp")) {
- x = 0;
- arena = "";
-
- } else if (gamemode.equals("sword")) {
- x = 1400;
- arena = "football";
- } else if (gamemode.equals("axe")) {
- x = 1500;
- arena = "football";
- } else if (gamemode.equals("mace")) {
- x = 0;
- arena = "";
- } else if (gamemode.equals("cart")) {
- x = 0;
- arena = "";
- survival = true;
-
- } else if (gamemode.equals("diasmp")) {
- x = 1800;
- arena = "football";
- survival = true;
- } else if (gamemode.equals("shieldlessuhc")) {
- x = 0;
- arena = "";
- survival = true;
-
- }
- player.getInventory().setContents(kitManager.getKit(gamemode, player));
- enemy.getInventory().setContents(kitManager.getKit(gamemode, enemy));
World world = Bukkit.getWorld("arenas");
+ boolean survival = Boolean.parseBoolean(kitRow.get("survival").toString());
+ String arena = kitRow.get("arena").toString();
+ int x = Integer.parseInt(kitRow.get("id").toString()) * 1000;
int y = 0;
int z;
if (plugin.usedArenas.isEmpty()) {
- z = -2000;
+ z = 0;
} else {
- z = min(plugin.usedArenas) - 100;
+ z = min(plugin.usedArenas) - 1000;
}
plugin.usedArenas.add(z);
schematic.placeSchematic(world, x, y, z, arena, true);
- Location playerLoc = new Location(world, x + 19.5, y, z + 0.5, 90, 0);
- Location enemyLoc = new Location(world, x - 17.5, y, z + 0.5, -90, 0);
+ Location playerLoc = new Location(world, x + 20.5, y, z + 0.5, 90, 0);
+ Location enemyLoc = new Location(world, x - 20.5, y, z + 0.5, -90, 0);
for (PotionEffect potionEffect : player.getActivePotionEffects()) {
player.removePotionEffect(potionEffect.getType());
@@ -156,6 +113,12 @@ public class AcceptDuelCommand implements CommandExecutor, TabCompleter {
enemy.addPotionEffect(new PotionEffect(PotionEffectType.SLOW_FALLING, 20, 1), true);
player.teleport(playerLoc);
enemy.teleport(enemyLoc);
+ try {
+ player.getInventory().setContents(kitManager.getKit(gamemode, player, false));
+ enemy.getInventory().setContents(kitManager.getKit(gamemode, enemy, false));
+ } catch (ExecutionException | InterruptedException e) {
+ throw new RuntimeException(e);
+ }
player.setHealth(20D);
enemy.setHealth(20D);
player.setFoodLevel(20);
@@ -165,10 +128,15 @@ public class AcceptDuelCommand implements CommandExecutor, TabCompleter {
player.setGameMode(survival ? GameMode.SURVIVAL : GameMode.ADVENTURE);
enemy.setGameMode(survival ? GameMode.SURVIVAL : GameMode.ADVENTURE);
- player.setMetadata("DuelingWith", new FixedMetadataValue(plugin, enemy.getUniqueId()));
- enemy.setMetadata("DuelingWith", new FixedMetadataValue(plugin, player.getUniqueId()));
- player.setMetadata("ArenaLoc", new FixedMetadataValue(plugin, new Location(world, x, y, z)));
- enemy.setMetadata("ArenaLoc", new FixedMetadataValue(plugin, new Location(world, x, y, z)));
+ Map duelData = new HashMap<>();
+ duelData.put("player", enemy.getUniqueId());
+ duelData.put("enemy", player.getUniqueId());
+ duelData.put("ft", row.get("ft"));
+ duelData.put("kit", gamemode);
+ duelData.put("started", System.currentTimeMillis());
+
+ plugin.db.from("pvpcore_duels").insert(duelData);
+ plugin.db.from("pvpcore_duel_requests").eq("player", Objects.requireNonNull(Bukkit.getPlayer(args[0])).getUniqueId()).eq("enemy", player.getUniqueId()).delete();
player.setMetadata("Frozen", new FixedMetadataValue(plugin, true));
enemy.setMetadata("Frozen", new FixedMetadataValue(plugin, true));
@@ -203,9 +171,8 @@ public class AcceptDuelCommand implements CommandExecutor, TabCompleter {
}
}.runTaskTimer(plugin, 0L, 20L);
- } else {
- sender.sendMessage("nem vagy player nem fog sikerulni");
}
+
return true;
}
diff --git a/src/main/java/hu/jgj52/pvpcore/Commands/ConnectCommand.java b/src/main/java/hu/jgj52/pvpcore/Commands/ConnectCommand.java
new file mode 100644
index 0000000..3fd803a
--- /dev/null
+++ b/src/main/java/hu/jgj52/pvpcore/Commands/ConnectCommand.java
@@ -0,0 +1,59 @@
+package hu.jgj52.pvpcore.Commands;
+
+import hu.jgj52.pvpcore.Main;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.format.NamedTextColor;
+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.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import net.kyori.adventure.text.event.ClickEvent;
+
+public class ConnectCommand implements CommandExecutor, TabCompleter {
+ private final Main plugin;
+
+ public ConnectCommand(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) {
+ String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()-_=+[]{};:,.<>?/";
+ java.security.SecureRandom rnd = new java.security.SecureRandom();
+ String key = rnd.ints(12, 0, chars.length())
+ .mapToObj(chars::charAt)
+ .collect(StringBuilder::new, StringBuilder::append, StringBuilder::append)
+ .toString();
+ Map data = new HashMap<>();
+ data.put("key", key);
+ data.put("player", player.getUniqueId());
+ data.put("timestamp", System.currentTimeMillis() + 300000);
+ plugin.db.from("pvpcore_connect").eq("player", player.getUniqueId()).delete();
+ plugin.db.from("pvpcore_connect").insert(data);
+ player.sendMessage(
+ Component.text("A kulcsod a bejelentkezéshez: ", NamedTextColor.GREEN)
+ .append(
+ Component.text(key, NamedTextColor.YELLOW)
+ .clickEvent(ClickEvent.copyToClipboard(key))
+ .hoverEvent(Component.text("Kattints a másoláshoz!", NamedTextColor.GRAY))
+ )
+ );
+
+ }
+ 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/CreateKitCommand.java b/src/main/java/hu/jgj52/pvpcore/Commands/CreateKitCommand.java
similarity index 61%
rename from src/main/java/lnmpro/Commands/CreateKitCommand.java
rename to src/main/java/hu/jgj52/pvpcore/Commands/CreateKitCommand.java
index ba84df5..263ddcf 100644
--- a/src/main/java/lnmpro/Commands/CreateKitCommand.java
+++ b/src/main/java/hu/jgj52/pvpcore/Commands/CreateKitCommand.java
@@ -1,6 +1,7 @@
-package lnmpro.Commands;
+package hu.jgj52.pvpcore.Commands;
-import lnmpro.Main;
+import hu.jgj52.pvpcore.Main;
+import hu.jgj52.pvpcore.Utils.Kits;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
@@ -9,7 +10,7 @@ import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.List;
+import java.util.*;
public class CreateKitCommand implements CommandExecutor, TabCompleter {
private final Main plugin;
@@ -22,10 +23,16 @@ public class CreateKitCommand implements CommandExecutor, TabCompleter {
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String s, @NotNull String[] args) {
if (sender instanceof Player player) {
if (args.length == 1) {
- plugin.getConfig().set("default.kits." + args[0], player.getInventory().getContents());
- plugin.saveConfig();
- plugin.reloadConfig();
- player.sendMessage("§aKit saved as " + args[0]);
+ String base64 = Kits.itemStackArrayToBase64(player.getInventory().getContents());
+
+ Map data = new HashMap<>();
+ data.put("name", args[0]);
+ data.put("content", base64);
+
+ plugin.db.from("pvpcore_kits").insert(data);
+ player.sendMessage("§aKit sikeresen létrehozva!");
+ } else {
+ sender.sendMessage("§cUsage: /createkit ");
}
}
return true;
diff --git a/src/main/java/lnmpro/Commands/DenyDuelCommand.java b/src/main/java/hu/jgj52/pvpcore/Commands/DenyDuelCommand.java
similarity index 64%
rename from src/main/java/lnmpro/Commands/DenyDuelCommand.java
rename to src/main/java/hu/jgj52/pvpcore/Commands/DenyDuelCommand.java
index 1cc242b..680aabd 100644
--- a/src/main/java/lnmpro/Commands/DenyDuelCommand.java
+++ b/src/main/java/hu/jgj52/pvpcore/Commands/DenyDuelCommand.java
@@ -1,6 +1,7 @@
-package lnmpro.Commands;
+package hu.jgj52.pvpcore.Commands;
-import lnmpro.Main;
+import hu.jgj52.pvpcore.Main;
+import hu.jgj52.pvpcore.Utils.Database;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
@@ -11,8 +12,8 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
-import java.util.Map;
-import java.util.UUID;
+import java.util.Objects;
+import java.util.concurrent.ExecutionException;
public class DenyDuelCommand implements CommandExecutor, TabCompleter {
private final Main plugin;
@@ -29,8 +30,14 @@ public class DenyDuelCommand implements CommandExecutor, TabCompleter {
return true;
}
- Map requests = plugin.duelRequests.get(player.getUniqueId());
- if (requests == null) {
+ Database.QueryResult reqResult = null;
+ try {
+ reqResult = plugin.db.from("pvpcore_duel_requests").eq("player", Objects.requireNonNull(Bukkit.getPlayer(args[0])).getUniqueId()).eq("enemy", player.getUniqueId()).execute().get();
+ } catch (InterruptedException | ExecutionException e) {
+ throw new RuntimeException(e);
+ }
+
+ if (reqResult.isEmpty()) {
player.sendMessage("§cNincs párbajkérelmed.");
return true;
}
@@ -40,18 +47,7 @@ public class DenyDuelCommand implements CommandExecutor, TabCompleter {
player.sendMessage("§cA megadott játékos nem található.");
return true;
}
-
- if (requests.remove(enemy.getUniqueId()) != null) {
- if (requests.isEmpty()) {
- plugin.duelRequests.remove(player.getUniqueId());
- }
- player.sendMessage("§aPárbajkérelem elutasítva.");
- enemy.sendMessage("§c" + player.getName() + " elutasította a párbajkérelmedet.");
- } else {
- player.sendMessage("§cNincs párbajkérelmed ettől a játékostól.");
- }
- } else {
- sender.sendMessage("nem vagy player nem fog sikerulni");
+ plugin.db.from("pvpcore_duel_requests").eq("player", Objects.requireNonNull(Bukkit.getPlayer(args[0])).getUniqueId()).eq("enemy", player.getUniqueId()).delete();
}
return true;
}
diff --git a/src/main/java/lnmpro/Commands/DuelCommand.java b/src/main/java/hu/jgj52/pvpcore/Commands/DuelCommand.java
similarity index 87%
rename from src/main/java/lnmpro/Commands/DuelCommand.java
rename to src/main/java/hu/jgj52/pvpcore/Commands/DuelCommand.java
index 8781df1..910d241 100644
--- a/src/main/java/lnmpro/Commands/DuelCommand.java
+++ b/src/main/java/hu/jgj52/pvpcore/Commands/DuelCommand.java
@@ -1,6 +1,7 @@
-package lnmpro.Commands;
+package hu.jgj52.pvpcore.Commands;
-import lnmpro.Main;
+import hu.jgj52.pvpcore.Main;
+import hu.jgj52.pvpcore.Utils.Database;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.command.Command;
@@ -22,8 +23,11 @@ import org.bukkit.profile.PlayerTextures;
import java.net.MalformedURLException;
import java.net.URL;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.UUID;
+import java.util.concurrent.ExecutionException;
public class DuelCommand implements CommandExecutor, TabCompleter {
private final Main plugin;
@@ -54,7 +58,14 @@ public class DuelCommand implements CommandExecutor, TabCompleter {
return true;
}
- if (target.hasMetadata("DueledBy") && target.getMetadata("DueledBy").get(0).asString().equals(player.getUniqueId().toString())) {
+ Database.QueryResult result = null;
+ try {
+ result = plugin.db.from("pvpcore_duel_requests").eq("player", player.getUniqueId()).eq("enemy", target.getUniqueId()).execute().get();
+ } catch (InterruptedException | ExecutionException e) {
+ throw new RuntimeException(e);
+ }
+
+ if (!result.isEmpty()) {
player.sendMessage("§7[§9§lInsane§e§lDuels§7] §7» §e" + target.getName() + "§9 játékosnak már küldtél párbaj kérelmet.");
return true;
}
@@ -141,11 +152,16 @@ public class DuelCommand implements CommandExecutor, TabCompleter {
kekuvegMeta.setDisplayName(" ");
kekuveg.setItemMeta(kekuvegMeta);
+ ItemStack ft = new ItemStack(Material.PAPER);
+ ItemMeta ftMeta = ft.getItemMeta();
+ ftMeta.setDisplayName("First To");
+ ft.setItemMeta(ftMeta);
+
gui.setItem(0, kekuveg);
gui.setItem(1, kekuveg);
gui.setItem(2, kekuveg);
gui.setItem(3, kekuveg);
- gui.setItem(4, kekuveg);
+ gui.setItem(4, ft);
gui.setItem(5, kekuveg);
gui.setItem(6, kekuveg);
gui.setItem(7, kekuveg);
@@ -179,10 +195,11 @@ public class DuelCommand implements CommandExecutor, TabCompleter {
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");
+ Map data = new HashMap<>();
+ data.put("player", player.getUniqueId());
+ data.put("enemy", target.getUniqueId());
+ data.put("timestamp", System.currentTimeMillis() + 60000);
+ plugin.db.from("pvpcore_duel_requests").insert(data);
}
return true;
}
diff --git a/src/main/java/hu/jgj52/pvpcore/Commands/EditKitCommand.java b/src/main/java/hu/jgj52/pvpcore/Commands/EditKitCommand.java
new file mode 100644
index 0000000..f35ef9a
--- /dev/null
+++ b/src/main/java/hu/jgj52/pvpcore/Commands/EditKitCommand.java
@@ -0,0 +1,122 @@
+package hu.jgj52.pvpcore.Commands;
+
+import hu.jgj52.pvpcore.Main;
+import hu.jgj52.pvpcore.Utils.Database;
+import hu.jgj52.pvpcore.Utils.Kits;
+import org.bukkit.Bukkit;
+import org.bukkit.Material;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.command.TabCompleter;
+import org.bukkit.configuration.ConfigurationSection;
+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.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ExecutionException;
+
+public class EditKitCommand implements CommandExecutor, TabCompleter {
+ private final Main plugin;
+
+ public EditKitCommand(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 (args.length > 0) {
+ try {
+ Database.QueryResult result = plugin.db.from("pvpcore_kits").eq("name", args[0]).execute().get();
+ if (!result.isEmpty()) {
+ Kits kitManager = new Kits(plugin);
+ Inventory gui = Bukkit.createInventory(null, 27, "Kit Editor");
+
+ ItemStack saveKit = new ItemStack(Material.GREEN_STAINED_GLASS_PANE);
+ ItemMeta saveMeta = saveKit.getItemMeta();
+
+ ItemStack infoItem = new ItemStack(Material.WHITE_STAINED_GLASS_PANE);
+ ItemMeta infoMeta = infoItem.getItemMeta();
+ infoMeta.setDisplayName("§fEdit Kit: " + args[0]);
+ infoItem.setItemMeta(infoMeta);
+
+ ItemStack undoKit = new ItemStack(Material.RED_STAINED_GLASS_PANE);
+ ItemMeta undoMeta = undoKit.getItemMeta();
+ saveMeta.setDisplayName("§aSave Kit");
+ saveKit.setItemMeta(saveMeta);
+ undoMeta.setDisplayName("§cUndo Changes");
+ undoKit.setItemMeta(undoMeta);
+
+ gui.setItem(0, saveKit);
+ gui.setItem(1, saveKit);
+ gui.setItem(2, saveKit);
+ gui.setItem(6, undoKit);
+ gui.setItem(7, undoKit);
+ gui.setItem(8, undoKit);
+ gui.setItem(9, saveKit);
+ gui.setItem(10, saveKit);
+ gui.setItem(11, saveKit);
+ gui.setItem(15, undoKit);
+ gui.setItem(16, undoKit);
+ gui.setItem(17, undoKit);
+ gui.setItem(18, saveKit);
+ gui.setItem(19, saveKit);
+ gui.setItem(20, saveKit);
+ gui.setItem(24, undoKit);
+ gui.setItem(25, undoKit);
+ gui.setItem(26, undoKit);
+ gui.setItem(3, infoItem);
+ gui.setItem(4, infoItem);
+ gui.setItem(5, infoItem);
+ gui.setItem(12, infoItem);
+ gui.setItem(13, infoItem);
+ gui.setItem(14, infoItem);
+ gui.setItem(21, infoItem);
+ gui.setItem(22, infoItem);
+ gui.setItem(23, infoItem);
+ Inventory inv = player.getInventory();
+ inv.clear();
+
+ inv.setContents(kitManager.getKit(args[0], player, false));
+
+ player.openInventory(gui);
+ }
+
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ } catch (ExecutionException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String s, @NotNull String[] args) {
+ if (args.length == 1) {
+ try {
+ Database.QueryResult results = plugin.db.from("pvpcore_kits").execute().get();
+ if (!results.isEmpty()) {
+ List kitNames = new java.util.ArrayList<>();
+ for (Map row : results.data) {
+ Object nameObj = row.get("name");
+ if (nameObj != null) {
+ kitNames.add(nameObj.toString());
+ }
+ }
+ return kitNames;
+ }
+ } catch (InterruptedException | ExecutionException e) {
+ e.printStackTrace();
+ }
+ }
+ return List.of();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/lnmpro/Commands/LeaveCommand.java b/src/main/java/hu/jgj52/pvpcore/Commands/LeaveCommand.java
similarity index 91%
rename from src/main/java/lnmpro/Commands/LeaveCommand.java
rename to src/main/java/hu/jgj52/pvpcore/Commands/LeaveCommand.java
index 8dd8d39..fae3e1a 100644
--- a/src/main/java/lnmpro/Commands/LeaveCommand.java
+++ b/src/main/java/hu/jgj52/pvpcore/Commands/LeaveCommand.java
@@ -1,6 +1,6 @@
-package lnmpro.Commands;
+package hu.jgj52.pvpcore.Commands;
-import lnmpro.Main;
+import hu.jgj52.pvpcore.Main;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
@@ -25,7 +25,7 @@ public class LeaveCommand implements CommandExecutor, TabCompleter {
player.setHealth(0);
}
if (player.getMetadata("IsSpectating").get(0).asBoolean()) {
- plugin.removePlayerFromDuel(player);
+ plugin.tpToSpawn(player);
}
}
return true;
diff --git a/src/main/java/lnmpro/Commands/ResetArenasCommand.java b/src/main/java/hu/jgj52/pvpcore/Commands/ResetArenasCommand.java
similarity index 90%
rename from src/main/java/lnmpro/Commands/ResetArenasCommand.java
rename to src/main/java/hu/jgj52/pvpcore/Commands/ResetArenasCommand.java
index 3a4fd86..388979e 100644
--- a/src/main/java/lnmpro/Commands/ResetArenasCommand.java
+++ b/src/main/java/hu/jgj52/pvpcore/Commands/ResetArenasCommand.java
@@ -1,7 +1,7 @@
-package lnmpro.Commands;
+package hu.jgj52.pvpcore.Commands;
-import lnmpro.Main;
-import lnmpro.Utils.WorldReset;
+import hu.jgj52.pvpcore.Main;
+import hu.jgj52.pvpcore.Utils.WorldReset;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
diff --git a/src/main/java/lnmpro/Commands/SpectateCommand.java b/src/main/java/hu/jgj52/pvpcore/Commands/SpectateCommand.java
similarity index 96%
rename from src/main/java/lnmpro/Commands/SpectateCommand.java
rename to src/main/java/hu/jgj52/pvpcore/Commands/SpectateCommand.java
index b77ceda..2822c08 100644
--- a/src/main/java/lnmpro/Commands/SpectateCommand.java
+++ b/src/main/java/hu/jgj52/pvpcore/Commands/SpectateCommand.java
@@ -1,6 +1,6 @@
-package lnmpro.Commands;
+package hu.jgj52.pvpcore.Commands;
-import lnmpro.Main;
+import hu.jgj52.pvpcore.Main;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.command.Command;
diff --git a/src/main/java/hu/jgj52/pvpcore/Listeners/DuelEndListener.java b/src/main/java/hu/jgj52/pvpcore/Listeners/DuelEndListener.java
new file mode 100644
index 0000000..7eaa1d9
--- /dev/null
+++ b/src/main/java/hu/jgj52/pvpcore/Listeners/DuelEndListener.java
@@ -0,0 +1,229 @@
+package hu.jgj52.pvpcore.Listeners;
+
+import hu.jgj52.pvpcore.Main;
+import hu.jgj52.pvpcore.Utils.Database;
+import hu.jgj52.pvpcore.Utils.Kits;
+import hu.jgj52.pvpcore.Utils.SchematicManager;
+import net.kyori.adventure.text.format.NamedTextColor;
+import org.bukkit.*;
+import org.bukkit.entity.Firework;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.entity.PlayerDeathEvent;
+
+import java.time.Duration;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+import java.util.UUID;
+import java.util.concurrent.ExecutionException;
+
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.title.Title;
+import org.bukkit.inventory.meta.FireworkMeta;
+import org.bukkit.metadata.FixedMetadataValue;
+import org.bukkit.potion.PotionEffect;
+import org.bukkit.potion.PotionEffectType;
+import org.bukkit.scheduler.BukkitRunnable;
+
+import static java.util.Collections.min;
+
+public class DuelEndListener implements Listener {
+ private final Main plugin;
+
+ public DuelEndListener(Main plugin) {
+ this.plugin = plugin;
+ }
+
+ @EventHandler
+ public void onDuelEnd(PlayerDeathEvent e) throws ExecutionException, InterruptedException {
+ Player player = e.getPlayer();
+ boolean isEnemy = false;
+ Database.QueryResult result = plugin.db.from("pvpcore_duels").eq("player", player.getUniqueId()).execute().get();
+ if (result.isEmpty()) {
+ result = plugin.db.from("pvpcore_duels").eq("enemy", player.getUniqueId()).execute().get();
+ isEnemy = true;
+ }
+
+ Map row = result.data.get(0);
+ if (!result.isEmpty() && (row.get("ft") == row.get("player_points") || row.get("ft") == row.get("enemy_points"))) {
+ Player enemy = Bukkit.getPlayer(UUID.fromString(isEnemy ? row.get("player").toString() : row.get("enemy").toString()));
+ player.getInventory().clear();
+ enemy.getInventory().clear();
+ e.setCancelled(true);
+ player.setGameMode(GameMode.SPECTATOR);
+ Location playerLoc = player.getLocation();
+
+ Title winnerTitle = Title.title(
+ Component.text("§6🗡 §eMegnyerted a párbajt!"),
+ Component.empty(),
+ Title.Times.times(Duration.ofMillis(500), Duration.ofSeconds(3), Duration.ofMillis(1000))
+ );
+
+ Title loserTitle = Title.title(
+ Component.text("§4🗡 §cElvesztetted a párbajt!"),
+ Component.empty(),
+ Title.Times.times(Duration.ofMillis(500), Duration.ofSeconds(3), Duration.ofMillis(1000))
+ );
+
+ for (int i = 0; i < 3; i++) {
+ int delay = i * 10;
+ Bukkit.getScheduler().runTaskLater(plugin, () -> {
+ Firework firework = playerLoc.getWorld().spawn(playerLoc, Firework.class);
+ FireworkMeta meta = firework.getFireworkMeta();
+
+ FireworkEffect effect = FireworkEffect.builder()
+ .with(FireworkEffect.Type.BURST)
+ .withColor(
+ Color.fromRGB(2437522),
+ Color.fromRGB(14602026),
+ Color.fromRGB(6719955)
+ )
+ .build();
+
+ meta.addEffect(effect);
+ meta.setPower(1);
+ firework.setFireworkMeta(meta);
+ }, delay);
+ }
+
+ player.showTitle(loserTitle);
+ enemy.showTitle(winnerTitle);
+
+ Bukkit.getScheduler().runTaskLater(plugin, () -> {
+ try {
+ plugin.tpToSpawn(player);
+ plugin.tpToSpawn(enemy);
+ } catch (Exception exception) {
+ exception.printStackTrace();
+ }
+ }, 60L);
+
+ Map data = new HashMap<>();
+ data.put("player", row.get("player"));
+ data.put("enemy", row.get("enemy"));
+ data.put("ft", row.get("ft"));
+ data.put("kit", row.get("kit"));
+ data.put("winner", enemy.getUniqueId());
+ data.put("loser", player.getUniqueId());
+ data.put("player_points", row.get("player_points"));
+ data.put("enemy_points", row.get("enemy_points"));
+ data.put("started", row.get("started"));
+ data.put("ended", System.currentTimeMillis());
+ plugin.db.from("pvpcore_duel_logs").insert(data);
+ plugin.db.from("pvpcore_duels").eq(isEnemy ? "enemy" : "player", player.getUniqueId()).eq(isEnemy ? "player" : "enemy", enemy.getUniqueId()).delete();
+ } else if (!result.isEmpty() && row.get("ft") != row.get("player_points") && row.get("ft") != row.get("enemy_points")) {
+ Player enemy = Bukkit.getPlayer(UUID.fromString(isEnemy ? row.get("player").toString() : row.get("enemy").toString()));
+ Kits kitManager = new Kits(plugin);
+ SchematicManager schematic = new SchematicManager(plugin);
+
+ String gamemode = row.get("kit").toString();
+
+ Database.QueryResult kitResult = null;
+ try {
+ kitResult = plugin.db.from("pvpcore_kits")
+ .eq("name", gamemode)
+ .execute()
+ .get();
+ } catch (InterruptedException | ExecutionException ex) {
+ throw new RuntimeException(ex);
+ }
+
+ Map kitRow = kitResult.data.get(0);
+
+ player.getInventory().clear();
+ enemy.getInventory().clear();
+ e.setCancelled(true);
+ World world = Bukkit.getWorld("arenas");
+ boolean survival = Boolean.parseBoolean(kitRow.get("survival").toString());
+ String arena = kitRow.get("arena").toString();
+ int x = Integer.parseInt(kitRow.get("id").toString()) * 1000;
+ int y = 0;
+ int z;
+
+ if (plugin.usedArenas.isEmpty()) {
+ z = 0;
+ } else {
+ z = min(plugin.usedArenas) - 1000;
+ }
+
+ plugin.usedArenas.add(z);
+
+ schematic.placeSchematic(world, x, y, z, arena, true);
+ Location playerLoc = new Location(world, x + 20.5, y, z + 0.5, 90, 0);
+ Location enemyLoc = new Location(world, x - 20.5, y, z + 0.5, -90, 0);
+
+ for (PotionEffect potionEffect : player.getActivePotionEffects()) {
+ player.removePotionEffect(potionEffect.getType());
+ }
+ for (PotionEffect potionEffect : enemy.getActivePotionEffects()) {
+ enemy.removePotionEffect(potionEffect.getType());
+ }
+ player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW_FALLING, 20, 1), true);
+ enemy.addPotionEffect(new PotionEffect(PotionEffectType.SLOW_FALLING, 20, 1), true);
+ player.teleport(playerLoc);
+ enemy.teleport(enemyLoc);
+ try {
+ player.getInventory().setContents(kitManager.getKit(gamemode, player, false));
+ enemy.getInventory().setContents(kitManager.getKit(gamemode, enemy, false));
+ } catch (ExecutionException | InterruptedException ex) {
+ throw new RuntimeException(ex);
+ }
+ player.setHealth(20D);
+ enemy.setHealth(20D);
+ player.setFoodLevel(20);
+ enemy.setFoodLevel(20);
+ player.setSaturation(5);
+ enemy.setSaturation(5);
+ player.setGameMode(survival ? GameMode.SURVIVAL : GameMode.ADVENTURE);
+ enemy.setGameMode(survival ? GameMode.SURVIVAL : GameMode.ADVENTURE);
+
+ Map duelData = new HashMap<>();
+ duelData.put("player", row.get("player"));
+ duelData.put("enemy", row.get("enemy"));
+ duelData.put("ft", row.get("ft"));
+ duelData.put("kit", row.get("kit"));
+ duelData.put(isEnemy ? "player_points" : "enemy_points", Integer.parseInt(row.get(isEnemy ? "player_points" : "enemy_points").toString()) + 1);
+ duelData.put("started", row.get("started"));
+
+ plugin.db.from("pvpcore_duels").update(duelData);
+
+ player.setMetadata("Frozen", new FixedMetadataValue(plugin, true));
+ enemy.setMetadata("Frozen", new FixedMetadataValue(plugin, true));
+
+ new BukkitRunnable() {
+ int countdown = 3;
+
+ @Override
+ public void run() {
+ if (countdown > 0) {
+ Component titleText = Component.text(String.valueOf(countdown), NamedTextColor.AQUA);
+ Title title = Title.title(
+ titleText,
+ Component.empty(),
+ Title.Times.times(Duration.ZERO, Duration.ofSeconds(1), Duration.ZERO)
+ );
+ player.showTitle(title);
+ enemy.showTitle(title);
+ countdown--;
+ } else {
+ Title startTitle = Title.title(
+ Component.text("§eA párbaj megkezdődött!"),
+ Component.empty(),
+ Title.Times.times(Duration.ZERO, Duration.ofSeconds(2), Duration.ofSeconds(1))
+ );
+ player.showTitle(startTitle);
+ enemy.showTitle(startTitle);
+ player.removeMetadata("Frozen", plugin);
+ enemy.removeMetadata("Frozen", plugin);
+ cancel();
+ }
+ }
+ }.runTaskTimer(plugin, 0L, 20L);
+ } else {
+ e.setCancelled(true);
+ plugin.tpToSpawn(player);
+ }
+ }
+}
diff --git a/src/main/java/lnmpro/Listeners/DuelRequestListener.java b/src/main/java/hu/jgj52/pvpcore/Listeners/DuelRequestListener.java
similarity index 75%
rename from src/main/java/lnmpro/Listeners/DuelRequestListener.java
rename to src/main/java/hu/jgj52/pvpcore/Listeners/DuelRequestListener.java
index dceffd3..5607a9d 100644
--- a/src/main/java/lnmpro/Listeners/DuelRequestListener.java
+++ b/src/main/java/hu/jgj52/pvpcore/Listeners/DuelRequestListener.java
@@ -1,6 +1,7 @@
-package lnmpro.Listeners;
+package hu.jgj52.pvpcore.Listeners;
-import lnmpro.Main;
+import hu.jgj52.pvpcore.Main;
+import hu.jgj52.pvpcore.Utils.Database;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
@@ -9,15 +10,18 @@ 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.Inventory;
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 org.bukkit.inventory.meta.ItemMeta;
+import java.util.HashMap;
+import java.util.Map;
import java.util.UUID;
+import java.util.concurrent.ExecutionException;
public class DuelRequestListener implements Listener {
private final Main plugin;
@@ -36,37 +40,49 @@ public class DuelRequestListener implements Listener {
}
@EventHandler
- public void onDuelRequest(InventoryClickEvent e) {
+ public void onDuelRequest(InventoryClickEvent e) throws ExecutionException, InterruptedException {
Player player = (Player) e.getWhoClicked();
if (!e.getView().getTitle().equals("§9\uD83D\uDDE1 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 (clickedItem.getType() == Material.RED_STAINED_GLASS_PANE || clickedItem.getType() == Material.BLUE_STAINED_GLASS_PANE) return;
- if (player.hasMetadata("DuelRequest")) {
+ if (clickedItem.getType() == Material.PAPER) {
+ int count = clickedItem.getAmount();
+ if (e.getClick() == ClickType.LEFT) {
+ count++;
+ } else if (e.getClick() == ClickType.RIGHT) {
+ count--;
+ }
+ clickedItem.setAmount(count);
+ return;
+ }
+
+ if (e.getClick() != ClickType.LEFT) return;
+
+ Database.QueryResult result = plugin.db.from("pvpcore_duel_requests").eq("player", player.getUniqueId()).execute().get();
+
+ Map row = result.data.get(0);
+
+ if (!result.isEmpty()) {
e.setCancelled(true);
- UUID targetUUID = UUID.fromString(player.getMetadata("DuelRequest").get(0).asString());
- Player target = Bukkit.getPlayer(targetUUID);
+ Player target = Bukkit.getPlayer(UUID.fromString(row.get("enemy").toString()));
if (target == null) {
player.sendMessage("§cA meghívott játékos nincs jelen a szerveren.");
- player.removeMetadata("DuelRequest", plugin);
return;
}
- player.removeMetadata("DuelRequest", plugin);
-
String gamemode = ChatColor.stripColor(clickedItem.getItemMeta().getDisplayName().toLowerCase());
- plugin.duelRequests.computeIfAbsent(target.getUniqueId(), k -> new java.util.HashMap<>())
- .put(player.getUniqueId(), new Main.DuelRequestData(System.currentTimeMillis(), gamemode));
+ Map data = new HashMap<>();
+ data.put("kit", gamemode);
+ data.put("ft", e.getView().getInventory(0).getItem(4).getAmount());
+ plugin.db.from("pvpcore_duel_requests").update(data);
TextComponent accept = new TextComponent("§a[✔ Elfogadás]");
accept.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/acceptduel " + player.getName()));
@@ -85,7 +101,6 @@ public class DuelRequestListener implements Listener {
.append("§7Ellenfél: §e" + player.getName() + "\n")
.append("§7Opciók:\n")
.append("§8- §7Kör: §e1\n")
- .append("§8- §7Megfigyelők: §aBEKAPCSOLVA\n")
.create()));
TextComponent fullMessage = new TextComponent();
diff --git a/src/main/java/lnmpro/Listeners/FreezeListener.java b/src/main/java/hu/jgj52/pvpcore/Listeners/FreezeListener.java
similarity index 93%
rename from src/main/java/lnmpro/Listeners/FreezeListener.java
rename to src/main/java/hu/jgj52/pvpcore/Listeners/FreezeListener.java
index a257662..5de2f3e 100644
--- a/src/main/java/lnmpro/Listeners/FreezeListener.java
+++ b/src/main/java/hu/jgj52/pvpcore/Listeners/FreezeListener.java
@@ -1,4 +1,4 @@
-package lnmpro.Listeners;
+package hu.jgj52.pvpcore.Listeners;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
diff --git a/src/main/java/hu/jgj52/pvpcore/Listeners/KitListener.java b/src/main/java/hu/jgj52/pvpcore/Listeners/KitListener.java
new file mode 100644
index 0000000..69007cb
--- /dev/null
+++ b/src/main/java/hu/jgj52/pvpcore/Listeners/KitListener.java
@@ -0,0 +1,114 @@
+package hu.jgj52.pvpcore.Listeners;
+
+import hu.jgj52.pvpcore.Main;
+import hu.jgj52.pvpcore.Utils.Database;
+import hu.jgj52.pvpcore.Utils.Kits;
+import net.kyori.adventure.text.Component;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.inventory.InventoryClickEvent;
+import org.bukkit.event.inventory.InventoryCloseEvent;
+import org.bukkit.event.player.PlayerJoinEvent;
+import org.bukkit.inventory.ItemStack;
+import org.postgresql.util.PGobject;
+
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.ExecutionException;
+
+public class KitListener implements Listener {
+ private final Main plugin;
+ private final Kits kitsUtil;
+
+ public KitListener(Main plugin) {
+ this.plugin = plugin;
+ this.kitsUtil = new Kits(plugin);
+ }
+
+ @EventHandler
+ public void onInventoryClick(InventoryClickEvent event) throws ExecutionException, InterruptedException, SQLException {
+ if (!(event.getWhoClicked() instanceof Player player)) return;
+
+ if (event.getClickedInventory() == event.getView().getTopInventory()
+ && event.getView().title().equals(Component.text("Kit Editor"))) {
+ event.setCancelled(true);
+
+ boolean saveSlot = (0 <= event.getSlot() && event.getSlot() <= 2)
+ || (9 <= event.getSlot() && event.getSlot() <= 11)
+ || (18 <= event.getSlot() && event.getSlot() <= 20);
+
+ boolean cancelSlot = (6 <= event.getSlot() && event.getSlot() <= 8)
+ || (15 <= event.getSlot() && event.getSlot() <= 17)
+ || (24 <= event.getSlot() && event.getSlot() <= 26);
+
+ if (saveSlot) {
+ String gamemode = event.getClickedInventory().getItem(13).getItemMeta().getDisplayName().split(" ")[2];
+
+ ItemStack[] kit = kitsUtil.getKit(gamemode, player, true);
+
+ String base64Inv = Kits.itemStackArrayToBase64(player.getInventory().getContents());
+
+ Database.QueryResult plResult = plugin.db.from("pvpcore_players")
+ .eq("uuid", player.getUniqueId())
+ .execute()
+ .get();
+
+ Map playerKits;
+ if (!plResult.isEmpty()) {
+ Map playerRow = plResult.data.get(0);
+ Object kitsObj = playerRow.get("kits");
+ if (kitsObj != null) {
+ String playerKitsStr = kitsObj instanceof PGobject pg ? pg.getValue() : kitsObj.toString();
+ java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken