diff --git a/pom.xml b/pom.xml index dc6ca70..b77262c 100644 --- a/pom.xml +++ b/pom.xml @@ -20,23 +20,15 @@ https://www.iani.de/nexus/content/groups/public - md5-repo - https://repo.md-5.net/content/groups/public/ - - - dmulloy2-repo - https://repo.dmulloy2.net/repository/public/ - - jitpack.io https://jitpack.io - dev.folia - folia-api - 1.19.4-R0.1-SNAPSHOT + io.papermc.paper + paper-api + 1.20.2-R0.1-SNAPSHOT provided @@ -64,12 +56,6 @@ provided - de.fanta - folianmsutils - 1.0 - provided - - commons-io commons-io 2.11.0 @@ -87,34 +73,13 @@ 2.0.0-SNAPSHOT provided - - com.github.megavexnetwork.scoreboard-library - scoreboard-library-api - 2.0.0-RC8 - - - com.github.megavexnetwork.scoreboard-library - scoreboard-library-implementation - 2.0.0-RC8 - - - com.github.megavexnetwork.scoreboard-library - scoreboard-library-packetevents - 2.0.0-RC8 - - - com.comphenix.protocol - ProtocolLib - 5.0.0-SNAPSHOT - provided - org.apache.maven.plugins maven-jar-plugin - 3.2.0 + 3.3.0 ${project.artifactId} @@ -127,32 +92,6 @@ 17 - - org.apache.maven.plugins - maven-shade-plugin - 3.3.0 - - - package - - shade - - - false - - - net.megavex.scoreboardlibrary.api - de.fanta.challenges.libs.scoreboardlibrary.api - - - net.megavex.scoreboardlibrary.implementation - de.fanta.challenges.libs.scoreboardlibrary.implementation - - - - - - diff --git a/src/main/java/de/fanta/challenges/Challenges.java b/src/main/java/de/fanta/challenges/Challenges.java index 4796446..44f59a6 100644 --- a/src/main/java/de/fanta/challenges/Challenges.java +++ b/src/main/java/de/fanta/challenges/Challenges.java @@ -1,7 +1,5 @@ package de.fanta.challenges; -import com.comphenix.protocol.ProtocolLibrary; -import com.comphenix.protocol.ProtocolManager; import de.cubeside.nmsutils.NMSUtils; import de.fanta.challenges.challenges.AllItemsChallenge; import de.fanta.challenges.challenges.MLGChallenge; @@ -18,7 +16,6 @@ import de.fanta.challenges.schedular.CancellableTask; import de.fanta.challenges.schedular.Scheduler; import de.fanta.challenges.scoreboard.BukkitScoreBoardManager; -import de.fanta.challenges.scoreboard.FoliaScoreBoardManager; import de.fanta.challenges.scoreboard.ScoreBoardMananger; import de.fanta.challenges.scoreboard.ScoreManager; import de.fanta.challenges.utils.ChatUtil; @@ -111,12 +108,7 @@ private static final String CubesideMod_ModChannel = "cubesidemod:data"; private Scheduler scheduler; - private boolean isFolia = false; - - private ProtocolManager protocolManager; - private ColorUtils colorUtils; - private Path challengeSavePath = new File("/home/storagebox/Challenge-saves").toPath(); private Path adventureSavePath = new File("/home/storagebox/Adventure-saves/").toPath(); @@ -126,11 +118,6 @@ @Override public void onEnable() { - if (getServer().getPluginManager().isPluginEnabled("ProtocolLib")) { - protocolManager = ProtocolLibrary.getProtocolManager(); - getLogger().log(Level.INFO, "ProtocolLib found"); - } - LOGGER = getLogger(); plugin = this; nmsUtils = getServer().getServicesManager().load(NMSUtils.class); @@ -178,12 +165,7 @@ new EventRegistration(this).registerEvents(); this.backpack.loadInventoryFromConfig(); - if (isFolia) { - this.sbManager = new FoliaScoreBoardManager(this); - } else { - this.sbManager = new BukkitScoreBoardManager(this); - } - + this.sbManager = new BukkitScoreBoardManager(this); getScheduler().runGlobalDelayed(() -> { plugin.setDayLightCircle(false); @@ -696,14 +678,6 @@ return scheduler; } - public boolean isFolia() { - return isFolia; - } - - public ProtocolManager getProtocolManager() { - return protocolManager; - } - public ColorUtils getColorUtils() { return colorUtils; } diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/ForceItemChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/ForceItemChallengeEvent.java index 9059812..5fc5019 100644 --- a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/ForceItemChallengeEvent.java +++ b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/ForceItemChallengeEvent.java @@ -106,7 +106,7 @@ skipItem = createSkipItem(); for (Material material : Material.values()) { - if (material.isItem() && !material.isAir() && !plugin.getNotAvailableMaterials().contains(material)) { + if (material.isItem() && !material.isAir() && !plugin.getNotAvailableMaterials().contains(material) && !material.name().contains("smithing_template".toUpperCase())) { materials.add(material); } } diff --git a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesCommand.java b/src/main/java/de/fanta/challenges/commands/challenges/ChallengesCommand.java index 48f0fce..8b3fc8c 100644 --- a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesCommand.java +++ b/src/main/java/de/fanta/challenges/commands/challenges/ChallengesCommand.java @@ -6,7 +6,10 @@ import de.iani.cubesideutils.commands.ArgsParser; import org.bukkit.Color; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.Particle; +import org.bukkit.World; +import org.bukkit.block.Block; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -23,7 +26,27 @@ public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { ChatUtil.sendNormalMessage(sender, "Challenges v" + plugin.getPluginMeta().getVersion() + " by " + (plugin.getPluginMeta().getAuthors() + "").replace("[", "").replace("]", "")); ChatUtil.sendNormalMessage(sender, "Nutze /challenges help für Hilfe"); + + if (sender instanceof Player player) { + createCopperGrid(player.getLocation(), 10); + } + return true; } + public static void createCopperGrid(Location center, int gridSize) { + int distance = 5; // Abstand zwischen den Kupferblöcken + + int startX = center.getBlockX() - (gridSize / 2) * distance; + int startZ = center.getBlockZ() - (gridSize / 2) * distance; + + for (int x = 0; x < gridSize; x++) { + for (int z = 0; z < gridSize; z++) { + Location blockLocation = new Location(center.getWorld(), startX + x * distance, center.getBlockY(), startZ + z * distance); + Block block = blockLocation.getBlock(); + block.setType(Material.COPPER_BLOCK); + } + } + } + } diff --git a/src/main/java/de/fanta/challenges/listeners/EventRegistration.java b/src/main/java/de/fanta/challenges/listeners/EventRegistration.java index 238c694..f84ba29 100644 --- a/src/main/java/de/fanta/challenges/listeners/EventRegistration.java +++ b/src/main/java/de/fanta/challenges/listeners/EventRegistration.java @@ -1,7 +1,6 @@ package de.fanta.challenges.listeners; import de.fanta.challenges.Challenges; -import de.fanta.challenges.Troll; import de.fanta.challenges.challenges.AllAdvancementsChallenge; import de.fanta.challenges.challenges.BedrockWallChallenge; import de.fanta.challenges.challenges.ChallengeEvents.BingoChallengeEvent; @@ -102,9 +101,5 @@ pM.registerEvents(new WorldBorderLevelChallenge(), plugin); pM.registerEvents(new CoordsTargeter(), plugin); } - - if (plugin.isFolia()) { - pM.registerEvents(new FoliaFixListener(plugin), plugin); - } } } diff --git a/src/main/java/de/fanta/challenges/listeners/FoliaFixListener.java b/src/main/java/de/fanta/challenges/listeners/FoliaFixListener.java deleted file mode 100644 index 0189fb1..0000000 --- a/src/main/java/de/fanta/challenges/listeners/FoliaFixListener.java +++ /dev/null @@ -1,106 +0,0 @@ -package de.fanta.challenges.listeners; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.schedular.CancellableTask; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerMoveEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import java.util.HashMap; -import java.util.UUID; - -import static org.bukkit.Bukkit.getServer; - -public class FoliaFixListener implements Listener { - - private final Challenges plugin; - - private final HashMap deadPlayers = new HashMap<>(); - private final HashMap playerLocationList = new HashMap<>(); - - public FoliaFixListener(Challenges plugin) { - this.plugin = plugin; - } - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent e) { - CancellableTask task = plugin.getScheduler().runOnEntityAtFixedRate(e.getPlayer(), () -> checkDeathPlayers(e.getPlayer()), 1L, 1L); - deadPlayers.put(e.getPlayer().getUniqueId(), task); - } - - private void checkDeathPlayers(Player player) { - if (player.isOnline()) { - if (!player.isDead()) { - if (!Config.getBoolean("respawn")) { - ChatUtil.sendTitleToPlayer(player, "Du bist gestorben!", ChatUtil.RED + "Du bist nun Zuschauer", ChatUtil.GREEN, 10, 80, 10, false); - plugin.getScheduler().runDelayedOnEntity(player, () -> player.setGameMode(GameMode.SPECTATOR), 1); - deadPlayers.remove(player.getUniqueId()).cancel(); - } - if (Config.getBoolean("nether.enabled")) { - Location spawn = Bukkit.getWorlds().get(1).getSpawnLocation(); - player.teleportAsync(spawn); - deadPlayers.remove(player.getUniqueId()).cancel(); - } - if (player.getBedSpawnLocation() == null && !Config.getBoolean("nether.enabled")) { - player.teleportAsync(getServer().getWorlds().get(0).getSpawnLocation().add(0.5, 1.0, 0.5)); - deadPlayers.remove(player.getUniqueId()).cancel(); - } - } - } else { - deadPlayers.remove(player.getUniqueId()).cancel(); - } - } - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent e) { - if (!e.getPlayer().hasPlayedBefore() && !Config.getBoolean("nether.enabled")) { - plugin.getScheduler().runDelayedOnEntity(e.getPlayer(), () -> e.getPlayer().teleportAsync(getServer().getWorlds().get(0).getSpawnLocation().add(0.5, 0.0, 0.5)), 1); - } - } - - @EventHandler - public void onPlayerQuit(PlayerQuitEvent e) { - if (deadPlayers.containsKey(e.getPlayer().getUniqueId())) { - deadPlayers.remove(e.getPlayer().getUniqueId()).cancel(); - } - } - - @EventHandler - public void onPlayerPortal(PlayerMoveEvent e) { - Block block = e.getPlayer().getLocation().getBlock(); - if (block.getType() != Material.NETHER_PORTAL) { - playerLocationList.put(e.getPlayer(), e.getPlayer().getLocation()); - return; - } - if (plugin.getTimer().isRunning()) { - if (Config.getBoolean("nether.enabled")) { - Location endspawn = Bukkit.getWorlds().get(2).getSpawnLocation().add(60, -15, 60); - plugin.getScheduler().runLocal(endspawn, () -> { - for (int x = endspawn.getBlockX() - 2; x <= endspawn.getBlockX() + 2; x++) { - for (int z = endspawn.getBlockZ() - 2; z <= endspawn.getBlockZ() + 2; z++) { - for (int y = endspawn.getBlockY(); y <= endspawn.getBlockY() + 3; y++) { - endspawn.getWorld().getBlockAt(x, y, z).setType(Material.AIR); - } - endspawn.getWorld().getBlockAt(x, endspawn.getBlockY() - 1, z).setType(Material.OBSIDIAN); - } - } - e.getPlayer().teleportAsync(endspawn); - }); - } - } else { - Location location = playerLocationList.get(e.getPlayer()); - e.getPlayer().teleportAsync(location.subtract(location.getDirection())); - } - } -} diff --git a/src/main/java/de/fanta/challenges/schedular/FoliaScheduler.java b/src/main/java/de/fanta/challenges/schedular/FoliaScheduler.java deleted file mode 100644 index 1be9b25..0000000 --- a/src/main/java/de/fanta/challenges/schedular/FoliaScheduler.java +++ /dev/null @@ -1,85 +0,0 @@ -package de.fanta.challenges.schedular; - -import de.fanta.challenges.Challenges; -import io.papermc.paper.threadedregions.scheduler.ScheduledTask; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.entity.Entity; - -import java.util.function.Consumer; - -public class FoliaScheduler implements Scheduler { - - private final Challenges plugin; - - public FoliaScheduler(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public void runAsync(Runnable task) { - Bukkit.getServer().getAsyncScheduler().runNow(this.plugin, scheduledTask -> task.run()); - } - - @Override - public void run(Runnable task) { - Bukkit.getServer().getGlobalRegionScheduler().run(this.plugin, scheduledTask -> task.run()); - } - - @Override - public void runLocal(Location location, Runnable task) { - Bukkit.getServer().getRegionScheduler().run(this.plugin, location, scheduledTask -> task.run()); - } - - @Override - public void runAtChunk(World world, int chunkX, int chunkZ, Runnable task) { - Bukkit.getServer().getRegionScheduler().run(this.plugin, world, chunkX, chunkZ, scheduledTask -> task.run()); - } - - @Override - public CancellableTask runGlobalDelayed(Runnable task, long delay) { - return Bukkit.getServer().getGlobalRegionScheduler().runDelayed(this.plugin, scheduledTask -> task.run(), delay)::cancel; - } - - @Override - public void runLocalDelayed(Location location, Runnable task, long delay) { - Bukkit.getServer().getRegionScheduler().runDelayed(this.plugin, location, scheduledTask -> task.run(), delay); - } - - @Override - public CancellableTask runLocalAtFixedRate(Location location, Runnable task, long delay, long period) { - return Bukkit.getServer().getRegionScheduler().runAtFixedRate(this.plugin, location, scheduledTask -> task.run(), delay, period)::cancel; - } - - @Override - public void runLocalAtFixedRate(Location location, Consumer taskConsumer, long delay, long period) { - Bukkit.getServer().getRegionScheduler().runAtFixedRate(this.plugin, location, scheduledTask -> taskConsumer.accept(scheduledTask::cancel), delay, period); - } - - @Override - public CancellableTask runGlobalAtFixedRate(Runnable task, long delay, long period) { - return Bukkit.getServer().getGlobalRegionScheduler().runAtFixedRate(this.plugin, scheduledTask -> task.run(), delay, period)::cancel; - } - - @Override - public void runGlobalAtFixedRate(Consumer taskConsumer, long delay, long period) { - Bukkit.getServer().getGlobalRegionScheduler().runAtFixedRate(this.plugin, scheduledTask -> taskConsumer.accept(scheduledTask::cancel), delay, period); - } - - @Override - public CancellableTask runOnEntityAtFixedRate(Entity entity, Runnable task, long delay, long period) { - ScheduledTask createdTask = entity.getScheduler().runAtFixedRate(this.plugin, scheduledTask -> task.run(), null, delay, period); - return createdTask == null ? null : createdTask::cancel; - } - - @Override - public void runOnEntityAtFixedRate(Entity entity, Consumer taskConsumer, long delay, long period) { - entity.getScheduler().runAtFixedRate(this.plugin, scheduledTask -> taskConsumer.accept(scheduledTask::cancel), null, delay, period); - } - - @Override - public void runDelayedOnEntity(Entity entity, Runnable task, long delay) { - entity.getScheduler().runDelayed(this.plugin, scheduledTask -> task.run(), null, delay); - } -} diff --git a/src/main/java/de/fanta/challenges/scoreboard/FoliaScoreBoardManager.java b/src/main/java/de/fanta/challenges/scoreboard/FoliaScoreBoardManager.java deleted file mode 100644 index 6ed166f..0000000 --- a/src/main/java/de/fanta/challenges/scoreboard/FoliaScoreBoardManager.java +++ /dev/null @@ -1,105 +0,0 @@ -package de.fanta.challenges.scoreboard; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.ServerType; -import de.fanta.challenges.teams.ChallengeTeam; -import net.kyori.adventure.text.format.NamedTextColor; -import net.megavex.scoreboardlibrary.api.ScoreboardLibrary; -import net.megavex.scoreboardlibrary.api.exception.NoPacketAdapterAvailableException; -import net.megavex.scoreboardlibrary.api.sidebar.Sidebar; -import net.megavex.scoreboardlibrary.api.team.ScoreboardTeam; -import net.megavex.scoreboardlibrary.api.team.TeamDisplay; -import net.megavex.scoreboardlibrary.api.team.TeamManager; -import org.bukkit.entity.Player; - -import java.util.logging.Level; - -public class FoliaScoreBoardManager implements ScoreBoardMananger { - - private final Challenges plugin; - private ScoreboardLibrary scoreboardLibrary; - private final TeamManager teamManager; - - private TeamDisplay teamDisplay; - private Sidebar sidebar; - private ScoreboardTeam team; - - public FoliaScoreBoardManager(Challenges plugin) { - this.plugin = plugin; - - - try { - this.scoreboardLibrary = ScoreboardLibrary.loadScoreboardLibrary(plugin); - } catch (NoPacketAdapterAvailableException ex) { - plugin.getLogger().log(Level.SEVERE, "ScoreboardLibrary could not be loaded.", ex); - } - teamManager = scoreboardLibrary.createTeamManager(); - } - - @Override - public void initScoreboard() { - this.sidebar = scoreboardLibrary.createSidebar(); - this.team = teamManager.createIfAbsent("Player"); - - teamDisplay = team.defaultDisplay(); - teamDisplay.playerColor(NamedTextColor.GREEN); - - updateTabHP(); - } - - @Override - public void setScoreboardtoPlayer(Player p) { - if (this.sidebar == null) { - if (plugin.getServerType() != ServerType.ADVENTURE) { - initScoreboard(); - } - } - - sidebar.addPlayer(p); - teamManager.addPlayer(p); - teamDisplay.addEntry(p.getName()); - } - - @Override - public void setScoreboardtoTeam(ChallengeTeam challengeTeam) { - } - - @Override - public void removeScoreboard(Player p) { - if (team != null) { - if (plugin.getServerType() != ServerType.ADVENTURE) { - teamManager.removePlayer(p); - teamDisplay.removeEntry(p.getName()); - } - } - - } - - @Override - public void removeAllFromScoreboard() { - sidebar.removePlayers(sidebar.players()); - } - - @Override - public int countScoreboardPlayers() { - return team.teamManager().players().size(); - } - - @Override - public void updateTabHP() { - } - - @Override - public void updateEventScoreboard() { - } - - @Override - public void updateEventScore(Scorable s) { - - } - - @Override - public Object getScoreboard() { - return sidebar; - } -} diff --git a/src/main/java/de/fanta/challenges/utils/SaveWorldUtils.java b/src/main/java/de/fanta/challenges/utils/SaveWorldUtils.java index 06b4e1e..1c99518 100644 --- a/src/main/java/de/fanta/challenges/utils/SaveWorldUtils.java +++ b/src/main/java/de/fanta/challenges/utils/SaveWorldUtils.java @@ -69,41 +69,10 @@ } NMSUtils nms = plugin.getNMSUtils(); if (nms != null) { - if (!plugin.isFolia()) { - for (World world : Bukkit.getWorlds()) { - nms.getWorldUtils().saveWorldNow(world); - } - return copyWorldAsync(player, saveID, saveSlot); - } else { - ArrayList> allTasks = new ArrayList<>(); - for (World world : Bukkit.getWorlds()) { - for (Chunk chunk : world.getLoadedChunks()) { - CompletableFuture future = new CompletableFuture<>(); - allTasks.add(future); - Bukkit.getServer().getRegionScheduler().run(plugin, world, chunk.getX(), chunk.getZ(), scheduledTask -> { - try { - nms.getWorldUtils().saveChunkNow(chunk); - } finally { - future.complete(null); - } - }); - } - } - - World world = Bukkit.getWorld("world"); - de.fanta.folianmsutils.NMSUtils foliaNMS = plugin.getServer().getServicesManager().load(de.fanta.folianmsutils.NMSUtils.class); - foliaNMS.getWorldUtils().saveLevelDat(world); - CompletableFuture waitForAll = CompletableFuture.allOf(allTasks.toArray(new CompletableFuture[0])); - plugin.getScheduler().runAsync(() -> { - try { - waitForAll.get(); - nms.getWorldUtils().flushChunkSaves(); - copyWorldAsync(player, saveID, saveSlot); - } catch (InterruptedException | ExecutionException e) { - throw new RuntimeException(e); - } - }); + for (World world : Bukkit.getWorlds()) { + nms.getWorldUtils().saveWorldNow(world); } + return copyWorldAsync(player, saveID, saveSlot); } } catch (Exception ex) { plugin.getLogger().log(Level.SEVERE, "Welt konnte nicht gespeichert werden", ex); @@ -229,7 +198,6 @@ Bukkit.shutdown(); } - } private static void setSeedInServerProperties(@Nullable String seed) { diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index bc15e80..f62427f 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -4,8 +4,7 @@ author: ${project.author} api-version: 1.16 depend: [CubesideUtils, VanishNoPacket, GlobalPort, CubesideNMSUtils, PlayerUUIDCache] -softdepend: [CubesideStatistics, ProtocolLib, FoliaNMSUtils, packetevents] -folia-supported: true +softdepend: [CubesideStatistics] commands: hp: description: Verwalte die HP eines Spielers