This commit is contained in:
2025-07-30 23:38:03 +02:00
parent 221118d04e
commit a3d9ad5e2c
27 changed files with 424 additions and 18 deletions

View File

@@ -6,11 +6,21 @@
<option name="name" value="Central Repository" />
<option name="url" value="https://repo.maven.apache.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="multiverse-public" />
<option name="name" value="multiverse-public" />
<option name="url" value="https://repo.onarandombox.com/public" />
</remote-repository>
<remote-repository>
<option name="id" value="sonatype" />
<option name="name" value="sonatype" />
<option name="url" value="https://oss.sonatype.org/content/groups/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="multiverse-multiverse-releases" />
<option name="name" value="multiverse-multiverse-releases" />
<option name="url" value="https://repo.onarandombox.com/multiverse-releases" />
</remote-repository>
<remote-repository>
<option name="id" value="papermc-repo" />
<option name="name" value="papermc-repo" />
@@ -31,5 +41,10 @@
<option name="name" value="enginehub" />
<option name="url" value="https://maven.enginehub.org/repo/" />
</remote-repository>
<remote-repository>
<option name="id" value="onarandombox" />
<option name="name" value="onarandombox" />
<option name="url" value="https://repo.onarandombox.com/content/groups/public/" />
</remote-repository>
</component>
</project>

View File

@@ -45,12 +45,32 @@
<id>sonatype</id>
<url>https://oss.sonatype.org/content/groups/public/</url>
</repository>
<repository>
<id>enginehub</id>
<url>https://maven.enginehub.org/repo/</url>
</repository>
<repository>
<id>multiverse-multiverse-releases</id>
<url>https://repo.onarandombox.com/multiverse-releases</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>io.papermc.paper</groupId>
<artifactId>paper-api</artifactId>
<version>1.21-R0.1-SNAPSHOT</version>
<version>1.21.1-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.sk89q.worldedit</groupId>
<artifactId>worldedit-bukkit</artifactId>
<version>7.3.9</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fastasyncworldedit</groupId>
<artifactId>FastAsyncWorldEdit-Bukkit</artifactId>
<version>2.13.0</version>
<scope>provided</scope>
</dependency>
</dependencies>

11
pom.xml
View File

@@ -63,6 +63,10 @@
<id>enginehub</id>
<url>https://maven.enginehub.org/repo/</url>
</repository>
<repository>
<id>multiverse-multiverse-releases</id>
<url>https://repo.onarandombox.com/multiverse-releases</url>
</repository>
</repositories>
<dependencies>
@@ -86,5 +90,12 @@
<version>2.13.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mvplugins.multiverse.core</groupId>
<artifactId>multiverse-core</artifactId>
<version>5.1.2</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>

View File

@@ -104,14 +104,14 @@ public class AcceptDuelCommand implements CommandExecutor, TabCompleter {
survival = true;
}
World world = Bukkit.getWorld("world");
World world = Bukkit.getWorld("arenas");
int y = 0;
int z;
if (plugin.usedArenas.isEmpty()) {
z = -2000;
} else {
z = min(plugin.usedArenas) - 1;
z = min(plugin.usedArenas) - 100;
}
plugin.usedArenas.add(z);
@@ -144,8 +144,6 @@ public class AcceptDuelCommand implements CommandExecutor, TabCompleter {
player.setMetadata("ArenaLoc", new FixedMetadataValue(plugin, new Location(world, x, y, z)));
enemy.setMetadata("ArenaLoc", new FixedMetadataValue(plugin, new Location(world, x, y, z)));
player.setMetadata("Frozen", new FixedMetadataValue(plugin, true));
enemy.setMetadata("Frozen", new FixedMetadataValue(plugin, true));

View File

@@ -0,0 +1,37 @@
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 LeaveCommand implements CommandExecutor, TabCompleter {
private final Main plugin;
public LeaveCommand(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("DuelingWith")) {
player.setHealth(0);
}
}
return true;
}
@Override
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String s, @NotNull String[] args) {
return List.of();
}
}

View File

@@ -0,0 +1,34 @@
package lnmpro.Commands;
import lnmpro.Main;
import lnmpro.Utils.WorldReset;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
public class ResetArenasCommand implements CommandExecutor, TabCompleter {
private final Main plugin;
public ResetArenasCommand(Main plugin) {
this.plugin = plugin;
}
@Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String s, @NotNull String[] args) {
WorldReset worldReset = new WorldReset(plugin);
worldReset.recreateArenaWorld();
plugin.usedArenas = new ArrayList<>();
return true;
}
@Override
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String s, @NotNull String[] args) {
return List.of();
}
}

View File

@@ -0,0 +1,44 @@
package lnmpro.Commands;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class SpectateCommand implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!(sender instanceof Player)) {
sender.sendMessage("nem vagy jatekos ez nem cica");
return true;
}
Player player = (Player) sender;
if (args.length != 1) {
player.sendMessage("§7[§9§lInsane§e§lDuels§7] §7» §cKell egy játékosnév is dumbass");
return true;
}
Player target = Bukkit.getPlayer(args[0]);
if (target == null || !target.isOnline()) {
player.sendMessage("§7[§9§lInsane§e§lDuels§7] §7» §cA játékos jelenleg nem elérhető");
return true;
}
if (!target.hasMetadata("DuelingWith") || target.getMetadata("DuelingWith").isEmpty()) {
player.sendMessage("§7[§9§lInsane§e§lDuels§7] §7» §cEz a játékos jelenleg nincs párbajban");
return true;
}
player.setGameMode(GameMode.SPECTATOR);
player.teleport(target);
player.sendMessage("§7[§9§lInsane§e§lDuels§7] §7» §aMostantól §e" + target.getName() + "§a párbaját figyeled!");
return true;
}
}

View File

@@ -10,7 +10,6 @@ import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;
import java.time.Duration;
import java.util.List;
import java.util.UUID;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.title.Title;
@@ -74,16 +73,8 @@ public class DuelEndListener implements Listener {
Bukkit.getScheduler().runTaskLater(plugin, () -> {
try {
Location spawn = new Location(Bukkit.getWorld("world"), 0, 3, 0, 0, 0);
player.setGameMode(GameMode.ADVENTURE);
enemy.setGameMode(GameMode.ADVENTURE);
player.teleport(spawn);
enemy.teleport(spawn);
Location arenaLoc = (Location) player.getMetadata("ArenaLoc").get(0).value();
Location loc1 = new Location(arenaLoc.getWorld(), arenaLoc.getX() - 36, arenaLoc.getY() - 4, arenaLoc.getZ() - 30);
Location loc2 = new Location(arenaLoc.getWorld(), arenaLoc.getX() + 36, arenaLoc.getY() + 11, arenaLoc.getZ() + 30);
schematic.removeSchematic(arenaLoc.getWorld(), loc1, loc2);
plugin.removePlayerFromDuel(player);
plugin.removePlayerFromDuel(enemy);
} catch (Exception exception) {
exception.printStackTrace();
}

View File

@@ -0,0 +1,31 @@
package lnmpro.Listeners;
import lnmpro.Main;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.metadata.MetadataValue;
public class PlayerLeaveListener implements Listener {
private final Main plugin;
public PlayerLeaveListener(Main plugin) {
this.plugin = plugin;
}
@EventHandler
public void onLeave(PlayerQuitEvent e) {
Player player = e.getPlayer();
for (String key : plugin.metadatas) {
for (MetadataValue value : player.getMetadata(key)) {
if (value.getOwningPlugin() == plugin) {
player.removeMetadata(key, plugin);
break;
}
}
}
if (player.hasMetadata("DuelingWith")) {
player.setHealth(0);
}
}
}

View File

@@ -0,0 +1,17 @@
package lnmpro.Listeners;
import org.bukkit.GameMode;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
public class SpectatorListener implements Listener {
@EventHandler
public void onSpectatorTeleport(PlayerTeleportEvent event) {
if (event.getPlayer().getGameMode() == GameMode.SPECTATOR && event.getCause() == TeleportCause.SPECTATE) {
event.setCancelled(true);
}
}
}

View File

@@ -1,17 +1,49 @@
package lnmpro;
import lnmpro.Utils.WorldReset;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.metadata.MetadataValue;
import org.bukkit.plugin.java.JavaPlugin;
import lnmpro.Commands.*;
import lnmpro.Listeners.*;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import java.util.ArrayList;
import java.util.List;
public final class Main extends JavaPlugin {
public final String[] metadatas = {"DuelingWith", "ArenaLoc", "Frozen", "DuelRequest", "DueledBy", "DueledWithGamemode"};
private static Main instance;
public void removePlayerFromDuel(Player player) {
Location spawn = new Location(Bukkit.getWorld("world"), 0, 3, 0, 0, 0);
for (PotionEffect potionEffect : player.getActivePotionEffects()) {
player.removePotionEffect(potionEffect.getType());
}
player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW_FALLING, 20, 1), true);
player.setHealth(20D);
player.setFoodLevel(20);
player.setSaturation(5);
player.setGameMode(GameMode.ADVENTURE);
player.teleport(spawn);
player.getInventory().clear();
for (String key : metadatas) {
for (MetadataValue value : player.getMetadata(key)) {
if (value.getOwningPlugin() == this) {
player.removeMetadata(key, this);
break;
}
}
}
}
@Override
public void onEnable() {
getConfig().options().copyDefaults(true);
@@ -22,15 +54,37 @@ public final class Main extends JavaPlugin {
getCommand("acceptduel").setExecutor(new AcceptDuelCommand(this));
getCommand("denyduel").setExecutor(new DenyDuelCommand(this));
getCommand("editkit").setExecutor(new EditKitCommand(this));
getCommand("resetarenas").setExecutor(new ResetArenasCommand(this));
getCommand("spectate").setExecutor(new SpectateCommand());
getCommand("leave").setExecutor(new LeaveCommand(this));
getServer().getPluginManager().registerEvents(new DuelRequestListener(this), this);
getServer().getPluginManager().registerEvents(new KitListener(this), this);
getServer().getPluginManager().registerEvents(new DuelEndListener(this), this);
getServer().getPluginManager().registerEvents(new FreezeListener(), this);
getServer().getPluginManager().registerEvents(new PlayerLeaveListener(this), this);
getServer().getPluginManager().registerEvents(new SpectatorListener(), this);
WorldReset worldReset = new WorldReset(this);
worldReset.recreateArenaWorld();
instance = this;
}
@Override
public void onDisable() {
for (Player player : Bukkit.getOnlinePlayers()) {
for (String key : metadatas) {
for (MetadataValue value : player.getMetadata(key)) {
if (value.getOwningPlugin() == this) {
player.removeMetadata(key, this);
break;
}
}
}
}
}
public static Main getInstance() {
return instance;
}

View File

@@ -0,0 +1,134 @@
package lnmpro.Utils;
import org.bukkit.*;
import org.bukkit.metadata.MetadataValue;
import org.bukkit.plugin.Plugin;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import java.io.File;
public class WorldReset {
private Plugin plugin;
public WorldReset(Plugin plugin) {
this.plugin = plugin;
}
public final String[] metadatas = {"DuelingWith", "ArenaLoc", "Frozen", "DuelRequest", "DueledBy", "DueledWithGamemode"};
public boolean recreateArenaWorld() {
String worldName = "arenas";
try {
removeArenaWorld(worldName);
Bukkit.getScheduler().runTaskLater(plugin, () -> {
createArenaWorld(worldName);
}, 20L);
return true;
} catch (Exception e) {
plugin.getLogger().severe("Error recreating arena world: " + e.getMessage());
e.printStackTrace();
return false;
}
}
private boolean removeArenaWorld(String worldName) {
try {
World world = Bukkit.getWorld(worldName);
if (world != null) {
world.getPlayers().forEach(player -> {
Location spawn = new Location(Bukkit.getWorld("world"), 0, 3, 0, 0, 0);
for (PotionEffect potionEffect : player.getActivePotionEffects()) {
player.removePotionEffect(potionEffect.getType());
}
player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW_FALLING, 20, 1), true);
player.setHealth(20D);
player.setFoodLevel(20);
player.setSaturation(5);
player.setGameMode(GameMode.ADVENTURE);
player.teleport(spawn);
for (String key : metadatas) {
for (MetadataValue value : player.getMetadata(key)) {
if (value.getOwningPlugin() == plugin) {
player.removeMetadata(key, plugin);
break;
}
}
}
player.sendMessage("§cszia resetel a map szoval tunes");
});
boolean unloaded = Bukkit.unloadWorld(world, false);
if (unloaded) {
File worldFolder = new File(Bukkit.getWorldContainer(), worldName);
if (worldFolder.exists()) {
deleteDirectory(worldFolder);
}
return true;
} else {
plugin.getLogger().warning("Failed to unload arena world.");
return false;
}
} else {
return true;
}
} catch (Exception e) {
plugin.getLogger().severe("Error removing arena world: " + e.getMessage());
return false;
}
}
private boolean createArenaWorld(String worldName) {
try {
WorldCreator creator = new WorldCreator(worldName)
.type(WorldType.FLAT)
.environment(World.Environment.NORMAL)
.generateStructures(false)
.generatorSettings("{\"layers\":[{\"block\":\"air\",\"height\":1}],\"biome\":\"plains\"}");
World world = creator.createWorld();
if (world != null) {
world.setSpawnFlags(false, false);
world.setTime(6000);
world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false);
world.setStorm(false);
world.setThundering(false);
world.setGameRule(GameRule.DO_WEATHER_CYCLE, false);
return true;
} else {
plugin.getLogger().severe("Failed to create arena world!");
return false;
}
} catch (Exception e) {
plugin.getLogger().severe("Error creating arena world: " + e.getMessage());
e.printStackTrace();
return false;
}
}
private boolean deleteDirectory(File directory) {
if (directory.exists()) {
File[] files = directory.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
deleteDirectory(file);
} else {
file.delete();
}
}
}
}
return directory.delete();
}
}

View File

@@ -8,3 +8,7 @@ commands:
acceptduel:
denyduel:
editkit:
resetarenas:
permission: insaneduels.resetarenas
spectate:
leave:

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -8,3 +8,7 @@ commands:
acceptduel:
denyduel:
editkit:
resetarenas:
permission: insaneduels.resetarenas
spectate:
leave:

View File

@@ -1,6 +1,12 @@
lnmpro/Listeners/FreezeListener.class
lnmpro/Listeners/PlayerLeaveListener.class
lnmpro/Commands/AcceptDuelCommand$1.class
lnmpro/Commands/ResetArenasCommand.class
lnmpro/Commands/DuelCommand.class
lnmpro/Listeners/DuelEndListener.class
lnmpro/Commands/SpectateCommand.class
lnmpro/Utils/SchematicManager.class
lnmpro/Utils/WorldReset.class
lnmpro/Listeners/SpectatorListener.class
lnmpro/Commands/LeaveCommand.class
lnmpro/Commands/EditKitCommand.class

View File

@@ -2,10 +2,16 @@
/home/jgj52/IdeaProjects/InsaneDuels/src/main/java/lnmpro/Commands/DenyDuelCommand.java
/home/jgj52/IdeaProjects/InsaneDuels/src/main/java/lnmpro/Commands/DuelCommand.java
/home/jgj52/IdeaProjects/InsaneDuels/src/main/java/lnmpro/Commands/EditKitCommand.java
/home/jgj52/IdeaProjects/InsaneDuels/src/main/java/lnmpro/Commands/LeaveCommand.java
/home/jgj52/IdeaProjects/InsaneDuels/src/main/java/lnmpro/Commands/ResetArenasCommand.java
/home/jgj52/IdeaProjects/InsaneDuels/src/main/java/lnmpro/Commands/SpectateCommand.java
/home/jgj52/IdeaProjects/InsaneDuels/src/main/java/lnmpro/Listeners/DuelEndListener.java
/home/jgj52/IdeaProjects/InsaneDuels/src/main/java/lnmpro/Listeners/DuelRequestListener.java
/home/jgj52/IdeaProjects/InsaneDuels/src/main/java/lnmpro/Listeners/FreezeListener.java
/home/jgj52/IdeaProjects/InsaneDuels/src/main/java/lnmpro/Listeners/KitListener.java
/home/jgj52/IdeaProjects/InsaneDuels/src/main/java/lnmpro/Listeners/PlayerLeaveListener.java
/home/jgj52/IdeaProjects/InsaneDuels/src/main/java/lnmpro/Listeners/SpectatorListener.java
/home/jgj52/IdeaProjects/InsaneDuels/src/main/java/lnmpro/Main.java
/home/jgj52/IdeaProjects/InsaneDuels/src/main/java/lnmpro/Utils/Kits.java
/home/jgj52/IdeaProjects/InsaneDuels/src/main/java/lnmpro/Utils/SchematicManager.java
/home/jgj52/IdeaProjects/InsaneDuels/src/main/java/lnmpro/Utils/WorldReset.java