update
This commit is contained in:
@@ -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));
|
||||
|
||||
|
||||
37
src/main/java/lnmpro/Commands/LeaveCommand.java
Normal file
37
src/main/java/lnmpro/Commands/LeaveCommand.java
Normal 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();
|
||||
}
|
||||
}
|
||||
34
src/main/java/lnmpro/Commands/ResetArenasCommand.java
Normal file
34
src/main/java/lnmpro/Commands/ResetArenasCommand.java
Normal 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();
|
||||
}
|
||||
}
|
||||
44
src/main/java/lnmpro/Commands/SpectateCommand.java
Normal file
44
src/main/java/lnmpro/Commands/SpectateCommand.java
Normal 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;
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
31
src/main/java/lnmpro/Listeners/PlayerLeaveListener.java
Normal file
31
src/main/java/lnmpro/Listeners/PlayerLeaveListener.java
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
17
src/main/java/lnmpro/Listeners/SpectatorListener.java
Normal file
17
src/main/java/lnmpro/Listeners/SpectatorListener.java
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
134
src/main/java/lnmpro/Utils/WorldReset.java
Normal file
134
src/main/java/lnmpro/Utils/WorldReset.java
Normal 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();
|
||||
}
|
||||
}
|
||||
@@ -7,4 +7,8 @@ commands:
|
||||
duel:
|
||||
acceptduel:
|
||||
denyduel:
|
||||
editkit:
|
||||
editkit:
|
||||
resetarenas:
|
||||
permission: insaneduels.resetarenas
|
||||
spectate:
|
||||
leave:
|
||||
Reference in New Issue
Block a user