diff --git a/Adventure/pom.xml b/Adventure/pom.xml new file mode 100644 index 0000000..8ac01c7 --- /dev/null +++ b/Adventure/pom.xml @@ -0,0 +1,34 @@ + + 4.0.0 + Adventure + + de.fanta.adventure.Adventure + + + ChallengeSystem + de.fanta + 0.0.1-SNAPSHOT + ../pom.xml + + + + de.iani.cubeside + CubesideStatistics + 1.0.0-SNAPSHOT + provided + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + ${project.artifactId} + + + + + diff --git a/Adventure/src/main/java/de/fanta/adventure/Adventure.java b/Adventure/src/main/java/de/fanta/adventure/Adventure.java new file mode 100644 index 0000000..6693f57 --- /dev/null +++ b/Adventure/src/main/java/de/fanta/adventure/Adventure.java @@ -0,0 +1,17 @@ +package de.fanta.adventure; + +import org.bukkit.plugin.java.JavaPlugin; + +public final class Adventure extends JavaPlugin { + + @Override + public void onEnable() { + // Plugin startup logic + + } + + @Override + public void onDisable() { + // Plugin shutdown logic + } +} diff --git a/Adventure/src/main/resources/plugin.yml b/Adventure/src/main/resources/plugin.yml new file mode 100644 index 0000000..79a197a --- /dev/null +++ b/Adventure/src/main/resources/plugin.yml @@ -0,0 +1,4 @@ +name: ChallengeCore +version: '${project.version}' +main: de.fanta.challengecore.ChallengeCore +api-version: '1.20' diff --git a/Challenge/pom.xml b/Challenge/pom.xml new file mode 100644 index 0000000..a04608c --- /dev/null +++ b/Challenge/pom.xml @@ -0,0 +1,34 @@ + + 4.0.0 + Challenge + + de.fanta.challenge.Challenge + + + ChallengeSystem + de.fanta + 0.0.1-SNAPSHOT + ../pom.xml + + + + de.iani.cubeside + CubesideStatistics + 1.0.0-SNAPSHOT + provided + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + ${project.artifactId} + + + + + diff --git a/Challenge/src/main/java/de/fanta/challenge/Challenges.java b/Challenge/src/main/java/de/fanta/challenge/Challenges.java new file mode 100644 index 0000000..e5e698b --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/Challenges.java @@ -0,0 +1,688 @@ +package de.fanta.challenge; + +import com.destroystokyo.paper.profile.PlayerProfile; +import de.cubeside.nmsutils.NMSUtils; +import de.fanta.challenge.challenges.AllItemsChallenge; +import de.fanta.challenge.challenges.MLGChallenge; +import de.fanta.challenge.challenges.RandomDropsChallenge; +import de.fanta.challenge.commands.CommandRegistration; +import de.fanta.challenge.events.ChallengeEventStatusChangedEvent; +import de.fanta.challenge.events.EventStatusChangedEvent; +import de.fanta.challenge.events.PlayerCountChangedEvent; +import de.fanta.challenge.events.ServerStatusChangedEvent; +import de.fanta.challenge.events.TimerChangedEvent; +import de.fanta.challenge.guis.BackpackGui; +import de.fanta.challenge.listeners.EventRegistration; +import de.fanta.challenge.schedular.BukkitScheduler; +import de.fanta.challenge.schedular.CancellableTask; +import de.fanta.challenge.schedular.Scheduler; +import de.fanta.challenge.scoreboard.BukkitScoreBoardManager; +import de.fanta.challenge.scoreboard.ScoreBoardMananger; +import de.fanta.challenge.scoreboard.ScoreManager; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.ColorUtils; +import de.fanta.challenge.utils.Config; +import de.fanta.challenge.utils.Statistics; +import de.fanta.challenge.utils.VanishUtils; +import de.fanta.challenge.waypoints.WaypointManager; +import de.iani.cubesidestats.api.CubesideStatisticsAPI; +import de.iani.playerUUIDCache.PlayerUUIDCache; +import de.speedy64.globalport.GlobalApi; +import io.papermc.paper.ban.BanListType; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; +import org.apache.commons.io.FileUtils; +import org.bukkit.BanList; +import org.bukkit.Bukkit; +import org.bukkit.Difficulty; +import org.bukkit.GameRule; +import org.bukkit.Material; +import org.bukkit.OfflinePlayer; +import org.bukkit.World; +import org.bukkit.advancement.Advancement; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +import org.jetbrains.annotations.NotNull; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Random; +import java.util.UUID; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.stream.Collectors; + +public class Challenges extends JavaPlugin { + + public static Logger LOGGER; + private static Challenges plugin; + public File RndDropsConfigFile; + public FileConfiguration RndDropsConfig; + public FileConfiguration AllItemsConfig; + public FileConfiguration ServerConfig; + public File serverConfigFile; + public RandomDropsChallenge rndDrops; + public NMSUtils nmsUtils; + public PlayerUUIDCache playerUUIDCache; + public String texturepacklink = null; + public CancellableTask resetTask; + public boolean reset = false; + private TextComponent prefixComponent; + private TextComponent guiPrefix; + private File backpackConfigFile; + private FileConfiguration BackpackConfig; + private File AllItemsConfigFile; + private Timer timer; + private VanishUtils vanish; + private BackpackGui backpack; + private ScoreBoardMananger sbManager; + private ScoreManager scoreManager; + private Player currentEditor; + + private OfflinePlayer firstEditor; + + private boolean waitingForShutdown; + + private ServerType serverType; + + public FileConfiguration ItemConfig; + public File ItemConfigFile; + + private static final ArrayList not_available_materials = new ArrayList<>(); + private static final ArrayList materials = new ArrayList<>(); + private static final ArrayList advancements = new ArrayList<>(); + + private CubesideStatisticsAPI cubesideStatistics; + + private Statistics statistics; + + private static final ArrayList statisticPlayers = new ArrayList<>(); + + private static final ArrayList bannedPlayers = new ArrayList<>(); + + public boolean resetwithseed; + + private static final String CubesideMod_ModChannel = "cubesidemod:data"; + private Scheduler scheduler; + private ColorUtils colorUtils; + private final Path challengeSavePath = new File("/home/storagebox/Challenge-saves").toPath(); + private final Path adventureSavePath = new File("/home/storagebox/Adventure-saves/").toPath(); + + private WaypointManager waypointMananger; + + public static Challenges getPlugin() { + return plugin; + } + + @Override + public void onEnable() { + LOGGER = getLogger(); + plugin = this; + nmsUtils = getServer().getServicesManager().load(NMSUtils.class); + playerUUIDCache = (PlayerUUIDCache) Bukkit.getPluginManager().getPlugin("PlayerUUIDCache"); + try { + cubesideStatistics = getServer().getServicesManager().load(CubesideStatisticsAPI.class); + } catch (NoClassDefFoundError ex) { + cubesideStatistics = null; + } + + if (isCubesideStatisticsInstalled()) { + statistics = new Statistics(this); + } + + getLogger().log(Level.INFO, "Bukkit found. Use Bukkit Scheduler"); + scheduler = new BukkitScheduler(this); + + colorUtils = new ColorUtils(this); + this.timer = new Timer(this); + this.rndDrops = new RandomDropsChallenge(); + + this.scoreManager = new ScoreManager(this); + this.vanish = new VanishUtils(this); + + saveDefaultConfig(); + reloadConfig(); + createServerConfig(); + createItemConfig(); + + serverType = ServerType.valueOf(getServerConfig().getString("servertype")); + + String prefix = serverType.getPrefix(); + prefixComponent = Component.text("[").color(ChatUtil.BLUE).append(Component.text(prefix).color(ChatUtil.GREEN)).append(Component.text("] ").color(ChatUtil.BLUE)); + guiPrefix = Component.text(prefix).color(ChatUtil.GREEN); + + createRndDropsConfig(); + createAllItemsConfig(); + createBackpackConfig(); + + this.backpack = new BackpackGui(Config.getInt("backpack_size") * 9); + + new CommandRegistration(this).registerCommands(); + new EventRegistration(this).registerEvents(); + + this.backpack.loadInventoryFromConfig(); + this.sbManager = new BukkitScoreBoardManager(this); + + getScheduler().runGlobalDelayed(() -> { + plugin.setDayLightCircle(false); + MLGChallenge.checkMLGWorld(); + setPvP(Config.getBoolean("pvp")); + if (plugin.getServerType() != ServerType.ADVENTURE) { + plugin.getSBManager().initScoreboard(); + } + }, 1L); + + resetwithseed = Config.getBoolean("resetwithseed"); + + if (Config.getBoolean("World_Reset") && (serverType == ServerType.CHALLENGE || serverType == ServerType.CHALLENGE_EVENT)) { + if (!Config.getBoolean("firsttimerstart")) { + timer.setTime(0); + } + File config = new File(plugin.getDataFolder(), "config.yml"); + config.delete(); + reloadConfig(); + saveConfig(); + this.backpack.clearConfig(); + this.rndDrops.shuffleItems(); + this.rndDrops.saveItems(); + this.rndDrops.loadItems(); + } else { + this.getBackpack().resize(Config.getInt("backpack_size") * 9); + this.rndDrops.loadItems(); + this.backpack.loadInventoryFromConfig(); + timer.setTime(getConfig().getInt("timertime")); + } + + waypointMananger = new WaypointManager(this); + + if (plugin.getServerType() == ServerType.ADVENTURE) { + File texturepack = new File("world/resources.zip"); + if (texturepack.exists()) { + File mapConfigFile = new File("plugins/Challenges/serverconfig.yml"); + YamlConfiguration mapConfig = YamlConfiguration.loadConfiguration(mapConfigFile); + String texturepackname = mapConfig.getString("displayItem.name"); + String textureID = texturepackname != null ? texturepackname.replace("§", "").replace(" ", "_") : UUID.randomUUID().toString(); + + File texturepackdownload = new File("/home/web/fanta/AdventureMap-TexturePacks/" + textureID + "/"); + File temp = new File(textureID); + + try { + if (!texturepackdownload.isDirectory()) { + FileUtils.forceMkdir(temp); + FileUtils.copyFileToDirectory(texturepack, temp, false); + File renameTP = new File(textureID + "/" + "resources.zip"); + File renamedTP = new File(textureID + "/" + textureID + ".zip"); + renameTP.renameTo(renamedTP); + if (temp.isDirectory()) { + FileUtils.moveDirectory(temp, texturepackdownload); + } else { + Challenges.getPlugin().getLogger().info("Ordner nicht da!"); + } + } + texturepacklink = "https://fantacs.de/AdventureMap-TexturePacks/" + textureID + "/" + textureID + ".zip"; + } catch (IOException e) { + plugin.getLogger().log(Level.SEVERE, "Error while move directory", e); + } + } + getConfig().set("showtimer", false); + } else { + getConfig().set("showtimer", true); + } + + for (String string : getItemConfig().getStringList("items")) { + try { + Material material = Material.valueOf(string); + not_available_materials.add(material); + } catch (IllegalArgumentException ex) { + Challenges.getPlugin().getLogger().log(Level.INFO, "Some items could not be loaded into the ItemGroup"); + } + + } + + for (Material material : Material.values()) { + if (material.isItem() && !material.isAir()) { + materials.add(material); + } + } + + if (getConfig().getBoolean("allitems")) { + AllItemsChallenge.start(); + } + + if (serverType != ServerType.ADVENTURE) { + for (@NotNull Iterator it = Bukkit.advancementIterator(); it.hasNext(); ) { + Advancement advancement = it.next(); + if (advancement.getDisplay() != null) { + advancements.add(advancement); + } + } + } + + if (getServerType() == ServerType.CHALLENGE) { + if (resetwithseed) { + Config.setValue("editsettings", true); + } + } else { + Config.setValue("editsettings", true); + } + + for (String UUIDString : Config.getStringList("bannedPlayers")) { + addBannedPlayer(UUID.fromString(UUIDString), false); + } + + if (plugin.getServerType() == ServerType.ADVENTURE || plugin.getServerType() == ServerType.CHALLENGE_LOAD) { + startResetTask(); + } + + getServer().getMessenger().registerOutgoingPluginChannel(this, CubesideMod_ModChannel); + + plugin.getScheduler().runGlobalDelayed(() -> { + EventRegistration.pM.callEvent(new ServerStatusChangedEvent(true)); + EventRegistration.pM.callEvent(new TimerChangedEvent(timer.isRunning())); + EventRegistration.pM.callEvent(new PlayerCountChangedEvent(Bukkit.getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers())); + }, 200L); + getLogger().info("Plugin loaded!"); + } + + @Override + public void onDisable() { + BanList banList = Bukkit.getBanList(BanListType.PROFILE); + banList.getEntries().forEach(banEntry -> banList.pardon((PlayerProfile) banEntry)); + if (!getConfig().getBoolean("World_Reset")) { + this.backpack.saveInventoryToConfig(); + Config.setValue("backpack_size", backpack.getSize() / 9); + } else if (serverType == ServerType.CHALLENGE || serverType == ServerType.CHALLENGE_EVENT) { + this.backpack.clearConfig(); + } + try { + this.RndDropsConfig.save(this.RndDropsConfigFile); + this.AllItemsConfig.save(this.getAllItemsConfigFile()); + } catch (IOException e) { + plugin.getLogger().log(Level.SEVERE, "Error while saving configs", e); + } + Config.setValue("timertime", timer.getTime()); + if (getConfig().getBoolean("event.enabled")) { + Config.setValue("event.enabled", false); + Bukkit.getPluginManager().callEvent(new EventStatusChangedEvent(false)); + Bukkit.getPluginManager().callEvent(new ChallengeEventStatusChangedEvent(false)); + getScoreManager().saveScores(null); + } + + saveConfig(); + getLogger().info("Plugin unloaded"); + } + + public RandomDropsChallenge getRandomDropsManager() { + return this.rndDrops; + } + + public FileConfiguration getBackpackConfig() { + return this.BackpackConfig; + } + + private void createBackpackConfig() { + this.backpackConfigFile = new File(getDataFolder(), "backpack.yml"); + if (!this.backpackConfigFile.exists()) { + this.backpackConfigFile.getParentFile().mkdirs(); + saveResource("backpack.yml", false); + } + this.BackpackConfig = new YamlConfiguration(); + try { + this.BackpackConfig.load(this.backpackConfigFile); + } catch (InvalidConfigurationException | IOException e) { + plugin.getLogger().log(Level.SEVERE, "Error while loading Backpack", e); + } + } + + public FileConfiguration getRndDropsConfig() { + return this.RndDropsConfig; + } + + private void createRndDropsConfig() { + this.RndDropsConfigFile = new File(getDataFolder(), "rnddrops.yml"); + if (!this.RndDropsConfigFile.exists()) { + this.RndDropsConfigFile.getParentFile().mkdirs(); + saveResource("rnddrops.yml", false); + } + this.RndDropsConfig = new YamlConfiguration(); + try { + this.RndDropsConfig.load(this.RndDropsConfigFile); + } catch (IOException | org.bukkit.configuration.InvalidConfigurationException e) { + plugin.getLogger().log(Level.SEVERE, "Error while load RandomDrops Config", e); + } + } + + public FileConfiguration getAllItemsConfig() { + return this.AllItemsConfig; + } + + private void createAllItemsConfig() { + this.AllItemsConfigFile = new File(getDataFolder(), "allitems.yml"); + if (!AllItemsConfigFile.exists() || ((serverType == ServerType.CHALLENGE || serverType == ServerType.CHALLENGE_EVENT) && Config.getBoolean("World_Reset"))) { + this.getAllItemsConfigFile().getParentFile().mkdirs(); + saveResource("allitems.yml", true); + } + this.AllItemsConfig = new YamlConfiguration(); + try { + this.AllItemsConfig.load(this.AllItemsConfigFile); + } catch (IOException | org.bukkit.configuration.InvalidConfigurationException e) { + plugin.getLogger().log(Level.SEVERE, "Error while loading AllItems Config", e); + } + } + + public FileConfiguration getServerConfig() { + return ServerConfig; + } + + public void saveServerConfig() { + try { + ServerConfig.save(serverConfigFile); + } catch (IOException e) { + getLogger().log(Level.SEVERE, "Error while saving Server Config", e); + } + } + + private void createServerConfig() { + serverConfigFile = new File(getDataFolder(), "serverconfig.yml"); + if (!serverConfigFile.exists()) { + serverConfigFile.getParentFile().mkdirs(); + saveResource("serverconfig.yml", false); + } + this.ServerConfig = new YamlConfiguration(); + try { + ServerConfig.load(serverConfigFile); + } catch (IOException | InvalidConfigurationException e) { + plugin.getLogger().log(Level.SEVERE, "Error while loading Server Config", e); + } + } + + public FileConfiguration getItemConfig() { + return ItemConfig; + } + + private void createItemConfig() { + ItemConfigFile = new File(getDataFolder(), "items.yml"); + ItemConfigFile.getParentFile().mkdirs(); + saveResource("items.yml", true); + this.ItemConfig = new YamlConfiguration(); + try { + ItemConfig.load(ItemConfigFile); + } catch (IOException | InvalidConfigurationException e) { + plugin.getLogger().log(Level.SEVERE, "Error while loading Item Config", e); + } + } + + public ScoreBoardMananger getSBManager() { + return this.sbManager; + } + + public Player getCurrentEditor() { + return currentEditor; + } + + public void setCurrentEditor(Player currentEditor) { + this.currentEditor = currentEditor; + plugin.setFirstEditor(currentEditor); + if (currentEditor != null) { + ChatUtil.sendNormalMessage(currentEditor, "Du bist nun der Editor dieser Lobby!"); + ChatUtil.sendNormalMessage(currentEditor, "Alle Befehle und Funktionen vom Challenge Plugin findest du in unserem Wiki."); + ChatUtil.sendNormalMessage(currentEditor, "Hier Klicken --> https://wiki.cubeside.de/Challenge"); + ChatUtil.sendBrodCastMessage(Component.text(currentEditor.getName(), ChatUtil.BLUE).append(Component.text(" ist nun der Editor dieser Lobby!", ChatUtil.GREEN))); + } + } + + public OfflinePlayer getFirstEditor() { + return firstEditor; + } + + public void setFirstEditor(Player firstEditor) { + if (this.firstEditor == null) { + this.firstEditor = firstEditor; + } + } + + public void updateEditor() { + Random random = new Random(); + Player randomPlayer = null; + Player oldEditor = plugin.getCurrentEditor(); + + List onlinePlayersWithPermission = Bukkit.getOnlinePlayers().stream().filter(p -> p.hasPermission("Challenges.editor")).distinct().collect(Collectors.toList()); + onlinePlayersWithPermission.remove(oldEditor); + if (!onlinePlayersWithPermission.isEmpty()) { + int rnd = random.nextInt(onlinePlayersWithPermission.size()); + randomPlayer = onlinePlayersWithPermission.get(rnd); + } else { + ArrayList onlinePlayers = Bukkit.getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toCollection(ArrayList::new)); + List vanishPlayers = plugin.getVanish().getVanishPlayerList(); + onlinePlayers.removeAll(vanishPlayers); + onlinePlayers.remove(oldEditor.getName()); + + if (!onlinePlayers.isEmpty()) { + int rnd = random.nextInt(onlinePlayers.size()); + randomPlayer = Bukkit.getPlayer(onlinePlayers.get(rnd)); + } + } + plugin.setCurrentEditor(randomPlayer); + } + + public boolean hasEditor() { + return currentEditor != null; + } + + public boolean isEditor(Player player) { + return hasEditor() && currentEditor.getUniqueId().equals(player.getUniqueId()); + } + + public void startResetTask() { + getLogger().info("Start Reset Task"); + resetTask = plugin.getScheduler().runGlobalDelayed(() -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "reset confirm"), 3 * 60 * 20); + reset = true; + } + + public void stopResetTask() { + getLogger().info("Stop Reset Task"); + resetTask.cancel(); + resetTask = null; + reset = false; + } + + public void setPvP(Boolean value) { + for (World w : plugin.getServer().getWorlds()) { + if (w != null) { + w.setPVP(value); + } + + } + } + + public boolean getPvP() { + return Bukkit.getWorld("world").getPVP(); + } + + public void setDifficulty(Difficulty difficulty) { + for (World w : plugin.getServer().getWorlds()) { + if (w != null) { + w.setDifficulty(difficulty); + } + } + } + + public Difficulty getDifficulty() { + return Bukkit.getWorld("world").getDifficulty(); + } + + public void setKeepInventory(Boolean value) { + for (World w : plugin.getServer().getWorlds()) { + if (w != null) { + getScheduler().run(() -> w.setGameRule(GameRule.KEEP_INVENTORY, value)); + } + } + } + + public boolean getKeepInventory() { + return Bukkit.getWorld("world").getGameRuleValue(GameRule.KEEP_INVENTORY); + } + + public void setNaturalRegeneration(Boolean value) { + for (World w : plugin.getServer().getWorlds()) { + if (w != null) { + getScheduler().run(() -> w.setGameRule(GameRule.NATURAL_REGENERATION, value)); + } + } + } + + public boolean getNaturalRegeneration() { + return Bukkit.getWorld("world").getGameRuleValue(GameRule.NATURAL_REGENERATION); + } + + public void setDayLightCircle(boolean value) { + for (World world : Bukkit.getWorlds()) { + if (world.getEnvironment() == World.Environment.NORMAL && plugin.getServerType() != ServerType.ADVENTURE) { + getScheduler().run(() -> world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, value)); + } + } + } + + public void portPlayerToLobby(Player player) { + if (plugin.getServerType() == ServerType.CHALLENGE || plugin.getServerType() == ServerType.CHALLENGE_LOAD) { + GlobalApi.portOnlinePlayerToLocation(player.getName(), "challenge"); + } else if (plugin.getServerType() == ServerType.ADVENTURE) { + GlobalApi.portOnlinePlayerToLocation(player.getName(), "adventure"); + } else if (plugin.getServerType() == ServerType.CHALLENGE_EVENT) { + GlobalApi.portOnlinePlayerToLocation(player.getName(), "challenge_event"); + } + } + + public Timer getTimer() { + return timer; + } + + public VanishUtils getVanish() { + return vanish; + } + + public boolean isWaitingForShutdown() { + return waitingForShutdown; + } + + public void setWaitingForShutdown(boolean waitingForShutdown) { + this.waitingForShutdown = waitingForShutdown; + } + + public BackpackGui getBackpack() { + return backpack; + } + + public File getBackpackConfigFile() { + return backpackConfigFile; + } + + public ScoreManager getScoreManager() { + return scoreManager; + } + + public NMSUtils getNMSUtils() { + return nmsUtils; + } + + public File getAllItemsConfigFile() { + return AllItemsConfigFile; + } + + public ServerType getServerType() { + return serverType; + } + + public TextComponent getPrefixComponent() { + return prefixComponent; + } + + public TextComponent getGuiPrefix() { + return guiPrefix; + } + + public ArrayList getNotAvailableMaterials() { + return not_available_materials; + } + + public ArrayList getMaterials() { + return materials; + } + + public ArrayList getAdvancements() { + return advancements; + } + + public CubesideStatisticsAPI getCubesideStatistics() { + return cubesideStatistics; + } + + public boolean isCubesideStatisticsInstalled() { + return cubesideStatistics != null; + } + + public Statistics getStatistics() { + return statistics; + } + + public PlayerUUIDCache getPlayerUUIDCache() { + return playerUUIDCache; + } + + public void addstatisticPlayers(UUID uuid) { + statisticPlayers.add(uuid); + } + + public ArrayList getstatisticPlayers() { + return statisticPlayers; + } + + public void addBannedPlayer(UUID uuid, boolean isPermaBan) { + bannedPlayers.add(uuid); + if (isPermaBan) { + List bannedPlayer = Config.getStringList("bannedPlayers"); + bannedPlayer.add(uuid.toString()); + Config.setValue("bannedPlayers", bannedPlayer, false); + } + } + + public void removeBannedPlayer(UUID uuid, Boolean removeConfig) { + bannedPlayers.remove(uuid); + if (removeConfig) { + List bannedPlayer = Config.getStringList("bannedPlayers"); + bannedPlayer.remove(uuid.toString()); + Config.setValue("bannedPlayers", bannedPlayer, false); + } + } + + public boolean isPlayerBanned(UUID uuid) { + return bannedPlayers.contains(uuid); + } + + public String getCubesideMod_ModChannel() { + return CubesideMod_ModChannel; + } + + public Scheduler getScheduler() { + return scheduler; + } + + public ColorUtils getColorUtils() { + return colorUtils; + } + + public Path getAdventureSavePath() { + return adventureSavePath; + } + + public Path getChallengeSavePath() { + return challengeSavePath; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/SaveSlot.java b/Challenge/src/main/java/de/fanta/challenge/SaveSlot.java new file mode 100644 index 0000000..140e94a --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/SaveSlot.java @@ -0,0 +1,25 @@ +package de.fanta.challenge; + +public enum SaveSlot { + + SLOT_1("1", "challenge.save.slot1"), + SLOT_2("2", "challenge.save.slot2"), + SLOT_3("3", "challenge.save.slot3"), + SLOT_AUTO("autosave", "challenge.save.slotauto"); + + private final String slot; + private final String permission; + + SaveSlot(String prefix, String permission) { + this.slot = prefix; + this.permission = permission; + } + + public String getSlot() { + return slot; + } + + public String getPermission() { + return permission; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/ServerType.java b/Challenge/src/main/java/de/fanta/challenge/ServerType.java new file mode 100644 index 0000000..ad8f4df --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/ServerType.java @@ -0,0 +1,20 @@ +package de.fanta.challenge; + +public enum ServerType { + + ADVENTURE("Adventure"), + CHALLENGE("Challenge"), + CHALLENGE_LOAD("Challenge"), + CHALLENGE_EVENT("Challenge Event"); + + private final String prefix; + + ServerType(String prefix) { + this.prefix = prefix; + } + + public String getPrefix() { + return prefix; + } + +} diff --git a/Challenge/src/main/java/de/fanta/challenge/Timer.java b/Challenge/src/main/java/de/fanta/challenge/Timer.java new file mode 100644 index 0000000..46904d6 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/Timer.java @@ -0,0 +1,204 @@ +package de.fanta.challenge; + +import de.fanta.challenge.events.TimerChangedEvent; +import de.fanta.challenge.schedular.CancellableTask; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.fanta.challenge.utils.SaveWorldUtils; +import de.iani.cubesideutils.StringUtil; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.Style; +import net.kyori.adventure.text.format.TextColor; +import net.kyori.adventure.text.format.TextDecoration; +import org.bukkit.Bukkit; +import org.bukkit.Effect; +import org.bukkit.GameMode; +import org.bukkit.World; +import org.bukkit.entity.Creature; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; + +import java.util.Optional; + +public class Timer { + + private final Challenges plugin; + private CancellableTask actionBarTaskId; + private CancellableTask idleActionBarTaskId; + private long time; // milliseconds + private TimerMode mode; + private long countingSinceTimestamp; + + private static final int[] baseColorsTimer = new int[]{0xFF6668, 0xFFB566, 0xFFED66, 0x66FF75, 0x66B8FF, 0xE666FF}; + private static final int[] baseColorsReserveTimer = new int[]{0x7FD4E0, 0x947DFF, 0xFF88F1, 0xFF7D7D}; + + public Timer(Challenges plugin) { + this.plugin = plugin; + this.mode = TimerMode.UP; + + if (!isRunning()) { + sendIdleActionBar(); + } + } + + public void startTimer() { + countingSinceTimestamp = System.currentTimeMillis(); + if (idleActionBarTaskId != null) { + idleActionBarTaskId.cancel(); + idleActionBarTaskId = null; + } + actionBarTaskId = plugin.getScheduler().runGlobalAtFixedRate(() -> { + if (mode == TimerMode.DOWN) { + if (time <= 0) { + if (Config.getBoolean("event.enabled")) { + for (Player p : Bukkit.getOnlinePlayers()) { + p.setGameMode(GameMode.SPECTATOR); + } + ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Die Zeit ist abgelaufen!", ChatUtil.GREEN)); + } else { + for (Player p : Bukkit.getOnlinePlayers()) { + p.setGameMode(GameMode.SPECTATOR); + } + ChatUtil.sendTitleToAll(Component.text("ZEIT ABGELAUFEN!", ChatUtil.RED), Component.text("Challenge fehlgeschlagen", ChatUtil.RED)); + + ChatUtil.sendBrodCastMessage(Component.text("Die Zeit ist abgelaufen und die Challenge somit fehlgeschlagen!", ChatUtil.RED)); + Optional optionalWorld = Bukkit.getWorlds().stream().findFirst(); + optionalWorld.ifPresent(world -> ChatUtil.sendBrodCastMessage(Component.text("Seed: ", ChatUtil.GREEN).append(Component.text(world.getSeed(), ChatUtil.BLUE)))); + + } + stopTimer(); + } else { + time -= (System.currentTimeMillis() - countingSinceTimestamp); + countingSinceTimestamp = System.currentTimeMillis(); + sendTimerActionBar(); + } + } else { + time += (System.currentTimeMillis() - countingSinceTimestamp); + countingSinceTimestamp = System.currentTimeMillis(); + sendTimerActionBar(); + } + }, 1L, 1L); + if (!Config.getBoolean("firsttimerstart")) { + Config.setValue("firsttimerstart", true, false); + } + Bukkit.getPluginManager().callEvent(new TimerChangedEvent(true)); + } + + public void stopTimer() { + if (actionBarTaskId != null) { + actionBarTaskId.cancel(); + actionBarTaskId = null; + sendIdleActionBar(); + } + for (Player pp : Bukkit.getOnlinePlayers()) { + plugin.getScheduler().runDelayedOnEntity(pp, () -> { + for (final Entity entity : pp.getNearbyEntities(100, 100, 100)) { + if ((entity instanceof final Creature creature)) { + if ((creature.getTarget() != null) && creature.getTarget().equals(pp)) { + creature.setTarget(null); + } + } + } + }, 1); + } + Bukkit.getPluginManager().callEvent(new TimerChangedEvent(false)); + } + + private void sendIdleActionBar() { + idleActionBarTaskId = plugin.getScheduler().runGlobalAtFixedRate(() -> { + for (Player p : Bukkit.getOnlinePlayers()) { + if (!plugin.getVanish().isVanish(p)) { + sendFormatedTimerActionBarToPlayer(p, Component.text("Der Timer ist pausiert.", Style.style(ChatUtil.RED, TextDecoration.BOLD))); + if (p.getGameMode() != GameMode.SPECTATOR) { + p.getWorld().playEffect(p.getLocation(), Effect.ENDER_SIGNAL, 2); + } + } + } + }, 20L, 20L); + } + + private void sendTimerActionBar() { + for (Player p : Bukkit.getOnlinePlayers()) { + if (!plugin.getVanish().isVanish(p)) { + if (Config.getBoolean("showtimer")) { + sendFormatedTimerActionBarToPlayer(p, formateRainbowTime(!Config.getBoolean("editsettings"))); + } + } + } + } + + private void sendFormatedTimerActionBarToPlayer(Player player, Component text) { + player.sendActionBar(text.append(SaveWorldUtils.isCopyWorld ? Component.text(" Save: ", ChatUtil.GREEN).append(SaveWorldUtils.getProgressBar(SaveWorldUtils.progress)) : Component.empty())); + } + + public Component formatTime(TextColor color) { + return Component.text(formatTime()).color(color); + } + + public String formatTime() { + String formatTime = StringUtil.formatTimespan((time / 1000) * 1000, " Tage, ", ":", "", "", "", ":", false, true); + if (formatTime.startsWith("1 Tage")) { + return StringUtil.formatTimespan((time / 1000) * 1000, " Tag, ", ":", "", "", "", ":", false, true); + } + return formatTime; + } + + public Component formateRainbowTime(boolean speedRun) { + return plugin.getColorUtils().addChatColorToString((speedRun ? "SpeedRun " : "") + formatTime(), mode == TimerMode.UP ? baseColorsTimer : baseColorsReserveTimer, 1.5); + } + + public void reverseTimer() { + if (mode == TimerMode.DOWN) { + mode = TimerMode.UP; + } else { + mode = TimerMode.DOWN; + } + if (isRunning()) { + countingSinceTimestamp = System.currentTimeMillis(); + } + } + + public boolean isRunning() { + return actionBarTaskId != null; + } + + public boolean isReverse() { + return mode == TimerMode.DOWN; + } + + public long getTime() { + return time / 1000; + } + + public long getTimeInMs() { + return time; + } + + public void setTime(int seconds) { + this.time = seconds * 1000L; + this.countingSinceTimestamp = System.currentTimeMillis(); + } + + public void addTime(int seconds) { + this.time = Math.max(time + (seconds * 1000L), 0); + this.countingSinceTimestamp = System.currentTimeMillis(); + Config.setValue("editsettings", true); + + } + + public void removeTime(int seconds) { + this.time = Math.max(time - (seconds * 1000L), 0); + this.countingSinceTimestamp = System.currentTimeMillis(); + Config.setValue("editsettings", true); + } + + public TimerMode getMode() { + return mode; + } + + public enum TimerMode { + UP, + DOWN + } + +} \ No newline at end of file diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/AllAdvancementsChallenge.java b/Challenge/src/main/java/de/fanta/challenge/challenges/AllAdvancementsChallenge.java new file mode 100644 index 0000000..e41c2eb --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/AllAdvancementsChallenge.java @@ -0,0 +1,178 @@ +package de.fanta.challenge.challenges; + +import com.destroystokyo.paper.event.player.PlayerAdvancementCriterionGrantEvent; +import de.fanta.challenge.Challenges; +import de.fanta.challenge.events.TimerChangedEvent; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import net.kyori.adventure.audience.Audience; +import net.kyori.adventure.bossbar.BossBar; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.NamespacedKey; +import org.bukkit.advancement.Advancement; +import org.bukkit.advancement.AdvancementProgress; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerAdvancementDoneEvent; +import org.bukkit.event.player.PlayerJoinEvent; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; + +public class AllAdvancementsChallenge implements Listener { + + public static BossBar bossBar; + private static boolean running; + private static final Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onActivation(TimerChangedEvent event) { + if (Config.getBoolean("alladvancements")) { + if (event.isRunning()) { + start(); + } else { + stop(); + } + } + } + + + @EventHandler + public void onAdvancementDone(PlayerAdvancementDoneEvent e) { + if (isRunning()) { + createAdvancementString(e.getPlayer()); + } + } + + @EventHandler + public void onAdvancementCriteria(PlayerAdvancementCriterionGrantEvent e) { + if (isRunning()) { + createAdvancementString(e.getPlayer()); + } + } + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent e) { + if (!isRunning()) { + return; + } + bossBar.addViewer(e.getPlayer()); + setAdvancementsToPlayer(); + } + + public static boolean isRunning() { + return running; + } + + public static void setRunning(boolean run) { + running = run; + } + + private static void updateBossbar() { + int done = countDone(); + Component bossBarTitle = Component.text("(" + done + "/" + plugin.getAdvancements().size() + ") Advancements", ChatUtil.GREEN); + float progress = done * 100.0f / plugin.getAdvancements().size() / 100.0f; + if (bossBar == null) { + bossBar = BossBar.bossBar(bossBarTitle, progress, BossBar.Color.GREEN, BossBar.Overlay.PROGRESS); + } else { + bossBar.name(bossBarTitle); + } + bossBar.progress(progress); + } + + private void createAdvancementString(Player player) { + ConfigurationSection advancements = Config.createSection("advancements"); + ArrayList advancementsDone = new ArrayList<>(); + ConfigurationSection progress = advancements.createSection("progress"); + Iterator it = Bukkit.advancementIterator(); + while (it.hasNext()) { + Advancement a = it.next(); + NamespacedKey key = a.getKey(); + if (key.getNamespace().equals(NamespacedKey.MINECRAFT) && !key.getKey().startsWith("recipes/")) { + AdvancementProgress ap = player.getAdvancementProgress(a); + if (ap.isDone()) { + advancementsDone.add(key.getKey()); + } else { + Collection ac = ap.getAwardedCriteria(); + if (!ac.isEmpty()) { + progress.set(key.getKey(), new ArrayList<>(ac)); + } + } + } + } + advancements.set("done", advancementsDone); + plugin.saveConfig(); + + setAdvancementsToPlayer(); + } + + private static void setAdvancementsToPlayer() { + if (Config.contains("advancements")) { + ConfigurationSection advancements = Config.getConfigurationSection("advancements"); + if (advancements != null) { + HashSet done = new HashSet<>(advancements.getStringList("done")); + ConfigurationSection progress = advancements.getConfigurationSection("progress"); + if (progress == null) { + return; + } + Iterator it = Bukkit.advancementIterator(); + while (it.hasNext()) { + Advancement a = it.next(); + NamespacedKey key = a.getKey(); + if (key.getNamespace().equals(NamespacedKey.MINECRAFT) && !key.getKey().startsWith("recipes/")) { + for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + AdvancementProgress ap = pp.getAdvancementProgress(a); + if (done.contains(key.getKey())) { + if (!ap.isDone()) { + for (String crit : ap.getRemainingCriteria()) { + ap.awardCriteria(crit); + } + } + } else if (progress.contains(key.getKey())) { + List parts = progress.getStringList(key.getKey()); + for (String part : parts) { + ap.awardCriteria(part); + } + } + } + } + } + } + } + updateBossbar(); + } + + private static int countDone() { + int i = 0; + ConfigurationSection advancements = Config.getConfigurationSection("advancements"); + if (advancements != null) { + HashSet done = new HashSet<>(advancements.getStringList("done")); + for (String ignored : done) { + i++; + } + } + return i; + } + + public static void start() { + setAdvancementsToPlayer(); + updateBossbar(); + for (Player pp : Bukkit.getOnlinePlayers()) { + bossBar.addViewer(pp); + } + setRunning(true); + } + + public static void stop() { + if (bossBar != null) { + bossBar.viewers().forEach(bossBarViewer -> bossBar.removeViewer((Audience) bossBarViewer)); + } + setRunning(false); + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/AllItemsChallenge.java b/Challenge/src/main/java/de/fanta/challenge/challenges/AllItemsChallenge.java new file mode 100644 index 0000000..e7616d0 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/AllItemsChallenge.java @@ -0,0 +1,140 @@ +package de.fanta.challenge.challenges; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.schedular.CancellableTask; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.fanta.challenge.utils.CubesideModUtils; +import net.kyori.adventure.audience.Audience; +import net.kyori.adventure.bossbar.BossBar; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import java.util.logging.Level; + +public class AllItemsChallenge { + + public static CancellableTask ItemScheduler; + public static BossBar bossBar; + public static Material item; + public static final List foundItems = new ArrayList<>(); + public static final List itemsToSearch = new ArrayList<>(); + + private static final Challenges plugin = Challenges.getPlugin(); + + private static int itemcount = 0; + + public static void start() { + if (foundItems.isEmpty()) { + loadItems(); + } + + if (itemsToSearch.isEmpty()) { + for (Material mat : Material.values()) { + if (mat.isItem() && !mat.isAir() && !plugin.getNotAvailableMaterials().contains(mat)) { + itemcount++; + + if (!foundItems.contains(mat)) { + itemsToSearch.add(mat); + } + } + } + } + + ItemStack configStack = Config.getItemStack("allitemscurrentitem"); + if (configStack != null) { + item = configStack.getType(); + } + + if (item == null) { + Random r = new Random(); + item = itemsToSearch.get(r.nextInt((itemsToSearch.size() - 1) + 1)); + Config.setValue("allitemscurrentitem", new ItemStack(item)); + } + + bossBar = BossBar.bossBar(Component.empty(), 0.f, BossBar.Color.GREEN, BossBar.Overlay.PROGRESS); + for (Player pl : Bukkit.getOnlinePlayers()) { + bossBar.addViewer(pl); + } + update(); + } + + public static void update() { + ItemScheduler = plugin.getScheduler().runGlobalAtFixedRate(() -> { + if (Config.getBoolean("allitems") && Challenges.getPlugin().getTimer().isRunning()) { + if (!itemsToSearch.isEmpty()) { + for (Player pp : Bukkit.getOnlinePlayers()) { + bossBar.addViewer(pp); + if (pp.getInventory().contains(item)) { + next(pp, false); + } + } + + bossBar.name(Component.text("Item » ", ChatUtil.GREEN).append(ChatUtil.getTrasnlateItemComponent(item).color(ChatUtil.BLUE).append(Component.text(" (", ChatUtil.BLUE).append(Component.text(foundItems.size() + "/" + itemcount, ChatUtil.GREEN).append(Component.text(")", ChatUtil.BLUE)))))); + float progress = foundItems.size() * 100.0f / itemcount / 100.0f; + bossBar.progress(progress); + } else { + bossBar.name(Component.text("Alle Items gesammelt!", ChatUtil.GREEN)); + ChatUtil.sendBrodCastMessage(Component.text("Alle Items gesammelt!", ChatUtil.GREEN)); + Challenges.getPlugin().getTimer().stopTimer(); + for (Player pl : Bukkit.getOnlinePlayers()) { + pl.playSound(pl.getLocation(), Sound.UI_TOAST_CHALLENGE_COMPLETE, 0.2f, 1); + } + ItemScheduler.cancel(); + } + } else { + bossBar.viewers().forEach(bossBarViewer -> bossBar.removeViewer((Audience) bossBarViewer)); + } + }, 1, 10); + } + + public static void next(Player p, Boolean skipped) { + Material old = item; + itemsToSearch.remove(old); + foundItems.add(old); + saveItems(); + if (!itemsToSearch.isEmpty()) { + Random r = new Random(); + item = itemsToSearch.get(r.nextInt((itemsToSearch.size() - 1) + 1)); + Config.setValue("allitemscurrentitem", new ItemStack(item)); + if (skipped) { + ChatUtil.sendBrodCastMessage(Component.text("Item: ", ChatUtil.GREEN).append(ChatUtil.getTrasnlateItemComponent(old).color(ChatUtil.BLUE).append(Component.text(" wurde von " + p.getName() + " übersprungen.", ChatUtil.GREEN)))); + } else { + ChatUtil.sendBrodCastMessage(Component.text("Item: ", ChatUtil.GREEN).append(ChatUtil.getTrasnlateItemComponent(old).color(ChatUtil.BLUE).append(Component.text(" wurde von " + p.getName() + " Registriert.", ChatUtil.GREEN)))); + } + ChatUtil.sendBrodCastMessage(Component.text("Neues Item: ", ChatUtil.GREEN).append(ChatUtil.getTrasnlateItemComponent(item).color(ChatUtil.BLUE)).append(Component.text(" (Es fehlen noch ", ChatUtil.GREEN).append(Component.text((itemcount - foundItems.size()), ChatUtil.BLUE).append(Component.text(" Items)", ChatUtil.GREEN))))); + for (Player pp : Bukkit.getOnlinePlayers()) { + pp.playSound(pp.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1, 1); + CubesideModUtils.sendFlashScreenToCubesideMod(plugin, pp, 50, ChatUtil.GREEN); + } + } + } + + private static void saveItems() { + FileConfiguration config = Challenges.getPlugin().getAllItemsConfig(); + ArrayList itemStings = new ArrayList<>(); + foundItems.forEach(material -> itemStings.add(material.name())); + config.set("items", itemStings); + try { + Challenges.getPlugin().AllItemsConfig.save(Challenges.getPlugin().getAllItemsConfigFile()); + } catch (IOException e) { + plugin.getLogger().log(Level.SEVERE, "Error while saving Items", e); + } + } + + private static void loadItems() { + FileConfiguration config = Challenges.getPlugin().getAllItemsConfig(); + if (config.isList("items")) { + config.getStringList("items").forEach(itemSting -> foundItems.add(Material.valueOf(itemSting))); + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/BedrockWallChallenge.java b/Challenge/src/main/java/de/fanta/challenge/challenges/BedrockWallChallenge.java new file mode 100644 index 0000000..738625a --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/BedrockWallChallenge.java @@ -0,0 +1,39 @@ +package de.fanta.challenge.challenges; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.Config; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; + +public class BedrockWallChallenge implements Listener { + + private final Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onMove(PlayerMoveEvent e) { + Player p = e.getPlayer(); + if (Config.getBoolean("bedrockwall") && plugin.getTimer().isRunning() && !plugin.getVanish().isVanish(e.getPlayer())) { + if (!e.getTo().equals(e.getFrom())) { + Location loc = p.getLocation(); + setWall(loc); + } + } + + } + + private void setWall(Location loc) { + plugin.getScheduler().runLocalDelayed(loc, () -> { + World world = loc.getWorld(); + for (int y = world.getMinHeight(); y < world.getMaxHeight(); y++) { + Block block = loc.set(loc.getX(), y, loc.getZ()).getBlock(); + block.setType(Material.BEDROCK); + } + }, 20L * Config.getInt("bedrockwalltime")); + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/Challenge.java b/Challenge/src/main/java/de/fanta/challenge/challenges/Challenge.java new file mode 100644 index 0000000..df0f05f --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/Challenge.java @@ -0,0 +1,17 @@ +package de.fanta.challenge.challenges; + +import org.bukkit.event.player.PlayerExpChangeEvent; +import org.bukkit.inventory.ItemStack; + +public interface Challenge { + + String getName(); + + ItemStack createNewDisplayItem(); + + boolean isActive(); + + default void handlePlayerExpChange(PlayerExpChangeEvent e) { + + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/BingoChallengeEvent.java b/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/BingoChallengeEvent.java new file mode 100644 index 0000000..9b53176 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/BingoChallengeEvent.java @@ -0,0 +1,281 @@ +package de.fanta.challenge.challenges.ChallengeEvents; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.events.TimerChangedEvent; +import de.fanta.challenge.guis.eventgui.BingoItemsGui; +import de.fanta.challenge.scoreboard.ChallengePlayer; +import de.fanta.challenge.teams.ChallengeTeam; +import de.fanta.challenge.teams.TeamUtils; +import de.fanta.challenge.utils.ChatSkullAPI.ChatSkull; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.fanta.challenge.utils.CubesideModUtils; +import net.kyori.adventure.bossbar.BossBar; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.OfflinePlayer; +import org.bukkit.Sound; +import org.bukkit.Statistic; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityPickupItemEvent; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.player.PlayerBucketEmptyEvent; +import org.bukkit.event.player.PlayerBucketEntityEvent; +import org.bukkit.event.player.PlayerBucketFillEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerStatisticIncrementEvent; +import org.bukkit.inventory.CraftingInventory; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.UUID; + +public class BingoChallengeEvent implements Listener { + + private static final Map> playerMaterials = new HashMap<>(); + + private static final Map> teamMaterials = new HashMap<>(); + private static boolean running; + + private static boolean eventend = false; + + private static List materials = new ArrayList<>(); + private static final BossBar bossBar = BossBar.bossBar(Component.text("Nutze ", ChatUtil.GREEN).append(Component.text("/bingo", ChatUtil.BLUE).append(Component.text(" um die Items zu sehen", ChatUtil.GREEN))), 1.0f, BossBar.Color.GREEN, BossBar.Overlay.PROGRESS); + private final Challenges plugin = Challenges.getPlugin(); + + public static List getMaterials() { + return materials; + } + + public void setMaterials(List mat) { + materials = mat; + } + + public static Map> getPlayerMaterials() { + return playerMaterials; + } + + public static boolean isRunning() { + return running; + } + + public void setRunning(boolean run) { + running = run; + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent e) { + Player player = (Player) e.getWhoClicked(); + Inventory playerInv = BingoItemsGui.getPlayerInvs().get(player.getUniqueId()); + if (e.getClickedInventory() == null) { + return; + } + if (!isRunning()) { + return; + } + if (playerInv != null && playerInv.equals(e.getClickedInventory())) { + return; + } + + if (e.getClickedInventory() instanceof CraftingInventory) { + return; + } + + ItemStack itemStack = e.getCurrentItem(); + if (itemStack != null && itemStack.getType() != Material.AIR) { + addDiscoveredItem(player, itemStack); + } + } + + @EventHandler + public void onItemCraft(PlayerStatisticIncrementEvent e) { + Player player = e.getPlayer(); + if (!isRunning()) { + return; + } + + if (e.getStatistic() != Statistic.CRAFT_ITEM) { + return; + } + + Material material = e.getMaterial(); + if (material == null) { + return; + } + + ItemStack itemStack = new ItemStack(material); + if (itemStack.getType() != Material.AIR) { + addDiscoveredItem(player, itemStack); + } + } + + @EventHandler + public void onPickUpItem(EntityPickupItemEvent e) { + ItemStack itemStack = e.getItem().getItemStack(); + if (e.getEntity() instanceof Player player) { + if (isRunning()) { + addDiscoveredItem(player, itemStack); + } + } + } + + @EventHandler + public void onBucketFill(PlayerBucketFillEvent e) { + ItemStack itemStack = e.getItemStack(); + Player player = e.getPlayer(); + if (isRunning()) { + if (itemStack != null) { + addDiscoveredItem(player, itemStack); + } + } + } + + @EventHandler + public void onBucketChatchFish(PlayerBucketEntityEvent e) { + ItemStack itemStack = e.getEntityBucket(); + if (isRunning()) { + addDiscoveredItem(e.getPlayer(), itemStack); + } + } + + @EventHandler + public void onBucketEmpty(PlayerBucketEmptyEvent e) { + ItemStack itemStack = e.getItemStack(); + Player player = e.getPlayer(); + if (isRunning()) { + if (itemStack != null) { + addDiscoveredItem(player, itemStack); + } + } + } + + @EventHandler + public void onActivation(TimerChangedEvent event) { + if (Objects.equals(Config.getString("event.type"), "bingo")) { + if (event.isRunning()) { + setMaterials(BingoItemsGui.getEventItems()); + for (Player p : Bukkit.getOnlinePlayers()) { + bossBar.addViewer(p); + } + + if (!Config.getBoolean("event.teams")) { + for (Player p : Bukkit.getOnlinePlayers()) { + plugin.getScoreManager().join(new ChallengePlayer(p.getUniqueId())); + } + } else { + for (ChallengeTeam team : TeamUtils.getTeams()) { + if (team != null && !TeamUtils.getPlayersInTeam(team).isEmpty()) { + plugin.getScoreManager().join(team); + } + } + } + setRunning(true); + } else { + setRunning(false); + } + } + } + + @EventHandler + public void onJoin(PlayerJoinEvent e) { + if (isRunning()) { + bossBar.addViewer(e.getPlayer()); + + if (Config.getBoolean("event.teams")) { + ChallengeTeam team = TeamUtils.getPlayerTeam(e.getPlayer()); + if (team != null) { + playerMaterials.remove(e.getPlayer().getUniqueId()); + playerMaterials.put(e.getPlayer().getUniqueId(), teamMaterials.get(team)); + plugin.getScoreManager().join(team); + } + } else { + plugin.getScoreManager().join(new ChallengePlayer(e.getPlayer().getUniqueId())); + } + } + } + + public void addDiscoveredItem(Player player, ItemStack itemStack) { + UUID uuid = player.getUniqueId(); + Material material = itemStack.getType(); + if (materials.contains(material)) { + if (!Config.getBoolean("event.teams")) { + List items = new ArrayList<>(); + if (playerMaterials.get(uuid) != null) { + items = playerMaterials.get(uuid); + } + if (!items.contains(material)) { + items.add(material); + + playerMaterials.put(uuid, items); + plugin.getScoreManager().updateScore(new ChallengePlayer(player.getUniqueId()), 1); + ChatUtil.sendMessage(player, Component.text("Item: ", ChatUtil.GREEN).append(ChatUtil.getTrasnlateItemComponent(itemStack.getType()).color(ChatUtil.BLUE)).append(Component.text(" wurde Registriert", ChatUtil.GREEN))); + player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 2.0F); + CubesideModUtils.sendFlashScreenToCubesideMod(plugin, player, 50, ChatUtil.GREEN); + + if (plugin.getScoreManager().getScore(new ChallengePlayer(player.getUniqueId())) == materials.size()) { + plugin.getTimer().stopTimer(); + ChatUtil.sendTitleToAll(Component.text("Event"), player.name().color(ChatUtil.GREEN).append(Component.text(" hat alle Items gefunden!", ChatUtil.BLUE))); + Component[] lines = {Component.empty(), Component.empty(), Component.empty(), Component.text(" " + player.getName(), ChatUtil.BLUE), Component.text(" hat alle Items gefunden!", ChatUtil.GREEN), Component.empty(), Component.empty(), Component.empty()}; + ChatSkull.sendAll(player, lines); + for (Player pp : Bukkit.getOnlinePlayers()) { + pp.setGameMode(GameMode.SPECTATOR); + } + } + } + } else { + ChallengeTeam team = TeamUtils.getPlayerTeam(player); + boolean scoreset = false; + for (OfflinePlayer pp : TeamUtils.getPlayersInTeam(team)) { + if (pp instanceof Player onlinePlayer) { + List items = new ArrayList<>(); + if (playerMaterials.get(onlinePlayer.getUniqueId()) != null) { + items = playerMaterials.get(onlinePlayer.getUniqueId()); + } + if (!items.contains(material)) { + items.add(material); + playerMaterials.put(onlinePlayer.getUniqueId(), items); + teamMaterials.put(team, items); + if (!scoreset) { + plugin.getScoreManager().updateScore(TeamUtils.getPlayerTeam(onlinePlayer), 1); + scoreset = true; + } + ChatUtil.sendMessage(onlinePlayer, Component.text("Item: ", ChatUtil.GREEN).append(ChatUtil.getTrasnlateItemComponent(itemStack.getType()).color(ChatUtil.BLUE)).append(Component.text(" wurde Registriert", ChatUtil.GREEN))); + onlinePlayer.playSound(onlinePlayer.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 2.0F); + CubesideModUtils.sendFlashScreenToCubesideMod(plugin, onlinePlayer, 50, ChatUtil.GREEN); + + if (plugin.getScoreManager().getScore(TeamUtils.getPlayerTeam(onlinePlayer)) == materials.size()) { + if (eventend) { + return; + } + eventend = true; + plugin.getTimer().stopTimer(); + ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Team ", ChatUtil.GREEN).append(Component.text(team.getName(), team.getChatColor()).append(Component.text(" hat alle Items gefunden!", ChatUtil.GREEN)))); + for (OfflinePlayer offlinePlayer : TeamUtils.getPlayersInTeam(team)) { + if (offlinePlayer instanceof Player onPlayer) { + Component[] lines = {Component.empty(), Component.empty(), Component.empty(), Component.text(" " + onPlayer.getName(), ChatUtil.BLUE), Component.text(" hat alle Items gefunden!", ChatUtil.GREEN), Component.empty(), Component.empty(), Component.empty()}; + ChatSkull.sendAll(onPlayer, lines); + } + } + for (Player allplayers : Bukkit.getOnlinePlayers()) { + allplayers.setGameMode(GameMode.SPECTATOR); + } + return; + } + } + } + } + } + } + } +} + + diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/BridgeRaceChallengeEvent.java b/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/BridgeRaceChallengeEvent.java new file mode 100644 index 0000000..4ae5273 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/BridgeRaceChallengeEvent.java @@ -0,0 +1,354 @@ +package de.fanta.challenge.challenges.ChallengeEvents; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.events.TimerChangedEvent; +import de.fanta.challenge.schedular.CancellableTask; +import de.fanta.challenge.scoreboard.ChallengePlayer; +import de.fanta.challenge.scoreboard.Scorable; +import de.fanta.challenge.scoreboard.ScoreManager; +import de.fanta.challenge.utils.ChatSkullAPI.ChatSkull; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.world.EmptyChunkGenerator; +import net.kyori.adventure.bossbar.BossBar; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.OfflinePlayer; +import org.bukkit.World; +import org.bukkit.WorldCreator; +import org.bukkit.WorldType; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.data.BlockData; +import org.bukkit.block.data.Directional; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.entity.EntityPickupItemEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerPortalEvent; +import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Random; +import java.util.UUID; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; + +public class BridgeRaceChallengeEvent implements Listener { + + private static final Challenges plugin = Challenges.getPlugin(); + private static boolean running; + private static final HashMap playerSpawnLocations = new HashMap<>(); + private static final Map bossBarMap = new HashMap<>(); + private CancellableTask spawnItemTask; + private static final ArrayList materials = new ArrayList<>(); + private static Location lastSpawnLocation = null; + private static boolean load = false; + private static World voidWorld; + private final Map> currentBarrier = new HashMap<>(); + private static final Material barrierBlock = Material.GLASS; + + @EventHandler + public void onActivation(TimerChangedEvent event) { + if (Objects.equals(Config.getString("event.type"), "bridgerace")) { + if (event.isRunning()) { + for (Material material : Material.values()) { + if (material.isItem() && !material.isAir() && !plugin.getNotAvailableMaterials().contains(material)) { + materials.add(material); + } + } + materials.remove(Material.ELYTRA); + materials.remove(Material.LAVA_BUCKET); + materials.remove(Material.WIND_CHARGE); + materials.remove(Material.BREEZE_ROD); + + for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + plugin.getScoreManager().join(new ChallengePlayer(pp.getUniqueId())); + plugin.getScoreManager().setScore(new ChallengePlayer(pp.getUniqueId()), 1); + } + updateBossBar(); + startItemSpawnTask(); + + setRunning(true); + } else { + stopItemSpawnTask(); + for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + pp.setGameMode(GameMode.SPECTATOR); + } + + for (Scorable scorable : plugin.getScoreManager().getByPositon(1)) { + OfflinePlayer p = (Bukkit.getServer().getOfflinePlayer(scorable.getName())); + if (p.isOnline()) { + Component[] lines = {Component.empty(), Component.empty(), Component.empty(), Component.text(" " + p.getName() + "'s", ChatUtil.BLUE), Component.text(" Brücke ist " + plugin.getScoreManager().getScore(scorable) + " Blöcke lang", ChatUtil.GREEN), Component.text(" und hat damit gewonnen!", ChatUtil.GREEN), Component.empty(), Component.empty()}; + ChatSkull.sendAll((Player) p, lines); + } else { + ChatUtil.sendBrodCastMessage(Component.text(scorable.getName() + "'s", ChatUtil.BLUE).append(Component.text(" Brücke ist " + plugin.getScoreManager().getScore(scorable) + " Blöcke lang und hat damit gewonnen!", ChatUtil.GREEN))); + } + } + + setRunning(false); + } + } + } + + @EventHandler + public void onPlayerRespawn(PlayerRespawnEvent e) { + if (isRunning()) { + Location respawnLocation = getPlayerLocation(e.getPlayer()).clone().add(0.5, 2, 0.5); + respawnLocation.setYaw(-90); + e.setRespawnLocation(respawnLocation); + } + } + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent e) { + if (isRunning()) { + if (plugin.getVanish().isVanish(e.getPlayer())) { + return; + } + ChallengePlayer challengePlayer = new ChallengePlayer(e.getPlayer().getUniqueId()); + plugin.getScoreManager().join(challengePlayer); + if (plugin.getScoreManager().getScore(challengePlayer) >= 1) { + return; + } + plugin.getScoreManager().setScore(challengePlayer, 1); + updateBossBar(); + } + + if (isLoaded()) { + createPlayerLocation(e.getPlayer()); + teleportPlayer(e.getPlayer()); + } + } + + @EventHandler + public void onMove(PlayerMoveEvent e) { + Player p = e.getPlayer(); + World world = p.getWorld(); + if (isRunning() && plugin.getTimer().isRunning() && !plugin.getVanish().isVanish(p) && p.getGameMode() == GameMode.SURVIVAL) { + Location playerLoc = p.getLocation(); + Location spawnLocation = getPlayerLocation(p).clone(); + double posRelatedToCenter = playerLoc.getZ() - spawnLocation.getZ(); + double distanceToCenter = Math.abs(posRelatedToCenter); + + List barrierLocations = currentBarrier.computeIfAbsent(p.getUniqueId(), uuid -> new ArrayList<>()); + + int BARRIER_POS = 20; + int BARRIER_SIZE = 6; + if (distanceToCenter >= BARRIER_POS) { //Outside border + p.teleport(getPlayerLocation(p).clone().add(0.5, 2, 0.5)); + } else if (distanceToCenter >= BARRIER_POS - 6) { //Inside border + //Send barrier + double barrierZ = spawnLocation.getZ() + BARRIER_POS * (posRelatedToCenter > 0 ? 1 : -1); + Location loc = new Location(p.getWorld(), playerLoc.getX() - BARRIER_SIZE / 2d, playerLoc.getY() - BARRIER_SIZE / 2d, barrierZ); + + resetBarrier(p, world, barrierLocations); + for (int y = 0; y < BARRIER_SIZE; y++) { + for (int x = 0; x < BARRIER_SIZE; x++) { + Location blockLoc = loc.clone().add(x, y, 0); + if (!world.getBlockAt(blockLoc).isSolid()) { + barrierLocations.add(blockLoc); + p.sendBlockChange(blockLoc, Bukkit.createBlockData(barrierBlock)); + } + } + } + } else if (!barrierLocations.isEmpty()) { //Away from border + resetBarrier(p, world, barrierLocations); + } + } + + if (isLoaded() && !isRunning()) { + if (p.getLocation().getY() <= 0) { + teleportPlayer(p); + } + } + } + + @EventHandler + public void onPortal(PlayerPortalEvent e) { + if (isRunning()) { + e.setCancelled(true); + } + } + + @EventHandler + public void onPickupItem(EntityPickupItemEvent e) { + if (isRunning()) { + if (e.getEntity() instanceof Player player) { + double posRelatedToCenter = player.getLocation().getZ() - getPlayerLocation(player).clone().getZ(); + double distanceToCenter = Math.abs(posRelatedToCenter); + if (distanceToCenter >= 20) { + e.setCancelled(true); + } + } + } + } + + @EventHandler + public void onBlockPlace(BlockPlaceEvent e) { + if (isRunning()) { + Player placer = e.getPlayer(); + + double posRelatedToCenter = placer.getLocation().getZ() - getPlayerLocation(placer).clone().getZ(); + double distanceToCenter = Math.abs(posRelatedToCenter); + if (distanceToCenter >= 20) { + e.setCancelled(true); + return; + } + + ScoreManager scoreManager = plugin.getScoreManager(); + int score = scoreManager.getScore(new ChallengePlayer(placer.getUniqueId())); + if (e.getBlock().getX() >= score) { + scoreManager.setScore(new ChallengePlayer(placer.getUniqueId()), e.getBlock().getX()); + } + + updateBossBar(); + } + } + + public static boolean load(Player player) { + if (!load) { + ArrayList> allTasks = new ArrayList<>(); + CompletableFuture future = new CompletableFuture<>(); + allTasks.add(future); + plugin.getScheduler().run(() -> { + try { + voidWorld = Bukkit.getWorld("VOID"); + if (voidWorld == null) { + WorldCreator wc = new WorldCreator("VOID"); + wc.environment(World.Environment.NORMAL); + wc.type(WorldType.FLAT); + wc.generateStructures(false); + wc.generator(new EmptyChunkGenerator()); + voidWorld = Bukkit.getServer().createWorld(wc); + voidWorld.setPVP(false); + } + } finally { + future.complete(null); + } + }); + CompletableFuture waitForAll = CompletableFuture.allOf(allTasks.toArray(new CompletableFuture[0])); + plugin.getScheduler().runAsync(() -> { + try { + waitForAll.get(); + for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + createPlayerLocation(pp); + plugin.getScheduler().runLocalDelayed(playerSpawnLocations.get(pp.getUniqueId()), () -> teleportPlayer(pp), 1L); + } + load = true; + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } + }); + + return true; + } else { + ChatUtil.sendErrorMessage(player, "Die Void Challenge läuft bereits!"); + return false; + } + } + + private static void createPlayerLocation(Player player) { + if (!playerSpawnLocations.containsKey(player.getUniqueId())) { + if (lastSpawnLocation != null) { + Location tempLocation = lastSpawnLocation.clone(); + lastSpawnLocation = tempLocation.add(0, 0, 50); + } else { + lastSpawnLocation = new Location(voidWorld, 0, 60, 0); + } + playerSpawnLocations.put(player.getUniqueId(), lastSpawnLocation.clone()); + } + } + + private static void teleportPlayer(Player player) { + setBedrock(getPlayerLocation(player).clone()); + Location teleportLocation = getPlayerLocation(player).clone().add(0.5, 2, 0.5); + teleportLocation.setYaw(-90); + plugin.getScheduler().runDelayedOnEntity(player, () -> player.teleport(teleportLocation), 1L); + } + + private static Location getPlayerLocation(Player player) { + if (!playerSpawnLocations.containsKey(player.getUniqueId())) { + createPlayerLocation(player); + } + return playerSpawnLocations.get(player.getUniqueId()); + } + + private static void setBedrock(Location location) { + location.getWorld().getBlockAt(location).setType(Material.BEDROCK); + Block block = location.getWorld().getBlockAt(location.add(1, 0, 0)); + if (block.getType() == Material.AIR) { + block.setType(Material.MAGENTA_GLAZED_TERRACOTTA); + BlockData blockData = block.getBlockData(); + if (blockData instanceof Directional directional) { + directional.setFacing(BlockFace.WEST); + block.setBlockData(blockData); + } + } + } + + private void startItemSpawnTask() { + spawnItemTask = plugin.getScheduler().runGlobalAtFixedRate(this::itemSpawn, 6 * 20L, 6 * 20L); + } + + private void stopItemSpawnTask() { + if (spawnItemTask != null) { + spawnItemTask.cancel(); + spawnItemTask = null; + } + } + + private void itemSpawn() { + Random random = new Random(); + for (Player player : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + ItemStack randomItem = new ItemStack(materials.get(random.nextInt(materials.size()))); + Location loc = getPlayerLocation(player).clone().add(0.5, 1, 0.5); + plugin.getScheduler().runLocalDelayed(loc, () -> loc.getWorld().dropItem(loc, randomItem), 1L); + } + } + + private void updateBossBar() { + ScoreManager scoreManager = plugin.getScoreManager(); + for (Player p : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + if (!plugin.getVanish().isVanish(p)) { + Component component = Component.text("Position: ", ChatUtil.GREEN).append(Component.text(scoreManager.getPosition(new ChallengePlayer(p.getUniqueId())), ChatUtil.BLUE).append(Component.text(" | ", ChatUtil.RED).append(Component.text("Länge deiner Brücke: ", ChatUtil.GREEN).append(Component.text(scoreManager.getScore(new ChallengePlayer(p.getUniqueId())) + " Blöcke", ChatUtil.BLUE))))); + BossBar bossBar = bossBarMap.computeIfAbsent(p, player -> { + BossBar newBossBar = BossBar.bossBar(component, 1.0f, BossBar.Color.GREEN, BossBar.Overlay.PROGRESS); + newBossBar.addViewer(p); + return newBossBar; + }); + bossBar.name(component); + } + } + } + + private void resetBarrier(Player p, World world, List locations) { + for (Location location : locations) { + p.sendBlockChange(location, world.getBlockAt(location).getBlockData()); + } + locations.clear(); + } + + private static boolean isRunning() { + return running; + } + + private static void setRunning(boolean run) { + running = run; + } + + public static boolean isLoaded() { + return load; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/DeathrunChallengeEvent.java b/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/DeathrunChallengeEvent.java new file mode 100644 index 0000000..71bee57 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/DeathrunChallengeEvent.java @@ -0,0 +1,357 @@ +package de.fanta.challenge.challenges.ChallengeEvents; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.events.TimerChangedEvent; +import de.fanta.challenge.schedular.CancellableTask; +import de.fanta.challenge.scoreboard.ChallengePlayer; +import de.fanta.challenge.scoreboard.Scorable; +import de.fanta.challenge.scoreboard.ScoreManager; +import de.fanta.challenge.utils.ChatSkullAPI.ChatSkull; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.fanta.challenge.utils.CoordsTargeter; +import net.kyori.adventure.bossbar.BossBar; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.Style; +import net.kyori.adventure.text.format.TextDecoration; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.GameRule; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.OfflinePlayer; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.entity.Boat; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityMountEvent; +import org.bukkit.event.entity.EntityPlaceEvent; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerPortalEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.event.vehicle.VehicleDamageEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.persistence.PersistentDataContainer; +import org.bukkit.persistence.PersistentDataType; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Random; +import java.util.UUID; + +public class DeathrunChallengeEvent implements Listener { + + private static final Challenges plugin = Challenges.getPlugin(); + + private static final List deadPlayer = new ArrayList<>(); + private final Map bossBarMap = new HashMap<>(); + + public static Location spawnLocation; + private final Map> currentBarrier = new HashMap<>(); + private static final Material barrierBlock = Material.GLASS; + + private CancellableTask task; + + private static final NamespacedKey UUIDKey = new NamespacedKey(Challenges.getPlugin(), "uuid_deathrun"); + + private final Random random = new Random(); + private static World world; + + @EventHandler + public void onMove(PlayerMoveEvent e) { + Player p = e.getPlayer(); + World world = p.getWorld(); + if (Objects.equals(Config.getString("event.type"), "deathrun") && plugin.getTimer().isRunning() && !plugin.getVanish().isVanish(p) && p.getGameMode() != GameMode.SPECTATOR) { + if (!deadPlayer.contains(p.getUniqueId())) { + Location playerLoc = p.getLocation(); + double posRelatedToCenter = playerLoc.getZ() - spawnLocation.getZ(); + double distanceToCenter = Math.abs(posRelatedToCenter); + + List barrierLocations = currentBarrier.computeIfAbsent(p.getUniqueId(), uuid -> new ArrayList<>()); + + int BARRIER_POS = 15; + int BARRIER_SIZE = 6; + if (distanceToCenter >= BARRIER_POS) { //Outside border + ChatUtil.sendTitleToPlayer(p, Component.text("⟲ ⟲ ⟲ ⟲", Style.style(ChatUtil.RED, TextDecoration.BOLD)), Component.text("Kehre zurück auf die Strecke!", ChatUtil.RED), 0, 20, 0, true); + resetBarrier(p, world, barrierLocations); + CoordsTargeter.addLocation(p.getUniqueId(), new Location(p.getWorld(), p.getLocation().getX(), p.getLocation().getY(), spawnLocation.getZ())); + if (distanceToCenter >= BARRIER_POS + 3) { + p.damage(0.5); + } + } else if (distanceToCenter >= BARRIER_POS - 6) { //Inside border + //Send barrier + double barrierZ = spawnLocation.getZ() + BARRIER_POS * (posRelatedToCenter > 0 ? 1 : -1); + Location loc = new Location(p.getWorld(), playerLoc.getX() - BARRIER_SIZE / 2d, playerLoc.getY() - BARRIER_SIZE / 2d, barrierZ); + + resetBarrier(p, world, barrierLocations); + + if (CoordsTargeter.containsLocation(p.getUniqueId())) { + CoordsTargeter.removeLocation(p.getUniqueId()); + } + for (int y = 0; y < BARRIER_SIZE; y++) { + for (int x = 0; x < BARRIER_SIZE; x++) { + Location blockLoc = loc.clone().add(x, y, 0); + if (!world.getBlockAt(blockLoc).isSolid()) { + barrierLocations.add(blockLoc); + p.sendBlockChange(blockLoc, Bukkit.createBlockData(barrierBlock)); + } + } + } + } else if (!barrierLocations.isEmpty()) { //Away from border + resetBarrier(p, world, barrierLocations); + } + + if (playerLoc.getY() > world.getMaxHeight() - 1) { + p.damage(1); + } + } + } + } + + @EventHandler + public void onDamage(EntityDamageEvent e) { + if (e.getEntity() instanceof Player p) { + if (Objects.equals(Config.getString("event.type"), "deathrun") && plugin.getTimer().isRunning()) { + plugin.getScheduler().runDelayedOnEntity(p, () -> p.setWalkSpeed((float) (p.getHealth() / 100f)), 1L); + } + } + } + + @EventHandler + public void onDeath(PlayerDeathEvent e) { + Player p = e.getEntity(); + if (Objects.equals(Config.getString("event.type"), "deathrun") && plugin.getTimer().isRunning()) { + deadPlayer.add(p.getUniqueId()); + CoordsTargeter.removeLocation(e.getPlayer().getUniqueId()); + plugin.getSBManager().removeScoreboard(p); + if (plugin.getSBManager().countScoreboardPlayers() == 0) { + plugin.getTimer().stopTimer(); + ChatUtil.sendBrodCastMessage(Component.text("Das Event wurde beendet, da alle Spieler gestorben sind!", ChatUtil.GREEN)); + } + } + } + + @EventHandler + public void onPlayerRespawn(PlayerRespawnEvent e) { + if (Objects.equals(Config.getString("event.type"), "deathrun")) { + Location spawnlocation = world.getSpawnLocation(); + e.setRespawnLocation(spawnlocation); + } + } + + @EventHandler + public void onPortalUse(PlayerPortalEvent e) { + if (Objects.equals(Config.getString("event.type"), "deathrun")) { + e.setCancelled(true); + } + } + + @EventHandler + public void onTimerChange(TimerChangedEvent e) { + if (Objects.equals(Config.getString("event.type"), "deathrun")) { + if (!e.isRunning()) { + for (Player player : Bukkit.getOnlinePlayers()) { + CoordsTargeter.removeLocation(player.getUniqueId()); + } + stopUpdateTask(); + for (Scorable scorable : plugin.getScoreManager().getByPositon(1)) { + OfflinePlayer p = (Bukkit.getServer().getOfflinePlayer(scorable.getName())); + if (p.isOnline()) { + Component[] lines = {Component.empty(), Component.empty(), Component.empty(), Component.text(" " + p.getName(), ChatUtil.BLUE), Component.text(" ist " + plugin.getScoreManager().getScore(scorable) + " Blöcke gelaufen und", ChatUtil.GREEN), Component.text(" hat damit gewonnen!", ChatUtil.GREEN), Component.empty(), Component.empty()}; + ChatSkull.sendAll((Player) p, lines); + } else { + ChatUtil.sendBrodCastMessage(Component.text(scorable.getName(), ChatUtil.BLUE).append(Component.text(" ist " + plugin.getScoreManager().getScore(scorable) + " Blöcke gelaufen und hat damit gewonnen!", ChatUtil.GREEN))); + } + } + } else { + plugin.getScheduler().run(() -> world.setGameRule(GameRule.MAX_ENTITY_CRAMMING, Bukkit.getServer().getMaxPlayers())); + plugin.getScheduler().runGlobalDelayed(() -> { + for (Player pp : Bukkit.getOnlinePlayers()) { + plugin.getScoreManager().join(new ChallengePlayer(pp.getUniqueId())); + Location spawn = world.getSpawnLocation(); + spawn.setYaw(-90f); + pp.teleportAsync(spawn); + } + }, 1L); + startUpdateTask(); + } + } + } + + @EventHandler + public void onBarrierBreak(BlockBreakEvent e) { + if (Objects.equals(Config.getString("event.type"), "deathrun")) { + Block block = e.getBlock(); + Location loc = block.getLocation(); + int x = loc.getBlockX(); + int z = loc.getBlockZ(); + int spawnX = spawnLocation.getBlockX(); + int spawnZ = spawnLocation.getBlockZ(); + + int distanceX = spawnX - x; + + if (distanceX > -15 && (Math.abs(distanceX) >= 15 || Math.abs(spawnZ - z) >= 15)) { + ChatUtil.sendWarningMessage(e.getPlayer(), "Niemand hat die Absicht, eine Mauer zu errichten!"); + e.setCancelled(true); + } + } + } + + @EventHandler + public void onBoatMount(EntityMountEvent e) { + if (Objects.equals(Config.getString("event.type"), "deathrun")) { + if (e.getMount() instanceof Boat boat && e.getEntity() instanceof Player player) { + PersistentDataContainer container = boat.getPersistentDataContainer(); + if (container.get(UUIDKey, PersistentDataType.STRING) != null && !container.get(UUIDKey, PersistentDataType.STRING).equals(player.getUniqueId().toString())) { + ChatUtil.sendWarningMessage(player, "Du kannst nur in deine eigenen Boote einsteigen."); + e.setCancelled(true); + } + } + } + } + + @EventHandler + public void onVehiclePlace(EntityPlaceEvent e) { + if (Objects.equals(Config.getString("event.type"), "deathrun")) { + if (e.getEntity() instanceof Boat boat) { + if (e.getPlayer() != null) { + PersistentDataContainer container = boat.getPersistentDataContainer(); + container.set(UUIDKey, PersistentDataType.STRING, e.getPlayer().getUniqueId().toString()); + } + } + } + } + + @EventHandler + public void onBoatBreak(VehicleDamageEvent e) { + if (Objects.equals(Config.getString("event.type"), "deathrun")) { + if (e.getVehicle() instanceof Boat boat && e.getAttacker() instanceof Player player) { + PersistentDataContainer container = boat.getPersistentDataContainer(); + if (container.get(UUIDKey, PersistentDataType.STRING) != null && !container.get(UUIDKey, PersistentDataType.STRING).equals(player.getUniqueId().toString())) { + ChatUtil.sendWarningMessage(player, "Du kannst nur deine eignen Boote zerstören."); + e.setCancelled(true); + } + } + } + } + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent e) { + if (Objects.equals(Config.getString("event.type"), "deathrun")) { + if (deadPlayer.contains(e.getPlayer().getUniqueId())) { + plugin.getSBManager().setScoreboardtoPlayer(e.getPlayer()); + } + } + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent e) { + if (Objects.equals(Config.getString("event.type"), "deathrun")) { + CoordsTargeter.removeLocation(e.getPlayer().getUniqueId()); + } + } + + @EventHandler + public void onPlantBreak(BlockBreakEvent e) { + if (Objects.equals(Config.getString("event.type"), "deathrun") && plugin.getTimer().isRunning()) { + if (e.getBlock().getType() != Material.SHORT_GRASS) { + return; + } + if (random.nextInt(10) == 0) { + e.getBlock().getWorld().dropItem(e.getBlock().getLocation(), new ItemStack(Material.MELON_SLICE)); + } + } + + } + + public static void load(Player player) { + world = player.getWorld(); + spawnLocation = world.getSpawnLocation(); + + int height = world.getMaxHeight() - world.getMinHeight(); + int width = 30; + + Location loc = spawnLocation.clone().subtract(15, 0, 15); + loc.setY(world.getMinHeight()); + for (int y = 0; y < height; y++) { + for (int z = 0; z < width; z++) { + Block block = loc.clone().add(0, y, z).getBlock(); + if (!block.isSolid()) { + block.setType(barrierBlock); + } + } + } + mexico(15, world); + mexico(-15, world); + } + + private void resetBarrier(Player p, World world, List locations) { + for (Location location : locations) { + p.sendBlockChange(location, world.getBlockAt(location).getBlockData()); + } + locations.clear(); + } + + private static void mexico(int startPos, World world) { + int height = world.getMaxHeight() - world.getMinHeight(); + int width = 30; + Location loc = spawnLocation.clone().add(-15, 0, startPos); + loc.setY(world.getMinHeight()); + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) { + Block block = loc.clone().add(x, y, 0).getBlock(); + if (!block.isSolid()) { + block.setType(barrierBlock); + } + } + } + } + + public static List getDeadPlayer() { + return deadPlayer; + } + + public void startUpdateTask() { + task = plugin.getScheduler().runGlobalAtFixedRate(this::updateScoreAndBossBar, 1L, 1L); + } + + public void stopUpdateTask() { + if (task != null) { + task.cancel(); + task = null; + } + } + + private void updateScoreAndBossBar() { + if (Objects.equals(Config.getString("event.type"), "deathrun") && plugin.getTimer().isRunning()) { + ScoreManager scoreManager = plugin.getScoreManager(); + for (Player p : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + if (!plugin.getVanish().isVanish(p)) { + if (!deadPlayer.contains(p.getUniqueId()) && p.getGameMode() != GameMode.SPECTATOR) { + int distance = (int) p.getLocation().toVector().subtract(p.getWorld().getSpawnLocation().toVector()).length(); + scoreManager.setScore(new ChallengePlayer(p.getUniqueId()), distance); + } + + Component component = Component.text("Position: ", ChatUtil.GREEN).append(Component.text(scoreManager.getPosition(new ChallengePlayer(p.getUniqueId())), ChatUtil.BLUE).append(Component.text(" | ", ChatUtil.RED).append(deadPlayer.contains(p.getUniqueId()) ? Component.text("† ", Style.style(ChatUtil.RED, TextDecoration.BOLD)) : Component.empty())).append(Component.text("Distanz zum Spawn: ", ChatUtil.GREEN).append(Component.text(scoreManager.getScore(new ChallengePlayer(p.getUniqueId())) + " Blöcke", ChatUtil.BLUE)))); + BossBar bossBar = bossBarMap.computeIfAbsent(p, player -> { + BossBar newBossBar = BossBar.bossBar(component, 1.0f, BossBar.Color.GREEN, BossBar.Overlay.PROGRESS); + newBossBar.addViewer(p); + return newBossBar; + }); + bossBar.name(component); + } + } + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/DifferentItemsChallenge.java b/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/DifferentItemsChallenge.java new file mode 100644 index 0000000..72e096f --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/DifferentItemsChallenge.java @@ -0,0 +1,190 @@ +package de.fanta.challenge.challenges.ChallengeEvents; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.events.ChallengeEventStatusChangedEvent; +import de.fanta.challenge.guis.eventgui.BingoItemsGui; +import de.fanta.challenge.scoreboard.ChallengePlayer; +import de.fanta.challenge.scoreboard.ScoreManager; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.fanta.challenge.utils.CubesideModUtils; +import net.kyori.adventure.bossbar.BossBar; +import net.kyori.adventure.text.Component; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.Statistic; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityPickupItemEvent; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.player.PlayerBucketEmptyEvent; +import org.bukkit.event.player.PlayerBucketEntityEvent; +import org.bukkit.event.player.PlayerBucketFillEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerStatisticIncrementEvent; +import org.bukkit.inventory.CraftingInventory; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.UUID; + +public class DifferentItemsChallenge implements Listener { + private static boolean running; + private static final Challenges plugin = Challenges.getPlugin(); + private final HashMap> playerMaterials = new HashMap<>(); + private static final Map bossBarMap = new HashMap<>(); + + @EventHandler + public void onActivation(ChallengeEventStatusChangedEvent event) { + if (Objects.equals(Config.getString("event.type"), "differentitems")) { + if (event.isRunning()) { + for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + plugin.getScoreManager().join(new ChallengePlayer(pp.getUniqueId())); + } + updateBossBar(); + setRunning(true); + } else { + setRunning(false); + } + } + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent e) { + Player player = (Player) e.getWhoClicked(); + Inventory playerInv = BingoItemsGui.getPlayerInvs().get(player.getUniqueId()); + if (e.getClickedInventory() == null) { + return; + } + if (!isRunning()) { + return; + } + if (playerInv != null && playerInv.equals(e.getClickedInventory())) { + return; + } + if (e.getClickedInventory() instanceof CraftingInventory) { + return; + } + + ItemStack itemStack = e.getCurrentItem(); + if (itemStack != null && itemStack.getType() != Material.AIR) { + addDiscoveredItem(player, itemStack); + } + } + + @EventHandler + public void onItemCraft(PlayerStatisticIncrementEvent e) { + Player player = e.getPlayer(); + if (!isRunning()) { + return; + } + + if (e.getStatistic() != Statistic.CRAFT_ITEM) { + return; + } + + Material material = e.getMaterial(); + if (material == null) { + return; + } + + ItemStack itemStack = new ItemStack(material); + if (itemStack.getType() != Material.AIR) { + addDiscoveredItem(player, itemStack); + } + } + + @EventHandler + public void onPickUpItem(EntityPickupItemEvent e) { + ItemStack itemStack = e.getItem().getItemStack(); + if (e.getEntity() instanceof Player player) { + if (isRunning()) { + addDiscoveredItem(player, itemStack); + } + } + } + + @EventHandler + public void onBucketFill(PlayerBucketFillEvent e) { + ItemStack itemStack = e.getItemStack(); + Player player = e.getPlayer(); + if (isRunning()) { + if (itemStack != null) { + addDiscoveredItem(player, itemStack); + } + } + } + + @EventHandler + public void onBucketChatchFish(PlayerBucketEntityEvent e) { + ItemStack itemStack = e.getEntityBucket(); + if (isRunning()) { + addDiscoveredItem(e.getPlayer(), itemStack); + } + } + + @EventHandler + public void onBucketEmpty(PlayerBucketEmptyEvent e) { + ItemStack itemStack = e.getItemStack(); + Player player = e.getPlayer(); + if (isRunning()) { + if (itemStack != null) { + addDiscoveredItem(player, itemStack); + } + } + } + + @EventHandler + public void onJoin(PlayerJoinEvent e) { + if (isRunning()) { + plugin.getScoreManager().join(new ChallengePlayer(e.getPlayer().getUniqueId())); + updateBossBar(); + } + } + + private void addDiscoveredItem(Player player, ItemStack itemStack) { + List playerMaterialList; + if (playerMaterials.containsKey(player.getUniqueId())) { + playerMaterialList = playerMaterials.get(player.getUniqueId()); + } else { + playerMaterialList = new ArrayList<>(); + } + + if (!playerMaterialList.contains(itemStack.getType())) { + playerMaterialList.add(itemStack.getType()); + playerMaterials.put(player.getUniqueId(), playerMaterialList); + plugin.getScoreManager().updateScore(new ChallengePlayer(player.getUniqueId()), 1); + ChatUtil.sendMessage(player, Component.text("Item: ", ChatUtil.GREEN).append(ChatUtil.getTrasnlateItemComponent(itemStack.getType()).color(ChatUtil.BLUE)).append(Component.text(" wurde Registriert", ChatUtil.GREEN))); + player.playSound(player, Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 2.0F); + CubesideModUtils.sendFlashScreenToCubesideMod(plugin, player, 50, ChatUtil.GREEN); + updateBossBar(); + } + } + + private void updateBossBar() { + ScoreManager scoreManager = plugin.getScoreManager(); + for (Player p : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + Component component = Component.text("Position: ", ChatUtil.GREEN).append(Component.text(scoreManager.getPosition(new ChallengePlayer(p.getUniqueId())), ChatUtil.BLUE).append(Component.text(" | ", ChatUtil.RED).append(Component.text("Score: ", ChatUtil.GREEN).append(Component.text(scoreManager.getScore(new ChallengePlayer(p.getUniqueId())) + " Items", ChatUtil.BLUE))))); + BossBar bossBar = bossBarMap.computeIfAbsent(p, player -> { + BossBar newBossBar = BossBar.bossBar(component, 1.0f, BossBar.Color.GREEN, BossBar.Overlay.PROGRESS); + newBossBar.addViewer(p); + return newBossBar; + }); + bossBar.name(component); + } + } + + private static void setRunning(boolean run) { + running = run; + } + + public static boolean isRunning() { + return running; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/OreBattleChallengeEvent.java b/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/OreBattleChallengeEvent.java new file mode 100644 index 0000000..f7c2336 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/OreBattleChallengeEvent.java @@ -0,0 +1,145 @@ +package de.fanta.challenge.challenges.ChallengeEvents; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.events.TimerChangedEvent; +import de.fanta.challenge.scoreboard.ChallengePlayer; +import de.fanta.challenge.scoreboard.Scorable; +import de.fanta.challenge.teams.ChallengeTeam; +import de.fanta.challenge.teams.TeamUtils; +import de.fanta.challenge.utils.ChatSkullAPI.ChatSkull; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.player.PlayerJoinEvent; + +import java.util.HashMap; +import java.util.Objects; + +public class OreBattleChallengeEvent implements Listener { + private static final HashMap blocklist = new HashMap<>(); + private static boolean running; + private final Challenges plugin = Challenges.getPlugin(); + + public static boolean isRunning() { + return running; + } + + public void setRunning(boolean run) { + running = run; + } + + @EventHandler + public void onActivation(TimerChangedEvent event) { + if (Objects.equals(Config.getString("event.type"), "orebattle")) { + if (event.isRunning()) { + blocklist.put(Material.EMERALD_ORE, 80); + blocklist.put(Material.DEEPSLATE_EMERALD_ORE, 1500); + blocklist.put(Material.DIAMOND_ORE, 300); + blocklist.put(Material.DEEPSLATE_DIAMOND_ORE, 80); + blocklist.put(Material.GOLD_ORE, 60); + blocklist.put(Material.DEEPSLATE_GOLD_ORE, 60); + blocklist.put(Material.IRON_ORE, 12); + blocklist.put(Material.DEEPSLATE_IRON_ORE, 30); + blocklist.put(Material.COPPER_ORE, 7); + blocklist.put(Material.DEEPSLATE_COPPER_ORE, 45); + blocklist.put(Material.REDSTONE_ORE, 70); + blocklist.put(Material.DEEPSLATE_REDSTONE_ORE, 20); + blocklist.put(Material.COAL_ORE, 7); + blocklist.put(Material.DEEPSLATE_COAL_ORE, 300); + blocklist.put(Material.LAPIS_ORE, 70); + blocklist.put(Material.DEEPSLATE_LAPIS_ORE, 70); + + for (Player pp : Bukkit.getOnlinePlayers()) { + if (!Config.getBoolean("event.teams")) { + plugin.getScoreManager().join(new ChallengePlayer(pp.getUniqueId())); + } else { + for (ChallengeTeam team : TeamUtils.getTeams()) { + if (team != null && !TeamUtils.getPlayersInTeam(team).isEmpty()) { + plugin.getScoreManager().join(team); + } + } + } + } + + setRunning(true); + } else { + setRunning(false); + if (!Config.getBoolean("event.teams")) { + for (Scorable scorable : plugin.getScoreManager().getByPositon(1)) { + OfflinePlayer p = (Bukkit.getServer().getOfflinePlayer(scorable.getName())); + if (p.isOnline()) { + Component[] lines = {Component.empty(), Component.empty(), Component.empty(), Component.text(" " + p.getName(), ChatUtil.BLUE), Component.text(" hat " + plugin.getScoreManager().getScore(scorable) + " Punkte und", ChatUtil.GREEN), Component.text(" hat damit gewonnen!", ChatUtil.GREEN), Component.empty(), Component.empty()}; + ChatSkull.sendAll((Player) p, lines); + } else { + ChatUtil.sendBrodCastMessage(Component.text(scorable.getName(), ChatUtil.BLUE).append(Component.text(" hat " + plugin.getScoreManager().getScore(scorable) + " Punkte und hat damit gewonnen!", ChatUtil.GREEN))); + } + ChatUtil.sendTitleToAll(Component.text("Event"), Component.text(ChatUtil.BLUE + p.getName() + ChatUtil.GREEN + " gewinnt mit " + ChatUtil.BLUE + plugin.getScoreManager().getScore(scorable) + ChatUtil.GREEN + " Punkten", ChatUtil.GREEN)); + } + + } else { + for (Scorable scorable : plugin.getScoreManager().getByPositon(1)) { + ChallengeTeam team = TeamUtils.getTeam(scorable.getName()); + if (team != null) { + ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Team ", ChatUtil.GREEN).append(Component.text(team.getName(), team.getChatColor()).append(Component.text(" gewinnt mit ", ChatUtil.GREEN).append(Component.text(plugin.getScoreManager().getScore(scorable), ChatUtil.BLUE).append(Component.text(" Punkten", ChatUtil.GREEN)))))); + Component[] lines = {Component.empty(), Component.empty(), Component.empty(), Component.text(" " + "Team ", ChatUtil.BLUE).append(Component.text(team.getName(), team.getChatColor())), Component.text(" hat " + plugin.getScoreManager().getScore(scorable) + " Punkte und", ChatUtil.GREEN), Component.text(" hat damit gewonnen!", ChatUtil.GREEN), Component.empty(), Component.empty()}; + for (OfflinePlayer pp : TeamUtils.getPlayersInTeam(team)) + if (pp.isOnline()) { + ChatSkull.sendAll((Player) pp, lines); + } + } + } + } + } + } + } + + @EventHandler + public void onBreakBlock(BlockBreakEvent e) { + if (isRunning()) { + if (blocklist.containsKey(e.getBlock().getType())) { + if (!Config.getBoolean("event.teams")) { + plugin.getScoreManager().updateScore(new ChallengePlayer(e.getPlayer().getUniqueId()), blocklist.get(e.getBlock().getType())); + } else { + plugin.getScoreManager().updateScore(TeamUtils.getPlayerTeam(e.getPlayer()), blocklist.get(e.getBlock().getType())); + } + ChatUtil.sendTitleToPlayer(e.getPlayer(), Component.empty(), ChatUtil.getTrasnlateItemComponent(e.getBlock().getType()).color(ChatUtil.BLUE).append(Component.text(" +" + blocklist.get(e.getBlock().getType()), ChatUtil.GREEN)), 3, 20, 3, false); + } + } + } + + @EventHandler + public void onPlaceBlock(BlockPlaceEvent e) { + if (isRunning()) { + if (blocklist.containsKey(e.getBlock().getType())) { + if (!Config.getBoolean("event.teams")) { + plugin.getScoreManager().updateScore(new ChallengePlayer(e.getPlayer().getUniqueId()), -blocklist.get(e.getBlock().getType())); + } else { + plugin.getScoreManager().updateScore(TeamUtils.getPlayerTeam(e.getPlayer()), -blocklist.get(e.getBlock().getType())); + } + ChatUtil.sendTitleToPlayer(e.getPlayer(), Component.empty(), ChatUtil.getTrasnlateItemComponent(e.getBlock().getType()).color(ChatUtil.BLUE).append(Component.text(" -" + blocklist.get(e.getBlock().getType()), ChatUtil.RED)), 3, 20, 3, false); + } + } + } + + @EventHandler + public void onJoin(PlayerJoinEvent e) { + if (isRunning()) { + if (Config.getBoolean("event.teams")) { + ChallengeTeam team = TeamUtils.getPlayerTeam(e.getPlayer()); + if (team != null) { + plugin.getScoreManager().join(team); + } + } else { + plugin.getScoreManager().join(new ChallengePlayer(e.getPlayer().getUniqueId())); + } + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/SammelFieberChallengeEvent.java b/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/SammelFieberChallengeEvent.java new file mode 100644 index 0000000..3bfb04c --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/SammelFieberChallengeEvent.java @@ -0,0 +1,335 @@ +package de.fanta.challenge.challenges.ChallengeEvents; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.events.TimerChangedEvent; +import de.fanta.challenge.guis.eventgui.SammelFieberSettingsGui; +import de.fanta.challenge.scoreboard.ChallengePlayer; +import de.fanta.challenge.teams.ChallengeTeam; +import de.fanta.challenge.teams.TeamUtils; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import net.kyori.adventure.bossbar.BossBar; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.OfflinePlayer; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.entity.Villager; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.entity.EntityPickupItemEvent; +import org.bukkit.event.inventory.InventoryMoveItemEvent; +import org.bukkit.event.inventory.InventoryPickupItemEvent; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.MerchantRecipe; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Objects; +import java.util.UUID; + +public class SammelFieberChallengeEvent implements Listener { + + public static BossBar bossBar; + + public static final HashMap bossBarList = new HashMap<>(); + public static final HashMap bossBarPlayerList = new HashMap<>(); + public static Location hopperloc; + private static Material material; + private static boolean running; + private static int count; + private final Challenges plugin = Challenges.getPlugin(); + + public static Location getHopperLocation() { + return hopperloc; + } + + public static void setHopperLocation(Location loc) { + SammelFieberChallengeEvent.hopperloc = loc; + } + + public static Material getMaterial() { + return material; + } + + public void setMaterial(Material mat) { + material = mat; + } + + public static boolean isRunning() { + return running; + } + + public void setRunning(boolean run) { + running = run; + } + + public static int getCount() { + return count; + } + + private boolean isSinglePlayer() { + return SammelFieberSettingsGui.singlePlayer; + } + + @EventHandler + public void onActivation(TimerChangedEvent event) { + if (Objects.equals(Config.getString("event.type"), "sammelfieber")) { + if (event.isRunning()) { + ItemStack stack = SammelFieberSettingsGui.getEventItem(); + if (stack != null && getHopperLocation() != null) { + setMaterial(stack.getType()); + if (!Config.getBoolean("event.teams")) { + if (isSinglePlayer()) { + updatePlayerBossBar(); + } else { + bossBar = BossBar.bossBar(Component.text("Es wurden ", ChatUtil.GREEN).append(Component.text(count + " ", ChatUtil.BLUE)).append(ChatUtil.getTrasnlateItemComponent(getMaterial()).color(ChatUtil.BLUE).append(Component.text(" abgegeben. Das sind ", ChatUtil.GREEN).append(Component.text(count * SammelFieberSettingsGui.MONEY + " Cubes", ChatUtil.BLUE)))), 1.0f, BossBar.Color.GREEN, BossBar.Overlay.PROGRESS); + for (Player pp : Bukkit.getOnlinePlayers()) { + plugin.getScoreManager().join(new ChallengePlayer(pp.getUniqueId())); + bossBar.addViewer(pp); + } + } + } else { + for (ChallengeTeam team : TeamUtils.getTeams()) { + plugin.getScoreManager().join(team); + BossBar teamBar = BossBar.bossBar(Component.text("Dein Team hat ", ChatUtil.GREEN).append(Component.text(plugin.getScoreManager().getScore(team) + " ", ChatUtil.BLUE)).append(ChatUtil.getTrasnlateItemComponent(getMaterial()).color(ChatUtil.BLUE).append(Component.text(" abgegeben. ", ChatUtil.GREEN).append(Component.text(" | ", ChatUtil.RED)).append(Component.text("Platz: " + plugin.getScoreManager().getPosition(team), ChatUtil.GREEN)))), 1.0f, BossBar.Color.GREEN, BossBar.Overlay.PROGRESS); + bossBarList.put(team, teamBar); + for (OfflinePlayer offlinePlayer : TeamUtils.getPlayersInTeam(team)) + if (offlinePlayer instanceof Player player) { + teamBar.addViewer(player); + } + } + } + + } else { + ChatUtil.sendErrorMessage(plugin.getCurrentEditor(), "Du musst erst ein Item und Hopper festlegen."); + plugin.getTimer().stopTimer(); + return; + } + setRunning(true); + } else { + setRunning(false); + } + } + } + + @EventHandler + public void onHoppergetItem(InventoryPickupItemEvent e) { + if (!isRunning()) { + return; + } + + Location loc = e.getInventory().getLocation(); + Location blockloc = new Location(loc.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); + if (!getHopperLocation().equals(blockloc)) { + return; + } + + ItemStack stack = e.getItem().getItemStack(); + + if (stack.getType() != getMaterial()) { + e.setCancelled(true); + return; + } + + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.hasDisplayName()) { + if (!Config.getBoolean("event.teams")) { + Player player = Bukkit.getPlayer(meta.getDisplayName()); + count = count + stack.getAmount(); + plugin.getScoreManager().updateScore(new ChallengePlayer(player.getUniqueId()), stack.getAmount()); + player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 2.0F); + if (isSinglePlayer()) { + updatePlayerBossBar(); + } else { + bossBar.name(Component.text("Es wurden ", ChatUtil.GREEN).append(Component.text(count + " ", ChatUtil.BLUE)).append(ChatUtil.getTrasnlateItemComponent(getMaterial()).color(ChatUtil.BLUE)).append(Component.text(" abgegeben. Das sind ", ChatUtil.GREEN).append(Component.text(count * SammelFieberSettingsGui.MONEY + " Cubes", ChatUtil.BLUE)))); + } + } else { + ChallengeTeam team = TeamUtils.getTeam(meta.getDisplayName()); + if (team != null) { + plugin.getScoreManager().updateScore(team, stack.getAmount()); + + for (OfflinePlayer offlinePlayer : TeamUtils.getPlayersInTeam(team)) { + if (offlinePlayer instanceof Player pp) { + pp.playSound(pp.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 2.0F); + } + } + + for (ChallengeTeam tempTema : TeamUtils.getTeams()) { + BossBar teamBar = bossBarList.get(tempTema); + teamBar.name(Component.text("Dein Team hat ", ChatUtil.GREEN).append(Component.text(plugin.getScoreManager().getScore(tempTema) + " ", ChatUtil.BLUE)).append(ChatUtil.getTrasnlateItemComponent(getMaterial()).color(ChatUtil.BLUE)).append(Component.text(" abgegeben. ", ChatUtil.GREEN).append(Component.text(" | ", ChatUtil.RED)).append(Component.text("Platz: " + plugin.getScoreManager().getPosition(tempTema), ChatUtil.GREEN)))); + } + } + } + } + plugin.getScheduler().runLocalDelayed(e.getInventory().getLocation(), () -> e.getInventory().clear(), 1); + } + + private void updatePlayerBossBar() { + for (Player pp : Bukkit.getOnlinePlayers()) { + ChallengePlayer challengePlayer = new ChallengePlayer(pp.getUniqueId()); + plugin.getScoreManager().join(challengePlayer); + + Component component = Component.text("Du hast ", ChatUtil.GREEN).append(Component.text(plugin.getScoreManager().getScore(challengePlayer) + " ", ChatUtil.BLUE).append(ChatUtil.getTrasnlateItemComponent(getMaterial()).color(ChatUtil.BLUE)).append(Component.text(" abgegeben.", ChatUtil.GREEN).append(Component.text(" | ", ChatUtil.RED).append(Component.text("Platzierung: " + plugin.getScoreManager().getPosition(challengePlayer), ChatUtil.GREEN))))); + if (bossBarPlayerList.containsKey(pp.getUniqueId())) { + BossBar playerBar = bossBarPlayerList.get(pp.getUniqueId()); + playerBar.name(component); + playerBar.addViewer(pp); + } else { + BossBar playerBar = BossBar.bossBar(component, 1.0f, BossBar.Color.GREEN, BossBar.Overlay.PROGRESS); + playerBar.addViewer(pp); + bossBarPlayerList.put(pp.getUniqueId(), playerBar); + } + } + } + + @EventHandler + public void onHopperMoveItem(InventoryMoveItemEvent e) { + if (!isRunning()) { + return; + } + + Location loc = e.getSource().getLocation(); + if (loc == null) { + return; + } + Location blockLoc = new Location(loc.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); + if (getHopperLocation().equals(blockLoc)) { + e.setCancelled(true); + } + } + + @EventHandler + public void onInteract(PlayerInteractEvent e) { + if (!isRunning()) { + return; + } + if (e.getAction() == Action.RIGHT_CLICK_BLOCK) { + Block clickedBlock = e.getClickedBlock(); + if (clickedBlock == null) { + return; + } + Location loc = clickedBlock.getLocation(); + Location blockLoc = new Location(loc.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); + if (getHopperLocation().equals(blockLoc)) { + e.setCancelled(true); + } + } + + } + + @EventHandler + public void onBlockBreak(BlockBreakEvent e) { + if (!isRunning()) { + return; + } + + Location loc = e.getBlock().getLocation(); + Location blockloc = new Location(loc.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); + if (getHopperLocation().equals(blockloc)) { + e.setCancelled(true); + } + } + + @EventHandler + public void onPlayerDropItem(PlayerDropItemEvent e) { + if (!isRunning()) { + return; + } + + ItemStack stack = e.getItemDrop().getItemStack(); + + if (stack.getType() != getMaterial()) { + return; + } + + ItemMeta meta = stack.getItemMeta(); + if (!Config.getBoolean("event.teams")) { + meta.displayName(e.getPlayer().name()); + } else { + meta.displayName(Component.text(TeamUtils.getPlayerTeam(e.getPlayer()).getName())); + } + + stack.setItemMeta(meta); + } + + @EventHandler + public void onPlayerPickUpItem(EntityPickupItemEvent e) { + if (!isRunning()) { + return; + } + + if (!(e.getEntity() instanceof Player)) { + return; + } + + ItemStack stack = e.getItem().getItemStack(); + + if (stack.getType() != getMaterial()) { + return; + } + + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.hasDisplayName()) { + meta.displayName(null); + stack.setItemMeta(meta); + } + } + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent e) { + if (!isRunning()) { + return; + } + if (!Config.getBoolean("event.teams")) { + if (isSinglePlayer()) { + updatePlayerBossBar(); + } else { + plugin.getScoreManager().join(new ChallengePlayer(e.getPlayer().getUniqueId())); + bossBar.addViewer(e.getPlayer()); + } + } else { + ChallengeTeam team = TeamUtils.getPlayerTeam(e.getPlayer()); + if (team != null) { + plugin.getScoreManager().join(team); + if (bossBarList.containsKey(team)) { + bossBarList.get(team).addViewer(e.getPlayer()); + } else { + Component component = Component.text("Dein Team hat ", ChatUtil.GREEN).append(Component.text(plugin.getScoreManager().getScore(team) + " ", ChatUtil.BLUE)).append(ChatUtil.getTrasnlateItemComponent(getMaterial()).color(ChatUtil.BLUE)).append(Component.text(" abgegeben. ", ChatUtil.GREEN).append(Component.text(" | ", ChatUtil.RED)).append(Component.text("Platz: " + plugin.getScoreManager().getPosition(team), ChatUtil.GREEN))); + BossBar teamBar = BossBar.bossBar(component, 1.0f, BossBar.Color.GREEN, BossBar.Overlay.PROGRESS); + bossBarList.put(team, teamBar); + teamBar.addViewer(e.getPlayer()); + } + } + } + } + + @EventHandler + public void onEntityClick(PlayerInteractEntityEvent e) { + if (!isRunning()) { + return; + } + if (e.getRightClicked() instanceof Villager villager) { + List trades = new ArrayList<>(); + for (MerchantRecipe trade : villager.getRecipes()) { + ItemStack stack = trade.getResult(); + if (stack.getType() != material) { + trades.add(trade); + } + } + villager.setRecipes(trades); + } + } + +} diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/TimeChallengeEvent.java b/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/TimeChallengeEvent.java new file mode 100644 index 0000000..95672d8 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/TimeChallengeEvent.java @@ -0,0 +1,85 @@ +package de.fanta.challenge.challenges.ChallengeEvents; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.events.TimerChangedEvent; +import de.fanta.challenge.schedular.CancellableTask; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.plugin.api.OnlinePlayerData; +import de.iani.cubesideutils.bukkit.plugin.api.UtilsApiBukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import java.util.HashMap; +import java.util.Objects; +import java.util.UUID; + +public class TimeChallengeEvent implements Listener { + + private final Challenges plugin = Challenges.getPlugin(); + private static final HashMap playerPlayTimes = new HashMap<>(); + private static final HashMap playerStartTimes = new HashMap<>(); + private CancellableTask updateTimesTask; + + @EventHandler + public void onActivation(TimerChangedEvent event) { + if (Objects.equals(Config.getString("event.type"), "time")) { + if (event.isRunning()) { + startUpdateTask(); + for (Player player : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + updatePlayTime(player); + } + } else { + stopUpdateTask(); + } + } + } + + private void startUpdateTask() { + updateTimesTask = plugin.getScheduler().runGlobalAtFixedRate(() -> { + System.out.println("Update Times"); + for (Player player : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + updatePlayTime(player); + } + }, 5 * 20L, 5 * 20L); + } + + private void stopUpdateTask() { + if (updateTimesTask != null) { + updateTimesTask.cancel(); + updateTimesTask = null; + } + } + + @EventHandler + public void onPlayerQuit(PlayerQuitEvent e) { + if (Objects.equals(Config.getString("event.type"), "time")) { + playerStartTimes.remove(e.getPlayer().getUniqueId()); + } + } + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent e) { + if (Objects.equals(Config.getString("event.type"), "time")) { + updatePlayTime(e.getPlayer()); + } + } + + private void updatePlayTime(Player player) { + OnlinePlayerData data = UtilsApiBukkit.getInstance().getPlayerData(player); + long currentTime = System.currentTimeMillis(); + if (plugin.getTimer().isRunning() && !data.isGloballyAfk() && data.getLastAction() >= currentTime - (2 * 60 * 1000)) { + long playTime = currentTime - playerStartTimes.getOrDefault(player.getUniqueId(), currentTime); + playerPlayTimes.put(player.getUniqueId(), playTime + playerPlayTimes.getOrDefault(player.getUniqueId(), 0L)); + playerStartTimes.put(player.getUniqueId(), currentTime); + } else { + playerStartTimes.remove(player.getUniqueId()); + } + } + + public static HashMap getPlayerPlayTimes() { + return playerPlayTimes; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/forcequest/ForceQuestChallengeEvent.java b/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/forcequest/ForceQuestChallengeEvent.java new file mode 100644 index 0000000..dda6fa9 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/forcequest/ForceQuestChallengeEvent.java @@ -0,0 +1,1109 @@ +package de.fanta.challenge.challenges.ChallengeEvents.forcequest; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.events.TimerChangedEvent; +import de.fanta.challenge.schedular.CancellableTask; +import de.fanta.challenge.scoreboard.ChallengePlayer; +import de.fanta.challenge.scoreboard.Scorable; +import de.fanta.challenge.scoreboard.ScoreManager; +import de.fanta.challenge.utils.ChatSkullAPI.ChatSkull; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.fanta.challenge.utils.CoordsTargeter; +import de.fanta.challenge.utils.CubesideModUtils; +import de.fanta.challenge.utils.ItemUtils; +import de.iani.cubesideutils.StringUtil; +import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; +import de.iani.cubesideutils.bukkit.items.ItemGroups; +import net.kyori.adventure.bossbar.BossBar; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; +import net.kyori.adventure.text.format.TextDecoration; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.OfflinePlayer; +import org.bukkit.Registry; +import org.bukkit.Sound; +import org.bukkit.block.Biome; +import org.bukkit.block.Block; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.event.entity.EntityDismountEvent; +import org.bukkit.event.entity.EntityPickupItemEvent; +import org.bukkit.event.entity.EntityPotionEffectEvent; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryDragEvent; +import org.bukkit.event.inventory.InventoryMoveItemEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.event.player.PlayerArmorStandManipulateEvent; +import org.bukkit.event.player.PlayerBucketEntityEvent; +import org.bukkit.event.player.PlayerBucketFillEvent; +import org.bukkit.event.player.PlayerChangedWorldEvent; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerGameModeChangeEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.event.player.PlayerSwapHandItemsEvent; +import org.bukkit.inventory.CraftingInventory; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataType; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.kitteh.vanish.event.VanishStatusChangeEvent; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Random; +import java.util.TreeMap; +import java.util.UUID; + +public class ForceQuestChallengeEvent implements Listener { + private static final Challenges plugin = Challenges.getPlugin(); + private static final Random random = new Random(); + + private static boolean running; + public static ItemStack skipItem; + public static int skipQuestCount = 3; + private final NamespacedKey skipKey = new NamespacedKey(plugin, "SkipQuest"); + + private static final ArrayList materials = new ArrayList<>(); + private static final ArrayList biomes = new ArrayList<>(); + private static final ArrayList entityTypes = new ArrayList<>(); + private static final ArrayList damageCauses = new ArrayList<>(); + private static final ArrayList potionEffectTypes = new ArrayList<>(); + + private static final HashMap itemByPlayerList = new HashMap<>(); + private static final HashMap biomeByPlayerList = new HashMap<>(); + private static final HashMap entityTypeByPlayerList = new HashMap<>(); + private static final HashMap damageCauseByPlayerList = new HashMap<>(); + private static final HashMap potionEffectTypeByPlayerList = new HashMap<>(); + private static final HashMap locationByPlayerList = new HashMap<>(); + private static final HashMap lastPlayerDamageCauseList = new HashMap<>(); + + private static final HashMap> playerMaterials = new HashMap<>(); + private static final HashMap> playerBiomes = new HashMap<>(); + private static final HashMap> playerEntityTypes = new HashMap<>(); + private static final HashMap> playerDamageCauses = new HashMap<>(); + private static final HashMap> playerPotionEffectTypes = new HashMap<>(); + + private static final ArrayList dismountAllowList = new ArrayList<>(); + + private static final HashMap bossBarMap = new HashMap<>(); + private final HashMap playerTasks = new HashMap<>(); + private static final HashMap playerQuest = new HashMap<>(); + + private final Collection initPlayers = new ArrayList<>(); + public static final Collection activeQuestTypes = new ArrayList<>(); + + @EventHandler + public void onActivation(TimerChangedEvent event) { + if (Objects.equals(Config.getString("event.type"), "forcequest")) { + if (event.isRunning()) { + if (activeQuestTypes.isEmpty()) { + plugin.getTimer().stopTimer(); + ChatUtil.sendErrorMessage(plugin.getCurrentEditor(), "Es sind keine Quests ausgewählt"); + return; + } + + skipItem = createSkipItem(); + + for (Material material : Material.values()) { + if (material.isItem() && !material.isAir() && !plugin.getNotAvailableMaterials().contains(material) && !material.name().contains("smithing_template".toUpperCase()) && !material.name().contains("sherd".toUpperCase())) { + materials.add(material); + } + } + + for (Biome biome : Biome.values()) { + if (biome != Biome.CUSTOM) { + biomes.add(biome); + } + } + + for (EntityType entityType : EntityType.values()) { + if (entityType.isAlive() && entityType != EntityType.ZOMBIE_HORSE && entityType != EntityType.GIANT && entityType != EntityType.ILLUSIONER && entityType != EntityType.PLAYER && entityType != EntityType.ARMOR_STAND) { + entityTypes.add(entityType); + } + } + + for (EntityDamageEvent.DamageCause damageCause : EntityDamageEvent.DamageCause.values()) { + if (damageCause != EntityDamageEvent.DamageCause.KILL && damageCause != EntityDamageEvent.DamageCause.WORLD_BORDER && damageCause != EntityDamageEvent.DamageCause.CUSTOM && damageCause != EntityDamageEvent.DamageCause.DRYOUT && damageCause != EntityDamageEvent.DamageCause.ENTITY_SWEEP_ATTACK && damageCause != EntityDamageEvent.DamageCause.MELTING && damageCause != EntityDamageEvent.DamageCause.SUICIDE) { + damageCauses.add(damageCause); + } + } + + for (PotionEffectType potionEffectType : Registry.EFFECT) { + if (!potionEffectType.isInstant() && potionEffectType != PotionEffectType.LUCK && potionEffectType != PotionEffectType.UNLUCK && potionEffectType != PotionEffectType.HEALTH_BOOST) { + potionEffectTypes.add(potionEffectType); + } + } + + for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + initPlayer(pp); + } + + setRunning(true); + } else { + stopUpdateTask(); + + for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + removeArmorStand(pp); + pp.setGameMode(GameMode.SPECTATOR); + } + + for (Scorable scorable : plugin.getScoreManager().getByPositon(1)) { + OfflinePlayer p = (Bukkit.getServer().getOfflinePlayer(scorable.getName())); + if (p.isOnline()) { + Component[] lines = {Component.empty(), Component.empty(), Component.empty(), Component.text(" " + p.getName(), ChatUtil.BLUE), Component.text(" hat " + plugin.getScoreManager().getScore(scorable) + " Aufgaben erledigt", ChatUtil.GREEN), Component.text(" und hat damit gewonnen!", ChatUtil.GREEN), Component.empty(), Component.empty()}; + ChatSkull.sendAll((Player) p, lines); + } else { + ChatUtil.sendBrodCastMessage(Component.text(scorable.getName(), ChatUtil.BLUE).append(Component.text(" hat ", ChatUtil.GREEN).append(Component.text(plugin.getScoreManager().getScore(scorable), ChatUtil.BLUE).append(Component.text(" Aufgaben erledigt und hat damit gewonnen!", ChatUtil.GREEN))))); + } + } + + setRunning(false); + } + } + } + + private void initPlayer(Player player) { + ChallengePlayer cp = new ChallengePlayer(player.getUniqueId()); + if (!initPlayers.contains(player.getUniqueId())) { + plugin.getScoreManager().join(cp); + playerMaterials.put(player.getUniqueId(), new ArrayList<>(materials)); + playerBiomes.put(player.getUniqueId(), new ArrayList<>(biomes)); + playerEntityTypes.put(player.getUniqueId(), new ArrayList<>(entityTypes)); + playerDamageCauses.put(player.getUniqueId(), new ArrayList<>(damageCauses)); + playerPotionEffectTypes.put(player.getUniqueId(), new ArrayList<>(potionEffectTypes)); + + player.getInventory().setItem(8, skipItem); + initPlayers.add(player.getUniqueId()); + } + + if (!playerQuest.containsKey(player.getUniqueId())) { + createNewQuest(player); + } + + addArmorStand(player); + updateArmorStand(player); + startUpdateTask(player); + } + + private static void createNewQuest(Player player) { + QuestType questType = getRandomQuest(player); + playerQuest.put(player.getUniqueId(), questType); + + switch (questType) { + case ForceItem -> { + ArrayList itemList = playerMaterials.get(player.getUniqueId()); + Material item = itemList.get(random.nextInt((itemList.size() - 1) + 1)); + itemByPlayerList.put(player.getUniqueId(), item); + + for (ItemStack stack : player.getInventory().getContents()) { + if (stack != null) { + if (selectItem(player, stack.getType())) { + return; + } + } + } + } + case ForceBiome -> { + ArrayList itemList = playerBiomes.get(player.getUniqueId()); + Biome biome = itemList.get(random.nextInt((itemList.size() - 1) + 1)); + biomeByPlayerList.put(player.getUniqueId(), biome); + + selectBiome(player, player.getWorld().getBiome(player.getLocation())); + } + case ForceMob -> { + ArrayList itemList = playerEntityTypes.get(player.getUniqueId()); + EntityType entityType = itemList.get(random.nextInt((itemList.size() - 1) + 1)); + entityTypeByPlayerList.put(player.getUniqueId(), entityType); + } + case ForceEffect -> { + ArrayList itemList = playerPotionEffectTypes.get(player.getUniqueId()); + PotionEffectType potionEffectType = itemList.get(random.nextInt((itemList.size() - 1) + 1)); + potionEffectTypeByPlayerList.put(player.getUniqueId(), potionEffectType); + + player.getActivePotionEffects().forEach(potionEffect -> selectEffect(player, potionEffect.getType())); + } + case ForceDeath -> { + ArrayList itemList = playerDamageCauses.get(player.getUniqueId()); + EntityDamageEvent.DamageCause damageCause = itemList.get(random.nextInt((itemList.size() - 1) + 1)); + damageCauseByPlayerList.put(player.getUniqueId(), damageCause); + } + case ForceLocation -> { + Location location = getRandomLocationAroundPlayer(player, 350); + locationByPlayerList.put(player.getUniqueId(), location); + CoordsTargeter.addLocation(player.getUniqueId(), location, false); + } + + } + } + + private static QuestType getRandomQuest(Player player) { + TreeMap PROBABILITY_MAP; + int MAX_PROBABILITY; + + PROBABILITY_MAP = new TreeMap<>(Comparator.reverseOrder()); + MAX_PROBABILITY = 0; + + for (QuestType questType : activeQuestTypes) { + PROBABILITY_MAP.put(MAX_PROBABILITY, questType); + MAX_PROBABILITY += questType.getProbability(); + } + + int result = random.nextInt(MAX_PROBABILITY); + + for (Map.Entry entry : PROBABILITY_MAP.entrySet()) { + if (entry.getKey() <= result) { + QuestType questType = entry.getValue(); + switch (questType) { + case ForceItem -> { + if (playerMaterials.get(player.getUniqueId()).isEmpty()) { + return getRandomQuest(player); + } + return entry.getValue(); + } + case ForceBiome -> { + if (playerBiomes.get(player.getUniqueId()).isEmpty()) { + return getRandomQuest(player); + } + return entry.getValue(); + } + case ForceMob -> { + if (playerEntityTypes.get(player.getUniqueId()).isEmpty()) { + return getRandomQuest(player); + } + return entry.getValue(); + } + case ForceEffect -> { + if (playerPotionEffectTypes.get(player.getUniqueId()).isEmpty()) { + return getRandomQuest(player); + } + return entry.getValue(); + } + case ForceDeath -> { + if (playerDamageCauses.get(player.getUniqueId()).isEmpty()) { + return getRandomQuest(player); + } + return entry.getValue(); + } + case ForceLocation -> { + return entry.getValue(); + } + } + } + } + + throw new IllegalStateException("Fehler bei Ermittlung eines zufälligen Quest Typs. Ermittelter wert: " + result + " | Maximaler Wert: " + MAX_PROBABILITY); + } + + public static Location getRandomLocationAroundPlayer(Player player, double radius) { + double angle = random.nextDouble() * 2 * Math.PI; + double distance = random.nextDouble() * radius; + + double xOffset = Math.cos(angle) * distance; + double zOffset = Math.sin(angle) * distance; + + Location playerLocation = player.getLocation(); + double newX = playerLocation.getX() + xOffset; + double newZ = playerLocation.getZ() + zOffset; + double newY = random.nextDouble(player.getWorld().getMinHeight() + 5, player.getWorld().getMaxHeight()); + + return new Location(player.getWorld(), newX, newY, newZ); + } + + @EventHandler + public void onGameModeSwitch(PlayerGameModeChangeEvent e) { + if (isRunning()) { + Player player = e.getPlayer(); + if (e.getNewGameMode() == GameMode.SPECTATOR) { + removeArmorStand(player); + } else if (!plugin.getVanish().isVanish(player)) { + addArmorStand(player); + } + } + } + + @EventHandler + public void onToggleVanish(VanishStatusChangeEvent e) { + if (isRunning()) { + Player player = e.getPlayer(); + if (e.isVanishing()) { + removeArmorStand(player); + } else if (player.getGameMode() != GameMode.SPECTATOR) { + if (plugin.getScoreManager().getScores().containsKey(new ChallengePlayer(player.getUniqueId()))) { + plugin.getScoreManager().join(new ChallengePlayer(player.getUniqueId())); + } + + addArmorStand(player); + + if (itemByPlayerList.get(player.getUniqueId()) == null) { + plugin.getScoreManager().join(new ChallengePlayer(player.getUniqueId())); + updateBossBar(); + player.getInventory().setItem(8, skipItem); + } + } + } + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent e) { + if (isRunning()) { + Player player = e.getPlayer(); + removeArmorStand(player); + stopUpdateTask(e.getPlayer()); + } + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onPlayerJoin(PlayerJoinEvent e) { + if (isRunning()) { + Player player = e.getPlayer(); + if (plugin.getVanish().isVanish(player)) { + return; + } + + initPlayer(player); + + if (locationByPlayerList.containsKey(player.getUniqueId())) { + CoordsTargeter.addLocation(player.getUniqueId(), locationByPlayerList.get(player.getUniqueId()), false); + } + } + } + + @EventHandler + public void onChangeWorld(PlayerChangedWorldEvent e) { + if (isRunning()) { + Player player = e.getPlayer(); + + if (locationByPlayerList.containsKey(player.getUniqueId())) { + Location location = locationByPlayerList.get(player.getUniqueId()); + if (player.getLocation().getWorld() == location.getWorld()) { + CoordsTargeter.addLocation(player.getUniqueId(), location, false); + } else { + CoordsTargeter.removeLocation(player.getUniqueId()); + } + + } + } + } + + @EventHandler + public void onPickUpItem(EntityPickupItemEvent e) { + ItemStack itemStack = e.getItem().getItemStack(); + if (e.getEntity() instanceof Player player) { + if (isRunning()) { + selectItem(player, itemStack.getType()); + } + } + } + + @EventHandler + public void onBucketFill(PlayerBucketFillEvent e) { + ItemStack itemStack = e.getItemStack(); + Player player = e.getPlayer(); + if (isRunning()) { + if (itemStack != null) { + selectItem(player, itemStack.getType()); + } + } + } + + @EventHandler + public void onBucketChatchFish(PlayerBucketEntityEvent e) { + ItemStack itemStack = e.getEntityBucket(); + if (isRunning()) { + selectItem(e.getPlayer(), itemStack.getType()); + } + } + + @EventHandler + public void onBlockPlace(BlockPlaceEvent e) { + if (isRunning()) { + ItemStack stack = e.getItemInHand(); + ItemMeta meta = stack.getItemMeta(); + + if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { + e.setCancelled(true); + } + } + } + + @EventHandler + public void onDropItem(PlayerDropItemEvent e) { + if (isRunning()) { + ItemStack stack = e.getItemDrop().getItemStack(); + ItemMeta meta = stack.getItemMeta(); + + if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { + e.setCancelled(true); + } + } + } + + @EventHandler + public void onSwapItem(PlayerSwapHandItemsEvent e) { + if (!isRunning()) { + return; + } + Player p = e.getPlayer(); + ItemStack stack = p.getInventory().getItemInMainHand(); + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { + e.setCancelled(true); + } + } + + @EventHandler + public void onItemMove(InventoryMoveItemEvent e) { + if (!isRunning()) { + return; + } + ItemStack stack = e.getItem(); + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { + e.setCancelled(true); + } + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent e) { + if (!isRunning()) { + return; + } + ItemStack stack = e.getCurrentItem(); + ItemStack stackInHand = e.getCursor(); + Player player = (Player) e.getWhoClicked(); + ItemMeta meta = null; + ItemMeta metaInHand; + + if (stack != null) { + meta = stack.getItemMeta(); + } + + metaInHand = stackInHand.getItemMeta(); + + if (e.getClick() == ClickType.NUMBER_KEY) { + int slot = e.getHotbarButton(); + if (slot >= 0 && slot < 9) { + if (!e.getWhoClicked().getInventory().equals(e.getInventory())) { + ItemStack swap = e.getWhoClicked().getInventory().getItem(slot); + if (swap != null) { + ItemMeta swapItemMeta = swap.getItemMeta(); + if (swapItemMeta != null && swapItemMeta.getPersistentDataContainer().has(skipKey)) { + e.setCancelled(true); + } + } + } + } + } + + if (meta != null && meta.getPersistentDataContainer().has(skipKey) || metaInHand != null && metaInHand.getPersistentDataContainer().has(skipKey)) { + switch (e.getAction()) { + case NOTHING, PICKUP_ALL, PICKUP_HALF, PICKUP_ONE, PICKUP_SOME, PLACE_ALL, PLACE_ONE, PLACE_SOME, + SWAP_WITH_CURSOR, COLLECT_TO_CURSOR, HOTBAR_SWAP -> { + if (e.getClickedInventory() != player.getInventory()) { + e.setCancelled(true); + } + } + case MOVE_TO_OTHER_INVENTORY -> { + if (!(e.getInventory() instanceof CraftingInventory)) { + e.setCancelled(true); + } + } + default -> { + e.setCancelled(true); + return; + } + } + } + + ItemStack itemStack = e.getCurrentItem(); + if (itemStack != null && itemStack.getType() != Material.AIR) { + selectItem((Player) e.getWhoClicked(), itemStack.getType()); + } + } + + @EventHandler + public void onItemDrag(InventoryDragEvent e) { + if (!isRunning()) { + return; + } + ItemStack stack = e.getCursor(); + ItemMeta stackMeta = null; + ItemStack oldStack = e.getOldCursor(); + ItemMeta oldStackMeta = null; + if (stack != null) { + if (stack.getItemMeta() != null) { + stackMeta = stack.getItemMeta(); + } + } + + if (oldStack.getItemMeta() != null) { + oldStackMeta = oldStack.getItemMeta(); + } + + if (stackMeta != null && stackMeta.getPersistentDataContainer().has(skipKey) || oldStackMeta != null && oldStackMeta.getPersistentDataContainer().has(skipKey)) { + if (!(e.getInventory() instanceof CraftingInventory)) { + e.setCancelled(true); + } + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void onPlayerInteractEntity(PlayerArmorStandManipulateEvent e) { + Player p = e.getPlayer(); + ItemStack stack = p.getInventory().getItemInMainHand(); + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { + e.setCancelled(true); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (isRunning()) { + ItemStack[] inv = e.getEntity().getInventory().getContents(); + for (ItemStack stack : inv) { + if (stack != null) { + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { + e.getItemsToKeep().add(stack); + e.getDrops().remove(stack); + } + } + } + removeArmorStand(e.getEntity()); + + + Player player = e.getPlayer(); + QuestType questType = playerQuest.get(player.getUniqueId()); + if (questType == QuestType.ForceDeath) { + EntityDamageEvent.DamageCause damageCause = lastPlayerDamageCauseList.get(player.getUniqueId()); + if (damageCause != null) { + selectDeath(player, damageCause); + } + } + } + } + + @EventHandler + public void onRespawn(PlayerRespawnEvent e) { + if (isRunning()) { + Player player = e.getPlayer(); + plugin.getScheduler().runDelayedOnEntity(player, () -> addArmorStand(player), 1L); + + PlayerInventory inventory = e.getPlayer().getInventory(); + int countSkipper = 0; + if (!inventory.isEmpty()) { + for (ItemStack stack : inventory) { + if (stack != null && stack.getItemMeta() != null && stack.getItemMeta().getPersistentDataContainer().has(skipKey)) { + countSkipper = countSkipper + stack.getAmount(); + } + + if (countSkipper >= 64) { + break; + } + } + + if (countSkipper > 0) { + ItemStack copySkipper = skipItem.clone(); + copySkipper.setAmount(countSkipper); + inventory.removeItem(copySkipper); + inventory.setItem(8, copySkipper); + } + } + } + } + + @EventHandler + public void onClick(PlayerInteractEvent e) { + if (isRunning()) { + if (e.getAction() == Action.RIGHT_CLICK_BLOCK || e.getAction() == Action.RIGHT_CLICK_AIR) { + Player p = e.getPlayer(); + ItemStack stack = p.getInventory().getItemInMainHand(); + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { + if (e.getClickedBlock() != null && e.getClickedBlock().getType() == Material.DECORATED_POT) { + e.setCancelled(true); + } + new AcceptGUI(e.getPlayer()).open(); + } + } + } + + } + + @EventHandler + public void onDismountEntity(EntityDismountEvent e) { + if (isRunning()) { + if (e.getDismounted() instanceof Player player) { + if (!dismountAllowList.contains(player)) { + e.setCancelled(true); + } + } + } + } + + @EventHandler + public void onMove(PlayerMoveEvent e) { + if (!isRunning()) { + return; + } + + Player player = e.getPlayer(); + QuestType questType = playerQuest.get(player.getUniqueId()); + if (questType == QuestType.ForceLocation) { + selectLocation(player, player.getLocation()); + } + + if (questType == QuestType.ForceBiome) { + if (!e.getTo().equals(e.getFrom())) { + selectBiome(player, player.getWorld().getBiome(player.getLocation())); + } + } + } + + @EventHandler + public void onEntityDeath(EntityDeathEvent e) { + if (!isRunning()) { + return; + } + + Player player = e.getEntity().getKiller(); + if (player == null) { + return; + } + QuestType questType = playerQuest.get(player.getUniqueId()); + if (questType == QuestType.ForceMob) { + selectMob(player, e.getEntity().getType()); + } + } + + @EventHandler + public void onEffect(EntityPotionEffectEvent e) { + if (!isRunning()) { + return; + } + + if (!(e.getEntity() instanceof Player player)) { + return; + } + + QuestType questType = playerQuest.get(player.getUniqueId()); + if (questType == QuestType.ForceEffect) { + PotionEffect effect = e.getNewEffect(); + if (effect != null) { + selectEffect(player, effect.getType()); + } + } + } + + @EventHandler + public void onPlayerDamage(EntityDamageEvent e) { + if (!isRunning()) { + return; + } + + if (!(e.getEntity() instanceof Player player)) { + return; + } + + QuestType questType = playerQuest.get(player.getUniqueId()); + if (questType == QuestType.ForceDeath) { + lastPlayerDamageCauseList.put(player.getUniqueId(), e.getCause()); + } + } + + public void startUpdateTask(Player player) { + playerTasks.put(player.getUniqueId(), plugin.getScheduler().runOnEntityAtFixedRate(player, () -> tick(player), 1L, 1L)); + } + + public void stopUpdateTask() { + for (CancellableTask cancellableTask : playerTasks.values()) { + if (cancellableTask != null) { + cancellableTask.cancel(); + } + } + playerTasks.clear(); + } + + public void stopUpdateTask(Player player) { + CancellableTask cancellableTask = playerTasks.get(player.getUniqueId()); + cancellableTask.cancel(); + playerTasks.remove(player.getUniqueId()); + } + + private void tick(Player player) { + if (player.getGameMode() == GameMode.SPECTATOR || plugin.getVanish().isVanish(player)) { + return; + } + + Location location = player.getLocation(); + Block block = location.getBlock(); + if (block.getType() == Material.NETHER_PORTAL || block.getType() == Material.END_PORTAL || block.getType() == Material.END_GATEWAY) { + removeArmorStand(player); + } else { + if (player.getPassengers().isEmpty()) { + addArmorStand(player); + } + } + + if (!player.getPassengers().isEmpty()) { + for (Entity entity : player.getPassengers()) { + entity.setRotation(location.getYaw(), location.getPitch()); + } + if (location.getPitch() < -50) { + for (Entity entity : player.getPassengers()) { + player.hideEntity(plugin, entity); + } + } else { + for (Entity entity : player.getPassengers()) { + player.showEntity(plugin, entity); + } + } + } + } + + public static void mountArmorStand(Player player) { + if (player.getPassengers().isEmpty()) { + ArmorStand stand = (ArmorStand) player.getWorld().spawnEntity(player.getLocation(), EntityType.ARMOR_STAND); + stand.setMarker(true); + stand.setInvisible(true); + stand.setInvulnerable(true); + stand.setCollidable(false); + stand.setPersistent(false); + stand.setRemoveWhenFarAway(true); + player.addPassenger(stand); + } + } + + private static void updateArmorStand(Player player) { + QuestType questType = playerQuest.get(player.getUniqueId()); + ItemStack stack = new ItemStack(Material.BARRIER); + switch (questType) { + case ForceItem -> stack = new ItemStack(itemByPlayerList.get(player.getUniqueId())); + case ForceBiome -> stack = new ItemStack(Material.GRASS_BLOCK); + case ForceMob -> { + Material material = ItemGroups.getSpawnEggForEntity(entityTypeByPlayerList.get(player.getUniqueId())); + stack = material != null ? new ItemStack(material) : new ItemStack(Material.PIG_SPAWN_EGG); + } + case ForceEffect -> stack = new ItemStack(Material.LINGERING_POTION); + case ForceDeath -> stack = new ItemStack(Material.NETHERITE_AXE); + case ForceLocation -> stack = new ItemStack(Material.COMPASS); + } + + + if (!player.getPassengers().isEmpty()) { + for (Entity entity : player.getPassengers()) { + if (entity instanceof ArmorStand stand) { + stand.getEquipment().setHelmet(stack); + } + } + updateBossBar(); + } + } + + private static boolean selectItem(Player player, Material pickupItem) { + Material playerItem = itemByPlayerList.get(player.getUniqueId()); + if (pickupItem.equals(playerItem)) { + itemByPlayerList.remove(player.getUniqueId()); + ArrayList itemList = playerMaterials.get(player.getUniqueId()); + itemList.remove(pickupItem); + playerMaterials.put(player.getUniqueId(), itemList); + TextComponent textComponent = Component.text("Item: ").color(ChatUtil.GREEN).append(ChatUtil.getTrasnlateItemComponent(pickupItem).color(ChatUtil.BLUE)).append(Component.text(" wurde Registriert").color(ChatUtil.GREEN)); + ChatUtil.sendMessage(player, textComponent); + finishQuest(player); + return true; + } + return false; + } + + private static void selectBiome(Player player, Biome biome) { + Biome playerBiome = biomeByPlayerList.get(player.getUniqueId()); + if (biome.equals(playerBiome)) { + biomeByPlayerList.remove(player.getUniqueId()); + ArrayList biomeList = playerBiomes.get(player.getUniqueId()); + biomeList.remove(biome); + playerBiomes.put(player.getUniqueId(), biomeList); + TextComponent textComponent = Component.text("Biom: ").color(ChatUtil.GREEN).append(Component.translatable(biome.translationKey()).color(ChatUtil.BLUE)).append(Component.text(" wurde Registriert").color(ChatUtil.GREEN)); + ChatUtil.sendMessage(player, textComponent); + finishQuest(player); + } + } + + private static void selectMob(Player player, EntityType entityType) { + EntityType playerEntityType = entityTypeByPlayerList.get(player.getUniqueId()); + if (entityType.equals(playerEntityType)) { + entityTypeByPlayerList.remove(player.getUniqueId()); + ArrayList entityTypeList = playerEntityTypes.get(player.getUniqueId()); + entityTypeList.remove(entityType); + playerEntityTypes.put(player.getUniqueId(), entityTypeList); + TextComponent textComponent = Component.text("Mob: ").color(ChatUtil.GREEN).append(Component.translatable(entityType.translationKey()).color(ChatUtil.BLUE)).append(Component.text(" wurde Registriert").color(ChatUtil.GREEN)); + ChatUtil.sendMessage(player, textComponent); + finishQuest(player); + } + } + + private static void selectEffect(Player player, PotionEffectType potionEffectType) { + PotionEffectType playerPotionEffectType = potionEffectTypeByPlayerList.get(player.getUniqueId()); + if (potionEffectType.equals(playerPotionEffectType)) { + potionEffectTypeByPlayerList.remove(player.getUniqueId()); + ArrayList potionEffectTypeList = playerPotionEffectTypes.get(player.getUniqueId()); + potionEffectTypeList.remove(potionEffectType); + playerPotionEffectTypes.put(player.getUniqueId(), potionEffectTypeList); + TextComponent textComponent = Component.text("Effect: ").color(ChatUtil.GREEN).append(Component.translatable(potionEffectType.translationKey()).color(ChatUtil.BLUE)).append(Component.text(" wurde Registriert").color(ChatUtil.GREEN)); + ChatUtil.sendMessage(player, textComponent); + finishQuest(player); + } + } + + private static void selectDeath(Player player, EntityDamageEvent.DamageCause damageCause) { + EntityDamageEvent.DamageCause playerDamageCause = damageCauseByPlayerList.get(player.getUniqueId()); + if (damageCause.equals(playerDamageCause)) { + damageCauseByPlayerList.remove(player.getUniqueId()); + ArrayList damageCauseList = playerDamageCauses.get(player.getUniqueId()); + damageCauseList.remove(damageCause); + playerDamageCauses.put(player.getUniqueId(), damageCauseList); + ChatUtil.sendMessage(player, Component.text("Death: ", ChatUtil.GREEN).append(Component.text(StringUtil.capitalizeFirstLetter(damageCause.name(), true), ChatUtil.BLUE).append(Component.text(" wurde Registriert", ChatUtil.GREEN)))); + finishQuest(player); + } + } + + private static void selectLocation(Player player, Location location) { + Location playerLocation = locationByPlayerList.get(player.getUniqueId()); + if (location.clone().toCenterLocation().distance(playerLocation.clone().toCenterLocation()) <= 1) { + Block block = location.getBlock(); + String locationString = "X: " + block.getX() + ", Y: " + block.getY() + ", Z: " + block.getZ(); + ChatUtil.sendMessage(player, Component.text("Location: ", ChatUtil.GREEN).append(Component.text(locationString, ChatUtil.BLUE).append(Component.text(" wurde Registriert", ChatUtil.GREEN)))); + CoordsTargeter.removeLocation(player.getUniqueId()); + finishQuest(player); + } + } + + private static void finishQuest(Player player) { + plugin.getScoreManager().updateScore(new ChallengePlayer(player.getUniqueId()), 1); + CubesideModUtils.sendFlashScreenToCubesideMod(plugin, player, 50, ChatUtil.GREEN); + player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 1.0F); + createNewQuest(player); + addArmorStand(player); + updateArmorStand(player); + updateBossBar(); + } + + private static void updateBossBar() { + ScoreManager scoreManager = plugin.getScoreManager(); + for (Player player : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + TextComponent bossBarTitle = Component.text("Es ist ein Fehler aufgetreten :(").color(ChatUtil.RED).decoration(TextDecoration.ITALIC, false); + QuestType questType = playerQuest.get(player.getUniqueId()); + switch (questType) { + case ForceItem -> { + Material material = itemByPlayerList.get(player.getUniqueId()); + if (material != null) { + Component component = Component.empty().append(ChatUtil.getTrasnlateItemComponent(material)); + + bossBarTitle = getBossBarTitle(">> ForceItem: ", component, scoreManager.getPosition(new ChallengePlayer(player.getUniqueId()))); + } + } + case ForceBiome -> { + Biome biome = biomeByPlayerList.get(player.getUniqueId()); + if (biome != null) { + bossBarTitle = getBossBarTitle(">> ForceBiome: ", Component.translatable(biome.translationKey()), scoreManager.getPosition(new ChallengePlayer(player.getUniqueId()))); + } + } + case ForceMob -> { + EntityType entityType = entityTypeByPlayerList.get(player.getUniqueId()); + if (entityType != null) { + bossBarTitle = getBossBarTitle(">> ForceMob: ", Component.translatable(entityType.translationKey()), scoreManager.getPosition(new ChallengePlayer(player.getUniqueId()))); + } + } + case ForceEffect -> { + PotionEffectType potionEffectType = potionEffectTypeByPlayerList.get(player.getUniqueId()); + if (potionEffectType != null) { + bossBarTitle = getBossBarTitle(">> ForceEffect: ", Component.translatable(potionEffectType.translationKey()), scoreManager.getPosition(new ChallengePlayer(player.getUniqueId()))); + } + } + case ForceDeath -> { + EntityDamageEvent.DamageCause damageCause = damageCauseByPlayerList.get(player.getUniqueId()); + if (damageCause != null) { + bossBarTitle = getBossBarTitle(">> ForceDeath: ", Component.translatable(StringUtil.capitalizeFirstLetter(damageCause.name(), true)), scoreManager.getPosition(new ChallengePlayer(player.getUniqueId()))); + } + } + case ForceLocation -> { + Location location = locationByPlayerList.get(player.getUniqueId()); + if (location != null) { + Block block = location.getBlock(); + String locationString = "Welt: " + StringUtil.capitalizeFirstLetter(location.getWorld().getName(), true) + " X: " + block.getX() + ", Y: " + block.getY() + ", Z: " + block.getZ(); + bossBarTitle = getBossBarTitle(">> ForceLocation: ", Component.translatable(locationString), scoreManager.getPosition(new ChallengePlayer(player.getUniqueId()))); + } + } + } + + BossBar bossBar = bossBarMap.computeIfAbsent(player.getUniqueId(), bossPlayer -> { + BossBar newBossBar = BossBar.bossBar(Component.newline(), 1.0f, BossBar.Color.GREEN, BossBar.Overlay.PROGRESS); + newBossBar.addViewer(player); + return newBossBar; + }); + + bossBar.addViewer(player); + bossBar.name(bossBarTitle); + } + } + + private static TextComponent getBossBarTitle(String title, Component name, int pos) { + return Component.text(title).color(ChatUtil.GREEN).append(name.color(ChatUtil.BLUE).append(Component.text(" << | Position: ").color(ChatUtil.GREEN)).append(Component.text(pos).color(ChatUtil.BLUE))); + } + + public void removeArmorStand(Player player) { + if (!player.getPassengers().isEmpty()) { + dismountAllowList.add(player); + for (Entity entity : player.getPassengers()) { + entity.remove(); + } + dismountAllowList.remove(player); + } + } + + public static void addArmorStand(Player player) { + plugin.getScheduler().runDelayedOnEntity(player, () -> { + if (!player.isDead()) { + mountArmorStand(player); + updateArmorStand(player); + } + }, 1L); + } + + public ItemStack createSkipItem() { + ItemStack stack = new ItemStack(Material.STRUCTURE_VOID, skipQuestCount); + ItemMeta meta = stack.getItemMeta(); + List lorelist = new ArrayList<>(); + meta.displayName(Component.text("Skip Quest", ChatUtil.GREEN)); + meta.getPersistentDataContainer().set(skipKey, PersistentDataType.STRING, "SkipQuest"); + lorelist.add(Component.text("Rechtsklick um die Aktuelle Quest zu Skippen.", ChatUtil.GREEN)); + meta.lore(lorelist); + meta.addEnchant(Enchantment.VANISHING_CURSE, 1, true); + meta.addItemFlags(ItemFlag.HIDE_ENCHANTS); + stack.setItemMeta(meta); + + return stack; + } + + private static boolean isRunning() { + return running; + } + + private static void setRunning(boolean run) { + running = run; + } + + public static class AcceptGUI extends AbstractWindow { + private static final int YES_INDEX = 1; + private static final int NO_INDEX = 3; + + public AcceptGUI(Player player) { + super(player, Bukkit.createInventory(player, InventoryType.HOPPER, plugin.getGuiPrefix().append(Component.text(" >> Skip Quest?")))); + } + + @Override + public void onItemClicked(InventoryClickEvent event) { + Player player = getPlayer(); + if (!mayAffectThisInventory(event)) { + return; + } + + event.setCancelled(true); + if (!getInventory().equals(event.getClickedInventory())) { + return; + } + + int slot = event.getSlot(); + if (slot == YES_INDEX) { + + QuestType questType = playerQuest.get(player.getUniqueId()); + switch (questType) { + case ForceItem -> { + Material playerItem = itemByPlayerList.get(player.getUniqueId()); + List stackList = new ArrayList<>(); + stackList.add(new ItemStack(playerItem)); + Collection dropList = player.getInventory().addItem(stackList.toArray(new ItemStack[0])).values(); + for (ItemStack itemStack : dropList) { + player.getLocation().getWorld().dropItem(player.getLocation(), itemStack); + } + selectItem(player, playerItem); + } + case ForceBiome -> { + Biome playerBiome = biomeByPlayerList.get(player.getUniqueId()); + selectBiome(player, playerBiome); + } + case ForceMob -> { + EntityType entityType = entityTypeByPlayerList.get(player.getUniqueId()); + selectMob(player, entityType); + } + case ForceEffect -> { + PotionEffectType effectType = potionEffectTypeByPlayerList.get(player.getUniqueId()); + selectEffect(player, effectType); + } + case ForceDeath -> { + EntityDamageEvent.DamageCause damageCause = damageCauseByPlayerList.get(player.getUniqueId()); + selectDeath(player, damageCause); + } + case ForceLocation -> { + Location location = locationByPlayerList.get(player.getUniqueId()); + selectLocation(player, location); + } + } + + + ItemStack skipStack = skipItem.clone(); + skipStack.setAmount(1); + player.getInventory().removeItem(skipStack); + player.closeInventory(); + } + if (slot == NO_INDEX) { + player.closeInventory(); + } + } + + @Override + protected void rebuildInventory() { + for (int i = 0; i < getInventory().getSize(); i++) { + ItemStack item; + switch (i) { + case YES_INDEX -> + item = ItemUtils.createGuiItem(Material.LIME_CONCRETE, Component.text("Ja", ChatUtil.GREEN), true); + case NO_INDEX -> + item = ItemUtils.createGuiItem(Material.RED_CONCRETE, Component.text("Nein", ChatUtil.RED), true); + + default -> item = ItemUtils.EMPTY_ICON; + } + this.getInventory().setItem(i, item); + } + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/forcequest/QuestType.java b/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/forcequest/QuestType.java new file mode 100644 index 0000000..4f027b6 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/forcequest/QuestType.java @@ -0,0 +1,20 @@ +package de.fanta.challenge.challenges.ChallengeEvents.forcequest; + +public enum QuestType { + ForceItem(45), + ForceBiome(25), + ForceMob(30), + ForceEffect(25), + ForceDeath(15), + ForceLocation(35); + + private final int probability; + + QuestType(int probability) { + this.probability = probability; + } + + public int getProbability() { + return probability; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeGoals.java b/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeGoals.java new file mode 100644 index 0000000..66debf0 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeGoals.java @@ -0,0 +1,60 @@ +package de.fanta.challenge.challenges; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.ServerType; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.ClickEvent; +import net.kyori.adventure.text.event.HoverEvent; +import net.kyori.adventure.text.format.Style; +import net.kyori.adventure.text.format.TextDecoration; +import org.bukkit.Bukkit; +import org.bukkit.entity.EntityType; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDeathEvent; + +import java.util.Objects; + +public class ChallengeGoals implements Listener { + + private final Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void GoalDeath(EntityDeathEvent e) { + if (Objects.equals(Config.getString("event.type"), "nix") && plugin.getServerType() != ServerType.ADVENTURE) { + EntityType entityType = EntityType.valueOf(Config.getString("goal").toUpperCase()); + if (e.getEntity().getType() == entityType) { + plugin.getTimer().stopTimer(); + ChatUtil.sendBrodCastMessage(Component.text("ABCDEFGHIJKLMNOPQRSTUVWXYZ", Style.style(ChatUtil.GREEN, TextDecoration.BOLD, TextDecoration.OBFUSCATED))); + ChatUtil.sendBrodCastMessage(Component.empty()); + ChatUtil.sendBrodCastMessage(Component.empty()); + ChatUtil.sendBrodCastMessage(Component.empty()); + if (e.getEntity().customName() != null) { + ChatUtil.sendBrodCastMessage(Component.text(" >> ", ChatUtil.ORANGE).append(e.getEntity().name().style(Style.style(ChatUtil.BLUE, TextDecoration.BOLD)).append(Component.text(" wurde besiegt.", ChatUtil.GREEN)))); + } else { + ChatUtil.sendBrodCastMessage(Component.text(" >> ", ChatUtil.ORANGE).append(Component.text("Der ", ChatUtil.GREEN).append(Component.translatable(e.getEntityType().translationKey(), Style.style(ChatUtil.BLUE, TextDecoration.BOLD)).append(Component.text(" wurde besiegt.", ChatUtil.GREEN))))); + } + ChatUtil.sendBrodCastMessage(Component.text(" >> ", ChatUtil.ORANGE).append(Component.text("Benötigte Zeit: ", ChatUtil.GREEN).append(plugin.getTimer().formatTime(ChatUtil.BLUE).append(Component.text("!", ChatUtil.GREEN))))); + ChatUtil.sendBrodCastMessage(Component.text(" >> ", ChatUtil.ORANGE).append(Component.text("Seed: ", ChatUtil.GREEN).append(Component.text(Bukkit.getWorlds().getFirst().getSeed(), Style.style(ChatUtil.BLUE, TextDecoration.BOLD)).hoverEvent(HoverEvent.showText(Component.text("Klicken zum Kopieren"))).clickEvent(ClickEvent.copyToClipboard(String.valueOf(Bukkit.getWorlds().getFirst().getSeed())))))); + if (e.getEntity().getType() == EntityType.ENDER_DRAGON) { + if (!Config.getBoolean("editsettings")) { + if (!Config.getBoolean("editsettings")) { + if (!plugin.isCubesideStatisticsInstalled()) { + return; + } + plugin.getStatistics().saveSpeedRun(); + ChatUtil.sendBrodCastMessage(Component.text(" >> ", ChatUtil.ORANGE).append(Component.text("SpeedRun wurde gespeichert. Deine Zeit: ", ChatUtil.GREEN).append(plugin.getTimer().formatTime(ChatUtil.BLUE)))); + } + + } + } + ChatUtil.sendBrodCastMessage(Component.empty()); + ChatUtil.sendBrodCastMessage(Component.empty()); + ChatUtil.sendBrodCastMessage(Component.empty()); + ChatUtil.sendBrodCastMessage(Component.text("ABCDEFGHIJKLMNOPQRSTUVWXYZ", Style.style(ChatUtil.GREEN, TextDecoration.BOLD, TextDecoration.OBFUSCATED))); + } + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/ClearInventoryByDamageChallenge.java b/Challenge/src/main/java/de/fanta/challenge/challenges/ClearInventoryByDamageChallenge.java new file mode 100644 index 0000000..3a54b19 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/ClearInventoryByDamageChallenge.java @@ -0,0 +1,33 @@ +package de.fanta.challenge.challenges; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.fanta.challenge.utils.CubesideModUtils; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageEvent; + +public class ClearInventoryByDamageChallenge implements Listener { + + private final Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onDamageclear(EntityDamageEvent e) { + if (e.getEntity() instanceof Player p) { + if (Config.getBoolean("clinvdmg")) { + if (plugin.getTimer().isRunning() && p.getGameMode() == GameMode.SURVIVAL && !plugin.getVanish().isVanish(p)) { + for (Player pp : Bukkit.getOnlinePlayers()) { + pp.getInventory().clear(); + CubesideModUtils.sendFlashScreenToCubesideMod(plugin, pp, 50, ChatUtil.RED); + ChatUtil.sendMessage(pp, p.name().color(ChatUtil.BLUE).append(Component.text(" hat Schaden bekommen! Alle Inventare wurden geleert!", ChatUtil.ORANGE))); + } + } + } + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/CraftingTableChallenge.java b/Challenge/src/main/java/de/fanta/challenge/challenges/CraftingTableChallenge.java new file mode 100644 index 0000000..284e4d5 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/CraftingTableChallenge.java @@ -0,0 +1,29 @@ +package de.fanta.challenge.challenges; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.Config; +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; + +public class CraftingTableChallenge implements Listener { + + private final Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onInteractWorlkbench(PlayerInteractEvent e) { + if (e.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (plugin.getTimer().isRunning()) { + if (e.getClickedBlock() != null) { + if (e.getClickedBlock().getType() == Material.CRAFTING_TABLE) { + if (!Config.getBoolean("craftingtable")) { + e.setCancelled(true); + } + } + } + } + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/FloorIsLavaChallenge.java b/Challenge/src/main/java/de/fanta/challenge/challenges/FloorIsLavaChallenge.java new file mode 100644 index 0000000..7708d85 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/FloorIsLavaChallenge.java @@ -0,0 +1,68 @@ +package de.fanta.challenge.challenges; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.Config; +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.player.PlayerMoveEvent; + +import java.util.ArrayList; + +public class FloorIsLavaChallenge implements Listener { + private static final Challenges plugin = Challenges.getPlugin(); + public static final ArrayList LAVA_BLOCKS = new ArrayList<>(); + + @EventHandler + public void onPlayerMove(PlayerMoveEvent e) { + Player p = e.getPlayer(); + if (plugin.getTimer().isRunning() && p.getGameMode() == GameMode.SURVIVAL && !plugin.getVanish().isVanish(p)) { + if (Config.getBoolean("lavafloor")) { + Location oldLoc = e.getFrom(); + Location newLoc = e.getTo(); + int oldx = oldLoc.getBlockX(); + int oldy = oldLoc.getBlockY(); + int oldz = oldLoc.getBlockZ(); + int newx = newLoc.getBlockX(); + int newy = newLoc.getBlockY(); + int newz = newLoc.getBlockZ(); + if (newx != oldx || newy != oldy || newz != oldz) { + Block b = p.getLocation().subtract(0, 1, 0).getBlock(); + plugin.getScheduler().runLocalDelayed(b.getLocation(), () -> { + if (!b.isPassable() && !LAVA_BLOCKS.contains(b)) { + LAVA_BLOCKS.add(b); + setMagma(b, b.getType()); + } + }, 1L); + } + } + } + } + + public static void setMagma(Block b, Material old) { + plugin.getScheduler().runLocalDelayed(b.getLocation(), () -> { + b.setType(Material.MAGMA_BLOCK); + setLava(b, old); + }, 60L); + } + + public static void setLava(Block b, Material old) { + plugin.getScheduler().runLocalDelayed(b.getLocation(), () -> { + b.setType(Material.LAVA); + setOld(b, old); + }, 100L); + } + + public static void setOld(Block b, Material old) { + plugin.getScheduler().runLocalDelayed(b.getLocation(), () -> { + if (b.getType() == Material.LAVA || b.getType() == Material.OBSIDIAN || b.getType() == Material.COBBLESTONE || b.getType() == Material.STONE) { + b.setType(old); + } + LAVA_BLOCKS.remove(b); + }, 200L); + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/IceRunnerChallenge.java b/Challenge/src/main/java/de/fanta/challenge/challenges/IceRunnerChallenge.java new file mode 100644 index 0000000..def36b4 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/IceRunnerChallenge.java @@ -0,0 +1,59 @@ +package de.fanta.challenge.challenges; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.Config; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerToggleSneakEvent; + +import java.util.HashMap; + +public class IceRunnerChallenge implements Listener { + + public final Challenges plugin = Challenges.getPlugin(); + + private final HashMap iceRunnerEnable = new HashMap<>(); + + @EventHandler + public void onMove(PlayerMoveEvent e) { + Player p = e.getPlayer(); + if (Config.getBoolean("icerunner") && plugin.getTimer().isRunning() && !plugin.getVanish().isVanish(p)) { + if (iceRunnerEnable.get(p) != null) { + if (iceRunnerEnable.get(p)) { + Location playerloc = p.getLocation(); + World world = playerloc.getWorld(); + for (int x = playerloc.getBlockX() - 2; x <= playerloc.getBlockX() + 2; x++) { + for (int z = playerloc.getBlockZ() - 2; z <= playerloc.getBlockZ() + 2; z++) { + world.getBlockAt(x, playerloc.getBlockY() - 1, z).setType(Material.BLUE_ICE); + } + } + } + } else { + iceRunnerEnable.put(p, true); + } + } + } + + @EventHandler + public void onSneak(PlayerToggleSneakEvent e) { + Player p = e.getPlayer(); + if (e.isSneaking()) { + if (iceRunnerEnable.get(p) != null) { + if (Config.getBoolean("icerunner") && plugin.getTimer().isRunning() && !plugin.getVanish().isVanish(p)) { + if (iceRunnerEnable.get(p)) { + iceRunnerEnable.put(p, false); + } else { + iceRunnerEnable.put(p, true); + } + } + } else { + iceRunnerEnable.put(p, true); + } + } + } +} \ No newline at end of file diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/MLGChallenge.java b/Challenge/src/main/java/de/fanta/challenge/challenges/MLGChallenge.java new file mode 100644 index 0000000..7e50439 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/MLGChallenge.java @@ -0,0 +1,276 @@ +package de.fanta.challenge.challenges; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.events.TimerChangedEvent; +import de.fanta.challenge.gravestones.GravestoneUtils; +import de.fanta.challenge.schedular.CancellableTask; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.GameRule; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.WorldCreator; +import org.bukkit.WorldType; +import org.bukkit.entity.Player; +import org.bukkit.entity.SpawnCategory; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.entity.EntityMountEvent; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.PlayerBucketEmptyEvent; +import org.bukkit.event.player.PlayerGameModeChangeEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.player.PlayerTeleportEvent; +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.UUID; + +public class MLGChallenge implements Listener { + + private static final Challenges plugin = Challenges.getPlugin(); + + private static final Random random = new Random(); + private static boolean MLGinProgress; + private static boolean running; + private static CancellableTask task; + private static final HashMap mlgPlayerMap = new HashMap<>(); + private static int timeSinceMLG; // seconds+ + private static Location mlgLocation; + private static final ArrayList mlgBlocks = new ArrayList<>(); + + @EventHandler + public void onTimerChange(TimerChangedEvent e) { + if (Config.getBoolean("mlg.enabled")) { + if (e.isRunning()) { + setRunning(true); + startTask(); + } else { + setRunning(false); + stopTask(); + } + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (isMLGinProgress() && e.getPlayer().getWorld().getName().equals("mlg_challenge")) { + if (mlgPlayerMap.containsKey(e.getPlayer().getUniqueId())) { + mlgResult(e.getPlayer(), true); + plugin.getScheduler().runDelayedOnEntity(e.getPlayer(), () -> e.getPlayer().spigot().respawn(), 1L); + } + } + } + + @EventHandler + public void onTeleport(PlayerTeleportEvent e) { + if (isMLGinProgress() && e.getFrom().getWorld().getName().equals("mlg_challenge")) { + if (mlgPlayerMap.containsKey(e.getPlayer().getUniqueId())) { + mlgResult(e.getPlayer(), true); + } + } + } + + @EventHandler + public void onGameModeChange(PlayerGameModeChangeEvent e) { + if (isMLGinProgress() && e.getPlayer().getWorld().getName().equals("mlg_challenge")) { + if (mlgPlayerMap.containsKey(e.getPlayer().getUniqueId())) { + mlgResult(e.getPlayer(), true); + } + } + } + + @EventHandler + public void onDisconnect(PlayerQuitEvent e) { + if (isMLGinProgress() && e.getPlayer().getWorld().getName().equals("mlg_challenge")) { + if (mlgPlayerMap.containsKey(e.getPlayer().getUniqueId())) { + mlgResult(e.getPlayer(), true); + } + } + } + + @EventHandler + public void onBucketEmpty(PlayerBucketEmptyEvent e) { + if (isMLGinProgress() && e.getPlayer().getWorld().getName().equals("mlg_challenge")) { + plugin.getScheduler().runLocalDelayed(e.getBlock().getLocation(), () -> { + if (mlgPlayerMap.containsKey(e.getPlayer().getUniqueId()) && !e.getPlayer().isDead()) { + mlgResult(e.getPlayer(), false); + } + }, 40L); + } + } + + @EventHandler + public void onBlockPlace(BlockPlaceEvent e) { + if (isMLGinProgress() && e.getPlayer().getWorld().getName().equals("mlg_challenge")) { + plugin.getScheduler().runLocalDelayed(e.getBlock().getLocation(), () -> { + if (mlgPlayerMap.containsKey(e.getPlayer().getUniqueId()) && !e.getPlayer().isDead()) { + mlgResult(e.getPlayer(), false); + } + }, 40L); + } + } + + @EventHandler + public void onEntityMount(EntityMountEvent e) { + if (isMLGinProgress() && e.getMount().getWorld().getName().equals("mlg_challenge")) { + if (e.getEntity() instanceof Player player) { + plugin.getScheduler().runDelayedOnEntity(e.getMount(), () -> { + if (mlgPlayerMap.containsKey(player.getUniqueId()) && !player.isDead()) { + mlgResult(player, false); + } + }, 40L); + } + } + } + + public static void checkMLGWorld() { + World mlgWorld = Bukkit.getWorld("mlg_challenge"); + if (mlgWorld == null) { + mlgWorld = Bukkit.createWorld((new WorldCreator("mlg_challenge")).type(WorldType.FLAT).generateStructures(false)); + mlgWorld.setSpawnLimit(SpawnCategory.ANIMAL, 0); + mlgWorld.setGameRule(GameRule.DO_MOB_SPAWNING, false); + mlgWorld.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false); + mlgWorld.setGameRule(GameRule.DO_WEATHER_CYCLE, false); + mlgWorld.setGameRule(GameRule.KEEP_INVENTORY, true); + mlgWorld.setTime(6000L); + } + } + + public static boolean triggerMLG() { + if (isRunning() && !MLGinProgress && !plugin.getVanish().getPlayerListWithoutVanishPlayers().isEmpty()) { + timeSinceMLG = 0; + mlgPlayerMap.clear(); + for (Player p : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + if (p.getGameMode() == GameMode.SURVIVAL && !p.isDead()) { + MLGInfo mlgInfo = new MLGInfo(p.getInventory().getContents(), p.getLocation()); + mlgPlayerMap.put(p.getUniqueId(), mlgInfo); + ChatUtil.sendNormalMessage(p, "Zeit für einen MLG! Viel Glück!"); + p.getInventory().clear(); + tpMLG(p); + } + } + if (!mlgPlayerMap.isEmpty()) { + setMLGinProgress(true); + } + + return true; + } + return false; + } + + private static void tpMLG(Player p) { + p.closeInventory(); + if (Config.getBoolean("mlg.randommlgblock")) { + if (mlgBlocks.isEmpty()) { + mlgBlocks.add(Material.WATER_BUCKET); + mlgBlocks.add(Material.SLIME_BLOCK); + mlgBlocks.add(Material.OAK_BOAT); + mlgBlocks.add(Material.SCAFFOLDING); + mlgBlocks.add(Material.SWEET_BERRIES); + mlgBlocks.add(Material.POWDER_SNOW_BUCKET); + mlgBlocks.add(Material.COBWEB); + mlgBlocks.add(Material.TWISTING_VINES); + } + Material mlgItem = mlgBlocks.get(random.nextInt(mlgBlocks.size())); + plugin.getScheduler().runDelayedOnEntity(p, () -> p.getInventory().setItemInMainHand(new ItemStack(mlgItem)), 1L); + } else { + plugin.getScheduler().runDelayedOnEntity(p, () -> p.getInventory().setItemInMainHand(new ItemStack(Material.WATER_BUCKET)), 1L); + } + + if (mlgLocation == null) { + mlgLocation = new Location(Bukkit.getWorld("mlg_challenge"), 0, 0, 0); + } + + mlgLocation.add(100, 0, 0); + Location newloc = mlgLocation.clone(); + newloc.add(0.5, 0, 0.5); + newloc.setY(100 + random.nextInt(40)); + p.teleportAsync(newloc); + } + + private static void mlgResult(Player p, boolean dead) { + MLGInfo mlgInfo = mlgPlayerMap.get(p.getUniqueId()); + mlgPlayerMap.remove(p.getUniqueId()); + Location loc = mlgInfo.location(); + ItemStack[] content = mlgInfo.content(); + if (!dead) { + p.setInvulnerable(true); + mlgBack(p, loc, content); + ChatUtil.sendNormalMessage(p, "Du hast den MLG erfolgreich absolviert! Weitere folgen..."); + } else { + p.getInventory().clear(); + if (Bukkit.getWorlds().getFirst().getGameRuleValue(GameRule.KEEP_INVENTORY)) { + p.getInventory().setContents(content); + } else if (Config.getBoolean("gravestone")) { + String inventoryString = GravestoneUtils.createInventoryString(content); + GravestoneUtils.spawnAtBlock(loc.getBlock(), p, GravestoneUtils.compressString(inventoryString)); + } else { + for (ItemStack stack : content) { + if (stack != null) { + loc.getWorld().dropItemNaturally(loc, stack); + } + } + } + } + + if (mlgPlayerMap.isEmpty()) { + plugin.getScheduler().runGlobalDelayed(() -> setMLGinProgress(false), 60L); + } + } + + private static void mlgBack(final Player p, Location loc, ItemStack[] content) { + p.teleportAsync(loc); + p.getInventory().setContents(content); + plugin.getScheduler().runDelayedOnEntity(p, () -> p.setInvulnerable(false), 60L); + } + + private static void tick() { + if (!mlgPlayerMap.isEmpty()) { + return; + } + int randomInt = random.nextInt(Config.getInt("mlg.maxtime")); + timeSinceMLG++; + if (randomInt == 0 || timeSinceMLG >= Config.getInt("mlg.maxtime")) { + triggerMLG(); + } + } + + public static boolean isRunning() { + return running; + } + + public static void setRunning(boolean running) { + MLGChallenge.running = running; + } + + private static boolean isMLGinProgress() { + return MLGinProgress; + } + + public static void setMLGinProgress(boolean MLGinProgress) { + MLGChallenge.MLGinProgress = MLGinProgress; + } + + public static void startTask() { + if (task == null && plugin.getTimer().isRunning()) { + task = plugin.getScheduler().runGlobalAtFixedRate(MLGChallenge::tick, 20L, 20L); + } + } + + public static void stopTask() { + if (task != null) { + task.cancel(); + task = null; + } + } + + record MLGInfo(ItemStack[] content, Location location) { + } +} \ No newline at end of file diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/ManHunt.java b/Challenge/src/main/java/de/fanta/challenge/challenges/ManHunt.java new file mode 100644 index 0000000..bbcf50e --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/ManHunt.java @@ -0,0 +1,276 @@ +package de.fanta.challenge.challenges; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.events.TimerChangedEvent; +import de.fanta.challenge.schedular.CancellableTask; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.fanta.challenge.utils.ItemUtils; +import net.kyori.adventure.text.Component; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.World; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryDragEvent; +import org.bukkit.event.inventory.InventoryMoveItemEvent; +import org.bukkit.event.player.PlayerArmorStandManipulateEvent; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerSwapHandItemsEvent; +import org.bukkit.inventory.CraftingInventory; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.CompassMeta; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataType; + +import java.util.HashMap; + +public class ManHunt implements Listener { + private static final Challenges plugin = Challenges.getPlugin(); + private CancellableTask task; + private final HashMap locationList = new HashMap<>(); + private static final NamespacedKey hunterItemKey = new NamespacedKey(plugin, "HunterItem"); + private static ItemStack hunterItem; + + @EventHandler + public void onActivation(TimerChangedEvent event) { + if (isRunning()) { + if (event.isRunning()) { + startUpdateTask(); + } else { + stopUpdateTask(); + } + } + } + + @EventHandler + public void onDropItem(PlayerDropItemEvent e) { + if (isRunning()) { + ItemStack stack = e.getItemDrop().getItemStack(); + ItemMeta meta = stack.getItemMeta(); + + if (meta != null && meta.getPersistentDataContainer().has(hunterItemKey)) { + e.setCancelled(true); + } + } + } + + private boolean isRunning() { + return Config.getBoolean("manhunt") && plugin.getTimer().isRunning(); + } + + @EventHandler + public void onSwapItem(PlayerSwapHandItemsEvent e) { + if (!isRunning()) { + return; + } + Player p = e.getPlayer(); + ItemStack stack = p.getInventory().getItemInMainHand(); + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(hunterItemKey)) { + e.setCancelled(true); + } + } + + @EventHandler + public void onItemMove(InventoryMoveItemEvent e) { + if (!isRunning()) { + return; + } + ItemStack stack = e.getItem(); + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(hunterItemKey)) { + e.setCancelled(true); + } + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent e) { + if (!isRunning()) { + return; + } + ItemStack stack = e.getCurrentItem(); + ItemStack stackInHand = e.getCursor(); + Player player = (Player) e.getWhoClicked(); + ItemMeta meta = null; + ItemMeta metaInHand = null; + + if (stack != null) { + meta = stack.getItemMeta(); + } + + metaInHand = stackInHand.getItemMeta(); + + if (e.getClick() == ClickType.NUMBER_KEY) { + int slot = e.getHotbarButton(); + if (slot >= 0 && slot < 9) { + if (!e.getWhoClicked().getInventory().equals(e.getInventory())) { + ItemStack swap = e.getWhoClicked().getInventory().getItem(slot); + if (swap != null) { + ItemMeta swapItemMeta = swap.getItemMeta(); + if (swapItemMeta != null && swapItemMeta.getPersistentDataContainer().has(hunterItemKey)) { + e.setCancelled(true); + } + } + } + } + } + + if (meta != null && meta.getPersistentDataContainer().has(hunterItemKey) || metaInHand != null && metaInHand.getPersistentDataContainer().has(hunterItemKey)) { + switch (e.getAction()) { + case NOTHING, PICKUP_ALL, PICKUP_HALF, PICKUP_ONE, PICKUP_SOME, PLACE_ALL, PLACE_ONE, PLACE_SOME, SWAP_WITH_CURSOR, COLLECT_TO_CURSOR, HOTBAR_SWAP -> { + if (e.getClickedInventory() != player.getInventory()) { + e.setCancelled(true); + } + } + case MOVE_TO_OTHER_INVENTORY -> { + if (!(e.getInventory() instanceof CraftingInventory)) { + e.setCancelled(true); + } + } + default -> e.setCancelled(true); + } + } + } + + @EventHandler + public void onItemDrag(InventoryDragEvent e) { + if (!isRunning()) { + return; + } + ItemStack stack = e.getCursor(); + ItemMeta stackMeta = null; + ItemStack oldStack = e.getOldCursor(); + ItemMeta oldStackMeta = null; + if (stack != null) { + if (stack.getItemMeta() != null) { + stackMeta = stack.getItemMeta(); + } + } + + if (oldStack.getItemMeta() != null) { + oldStackMeta = oldStack.getItemMeta(); + } + + if (stackMeta != null && stackMeta.getPersistentDataContainer().has(hunterItemKey) || oldStackMeta != null && oldStackMeta.getPersistentDataContainer().has(hunterItemKey)) { + if (!(e.getInventory() instanceof CraftingInventory)) { + e.setCancelled(true); + } + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void onPlayerInteractEntity(PlayerArmorStandManipulateEvent e) { + if (!isRunning()) { + return; + } + Player p = e.getPlayer(); + ItemStack stack = p.getInventory().getItemInMainHand(); + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(hunterItemKey)) { + e.setCancelled(true); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!isRunning()) { + return; + } + ItemStack[] inv = e.getEntity().getInventory().getContents(); + for (ItemStack stack : inv) { + if (stack != null) { + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(hunterItemKey)) { + e.getItemsToKeep().add(stack); + e.getDrops().remove(stack); + } + } + } + } + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent e) { + if (!Config.getBoolean("manhunt")) { + return; + } + Player player = e.getPlayer(); + int count = 0; + + for (ItemStack stack : player.getInventory().getContents()) { + if (stack != null && stack.getItemMeta() instanceof CompassMeta compassMeta && compassMeta.getPersistentDataContainer().has(hunterItemKey)) { + count++; + } + } + + if (count == 0) { + player.getInventory().setItem(8, hunterItem); + } + } + public void startUpdateTask() { + task = plugin.getScheduler().runGlobalAtFixedRate(this::tick, 1L, 1L); + } + + public void stopUpdateTask() { + task.cancel(); + task = null; + } + + private void tick() { + Player editor = plugin.getCurrentEditor(); + if (editor == null) { + return; + } + locationList.put(editor.getWorld(), editor.getLocation()); + for (Player player : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + if (locationList.get(player.getWorld()) != null) { + for (ItemStack stack : player.getInventory().getContents()) { + if (stack != null && stack.getItemMeta() instanceof CompassMeta compassMeta && compassMeta.getPersistentDataContainer().has(hunterItemKey)) { + compassMeta.setLodestone(locationList.get(player.getWorld())); + compassMeta.setLodestoneTracked(false); + stack.setItemMeta(compassMeta); + } + } + } + } + } + + public static ItemStack createHunterItem() { + ItemStack stack = ItemUtils.createGuiItem(Material.COMPASS, Component.text("Hunter Kompass", ChatUtil.GREEN), Component.text("Zeigt die Richtung zum gejagten Spieler", ChatUtil.GREEN)); + CompassMeta meta = (CompassMeta) stack.getItemMeta(); + meta.addEnchant(Enchantment.VANISHING_CURSE, 1, true); + meta.addItemFlags(ItemFlag.HIDE_ENCHANTS); + meta.getPersistentDataContainer().set(hunterItemKey, PersistentDataType.STRING, "HunterItem"); + stack.setItemMeta(meta); + + return stack; + } + + public static void start() { + hunterItem = createHunterItem(); + for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + if (plugin.getCurrentEditor() != null && plugin.getCurrentEditor() != pp) { + pp.getInventory().setItem(8, hunterItem); + } + } + } + + public static void stop() { + for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + for (ItemStack stack : pp.getInventory().getContents()) { + if (stack != null && stack.getItemMeta() instanceof CompassMeta compassMeta && compassMeta.getPersistentDataContainer().has(hunterItemKey)) { + stack.setAmount(0); + } + } + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/MobRemoveWorldChallenge.java b/Challenge/src/main/java/de/fanta/challenge/challenges/MobRemoveWorldChallenge.java new file mode 100644 index 0000000..9add796 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/MobRemoveWorldChallenge.java @@ -0,0 +1,105 @@ +package de.fanta.challenge.challenges; + +import com.destroystokyo.paper.event.entity.EntityAddToWorldEvent; +import de.fanta.challenge.Challenges; +import de.fanta.challenge.events.TimerChangedEvent; +import de.fanta.challenge.utils.Config; +import io.papermc.paper.event.entity.EntityMoveEvent; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.entity.EnderDragon; +import org.bukkit.entity.EntityType; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.util.BoundingBox; + +import java.util.ArrayList; + +public class MobRemoveWorldChallenge implements Listener { + + private static final Challenges plugin = Challenges.getPlugin(); + + private static final ArrayList dragonList = new ArrayList<>(); + + private int taskId = -1; + + @EventHandler + public void onMobMove(EntityMoveEvent e) { + if (Config.getBoolean("mobremoveworld") && plugin.getTimer().isRunning()) { + if (!e.getTo().equals(e.getFrom())) { + if (e.getEntity().getType() != EntityType.ENDER_DRAGON) { + BoundingBox box = e.getEntity().getBoundingBox(); + removeWorld(e.getEntity().getLocation().getWorld(), box, true); + } + } + } + } + + @EventHandler + public void onTImerChange(TimerChangedEvent e) { + if (Config.getBoolean("mobremoveworld")) { + if (plugin.getTimer().isRunning()) { + startUpdateTask(); + } else { + stopUpdateTask(); + } + } + } + + @EventHandler + public void addEntity(EntityAddToWorldEvent e) { + if (e.getEntity() instanceof EnderDragon enderDragon) { + dragonList.add(enderDragon); + } + } + + private void removeWorld(World world, BoundingBox box, boolean replaceBedrock) { + if (!Config.getBoolean("mobremoveworld")) { + return; + } + Location loc = new Location(world, box.getCenterX(), box.getCenterY(), box.getCenterZ()); + plugin.getScheduler().runLocalDelayed(loc, () -> { + double boundingwithX = box.getWidthX() / 2; + double boundingwithZ = box.getWidthZ() / 2; + int worldMinHeight = world.getMinHeight(); + int worldMaxHeight = world.getMaxHeight(); + for (double x = loc.getX() - boundingwithX; x <= loc.getX() + boundingwithX; x++) { + for (double z = loc.getZ() - boundingwithZ; z <= loc.getZ() + boundingwithZ; z++) { + for (int y = worldMinHeight; y < worldMaxHeight; y++) { + Block block = world.getBlockAt((int) Math.round(x), y, (int) Math.round(z)); + if (replaceBedrock) { + if (block.getType() != Material.AIR && block.getType() != Material.END_PORTAL_FRAME) { + block.setType(Material.AIR, false); + } + } else { + if (block.getType() != Material.AIR && block.getType() != Material.BEDROCK && block.getType() != Material.END_PORTAL_FRAME) { + block.setType(Material.AIR, false); + } + } + + } + } + } + }, 20 * 2L); + } + + public void startUpdateTask() { + taskId = plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, this::tick, 1L, 1L); + } + + public void stopUpdateTask() { + plugin.getServer().getScheduler().cancelTask(taskId); + } + + private void tick() { + for (EnderDragon enderDragon : dragonList) { + if (!enderDragon.isDead() && enderDragon.isValid()) { + Location loc = enderDragon.getLocation(); + BoundingBox box = enderDragon.getBoundingBox(); + removeWorld(loc.getWorld(), box, false); + } + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/NoFallDamageChallenge.java b/Challenge/src/main/java/de/fanta/challenge/challenges/NoFallDamageChallenge.java new file mode 100644 index 0000000..ec70516 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/NoFallDamageChallenge.java @@ -0,0 +1,24 @@ +package de.fanta.challenge.challenges; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.Config; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageEvent; + +public class NoFallDamageChallenge implements Listener { + + private final Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onDamage(EntityDamageEvent e) { + if (e.getEntity() instanceof Player p) { + if (e.getCause() == EntityDamageEvent.DamageCause.FALL) { + if (Config.getBoolean("deathonfall") && plugin.getTimer().isRunning()) { + p.setHealth(0); + } + } + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/NoJumpChallenge.java b/Challenge/src/main/java/de/fanta/challenge/challenges/NoJumpChallenge.java new file mode 100644 index 0000000..8830438 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/NoJumpChallenge.java @@ -0,0 +1,25 @@ +package de.fanta.challenge.challenges; + +import com.destroystokyo.paper.event.player.PlayerJumpEvent; +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.Config; +import org.bukkit.GameMode; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +public class NoJumpChallenge implements Listener { + + private final Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onPlayerJump(PlayerJumpEvent e) { + Player p = e.getPlayer(); + if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL && !plugin.getVanish().isVanish(p)) { + if (Config.getBoolean("deathonjump")) { + p.setHealth(0); + } + } + } +} + diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/NoSneakChallenge.java b/Challenge/src/main/java/de/fanta/challenge/challenges/NoSneakChallenge.java new file mode 100644 index 0000000..228836c --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/NoSneakChallenge.java @@ -0,0 +1,26 @@ +package de.fanta.challenge.challenges; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.Config; +import org.bukkit.GameMode; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerToggleSneakEvent; + +public class NoSneakChallenge implements Listener { + + private final Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onPlayerSneak(PlayerToggleSneakEvent e) { + Player p = e.getPlayer(); + if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL && !plugin.getVanish().isVanish(p)) { + if (!p.isSneaking()) { + if (Config.getBoolean("damageonsneak")) { + p.damage(Config.getDouble("sneakdmg")); + } + } + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/NoSprintChallenge.java b/Challenge/src/main/java/de/fanta/challenge/challenges/NoSprintChallenge.java new file mode 100644 index 0000000..6d0a0d7 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/NoSprintChallenge.java @@ -0,0 +1,26 @@ +package de.fanta.challenge.challenges; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.Config; +import org.bukkit.GameMode; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerToggleSprintEvent; + +public class NoSprintChallenge implements Listener { + + private final Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onPlayerSprint(PlayerToggleSprintEvent e) { + Player p = e.getPlayer(); + if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL && !plugin.getVanish().isVanish(p)) { + if (!p.isSprinting()) { + if (Config.getBoolean("deathonsprint")) { + p.setHealth(0); + } + } + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/NoTradingChallenge.java b/Challenge/src/main/java/de/fanta/challenge/challenges/NoTradingChallenge.java new file mode 100644 index 0000000..6bcb6ea --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/NoTradingChallenge.java @@ -0,0 +1,22 @@ +package de.fanta.challenge.challenges; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.Config; +import org.bukkit.entity.EntityType; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerInteractEntityEvent; + +public class NoTradingChallenge implements Listener { + + private final Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onEntityClick(PlayerInteractEntityEvent e) { + if (e.getRightClicked().getType() == EntityType.VILLAGER) { + if (!Config.getBoolean("allowtrading") && plugin.getTimer().isRunning()) { + e.setCancelled(true); + } + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/RandomDropsChallenge.java b/Challenge/src/main/java/de/fanta/challenge/challenges/RandomDropsChallenge.java new file mode 100644 index 0000000..a71b485 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/RandomDropsChallenge.java @@ -0,0 +1,118 @@ +package de.fanta.challenge.challenges; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.Config; +import io.papermc.paper.event.block.BlockBreakBlockEvent; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockExplodeEvent; +import org.bukkit.event.entity.EntityExplodeEvent; +import org.bukkit.inventory.ItemStack; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.Random; +import java.util.logging.Level; +import java.util.stream.Collectors; + +public class RandomDropsChallenge implements Listener { + private final ArrayList BLOCKS; + + private final ArrayList ITEM_DROPS; + + private final HashMap drops = new HashMap<>(); + + private final Challenges plugin = Challenges.getPlugin(); + + public RandomDropsChallenge() { + this.BLOCKS = (ArrayList) Arrays.stream(Material.values()).filter(mat -> (mat.isBlock() && mat != Material.AIR && mat != Material.CAVE_AIR && mat != Material.VOID_AIR)).collect(Collectors.toList()); + this.ITEM_DROPS = (ArrayList) Arrays.stream(Material.values()).filter(mat -> (mat.isItem() && mat != Material.FILLED_MAP)).collect(Collectors.toList()); + } + + @EventHandler + public void onBlockBreak(BlockBreakEvent e) { + if (Config.getBoolean("rnddrops") && plugin.getTimer().isRunning()) { + e.setDropItems(false); + e.getBlock().getWorld().dropItem(e.getBlock().getLocation().add(0.5D, 0.5D, 0.5D), new ItemStack(this.plugin.getRandomDropsManager().getMaterialFromBlock(e.getBlock()))); + } + } + + @EventHandler + public void onBlockBreakBlock(BlockBreakBlockEvent e) { + if (Config.getBoolean("rnddrops") && plugin.getTimer().isRunning()) { + e.getBlock().getWorld().dropItem(e.getBlock().getLocation().add(0.5D, 0.5D, 0.5D), new ItemStack(this.plugin.getRandomDropsManager().getMaterialFromBlock(e.getBlock()))); + e.getDrops().clear(); + } + } + + @EventHandler + public void onBlockExplode(BlockExplodeEvent e) { + if (Config.getBoolean("rnddrops") && plugin.getTimer().isRunning()) { + e.blockList().forEach(block -> { + if (!block.getType().isAir()) { + block.getWorld().dropItem(block.getLocation().add(0.5D, 0.5D, 0.5D), new ItemStack(this.plugin.getRandomDropsManager().getMaterialFromBlock(block))); + block.setType(Material.AIR); + } + }); + e.blockList().clear(); + } + } + + @EventHandler + public void onEntityExplode(EntityExplodeEvent e) { + if (Config.getBoolean("rnddrops") && plugin.getTimer().isRunning()) { + e.blockList().forEach(block -> { + if (!block.getType().isAir()) { + block.getWorld().dropItem(block.getLocation().add(0.5D, 0.5D, 0.5D), new ItemStack(this.plugin.getRandomDropsManager().getMaterialFromBlock(block))); + block.setType(Material.AIR); + } + }); + e.blockList().clear(); + } + } + + public void shuffleItems() { + Collections.shuffle(this.ITEM_DROPS); + ArrayList itemDropsCopy = new ArrayList<>(this.ITEM_DROPS); + this.BLOCKS.forEach(mat -> { + int r = (new Random()).nextInt(itemDropsCopy.size() - 1); + this.drops.put(mat, itemDropsCopy.get(r)); + itemDropsCopy.remove(r); + }); + saveItems(); + } + + public void saveItems() { + FileConfiguration config = Challenges.getPlugin().getRndDropsConfig(); + config.set("drops", this.drops.entrySet().stream().map(entry -> entry.getKey() + ":" + entry.getValue()).collect(Collectors.toList())); + try { + Challenges.getPlugin().RndDropsConfig.save(Challenges.getPlugin().RndDropsConfigFile); + } catch (IOException e) { + plugin.getLogger().log(Level.SEVERE, "Error while saving randomDrop Config", e); + } + } + + public void loadItems() { + this.drops.clear(); + FileConfiguration config = Challenges.getPlugin().getRndDropsConfig(); + if (config.isList("drops")) { + config.getStringList("drops").forEach(str -> { + String[] materialSplitted = str.split(":"); + this.drops.put(Material.getMaterial(materialSplitted[0]), Material.getMaterial(materialSplitted[1])); + }); + } else { + shuffleItems(); + } + } + + public Material getMaterialFromBlock(Block block) { + return this.drops.get(block.getType()); + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/RandomEffectChallenge.java b/Challenge/src/main/java/de/fanta/challenge/challenges/RandomEffectChallenge.java new file mode 100644 index 0000000..f065948 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/RandomEffectChallenge.java @@ -0,0 +1,50 @@ +package de.fanta.challenge.challenges; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.Config; +import org.bukkit.Registry; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Random; + +public class RandomEffectChallenge implements Listener { + + private final Challenges plugin = Challenges.getPlugin(); + private final Random random = new Random(); + + private final HashMap chunkPotionEffectMap = new HashMap<>(); + private final HashMap playerPotionEffectMap = new HashMap<>(); + + @EventHandler + public void onPlayerMove(PlayerMoveEvent e) { + Player p = e.getPlayer(); + if (Config.getBoolean("randomeffect") && plugin.getTimer().isRunning() && !plugin.getVanish().isVanish(p)) { + long chunkKey = p.getLocation().getChunk().getChunkKey(); + + if (!chunkPotionEffectMap.containsKey(chunkKey)) { + chunkPotionEffectMap.put(chunkKey, randomEffect()); + } + if (chunkPotionEffectMap.get(chunkKey) != playerPotionEffectMap.get(p)) { + if (playerPotionEffectMap.get(p) != null) { + p.removePotionEffect(playerPotionEffectMap.get(p).getType()); + } + PotionEffect potionEffect = chunkPotionEffectMap.get(chunkKey); + p.addPotionEffect(potionEffect); + playerPotionEffectMap.put(p, potionEffect); + } + } + } + + + private PotionEffect randomEffect() { + PotionEffectType[] values = Registry.EFFECT.stream().filter(effect -> (!effect.equals(PotionEffectType.INSTANT_DAMAGE))).toArray(PotionEffectType[]::new); + return new PotionEffect(values[random.nextInt((int) Arrays.stream(values).count())], PotionEffect.INFINITE_DURATION, random.nextInt(5)); + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/RandomMobChallenge.java b/Challenge/src/main/java/de/fanta/challenge/challenges/RandomMobChallenge.java new file mode 100644 index 0000000..f436cec --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/RandomMobChallenge.java @@ -0,0 +1,40 @@ +package de.fanta.challenge.challenges; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.Config; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.Animals; +import org.bukkit.entity.Boss; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Mob; +import org.bukkit.entity.WaterMob; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDeathEvent; + +import java.util.Arrays; +import java.util.Random; + +public class RandomMobChallenge implements Listener { + + private final Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onEntityDeath(EntityDeathEvent e) { + if (Config.getBoolean("randommobs") && plugin.getTimer().isRunning()) { + Entity entity = e.getEntity(); + Location entityloc = entity.getLocation(); + World entityworld = entityloc.getWorld(); + if (entity instanceof Animals || entity instanceof WaterMob) { + Random random = new Random(); + EntityType[] entityValues = Arrays.stream(EntityType.values()).filter(entityType -> (entityType.getEntityClass() != null && Mob.class.isAssignableFrom(entityType.getEntityClass()) && !Boss.class.isAssignableFrom(entityType.getEntityClass()))).toArray(EntityType[]::new); + int randomid = random.nextInt(entityValues.length); + EntityType randomEntity = entityValues[randomid]; + entityworld.spawnEntity(entityloc, randomEntity); + } + } + + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/ShareDamageChallenge.java b/Challenge/src/main/java/de/fanta/challenge/challenges/ShareDamageChallenge.java new file mode 100644 index 0000000..8feb0c7 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/ShareDamageChallenge.java @@ -0,0 +1,37 @@ +package de.fanta.challenge.challenges; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.Config; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageEvent; + +public class ShareDamageChallenge implements Listener { + + private final Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onDamage(EntityDamageEvent e) { + if (e.getEntity() instanceof Player p) { + if (Config.getBoolean("sharedmg") && plugin.getTimer().isRunning()) { + for (Player pp : Bukkit.getOnlinePlayers()) { + if (pp != p) { + if (!plugin.getVanish().isVanish(pp) && pp.getGameMode() == GameMode.SURVIVAL) { + double health = pp.getHealth() - e.getFinalDamage(); + if (health < 0) { + pp.setHealth(0); + } else { + pp.setHealth(health); + } + pp.getWorld().playSound(pp.getLocation(), Sound.ENTITY_PLAYER_HURT, 1, 1); + } + } + } + } + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/TiedTogetherChallenge.java b/Challenge/src/main/java/de/fanta/challenge/challenges/TiedTogetherChallenge.java new file mode 100644 index 0000000..f57c52a --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/TiedTogetherChallenge.java @@ -0,0 +1,69 @@ +package de.fanta.challenge.challenges; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.Config; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; + +public class TiedTogetherChallenge implements Listener { + + private static final Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onMove(PlayerMoveEvent e) { + if (Config.getBoolean("tiedtogether") && plugin.getTimer().isRunning()) { + calculateDistances(); + } + } + + private void calculateDistances() { + Player minXPlayer = plugin.getCurrentEditor(); + Player maxXPlayer = plugin.getCurrentEditor(); + + Player minYPlayer = plugin.getCurrentEditor(); + Player maxYPlayer = plugin.getCurrentEditor(); + + Player minZPlayer = plugin.getCurrentEditor(); + Player maxZPlayer = plugin.getCurrentEditor(); + + for (Player p : Bukkit.getOnlinePlayers()) { + if (plugin.getVanish().isVanish(p) || p.getGameMode() != GameMode.SURVIVAL) { + continue; + } + if (p.getLocation().getX() < minXPlayer.getLocation().getX()) { + minXPlayer = p; + } + if (p.getLocation().getX() > maxXPlayer.getLocation().getX()) { + maxXPlayer = p; + } + if (p.getLocation().getY() < minYPlayer.getLocation().getY()) { + minYPlayer = p; + } + if (p.getLocation().getY() > maxYPlayer.getLocation().getY()) { + maxYPlayer = p; + } + if (p.getLocation().getZ() < minZPlayer.getLocation().getZ()) { + minZPlayer = p; + } + if (p.getLocation().getZ() > maxZPlayer.getLocation().getZ()) { + maxZPlayer = p; + } + double xCenter = (maxXPlayer.getLocation().getX() + minXPlayer.getLocation().getX()) / 2; + double yCenter = (maxYPlayer.getLocation().getY() + minYPlayer.getLocation().getY()) / 2; + double zCenter = (maxZPlayer.getLocation().getZ() + minZPlayer.getLocation().getZ()) / 2; + Location center = new Location(plugin.getCurrentEditor().getWorld(), xCenter, yCenter, zCenter); + + if (p.getLocation().distanceSquared(center) > (Config.getDouble("playerrange") / 2) * (Config.getDouble("playerrange") / 2)) { + for (Player pp : Bukkit.getOnlinePlayers()) { + pp.damage(4); + } + } + } + } +} + diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/WorldBorderLevelChallenge.java b/Challenge/src/main/java/de/fanta/challenge/challenges/WorldBorderLevelChallenge.java new file mode 100644 index 0000000..ec72e63 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/WorldBorderLevelChallenge.java @@ -0,0 +1,219 @@ +package de.fanta.challenge.challenges; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.fanta.challenge.utils.CubesideModUtils; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.WorldBorder; +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.PlayerChangedWorldEvent; +import org.bukkit.event.player.PlayerExpChangeEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerLevelChangeEvent; +import org.bukkit.event.player.PlayerPortalEvent; +import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.event.world.PortalCreateEvent; +import org.bukkit.event.world.SpawnChangeEvent; +import org.bukkit.generator.structure.Structure; +import org.spigotmc.event.player.PlayerSpawnLocationEvent; + +import java.util.Objects; + +public class WorldBorderLevelChallenge implements Listener { + + private static final Challenges plugin = Challenges.getPlugin(); + + private static WorldBorder worldBorder; + private static WorldBorder netherBorder; + private static WorldBorder endBorder; + + public WorldBorderLevelChallenge() { + worldBorder = Bukkit.createWorldBorder(); + netherBorder = Bukkit.createWorldBorder(); + endBorder = Bukkit.createWorldBorder(); + } + + @EventHandler + public void onExpChange(PlayerExpChangeEvent e) { + Player p = e.getPlayer(); + if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL && !plugin.getVanish().isVanish(p)) { + if (Config.getBoolean("worldborderlevel")) { + Config.setValue("worldborderlevelxp", e.getPlayer().getExp()); + plugin.saveConfig(); + xpSync(e.getPlayer(), false); + } + } + } + + @EventHandler + public void onLevelChange(PlayerLevelChangeEvent e) { + Player p = e.getPlayer(); + if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL && !plugin.getVanish().isVanish(p)) { + if (Config.getBoolean("worldborderlevel")) { + Config.setValue("worldborderlevellevel", e.getPlayer().getLevel()); + plugin.saveConfig(); + xpSync(e.getPlayer(), true); + + if (e.getOldLevel() < e.getNewLevel()) { + for (Player pp : Bukkit.getOnlinePlayers()) { + pp.playSound(pp.getLocation(), Sound.UI_TOAST_CHALLENGE_COMPLETE, 0.03f, 1); + CubesideModUtils.sendFlashScreenToCubesideMod(plugin, pp, 200, ChatUtil.GREEN); + } + } + } + } + } + + @EventHandler + public void whenPlayerDeath(PlayerDeathEvent e) { + if (Config.getBoolean("worldborderlevel")) { + e.setKeepLevel(true); + e.setDroppedExp(0); + } + } + + @EventHandler + public void onRespawn(PlayerRespawnEvent e) { + if (Config.getBoolean("worldborderlevel")) { + borderSync(); + } + } + + @EventHandler + public void onWorldSpawnChange(SpawnChangeEvent e) { + if (Config.getBoolean("worldborderlevel")) { + borderSync(); + } + } + + @EventHandler + public void onJoin(PlayerJoinEvent e) { + Player p = e.getPlayer(); + if (Config.getBoolean("worldborderlevel")) { + if (e.getPlayer().getLevel() > 0 && Config.getInt("worldborderlevellevel") == 0) { + Config.setValue("worldborderlevellevel", e.getPlayer().getLevel()); + Config.setValue("worldborderlevelxp", e.getPlayer().getExp()); + plugin.saveConfig(); + } + + p.setLevel(Config.getInt("worldborderlevellevel")); + p.setExp((float) Config.getDouble("worldborderlevelxp")); + borderSync(); + } + } + + @EventHandler + public void onPlayerSpawn(PlayerSpawnLocationEvent e) { + Player p = e.getPlayer(); + if (Config.getBoolean("worldborderlevel")) { + if (!p.hasPlayedBefore()) { + e.setSpawnLocation(p.getWorld().getSpawnLocation()); + } + } + } + + @EventHandler + public void onWorldChange(PlayerChangedWorldEvent e) { + if (Config.getBoolean("worldborderlevel")) { + borderSync(); + } + } + + @EventHandler + public void onPortal(PlayerPortalEvent e) { + if (Config.getBoolean("worldborderlevel") && plugin.getTimer().isRunning()) { + World nether = Bukkit.getWorld("world_nether"); + if (nether != null) { + if (e.getTo().getWorld() == nether) { + Location spawnLocation = nether.getSpawnLocation(); + if (!Config.getBoolean("worldborderlevelnether")) { + spawnLocation = Objects.requireNonNull(nether.locateNearestStructure(nether.getSpawnLocation().set(e.getFrom().getX(), e.getFrom().getY(), e.getFrom().getZ()), Structure.FORTRESS, 10000, false).getLocation()); + } + e.setTo(spawnLocation); + } + } + World world = Bukkit.getWorld("world"); + if (world != null) { + if (e.getTo().getWorld() == world) { + Location spawnLocation = world.getSpawnLocation(); + e.setTo(spawnLocation); + } + } + borderSync(); + } + } + + @EventHandler + public void onPortalCreate(PortalCreateEvent e) { + if (Config.getBoolean("worldborderlevel") && plugin.getTimer().isRunning()) { + if (!Config.getBoolean("worldborderlevelnether")) { + World nether = Bukkit.getWorld("world_nether"); + if (e.getWorld() == nether) { + Location spawnLocation = e.getBlocks().get(1).getLocation(); + nether.setSpawnLocation(spawnLocation); + if (Config.getString("worldborderlevelnetherspawnlocation.world") == null) { + Config.setValue("worldborderlevelnetherspawnlocation.world", spawnLocation.getWorld().getName()); + Config.setValue("worldborderlevelnetherspawnlocation.X", spawnLocation.getBlockX()); + Config.setValue("worldborderlevelnetherspawnlocation.Z", spawnLocation.getBlockZ()); + } + Config.setValue("worldborderlevelnether", true); + + borderSync(); + } + + } + } + + } + + private void xpSync(Player p, Boolean borderupdate) { + for (Player player : Bukkit.getOnlinePlayers()) { + if (player != p) { + player.setLevel(Config.getInt("worldborderlevellevel")); + player.setExp((float) Config.getDouble("worldborderlevelxp")); + } + } + if (borderupdate) { + borderSync(); + } + } + + public static void borderSync() { + int level = Config.getInt("worldborderlevellevel"); + plugin.getScheduler().runGlobalDelayed(() -> { + for (Player player : Bukkit.getOnlinePlayers()) { + if (level > 0) { + int borderMultiplayer = Config.getInt("worldborderlevelbordermultiplier"); + worldBorder.setSize(level * borderMultiplayer); + netherBorder.setSize(level * borderMultiplayer); + endBorder.setSize(level * borderMultiplayer); + } else { + worldBorder.setSize(1); + netherBorder.setSize(1); + endBorder.setSize(1); + } + if (player.getWorld().getName().equals("world")) { + player.setWorldBorder(worldBorder); + } else if (player.getWorld().getName().equals("world_nether")) { + player.setWorldBorder(netherBorder); + } else { + player.setWorldBorder(endBorder); + } + } + + World world = Bukkit.getWorld("world"); + world.getWorldBorder().setCenter(world.getSpawnLocation()); + + World nether = Bukkit.getWorld("world_nether"); + nether.getWorldBorder().setCenter(nether.getSpawnLocation()); + }, 1); + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/XPChallenge.java b/Challenge/src/main/java/de/fanta/challenge/challenges/XPChallenge.java new file mode 100644 index 0000000..f62fde6 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/XPChallenge.java @@ -0,0 +1,27 @@ +package de.fanta.challenge.challenges; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import net.kyori.adventure.text.Component; +import org.bukkit.GameMode; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerExpChangeEvent; + +public class XPChallenge implements Listener { + + private final Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onPlayerGetXP(PlayerExpChangeEvent e) { + Player p = e.getPlayer(); + if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL && !plugin.getVanish().isVanish(p)) { + if (Config.getBoolean("xpdeath")) { + p.setHealth(0); + ChatUtil.sendBrodCastMessage(p.name().color(ChatUtil.BLUE).append(Component.text(" hat XP eingesammelt!", ChatUtil.RED))); + } + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/BackpackCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/BackpackCommand.java new file mode 100644 index 0000000..24baf5f --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/BackpackCommand.java @@ -0,0 +1,39 @@ +package de.fanta.challenge.commands; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.teams.ChallengeTeam; +import de.fanta.challenge.teams.TeamUtils; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class BackpackCommand extends SubCommand { + private final Challenges plugin; + + public BackpackCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player p)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + if (!Config.getBoolean("event.enabled")) { + plugin.getBackpack().open(p); + } else { + ChallengeTeam challengeTeam = TeamUtils.getPlayerTeam(p); + if (challengeTeam != null) { + challengeTeam.getBackpack().open(p); + } else { + ChatUtil.sendErrorMessage(p, "Du bist in keinem Team!"); + } + } + return true; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/BingoCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/BingoCommand.java new file mode 100644 index 0000000..03479c4 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/BingoCommand.java @@ -0,0 +1,49 @@ +package de.fanta.challenge.commands; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.guis.eventgui.BingoItemsGui; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.Objects; + +public class BingoCommand extends SubCommand { + private final Challenges plugin; + + public BingoCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + if (Config.getBoolean("event.enabled") && Objects.equals(Config.getString("event.type"), "bingo") && plugin.getTimer().isRunning()) { + if (args.hasNext()) { + String playerName = args.getNext(); + Player player = Bukkit.getPlayer(playerName); + + if (player == null) { + ChatUtil.sendErrorMessage(sender, "Dieser Spieler ist nicht online!"); + return true; + } + BingoItemsGui.openPlayerInv(player, (Player) sender); + + } else { + BingoItemsGui.openPlayerInv((Player) sender, (Player) sender); + } + return true; + } else { + ChatUtil.sendErrorMessage(sender, "Aktuell läuft kein Bingo Event"); + } + return true; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/ChestUnlockCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/ChestUnlockCommand.java new file mode 100644 index 0000000..649fe68 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/ChestUnlockCommand.java @@ -0,0 +1,36 @@ +package de.fanta.challenge.commands; + +import de.fanta.challenge.listeners.ContainerListener; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ChestUnlockCommand extends SubCommand { + + @Override + public boolean onCommand(CommandSender sender, Command command, String s, String s1, ArgsParser args) { + if (!(sender instanceof Player player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + + if (!Config.getBoolean("event.minilwc")) { + ChatUtil.sendWarningMessage(player, "Aktuell kann es keine Sicherungen geben."); + return true; + } + if (ContainerListener.unlockList.contains(player.getUniqueId())) { + ContainerListener.unlockList.remove(player.getUniqueId()); + ChatUtil.sendNormalMessage(player, "Du entsicherst jetzt keine Sicherung mehr."); + } else { + ContainerListener.unlockList.add(player.getUniqueId()); + ChatUtil.sendNormalMessage(player, "Berühre eine Sicherung, um sie zu entfernen."); + } + + + return true; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/CommandRegistration.java b/Challenge/src/main/java/de/fanta/challenge/commands/CommandRegistration.java new file mode 100644 index 0000000..c31a64f --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/CommandRegistration.java @@ -0,0 +1,150 @@ +package de.fanta.challenge.commands; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.commands.challenges.ChallengeMaxPlayersCommand; +import de.fanta.challenge.commands.challenges.ChallengesBanCommand; +import de.fanta.challenge.commands.challenges.ChallengesCommand; +import de.fanta.challenge.commands.challenges.ChallengesEnderSeeCommand; +import de.fanta.challenge.commands.challenges.ChallengesHelpCommand; +import de.fanta.challenge.commands.challenges.ChallengesInvSeeCommand; +import de.fanta.challenge.commands.challenges.ChallengesKickCommand; +import de.fanta.challenge.commands.challenges.ChallengesMemoryCommand; +import de.fanta.challenge.commands.challenges.ChallengesPingCommand; +import de.fanta.challenge.commands.challenges.ChallengesSaveCommand; +import de.fanta.challenge.commands.event.EventSaveScoresCommand; +import de.fanta.challenge.commands.challenges.ChallengesUnBanCommand; +import de.fanta.challenge.commands.challenges.TeleportCommand; +import de.fanta.challenge.commands.challenges.CheckItemsCommand; +import de.fanta.challenge.commands.coords.CoordsCommand; +import de.fanta.challenge.commands.coords.CoordsDeleteCommand; +import de.fanta.challenge.commands.coords.CoordsGetCommand; +import de.fanta.challenge.commands.coords.CoordsSaveCommand; +import de.fanta.challenge.commands.coords.CoordsShareCommand; +import de.fanta.challenge.commands.coords.CoordsTargetCommand; +import de.fanta.challenge.commands.editor.EditorCommand; +import de.fanta.challenge.commands.editor.EditorSetCommand; +import de.fanta.challenge.commands.event.CreateTeamsCommand; +import de.fanta.challenge.commands.event.EventCommand; +import de.fanta.challenge.commands.event.EventForceTeamCommand; +import de.fanta.challenge.commands.event.EventGetScoreCommand; +import de.fanta.challenge.commands.event.EventSettingsCommand; +import de.fanta.challenge.commands.event.EventStartCommand; +import de.fanta.challenge.commands.event.EventTeamsSetTeamSpawnCommand; +import de.fanta.challenge.commands.event.EventToggleCommand; +import de.fanta.challenge.commands.hp.HPAddCommand; +import de.fanta.challenge.commands.hp.HPGetCommand; +import de.fanta.challenge.commands.hp.HPMaxCommand; +import de.fanta.challenge.commands.hp.HPRemoveCommand; +import de.fanta.challenge.commands.hp.HPSetCommand; +import de.fanta.challenge.commands.reset.ResetCommand; +import de.fanta.challenge.commands.reset.ResetConfirmCommand; +import de.fanta.challenge.commands.settings.SettingsCommand; +import de.fanta.challenge.commands.timer.TimerCommand; +import de.fanta.challenge.commands.timer.TimerGetCommand; +import de.fanta.challenge.commands.timer.TimerPauseCommand; +import de.fanta.challenge.commands.timer.TimerResetCommand; +import de.fanta.challenge.commands.timer.TimerReverseCommand; +import de.fanta.challenge.commands.timer.TimerSetCommand; +import de.fanta.challenge.commands.timer.TimerStartCommand; +import de.iani.cubesideutils.bukkit.MinecraftVersion; +import de.iani.cubesideutils.bukkit.commands.CommandRouter; + +public record CommandRegistration(Challenges plugin) { + + public void registerCommands() { + + CommandRouter challengesRouter = new CommandRouter(plugin.getCommand("challenges")); + challengesRouter.addPluginCommand(plugin.getCommand("adventure")); + challengesRouter.addCommandMapping(new ChallengesCommand(plugin)); + challengesRouter.addCommandMapping(new ChallengesHelpCommand(plugin), "help"); + challengesRouter.addCommandMapping(new ChallengesKickCommand(plugin), "kick"); + challengesRouter.addCommandMapping(new ChallengesBanCommand(plugin), "ban"); + challengesRouter.addCommandMapping(new ChallengesUnBanCommand(plugin), "unban"); + challengesRouter.addCommandMapping(new ChallengesSaveCommand(plugin), "save"); + challengesRouter.addCommandMapping(new ChallengesPingCommand(), "ping"); + challengesRouter.addCommandMapping(new ChallengesMemoryCommand(), "mem"); + challengesRouter.addCommandMapping(new TeleportCommand(), "tp"); + challengesRouter.addCommandMapping(new ChallengeMaxPlayersCommand(), "maxplayer"); + challengesRouter.addCommandMapping(new CheckItemsCommand(plugin), "checkitems"); + challengesRouter.addCommandMapping(new ChallengesInvSeeCommand(), "invsee"); + challengesRouter.addCommandMapping(new ChallengesEnderSeeCommand(), "endersee"); + + CommandRouter resetRouter = new CommandRouter(plugin.getCommand("reset")); + resetRouter.addCommandMapping(new ResetCommand(plugin)); + resetRouter.addCommandMapping(new ResetConfirmCommand(plugin), "confirm"); + + CommandRouter backpackRouter = new CommandRouter(plugin.getCommand("backpack")); + backpackRouter.addCommandMapping(new BackpackCommand(plugin)); + + CommandRouter coordsRouter = new CommandRouter(plugin.getCommand("coords")); + coordsRouter.addCommandMapping(new CoordsCommand()); + coordsRouter.addCommandMapping(new CoordsShareCommand(), "share"); + coordsRouter.addCommandMapping(new CoordsGetCommand(), "get"); + coordsRouter.addCommandMapping(new CoordsSaveCommand(plugin), "save"); + coordsRouter.addCommandMapping(new CoordsDeleteCommand(), "delete"); + if (MinecraftVersion.isAboveOrEqual(1,19,0)) { + coordsRouter.addCommandMapping(new CoordsTargetCommand(plugin), "target"); + } + CommandRouter hpRouter = new CommandRouter(plugin.getCommand("hp")); + hpRouter.addCommandMapping(new HPAddCommand(plugin), "add"); + hpRouter.addCommandMapping(new HPGetCommand(plugin), "get"); + hpRouter.addCommandMapping(new HPMaxCommand(plugin), "max"); + hpRouter.addCommandMapping(new HPRemoveCommand(plugin), "remove"); + hpRouter.addCommandMapping(new HPSetCommand(plugin), "set"); + + CommandRouter timerRouter = new CommandRouter(plugin.getCommand("timer")); + timerRouter.addCommandMapping(new TimerCommand(plugin)); + timerRouter.addCommandMapping(new TimerPauseCommand(plugin), "pause"); + timerRouter.addCommandMapping(new TimerResetCommand(plugin), "reset"); + timerRouter.addCommandMapping(new TimerReverseCommand(plugin), "reverse"); + timerRouter.addCommandMapping(new TimerSetCommand(plugin), "set"); + timerRouter.addCommandMapping(new TimerStartCommand(plugin), "start"); + timerRouter.addCommandMapping(new TimerGetCommand(plugin), "get"); + + CommandRouter forcemlgRouter = new CommandRouter(plugin.getCommand("forcemlg")); + forcemlgRouter.addCommandMapping(new ForceMLGCommand(plugin)); + + CommandRouter editorRouter = new CommandRouter(plugin.getCommand("editor")); + editorRouter.addCommandMapping(new EditorCommand(plugin)); + editorRouter.addCommandMapping(new EditorSetCommand(plugin), "set"); + + CommandRouter leaveRouter = new CommandRouter(plugin.getCommand("leave")); + leaveRouter.addCommandMapping(new LeaveCommand(plugin)); + + CommandRouter eventRouter = new CommandRouter(plugin.getCommand("event")); + eventRouter.addCommandMapping(new EventCommand()); + eventRouter.addCommandMapping(new EventToggleCommand(plugin, true), "enable"); + eventRouter.addCommandMapping(new EventToggleCommand(plugin, false), "disable"); + eventRouter.addCommandMapping(new EventSettingsCommand(), "settings"); + eventRouter.addCommandMapping(new EventGetScoreCommand(plugin), "getscore"); + eventRouter.addCommandMapping(new EventStartCommand(plugin), "start"); + eventRouter.addCommandMapping(new CreateTeamsCommand(), "createteams"); + eventRouter.addCommandMapping(new EventTeamsSetTeamSpawnCommand(), "setteamspawn"); + eventRouter.addCommandMapping(new EventForceTeamCommand(), "forceteam"); + eventRouter.addCommandMapping(new EventSaveScoresCommand(plugin), "savescores"); + + + CommandRouter bingoRouter = new CommandRouter(plugin.getCommand("bingo")); + bingoRouter.addCommandMapping(new BingoCommand(plugin)); + + CommandRouter villageRouter = new CommandRouter(plugin.getCommand("village")); + villageRouter.addCommandMapping(new VillageCommand(plugin)); + + CommandRouter netherRouter = new CommandRouter(plugin.getCommand("nether")); + netherRouter.addCommandMapping(new NetherToggleCommand(plugin, true), "enable"); + netherRouter.addCommandMapping(new NetherToggleCommand(plugin, false), "disable"); + + CommandRouter settingsRouter = new CommandRouter(plugin.getCommand("settings")); + settingsRouter.addCommandMapping(new SettingsCommand(plugin)); + + CommandRouter reviveRouter = new CommandRouter(plugin.getCommand("revive")); + reviveRouter.addCommandMapping(new ReviveCommand(plugin)); + + CommandRouter skipItemRouter = new CommandRouter(plugin.getCommand("skipitem")); + skipItemRouter.addCommandMapping(new SkipItemCommand(plugin)); + + CommandRouter unlockRouter = new CommandRouter(plugin.getCommand("unlock")); + unlockRouter.addPluginCommand(plugin.getCommand("cremove")); + unlockRouter.addCommandMapping(new ChestUnlockCommand()); + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/ForceMLGCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/ForceMLGCommand.java new file mode 100644 index 0000000..ab958b1 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/ForceMLGCommand.java @@ -0,0 +1,41 @@ +package de.fanta.challenge.commands; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.challenges.MLGChallenge; +import de.fanta.challenge.utils.ChatUtil; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ForceMLGCommand extends SubCommand { + + private final Challenges plugin; + + public ForceMLGCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { + if (!MLGChallenge.triggerMLG()) { + ChatUtil.sendWarningMessage(sender, "Ein MLG findet bereits statt! Oder MLGs sind nicht aktiv."); + } + } else if (plugin.getCurrentEditor() != null) { + ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); + return true; + } else { + ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); + ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); + return true; + } + return true; + } + +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/LeaveCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/LeaveCommand.java new file mode 100644 index 0000000..811f94c --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/LeaveCommand.java @@ -0,0 +1,31 @@ +package de.fanta.challenge.commands; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class LeaveCommand extends SubCommand { + + private final Challenges plugin; + + public LeaveCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player p)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } else { + plugin.portPlayerToLobby(p); + } + return true; + } + +} + diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/NetherToggleCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/NetherToggleCommand.java new file mode 100644 index 0000000..d2d1d84 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/NetherToggleCommand.java @@ -0,0 +1,86 @@ +package de.fanta.challenge.commands; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class NetherToggleCommand extends SubCommand { + + private final Challenges plugin; + private final boolean enable; + + public NetherToggleCommand(Challenges plugin, boolean enable) { + this.plugin = plugin; + this.enable = enable; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player p)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + if (plugin.isEditor(p) || p.hasPermission("Challenges.editor.override")) { + if (enable) { + if (!Config.getBoolean("nether.enabled")) { + Config.setValue("nether.enabled", true); + + Location spawn = Bukkit.getWorlds().get(1).getSpawnLocation(); + World world = spawn.getWorld(); + plugin.getScheduler().runLocalDelayed(spawn, () -> { + for (int x = spawn.getBlockX() - 2; x <= spawn.getBlockX() + 2; x++) { + for (int z = spawn.getBlockZ() - 2; z <= spawn.getBlockZ() + 2; z++) { + for (int y = spawn.getBlockY(); y <= spawn.getBlockY() + 3; y++) { + world.getBlockAt(x, y, z).setType(Material.AIR); + world.getBlockAt(x, y, spawn.getBlockZ() + 3).setType(Material.SLIME_BLOCK); + world.getBlockAt(x, y, spawn.getBlockZ() - 3).setType(Material.SLIME_BLOCK); + world.getBlockAt(spawn.getBlockX() + 3, y, z).setType(Material.SLIME_BLOCK); + world.getBlockAt(spawn.getBlockX() - 3, y, z).setType(Material.SLIME_BLOCK); + } + world.getBlockAt(x, spawn.getBlockY(), z).setType(Material.SLIME_BLOCK); + world.getBlockAt(x, spawn.getBlockY() - 1, z).setType(Material.BEDROCK); + world.getBlockAt(x, spawn.getBlockY() + 4, z).setType(Material.SLIME_BLOCK); + } + } + + for (Player pp : Bukkit.getOnlinePlayers()) { + pp.teleportAsync(spawn.clone().add(0, 1, 0)); + } + }, 1L); + + ChatUtil.sendTitleToAll(Component.text("Nether Challenge"), Component.text("Nether-Modus aktiviert", ChatUtil.GREEN)); + } else { + ChatUtil.sendErrorMessage(p, "Die Nether Challenge läuft bereits!"); + return true; + } + } else { + if (Config.getBoolean("nether.enabled")) { + Config.setValue("nether.enabled", false); + ChatUtil.sendTitleToAll(Component.text("Nether Challenge"), Component.text("Nether-Modus deaktiviert", ChatUtil.RED)); + } else { + ChatUtil.sendErrorMessage(p, "Aktuell läuft keine Nether Challenge!"); + return true; + } + } + } else if (plugin.getCurrentEditor() != null) { + ChatUtil.sendErrorMessage(p, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); + return true; + } else { + ChatUtil.sendErrorMessage(p, "Aktuell gibt es keinen Editor!"); + ChatUtil.sendErrorMessage(p, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); + return true; + } + return true; + } +} + diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/ReviveCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/ReviveCommand.java new file mode 100644 index 0000000..4bf80d7 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/ReviveCommand.java @@ -0,0 +1,64 @@ +package de.fanta.challenge.commands; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.challenges.MLGChallenge; +import de.fanta.challenge.utils.ChatUtil; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.OfflinePlayer; +import org.bukkit.attribute.Attribute; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ReviveCommand extends SubCommand { + + private final Challenges plugin; + + public ReviveCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String lable, String s1, ArgsParser args) { + if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { + if (!args.hasNext()) { + ChatUtil.sendWarningMessage(sender, "Benutze: /revive "); + return true; + } + + String next = args.next(); + if (next.equalsIgnoreCase("all")) { + MLGChallenge.setMLGinProgress(false); + for (Player p : Bukkit.getOnlinePlayers()) { + p.setHealth(p.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()); + p.setGameMode(GameMode.SURVIVAL); + } + ChatUtil.sendBrodCastMessage(Component.text("Alle Spieler wurden wiederbelebt! Es kann weiter gehen!", ChatUtil.GREEN)); + } else { + OfflinePlayer other = (Bukkit.getServer().getOfflinePlayer(next)); + if (other.isOnline()) { + Player p = (Player) other; + p.setHealth(p.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()); + p.setGameMode(GameMode.SURVIVAL); + ChatUtil.sendBrodCastMessage(p.name().append(Component.text(" wurde von ").append(sender.name()).append(Component.text(" wiederbelebt!"))).color(ChatUtil.GREEN)); + } else { + ChatUtil.sendErrorMessage(sender, "Dieser Spieler ist nicht online!"); + } + } + } else { + if (plugin.getCurrentEditor() != null) { + if (plugin.getCurrentEditor() != sender) { + ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! Nur " + plugin.getCurrentEditor().getName() + " kann Spieler wiederbeleben!"); + } + } else { + ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); + ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden, musst du dir im Freebuild VIP kaufen!"); + } + } + return true; + } +} \ No newline at end of file diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/SkipItemCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/SkipItemCommand.java new file mode 100644 index 0000000..490b98d --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/SkipItemCommand.java @@ -0,0 +1,44 @@ +package de.fanta.challenge.commands; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.challenges.AllItemsChallenge; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class SkipItemCommand extends SubCommand { + + private final Challenges plugin; + + public SkipItemCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player p)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + if (plugin.getCurrentEditor() != null) { + if (!plugin.isEditor(p) || !p.hasPermission("Challenges.editor.override")) { + ChatUtil.sendErrorMessage(p, "Das kann nur der Editor!"); + return true; + } + } else { + ChatUtil.sendErrorMessage(p, "Aktuell gibt es keinen Editor!"); + } + + if (Config.getBoolean("allitems")) { + AllItemsChallenge.next(p, true); + } else { + ChatUtil.sendErrorMessage(p, "Dies geht nur wenn All Items Aktiv ist!"); + } + + return true; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/VillageCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/VillageCommand.java new file mode 100644 index 0000000..e0950c0 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/VillageCommand.java @@ -0,0 +1,115 @@ +package de.fanta.challenge.commands; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.ServerType; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.HeightMap; +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.generator.structure.Structure; +import org.bukkit.util.StructureSearchResult; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; + +public class VillageCommand extends SubCommand { + + private final Challenges plugin; + + public VillageCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + + if (plugin.isEditor(player) || player.hasPermission("Challenges.editor.override")) { + if (args.hasNext()) { + String structureString = args.getNext(); + Structure structure; + + try { + structure = VillageTypes.valueOf(structureString.toUpperCase()).getStructure(); + } catch (IllegalArgumentException ex) { + ChatUtil.sendErrorMessage(player, "Das von dir gesuchte Villager Dorf (" + structureString + ") gibt es nicht."); + return true; + } + + ChatUtil.sendWarningMessage(player, "Die suche kann etwas länger dauern und der Server wird laggen."); + StructureSearchResult villageResult = player.getWorld().locateNearestStructure(player.getLocation(), structure, 10000, true); + + if (villageResult == null) { + ChatUtil.sendErrorMessage(player, "Kein Villager Dorf gefunden."); + return true; + } + + Location village = villageResult.getLocation(); + int x = village.getBlockX(); + int z = village.getBlockZ(); + Location villagetop = village.getWorld().getHighestBlockAt(x, z, HeightMap.MOTION_BLOCKING).getLocation().add(0, 1, 0); + int y = villagetop.getBlockY(); + Bukkit.getWorlds().getFirst().setSpawnLocation(villagetop); + ChatUtil.sendMessage(player, Component.text("Dorf: ", ChatUtil.GREEN).append(Component.text(x + " " + y + " " + z, ChatUtil.BLUE))); + for (Player pp : Bukkit.getOnlinePlayers()) { + pp.teleportAsync(villagetop); + ChatUtil.sendNormalMessage(pp, "Dorfspawn gesetzt!"); + } + if (plugin.getServerType() == ServerType.CHALLENGE) { + if (!Config.getBoolean("editsettings")) { + Config.setValue("editsettings", true, false); + plugin.getLogger().info("Diese Challenge ist kein SpeedRun mehr da ein Village Spawn gesetzt wurde."); + if (plugin.getCurrentEditor() != null) { + ChatUtil.sendWarningMessage(plugin.getCurrentEditor(), "Diese Challenge wird nicht mehr als Speed Run gezählt, da ein Village Spawn gesetzt wurde."); + } + } + } + } else { + ChatUtil.sendWarningMessage(player, "/village "); + } + return true; + } else if (plugin.getCurrentEditor() != null) { + ChatUtil.sendErrorMessage(player, "Du bist kein Editor! nur" + plugin.getCurrentEditor().getName() + " kann nach Dörfern suchen"); + return true; + } else { + ChatUtil.sendErrorMessage(player, "Aktuell gibt es keinen Editor!"); + ChatUtil.sendErrorMessage(player, "Um selbst Editor zu werden musst du dir im Freebuild VIP Kaufen!"); + return true; + } + } + + @Override + public Collection onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) { + String[] villages = new String[]{"Plains", "Desert", "Savanna", "Snowy", "Taiga"}; + return new ArrayList<>(Arrays.asList(villages)); + } + + public enum VillageTypes { + PLAINS(Structure.VILLAGE_PLAINS), + DESERT(Structure.VILLAGE_DESERT), + SAVANNA(Structure.VILLAGE_SAVANNA), + SNOWY(Structure.VILLAGE_SNOWY), + TAIGA(Structure.VILLAGE_TAIGA); + + private final Structure structure; + + VillageTypes(Structure structure) { + this.structure = structure; + } + + public Structure getStructure() { + return structure; + } + } +} \ No newline at end of file diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengeMaxPlayersCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengeMaxPlayersCommand.java new file mode 100644 index 0000000..9febde6 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengeMaxPlayersCommand.java @@ -0,0 +1,45 @@ +package de.fanta.challenge.commands.challenges; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.events.PlayerCountChangedEvent; +import de.fanta.challenge.utils.ChatUtil; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ChallengeMaxPlayersCommand extends SubCommand { + @Override + public boolean onCommand(CommandSender sender, Command command, String s, String s1, ArgsParser args) { + + if (!(sender instanceof Player player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + + if (args.hasNext()) { + try { + int playeCount = Integer.parseInt(args.getNext()); + Bukkit.getServer().setMaxPlayers(playeCount); + Bukkit.getPluginManager().callEvent(new PlayerCountChangedEvent(Challenges.getPlugin().getVanish().getPlayerListWithoutVanishPlayers().size())); + ChatUtil.sendMessage(player, Component.text("Du hast die maximale Spieleranzahl vom server auf ", ChatUtil.GREEN).append(Component.text(playeCount, ChatUtil.BLUE).append(Component.text(" gesetzt!", ChatUtil.GREEN)))); + } catch (NumberFormatException ex) { + ChatUtil.sendErrorMessage(player, "Du musst eine Zahl angeben!"); + } + } else { + ChatUtil.sendErrorMessage(player, "Du musst eine Zahl angeben!"); + } + + + return true; + } + + + @Override + public String getRequiredPermission() { + return "Challenges.editor.override"; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesBanCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesBanCommand.java new file mode 100644 index 0000000..4cae631 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesBanCommand.java @@ -0,0 +1,64 @@ +package de.fanta.challenge.commands.challenges; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ChallengesBanCommand extends SubCommand { + private final Challenges plugin; + + public ChallengesBanCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + if (plugin.isEditor(player) || player.hasPermission("Challenges.editor.override")) { + if (args.hasNext()) { + String playerName = args.getNext(); + Player punishedPlayer = Bukkit.getPlayer(playerName); + + if (punishedPlayer == null) { + ChatUtil.sendErrorMessage(player, "Dieser Spieler ist nicht online!"); + return true; + } + + if (punishedPlayer == player) { + ChatUtil.sendErrorMessage(player, "Du kannst dich nicht selbst bannen."); + return true; + } + + if (punishedPlayer.hasPermission("Challenges.editor.override")) { + ChatUtil.sendErrorMessage(player, "Diese Person kannst du nicht bannen."); + return true; + } + + ChatUtil.sendErrorMessage(punishedPlayer, "Du wurdest vom Editor gebannt!"); + plugin.addBannedPlayer(punishedPlayer.getUniqueId(), true); + plugin.portPlayerToLobby(punishedPlayer); + ChatUtil.sendMessage(player, Component.text("Du hast ", ChatUtil.GREEN).append(punishedPlayer.name().color(ChatUtil.BLUE)).append(Component.text(" gebannt.", ChatUtil.GREEN))); + return true; + } else { + ChatUtil.sendWarningMessage(player, "/challenge ban [Player]"); + } + return true; + } else if (plugin.getCurrentEditor() != null) { + ChatUtil.sendErrorMessage(player, "Du bist kein Editor! Nur " + plugin.getCurrentEditor().getName() + " kann Spieler bannen."); + return true; + } else { + ChatUtil.sendErrorMessage(player, "Aktuell gibt es keinen Editor!"); + ChatUtil.sendErrorMessage(player, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); + return true; + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesCommand.java new file mode 100644 index 0000000..d120c02 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesCommand.java @@ -0,0 +1,25 @@ +package de.fanta.challenge.commands.challenges; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; + +public class ChallengesCommand extends SubCommand { + + private final Challenges plugin; + + public ChallengesCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + 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"); + return true; + } + +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesEnderSeeCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesEnderSeeCommand.java new file mode 100644 index 0000000..82a666f --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesEnderSeeCommand.java @@ -0,0 +1,40 @@ +package de.fanta.challenge.commands.challenges; + +import de.fanta.challenge.utils.ChatUtil; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ChallengesEnderSeeCommand extends SubCommand { + @Override + public boolean onCommand(CommandSender sender, Command command, String s, String s1, ArgsParser args) { + if (!(sender instanceof Player player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + + if (!player.hasPermission("challenges.endersee")) { + ChatUtil.sendErrorMessage(player, "Keine Rechte!"); + return true; + } + + if (args.hasNext()) { + Player enderSeePlayer = Bukkit.getPlayer(args.getNext()); + + if (enderSeePlayer == null) { + ChatUtil.sendErrorMessage(sender, "Dieser Spieler ist nicht online!"); + return true; + } + + player.openInventory(enderSeePlayer.getEnderChest()); + + } else { + ChatUtil.sendErrorMessage(player, "/challenges endersee "); + return true; + } + return true; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesHelpCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesHelpCommand.java new file mode 100644 index 0000000..b0f4392 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesHelpCommand.java @@ -0,0 +1,40 @@ +package de.fanta.challenge.commands.challenges; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import net.kyori.adventure.text.Component; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ChallengesHelpCommand extends SubCommand { + + private final Challenges plugin; + + public ChallengesHelpCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + + if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { + ChatUtil.sendNormalMessage(sender, "Alle Befehle und Funktionen vom Challenge Plugin findest du in unserem Wiki."); + ChatUtil.sendNormalMessage(sender, "Hier Klicken --> https://wiki.cubeside.de/Challenge"); + return true; + } else if (plugin.getCurrentEditor() != null) { + ChatUtil.sendMessage(sender, Component.text("Du bist kein Editor! ", ChatUtil.RED).append(plugin.getCurrentEditor().name().color(ChatUtil.BLUE).append(Component.text(" muss die Map bearbeiten!", ChatUtil.RED)))); + return true; + } else { + ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); + ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP Kaufen!"); + return true; + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesInvSeeCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesInvSeeCommand.java new file mode 100644 index 0000000..b44cc38 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesInvSeeCommand.java @@ -0,0 +1,40 @@ +package de.fanta.challenge.commands.challenges; + +import de.fanta.challenge.utils.ChatUtil; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ChallengesInvSeeCommand extends SubCommand { + @Override + public boolean onCommand(CommandSender sender, Command command, String s, String s1, ArgsParser args) { + if (!(sender instanceof Player player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + + if (!player.hasPermission("challenges.invsee")) { + ChatUtil.sendErrorMessage(player, "Keine Rechte!"); + return true; + } + + if (args.hasNext()) { + Player invseePlayer = Bukkit.getPlayer(args.getNext()); + + if (invseePlayer == null) { + ChatUtil.sendErrorMessage(sender, "Dieser Spieler ist nicht online!"); + return true; + } + + player.openInventory(invseePlayer.getInventory()); + + } else { + ChatUtil.sendWarningMessage(player, "/challenges invsee "); + return true; + } + return true; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesKickCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesKickCommand.java new file mode 100644 index 0000000..5a203c0 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesKickCommand.java @@ -0,0 +1,70 @@ +package de.fanta.challenge.commands.challenges; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ChallengesKickCommand extends SubCommand { + private final Challenges plugin; + + public ChallengesKickCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + if (plugin.isEditor(player) || player.hasPermission("Challenges.editor.override")) { + if (args.hasNext()) { + String playerName = args.getNext(); + Player punishedPlayer = Bukkit.getPlayer(playerName); + + if (punishedPlayer == null) { + ChatUtil.sendErrorMessage(player, "Dieser Spieler ist nicht online!"); + return true; + } + + if (punishedPlayer == player) { + ChatUtil.sendErrorMessage(player, "Du kannst dich nicht selbst kicken."); + return true; + } + + if (punishedPlayer.hasPermission("Challenges.editor.override")) { + ChatUtil.sendErrorMessage(player, "Diese Person kannst du nicht kicken."); + return true; + } + + ChatUtil.sendWarningMessage(punishedPlayer, "Du wurdest vom Editor gekickt!"); + ChatUtil.sendWarningMessage(punishedPlayer, "Du kannst in einer Minute wieder joinen"); + plugin.addBannedPlayer(punishedPlayer.getUniqueId(), false); + plugin.portPlayerToLobby(punishedPlayer); + ChatUtil.sendMessage(player, Component.text("Du hast ", ChatUtil.GREEN).append(punishedPlayer.name().color(ChatUtil.BLUE).append(Component.text(" gekickt. Der Spieler kann in einer Minute wieder Joinen", ChatUtil.GREEN)))); + plugin.getScheduler().runGlobalDelayed(() -> { + if (plugin.isPlayerBanned(punishedPlayer.getUniqueId())) { + plugin.removeBannedPlayer(punishedPlayer.getUniqueId(), false); + } + }, 20 * 60); + return true; + } else { + ChatUtil.sendWarningMessage(player, "/challenge kick [Player]"); + } + return true; + } else if (plugin.getCurrentEditor() != null) { + ChatUtil.sendErrorMessage(player, "Du bist kein Editor! Nur " + plugin.getCurrentEditor().getName() + " kann Spieler kicken."); + return true; + } else { + ChatUtil.sendErrorMessage(player, "Aktuell gibt es keinen Editor!"); + ChatUtil.sendErrorMessage(player, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); + return true; + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesMemoryCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesMemoryCommand.java new file mode 100644 index 0000000..7ad36dd --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesMemoryCommand.java @@ -0,0 +1,26 @@ +package de.fanta.challenge.commands.challenges; + +import de.fanta.challenge.utils.ChatUtil; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; + +public class ChallengesMemoryCommand extends SubCommand { + + private static final long MB = 1024L * 1024L; + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (sender.hasPermission("Challenges.editor.override")) { + ChatUtil.sendNormalMessage(sender, "Speichernutzung: " + KBToMB(Runtime.getRuntime().totalMemory()) + " MB / " + KBToMB(Runtime.getRuntime().maxMemory()) + " MB (Freier Speicher: " + KBToMB(Runtime.getRuntime().freeMemory()) + "MB)"); + } else { + ChatUtil.sendErrorMessage(sender, "Keine Rechte!"); + } + return true; + } + + public static long KBToMB(long KB) { + return KB / MB; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesPingCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesPingCommand.java new file mode 100644 index 0000000..d14d28b --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesPingCommand.java @@ -0,0 +1,37 @@ +package de.fanta.challenge.commands.challenges; + +import de.fanta.challenge.utils.ChatUtil; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ChallengesPingCommand extends SubCommand { + + public ChallengesPingCommand() { + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + + if (args.hasNext()) { + String playerName = args.getNext(); + Player player = Bukkit.getPlayer(playerName); + + if (player == null) { + ChatUtil.sendErrorMessage(sender, "Dieser Spieler ist nicht online!"); + return true; + } + ChatUtil.sendNormalMessage(sender, "Ping von " + player.getName() + ": " + player.getPing()); + } else { + ChatUtil.sendNormalMessage(sender, "Ping: " + ((Player) sender).getPing()); + } + return true; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesSaveCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesSaveCommand.java new file mode 100644 index 0000000..5ddd5ed --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesSaveCommand.java @@ -0,0 +1,51 @@ +package de.fanta.challenge.commands.challenges; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.guis.savegui.ChallengeSaveGui; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import de.iani.playerUUIDCache.CachedPlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ChallengesSaveCommand extends SubCommand { + + private final Challenges plugin; + + public ChallengesSaveCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + if (!Config.getBoolean("firsttimerstart")) { + ChatUtil.sendWarningMessage(player, "Du kannst nur gestartete Maps Speicher."); + return true; + } + CachedPlayer savePlayer; + if (args.hasNext()) { + if (!player.hasPermission("challenge.save.other")) { + ChatUtil.sendErrorMessage(player, "Keine Rechte! (Du kannst nur eigene maps Speichern)"); + return true; + } + String savePlayerName = args.getNext(); + savePlayer = plugin.getPlayerUUIDCache().getPlayer(savePlayerName); + } else { + savePlayer = plugin.getPlayerUUIDCache().getPlayer(player.getUniqueId()); + } + + if (savePlayer != null) { + new ChallengeSaveGui(player, savePlayer).open(); + } else { + ChatUtil.sendErrorMessage(player, "Spieler nicht gefunden!"); + } + return true; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesUnBanCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesUnBanCommand.java new file mode 100644 index 0000000..86450e5 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesUnBanCommand.java @@ -0,0 +1,74 @@ +package de.fanta.challenge.commands.challenges; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import de.iani.playerUUIDCache.CachedPlayer; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.UUID; + +public class ChallengesUnBanCommand extends SubCommand { + private final Challenges plugin; + + public ChallengesUnBanCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + if (plugin.isEditor(player) || player.hasPermission("Challenges.editor.override")) { + if (args.hasNext()) { + String playerName = args.getNext(); + CachedPlayer punishedPlayer = plugin.playerUUIDCache.getPlayer(playerName); + + if (punishedPlayer == null) { + ChatUtil.sendErrorMessage(player, "Player " + playerName + " nicht gefunden"); + return true; + } + + if (!plugin.isPlayerBanned(punishedPlayer.getUniqueId())) { + ChatUtil.sendMessage(player, Component.text(punishedPlayer.getName(), ChatUtil.BLUE).append(Component.text(" ist nicht gebannt.", ChatUtil.GREEN))); + return true; + } + + plugin.removeBannedPlayer(punishedPlayer.getUniqueId(), true); + ChatUtil.sendMessage(player, Component.text("Du hast ", ChatUtil.GREEN).append(Component.text(punishedPlayer.getName(), ChatUtil.BLUE).append(Component.text(" entbannt.", ChatUtil.GREEN)))); + return true; + } else { + ChatUtil.sendWarningMessage(player, "/challenge unban [Player]"); + } + return true; + } else if (plugin.getCurrentEditor() != null) { + ChatUtil.sendErrorMessage(player, "Du bist kein Editor! Nur " + plugin.getCurrentEditor().getName() + " kann Spieler entbannen."); + return true; + } else { + ChatUtil.sendErrorMessage(player, "Aktuell gibt es keinen Editor!"); + ChatUtil.sendErrorMessage(player, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); + return true; + } + } + + @Override + public Collection onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) { + ArrayList tablist = new ArrayList<>(); + for (String UUIDString : Config.getStringList("bannedPlayers")) { + OfflinePlayer tempOfflinePlayer = Bukkit.getOfflinePlayer(UUID.fromString(UUIDString)); + tablist.add(tempOfflinePlayer.getName()); + } + return tablist; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/challenges/CheckItemsCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/CheckItemsCommand.java new file mode 100644 index 0000000..d2feb02 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/CheckItemsCommand.java @@ -0,0 +1,72 @@ +package de.fanta.challenge.commands.challenges; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.guis.CheckItemsGUI; +import de.fanta.challenge.utils.ChatUtil; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import net.kyori.adventure.text.Component; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import java.io.IOException; +import java.util.Collection; +import java.util.Collections; +import java.util.logging.Level; + +public class CheckItemsCommand extends SubCommand { + + private final Challenges plugin; + private boolean reset = false; + + public CheckItemsCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player player)) { + return true; + } + if (!args.hasNext()) { + if (!reset) { + FileConfiguration config = Challenges.getPlugin().getItemConfig(); + config.set("items", null); + try { + Challenges.getPlugin().ItemConfig.save(Challenges.getPlugin().ItemConfigFile); + } catch (IOException e) { + plugin.getLogger().log(Level.SEVERE, "Error while saving item Config", e); + } + reset = true; + } + new CheckItemsGUI(player).open(); + return true; + } + + if (args.getNext().equals("additemtoblacklist")) { + ItemStack stack = player.getInventory().getItemInMainHand(); + CheckItemsGUI.addItem(stack.getType()); + ChatUtil.sendMessage(player, Component.text("Item ", ChatUtil.GREEN).append(Component.text(stack.getType().translationKey(), ChatUtil.BLUE).append(Component.text(" hinzugefügt", ChatUtil.GREEN)))); + } else { + ChatUtil.sendErrorMessage(player, "/checkitems "); + } + + return true; + } + + @Override + public String getRequiredPermission() { + return "challenges.temp"; + } + + @Override + public Collection onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) { + if (args.remaining() == 1) { + return Collections.singleton("additemtoblacklist"); + } + return Collections.emptyList(); + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/challenges/TeleportCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/TeleportCommand.java new file mode 100644 index 0000000..4dba32c --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/TeleportCommand.java @@ -0,0 +1,29 @@ +package de.fanta.challenge.commands.challenges; + +import de.fanta.challenge.guis.TeleportGUI; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class TeleportCommand extends SubCommand { + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + + if (Config.getBoolean("teleportcommand") || player.hasPermission("Challenges.editor.override")) { + new TeleportGUI(player).open(); + } else { + ChatUtil.sendWarningMessage(player, "Teleport deaktiviert!"); + } + + return true; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/coords/CoordsCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/coords/CoordsCommand.java new file mode 100644 index 0000000..7268be6 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/coords/CoordsCommand.java @@ -0,0 +1,22 @@ +package de.fanta.challenge.commands.coords; + +import de.fanta.challenge.guis.coordsgui.CoordsGUI; +import de.fanta.challenge.utils.ChatUtil; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class CoordsCommand extends SubCommand { + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + CoordsGUI.buildCoordsInventory(player); + return true; + } +} \ No newline at end of file diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/coords/CoordsDeleteCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/coords/CoordsDeleteCommand.java new file mode 100644 index 0000000..cb8accd --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/coords/CoordsDeleteCommand.java @@ -0,0 +1,45 @@ +package de.fanta.challenge.commands.coords; + +import de.fanta.challenge.guis.coordsgui.CoordsDeleteGUI; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.Collection; + +public class CoordsDeleteCommand extends SubCommand { + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + + if (args.hasNext()) { + String next = args.getAll(null); + + if (next == null) { + ChatUtil.sendErrorMessage(player, "Du musst einen Namen angeben."); + return true; + } + + if (Config.contains("Saved_Locations." + next)) { + CoordsDeleteGUI.createCoordsDeleteGUI(player, next, null); + } else { + ChatUtil.sendWarningMessage(player, "Diese Position existiert nicht!"); + } + return true; + } + return false; + } + + @Override + public Collection onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) { + return Config.getConfigurationSection("Saved_Locations").getKeys(false); + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/coords/CoordsGetCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/coords/CoordsGetCommand.java new file mode 100644 index 0000000..e2efc64 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/coords/CoordsGetCommand.java @@ -0,0 +1,53 @@ +package de.fanta.challenge.commands.coords; + +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import net.kyori.adventure.text.Component; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.Collection; + +public class CoordsGetCommand extends SubCommand { + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + + if (!args.hasNext()) { + ChatUtil.sendNormalMessage(player, "Verfügbare Positionen:"); + for (String key : Config.getConfigurationSection("Saved_Locations").getKeys(false)) { + ChatUtil.sendNormalMessage(player, key); + } + } else { + String next = args.getAll(null); + + if (next == null) { + ChatUtil.sendErrorMessage(player, "Du musst einen Namen angeben."); + return true; + } + + if (Config.contains("Saved_Locations." + next)) { + String w = Config.getString("Saved_Locations." + next + ".World"); + String x = Config.getString("Saved_Locations." + next + ".BlockX"); + String y = Config.getString("Saved_Locations." + next + ".BlockY"); + String z = Config.getString("Saved_Locations." + next + ".BlockZ"); + ChatUtil.sendMessage(player, Component.text("Position ", ChatUtil.GREEN).append(Component.text(next, ChatUtil.ORANGE).append(Component.text(": ", ChatUtil.GREEN).append(Component.text("[" + x + "/" + y + "/" + z + " " + w + "]", ChatUtil.ORANGE))))); + } else { + ChatUtil.sendWarningMessage(player, "§cDiese Position existiert nicht!"); + } + } + return true; + } + + @Override + public Collection onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) { + return Config.getConfigurationSection("Saved_Locations").getKeys(false); + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/coords/CoordsSaveCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/coords/CoordsSaveCommand.java new file mode 100644 index 0000000..62910e5 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/coords/CoordsSaveCommand.java @@ -0,0 +1,56 @@ +package de.fanta.challenge.commands.coords; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import net.kyori.adventure.text.Component; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class CoordsSaveCommand extends SubCommand { + + private final Challenges plugin; + + public CoordsSaveCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + + if (args.hasNext()) { + String next = args.getAll(null); + + if (next == null) { + ChatUtil.sendErrorMessage(player, "Du musst einen Namen angeben."); + return true; + } + + if (!plugin.getConfig().contains("Saved_Locations." + next)) { + String w = player.getLocation().getWorld().getName().toLowerCase(); + int x = player.getLocation().getBlockX(); + int y = player.getLocation().getBlockY(); + int z = player.getLocation().getBlockZ(); + ChatUtil.sendMessage(player, Component.text("Position ", ChatUtil.GREEN).append(Component.text(next, ChatUtil.ORANGE).append(Component.text(": ", ChatUtil.GREEN).append(Component.text("[" + x + "/" + y + "/" + z + " " + w + "]", ChatUtil.ORANGE))))); + Config.setValue("Saved_Locations." + next + ".World", w, false); + Config.setValue("Saved_Locations." + next + ".BlockX", x, false); + Config.setValue("Saved_Locations." + next + ".BlockY", y, false); + Config.setValue("Saved_Locations." + next + ".BlockZ", z, false); + plugin.saveConfig(); + } else { + ChatUtil.sendWarningMessage(player, "Diese Position existiert bereits! Benutze einen anderen Namen oder lösche die alte zuerst mit /coords delete " + next); + } + return true; + } + return false; + } + + +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/coords/CoordsShareCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/coords/CoordsShareCommand.java new file mode 100644 index 0000000..04a8516 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/coords/CoordsShareCommand.java @@ -0,0 +1,26 @@ +package de.fanta.challenge.commands.coords; + +import de.fanta.challenge.utils.ChatUtil; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import net.kyori.adventure.text.Component; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class CoordsShareCommand extends SubCommand { + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + String w = player.getLocation().getWorld().getName().toLowerCase(); + int x = player.getLocation().getBlockX(); + int y = player.getLocation().getBlockY(); + int z = player.getLocation().getBlockZ(); + ChatUtil.sendBrodCastMessage(player.name().color(ChatUtil.BLUE).append(Component.text(" ist bei ", ChatUtil.GREEN).append(Component.text(x + "/" + y + "/" + z + " " + w, ChatUtil.ORANGE)))); + return true; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/coords/CoordsTargetCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/coords/CoordsTargetCommand.java new file mode 100644 index 0000000..3f63e71 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/coords/CoordsTargetCommand.java @@ -0,0 +1,77 @@ +package de.fanta.challenge.commands.coords; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.CoordsTargeter; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.Collection; + +public class CoordsTargetCommand extends SubCommand { + + private final Challenges plugin; + + public CoordsTargetCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String s, String s1, ArgsParser args) { + if (!(sender instanceof Player player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + + if (!plugin.getTimer().isRunning()) { + ChatUtil.sendErrorMessage(player, "Das kannst du nur machen wenn der Timer aktiv ist."); + return true; + } + + if (args.hasNext()) { + String next = args.getAll(null); + if (plugin.getConfig().contains("Saved_Locations." + next)) { + World world = Bukkit.getWorld(Config.getString("Saved_Locations." + next + ".World")); + int x = Config.getInt("Saved_Locations." + next + ".BlockX"); + int y = Config.getInt("Saved_Locations." + next + ".BlockY"); + int z = Config.getInt("Saved_Locations." + next + ".BlockZ"); + if (world != null) { + if (world == player.getWorld()) { + Location location = new Location(world, x, y, z); + CoordsTargeter.addLocation(player.getUniqueId(), location); + ChatUtil.sendNormalMessage(player, "Der Weg zu " + next + " wird dir nun angezeigt!"); + ChatUtil.sendNormalMessage(player, "Du kannst dies mit '/coords target' wieder ausschalten."); + } else { + ChatUtil.sendErrorMessage(player, "Du befindest dich nicht in der gleichen Welt wie der Waypoint!"); + } + } else { + ChatUtil.sendWarningMessage(player, "Diese Position existiert nicht!"); + } + } else { + ChatUtil.sendWarningMessage(player, "Diese Position existiert nicht!"); + } + } else { + if (CoordsTargeter.containsLocation(player.getUniqueId())) { + CoordsTargeter.removeLocation(player.getUniqueId()); + ChatUtil.sendWarningMessage(player, "Der Weg wird nun nicht mehr angezeigt!"); + } else { + ChatUtil.sendWarningMessage(player, "Du hast keine Position gewählt. -> /coords target [Location]"); + } + } + + + return true; + } + + @Override + public Collection onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) { + return plugin.getConfig().getConfigurationSection("Saved_Locations").getKeys(false); + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/editor/EditorCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/editor/EditorCommand.java new file mode 100644 index 0000000..a0cfdf1 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/editor/EditorCommand.java @@ -0,0 +1,39 @@ +package de.fanta.challenge.commands.editor; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatSkullAPI.ChatSkull; +import de.fanta.challenge.utils.ChatUtil; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import net.kyori.adventure.text.Component; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class EditorCommand extends SubCommand { + + private final Challenges plugin; + + public EditorCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player)) { + ChatUtil.sendWarningMessage(sender, "You are not a Player :>"); + return true; + } + if (plugin.getCurrentEditor() != null) { + Component[] lines = {Component.empty(), Component.empty(), Component.empty(), Component.text(" " + plugin.getCurrentEditor().getName(), ChatUtil.BLUE), Component.text(" ist der aktuelle Editor", ChatUtil.GREEN), Component.empty(), Component.empty(), Component.empty()}; + ChatUtil.sendNormalMessage(sender, "-------- Editor --------"); + ChatSkull.sendPlayer(plugin.getCurrentEditor(), (Player) sender, lines); + ChatUtil.sendNormalMessage(sender, "-------- Editor --------"); + } else { + ChatUtil.sendWarningMessage(sender, "Aktuell gibt es keinen Editor!"); + ChatUtil.sendWarningMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); + } + return true; + } + +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/editor/EditorSetCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/editor/EditorSetCommand.java new file mode 100644 index 0000000..6667231 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/editor/EditorSetCommand.java @@ -0,0 +1,56 @@ +package de.fanta.challenge.commands.editor; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class EditorSetCommand extends SubCommand { + + private final Challenges plugin; + + public EditorSetCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player)) { + ChatUtil.sendWarningMessage(sender, "You are not a Player :>"); + return true; + } + if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { + if (args.hasNext()) { + String playerName = args.getNext(); + Player player = Bukkit.getPlayer(playerName); + + if (player == null) { + ChatUtil.sendWarningMessage(sender, "Dieser Spieler ist nicht online!"); + return true; + } else if (!plugin.isEditor(player)) { + plugin.setCurrentEditor(player); + ChatUtil.sendBrodCastMessage(player.name().color(ChatUtil.BLUE).append(Component.text(" wurde von ", ChatUtil.GREEN).append(sender.name().color(ChatUtil.BLUE).append(Component.text(" zum Editor ernannt", ChatUtil.GREEN))))); + ChatUtil.sendNormalMessage(player, "Du bist jetzt Editor und kannst diese Lobby bearbeiten. (/challenges)"); + return true; + } else { + ChatUtil.sendWarningMessage(sender, "Du bist bereits Editor!"); + return true; + } + } + return true; + } else if (plugin.getCurrentEditor() != null) { + ChatUtil.sendMessage(sender, Component.text("Du bist kein Editor! Nur ", ChatUtil.RED).append(plugin.getCurrentEditor().name().color(ChatUtil.BLUE).append(Component.text(" kann einen neuen Editor bestimmen!", ChatUtil.RED)))); + return true; + } else { + ChatUtil.sendWarningMessage(sender, "Aktuell gibt es keinen Editor!"); + ChatUtil.sendWarningMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); + return true; + } + } + +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/event/CreateTeamsCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/event/CreateTeamsCommand.java new file mode 100644 index 0000000..12600d4 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/event/CreateTeamsCommand.java @@ -0,0 +1,51 @@ +package de.fanta.challenge.commands.event; + +import de.fanta.challenge.teams.TeamUtils; +import de.fanta.challenge.utils.ChatUtil; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class CreateTeamsCommand extends SubCommand { + + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + if (sender.hasPermission("challenges.event")) { + int teams; + int playerperteam; + if (args.hasNext()) { + teams = Integer.parseInt(args.getNext()); + } else { + ChatUtil.sendErrorMessage(sender, "/event createteams "); + return true; + } + + if (teams > 28) { + ChatUtil.sendErrorMessage(sender, "Du kannst nicht mehr als 28 Teams anlegen."); + return true; + } + + if (args.hasNext()) { + playerperteam = Integer.parseInt(args.getNext()); + } else { + ChatUtil.sendErrorMessage(sender, "/event createteams "); + return true; + } + + TeamUtils.setTeamCount(teams); + TeamUtils.setTeamSize(playerperteam); + ChatUtil.sendNormalMessage(sender, "Es wurden " + teams + " Teams erstellt."); + return true; + } else { + ChatUtil.sendErrorMessage(sender, "Keine Berechtigung!"); + } + return true; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/event/EventCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/event/EventCommand.java new file mode 100644 index 0000000..ffe1b75 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/event/EventCommand.java @@ -0,0 +1,31 @@ +package de.fanta.challenge.commands.event; + +import de.fanta.challenge.utils.ChatUtil; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class EventCommand extends SubCommand { + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + if (sender.hasPermission("challenges.event")) { + ChatUtil.sendNormalMessage(sender, "--- Event Commands ---"); + ChatUtil.sendNormalMessage(sender, "/event enable - aktiviert die Event-Funktion"); + ChatUtil.sendNormalMessage(sender, "/event disable - deaktiviert die Event-Funktion"); + ChatUtil.sendNormalMessage(sender, "/event settings - öffnet die Event-Einstellungen"); + ChatUtil.sendNormalMessage(sender, "/event getscore [player] - zeigt den Score der Spieler"); + ChatUtil.sendNormalMessage(sender, "--- ************** ---"); + return true; + } else { + ChatUtil.sendErrorMessage(sender, "Keine Berechtigung!"); + } + return false; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/event/EventForceTeamCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/event/EventForceTeamCommand.java new file mode 100644 index 0000000..b518503 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/event/EventForceTeamCommand.java @@ -0,0 +1,91 @@ +package de.fanta.challenge.commands.event; + +import de.fanta.challenge.teams.ChallengeTeam; +import de.fanta.challenge.teams.TeamUtils; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; + +public class EventForceTeamCommand extends SubCommand { + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + if (sender.hasPermission("challenges.event")) { + + if (!Config.getBoolean("event.teams")) { + ChatUtil.sendErrorMessage(player, "Teams sind nicht Aktiv!"); + return true; + } + + if (TeamUtils.getTeams().length == 0) { + ChatUtil.sendErrorMessage(player, "Aktuell gibt es keine Teams!"); + return true; + } + + String teamname; + ChallengeTeam team = null; + String forceplayername; + Player forceplayer = null; + + if (args.hasNext()) { + forceplayername = args.getNext(); + forceplayer = Bukkit.getPlayer(forceplayername); + if (forceplayer == null) { + ChatUtil.sendMessage(player, Component.text("Spieler ", ChatUtil.RED).append(Component.text(forceplayername, ChatUtil.BLUE).append(Component.text(" nicht gefunden.", ChatUtil.RED)))); + return true; + } + } + + if (args.hasNext()) { + teamname = args.getNext(); + team = TeamUtils.getTeam(teamname); + if (team == null) { + ChatUtil.sendMessage(player, Component.text("Team ", ChatUtil.RED).append(Component.text(teamname, ChatUtil.BLUE).append(Component.text(" nicht gefunden.", ChatUtil.RED)))); + return true; + } + } + + TeamUtils.selectTeam(forceplayer, team); + ChatUtil.sendMessage(player, forceplayer.name().color(ChatUtil.BLUE).append(Component.text(" ist nun in Team ", ChatUtil.GREEN).append(Component.text(team.getName(), team.getChatColor())))); + + } else { + ChatUtil.sendErrorMessage(sender, "Keine Berechtigung!"); + } + return true; + } + + @Override + public Collection onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) { + args.getNext(null); + if (args.hasNext()) { + Collection teamNames = new ArrayList<>(); + if (TeamUtils.getTeams() != null) { + for (ChallengeTeam team : TeamUtils.getTeams()) { + teamNames.add(team.getName()); + } + } + + if (!teamNames.isEmpty()) { + return teamNames; + } else { + return Collections.emptyList(); + } + + } + return Bukkit.getOnlinePlayers().stream().map(Player::getName).toList(); + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/event/EventGetScoreCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/event/EventGetScoreCommand.java new file mode 100644 index 0000000..298abf1 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/event/EventGetScoreCommand.java @@ -0,0 +1,55 @@ +package de.fanta.challenge.commands.event; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.scoreboard.ChallengePlayer; +import de.fanta.challenge.scoreboard.Scorable; +import de.fanta.challenge.utils.ChatUtil; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class EventGetScoreCommand extends SubCommand { + private final Challenges plugin; + + public EventGetScoreCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + if (sender.hasPermission("challenges.event")) { + if (args.hasNext()) { + String playerName = args.getNext(); + Player player = Bukkit.getPlayer(playerName); + + if (player == null) { + ChatUtil.sendErrorMessage(sender, "Dieser Spieler ist nicht online!"); + return true; + } + + ChatUtil.sendNormalMessage(sender, player.getName() + ": " + plugin.getScoreManager().getScore(new ChallengePlayer(player.getUniqueId()))); + return true; + } else { + if (plugin.getScoreManager().getScores().isEmpty()) { + ChatUtil.sendWarningMessage(sender, "Aktuell gibt es keine Scores"); + return true; + } + for (Scorable scorable : plugin.getScoreManager().getScores().keySet()) { + int position = plugin.getScoreManager().getPosition(scorable); + int score = plugin.getScoreManager().getScore(scorable); + ChatUtil.sendNormalMessage(sender, position + ". " + scorable.getIdentifier() + ": " + score); + } + } + } else { + ChatUtil.sendErrorMessage(sender, "Keine Berechtigung!"); + } + return true; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/event/EventSaveScoresCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/event/EventSaveScoresCommand.java new file mode 100644 index 0000000..8fe3030 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/event/EventSaveScoresCommand.java @@ -0,0 +1,61 @@ +package de.fanta.challenge.commands.event; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.scoreboard.Scorable; +import de.fanta.challenge.utils.ChatUtil; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import de.iani.playerUUIDCache.CachedPlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; + +public class EventSaveScoresCommand extends SubCommand { + + private final Challenges plugin; + + public EventSaveScoresCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (sender.hasPermission("Challenges.editor.override")) { + if (args.hasNext()) { + boolean publishToPlayerStats = Boolean.parseBoolean(args.getNext()); + int minScore = args.getNext(0); + if (publishToPlayerStats) { + HashMap scoreList = plugin.getScoreManager().getTournamentScores(plugin.getScoreManager().getPositions(), minScore); + + for (Scorable scorable : scoreList.keySet()) { + CachedPlayer cp = plugin.getPlayerUUIDCache().getPlayerFromNameOrUUID(scorable.getName()); + plugin.getStatistics().increaseChallengeWeekStats(cp.getUUID(), scoreList.get(scorable)); + } + } + + if (sender instanceof Player player) { + plugin.getScoreManager().saveScores(player, minScore); + } else { + plugin.getScoreManager().saveScores(null, minScore); + } + } else { + ChatUtil.sendErrorMessage(sender, "/challenge saveeventscores [Score]"); + } + + } else { + ChatUtil.sendErrorMessage(sender, "Keine Rechte!"); + } + return true; + } + + @Override + public Collection onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) { + String[] values = new String[]{"true", "false"}; + return new ArrayList<>(Arrays.asList(values)); + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/event/EventSettingsCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/event/EventSettingsCommand.java new file mode 100644 index 0000000..af0e5bb --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/event/EventSettingsCommand.java @@ -0,0 +1,31 @@ +package de.fanta.challenge.commands.event; + +import de.fanta.challenge.guis.eventgui.EventGui; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class EventSettingsCommand extends SubCommand { + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + if (player.hasPermission("challenges.event")) { + if (Config.getBoolean("event.enabled")) { + new EventGui(player).open(); + } else { + ChatUtil.sendErrorMessage(player, "Dafür musst du das Event erst Starten"); + } + } else { + ChatUtil.sendErrorMessage(player, "Keine Berechtigung!"); + } + return true; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/event/EventStartCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/event/EventStartCommand.java new file mode 100644 index 0000000..f1433ff --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/event/EventStartCommand.java @@ -0,0 +1,80 @@ +package de.fanta.challenge.commands.event; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.events.ChallengeEventStatusChangedEvent; +import de.fanta.challenge.scoreboard.ChallengePlayer; +import de.fanta.challenge.teams.ChallengeTeam; +import de.fanta.challenge.teams.TeamUtils; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.concurrent.atomic.AtomicInteger; + +public class EventStartCommand extends SubCommand { + private final Challenges plugin; + + public EventStartCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + if (sender.hasPermission("challenges.event")) { + + AtomicInteger i = new AtomicInteger(4); + plugin.getScheduler().runGlobalAtFixedRate(task -> { + int j = i.decrementAndGet(); + + ChatUtil.sendTitleToAll(Component.text("Event"), Component.text(j > 0 ? "" + j : "Go", ChatUtil.BLUE)); + + if (j <= 0) { + task.cancel(); + plugin.setDayLightCircle(true); + + for (Player pp : Bukkit.getOnlinePlayers()) { + pp.getInventory().removeItem(TeamUtils.selctItem()); + } + plugin.getTimer().startTimer(); + + if (!Config.getBoolean("event.teams")) { + Bukkit.getOnlinePlayers().forEach(p -> plugin.getScoreManager().updateScore(new ChallengePlayer(p.getUniqueId()), 0)); + } else { + TeamUtils.setAllPlayerWithoutTeamToTeam(); + Bukkit.getOnlinePlayers().forEach(p -> plugin.getScoreManager().updateScore(TeamUtils.getPlayerTeam(p), 0)); + + + for (ChallengeTeam team : TeamUtils.getTeams()) { + if (team.getSpawn() != null) { + for (OfflinePlayer teamofflineplayer : TeamUtils.getPlayersInTeam(team)) { + if (teamofflineplayer instanceof Player teamplayer) { + teamplayer.teleportAsync(team.getSpawn()); + } + } + } + } + } + Bukkit.getPluginManager().callEvent(new ChallengeEventStatusChangedEvent(true)); + } + }, 10, 20); + + + return true; + } else { + ChatUtil.sendErrorMessage(sender, "Keine Berechtigung!"); + } + return false; + } +} + diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/event/EventTeamsSetTeamSpawnCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/event/EventTeamsSetTeamSpawnCommand.java new file mode 100644 index 0000000..cc7fc86 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/event/EventTeamsSetTeamSpawnCommand.java @@ -0,0 +1,57 @@ +package de.fanta.challenge.commands.event; + +import de.fanta.challenge.teams.ChallengeTeam; +import de.fanta.challenge.teams.TeamUtils; +import de.fanta.challenge.utils.ChatUtil; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import net.kyori.adventure.text.Component; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; + +public class EventTeamsSetTeamSpawnCommand extends SubCommand { + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + if (sender.hasPermission("challenges.event")) { + if (args.hasNext()) { + String teamname = args.getNext(); + ChallengeTeam team = TeamUtils.getTeam(teamname); + if (team != null) { + team.setSpawn(player.getLocation()); + ChatUtil.sendMessage(player, Component.text("Spawn für Team ", ChatUtil.GREEN).append(Component.text(team.getName(), team.getChatColor()).append(Component.text(" wurde gesetzt.", ChatUtil.GREEN)))); + } else { + ChatUtil.sendMessage(player, Component.text("Team ", ChatUtil.RED).append(Component.text(teamname, ChatUtil.BLUE).append(Component.text(" nicht gefunden.", ChatUtil.RED)))); + } + } else { + ChatUtil.sendErrorMessage(sender, "/event setTeamSpawn "); + return true; + } + return true; + } else { + ChatUtil.sendErrorMessage(sender, "Keine Berechtigung!"); + } + return true; + } + + @Override + public Collection onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) { + if (TeamUtils.getTeams() != null) { + Collection teamNames = new ArrayList<>(); + for (ChallengeTeam team : TeamUtils.getTeams()) { + teamNames.add(team.getName()); + } + return teamNames; + } + return Collections.emptyList(); + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/event/EventToggleCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/event/EventToggleCommand.java new file mode 100644 index 0000000..ce1da22 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/event/EventToggleCommand.java @@ -0,0 +1,57 @@ +package de.fanta.challenge.commands.event; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.events.ChallengeEventStatusChangedEvent; +import de.fanta.challenge.events.EventStatusChangedEvent; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class EventToggleCommand extends SubCommand { + + private final Challenges plugin; + private final boolean enable; + + public EventToggleCommand(Challenges plugin, boolean enable) { + this.plugin = plugin; + this.enable = enable; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + Player p = (Player) sender; + if (!p.hasPermission("challenges.event")) { + ChatUtil.sendErrorMessage(p, "Keine Berechtigung"); + return true; + } + if (enable) { + if (!Config.getBoolean("event.enabled")) { + Config.setValue("event.enabled", true); + Bukkit.getPluginManager().callEvent(new EventStatusChangedEvent(true)); + ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Event-Modus aktiviert", ChatUtil.GREEN)); + } else { + ChatUtil.sendErrorMessage(p, "Das Event läuft bereits!"); + return true; + } + } else { + if (Config.getBoolean("event.enabled")) { + Config.setValue("event.enabled", false); + Bukkit.getPluginManager().callEvent(new EventStatusChangedEvent(false)); + Bukkit.getPluginManager().callEvent(new ChallengeEventStatusChangedEvent(false)); + plugin.getTimer().stopTimer(); + ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Event-Modus deaktiviert", ChatUtil.RED)); + } else { + ChatUtil.sendErrorMessage(p, "Aktuell läuft kein Event!"); + return true; + } + } + plugin.getSBManager().updateEventScoreboard(); + return true; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/hp/HPAddCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/hp/HPAddCommand.java new file mode 100644 index 0000000..74fe4ab --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/hp/HPAddCommand.java @@ -0,0 +1,76 @@ +package de.fanta.challenge.commands.hp; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.Bukkit; +import org.bukkit.attribute.Attribute; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class HPAddCommand extends SubCommand { + + private final Challenges plugin; + + public HPAddCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { + if (args.hasNext()) { + String playerName = args.getNext(); + Player player = Bukkit.getPlayer(playerName); + + if (player == null) { + ChatUtil.sendErrorMessage(sender, "Dieser Spieler ist nicht online!"); + return true; + } + + if (args.hasNext()) { + double input = args.getNext(0.0); + double finalAddHP = player.getHealth() + input; + + if (finalAddHP <= player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue() && finalAddHP >= 0) { + player.setHealth(finalAddHP); + ChatUtil.sendNormalMessage(player, "Du wurdest von " + sender.getName() + " um " + input + "HP geheilt!"); + ChatUtil.sendNormalMessage(sender, "Du hast " + player.getName() + " " + input + "HP hinzugefügt!"); + + if (!Config.getBoolean("editsettings")) { + Config.setValue("editsettings", true, false); + plugin.getLogger().info("Diese Challenge ist kein SpeedRun mehr da die HP von " + player.getName() + " auf " + input + " geändert wurden."); + if (plugin.getCurrentEditor() != null) { + ChatUtil.sendWarningMessage(plugin.getCurrentEditor(), "Diese Challenge wird nicht mehr als Speed Run gezählt, da die HP von einem Spieler bearbeitet wurden."); + } + } + } else { + ChatUtil.sendErrorMessage(sender, "Operation nicht möglich!"); + } + return true; + } + } + } else if (plugin.getCurrentEditor() != null) { + ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); + return true; + } else { + ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); + ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); + return true; + } + return false; + } + + @Override + public boolean requiresPlayer() { + return true; + } + + @Override + public String getUsage() { + return " - Füge einem Spieler die angegebene Zahl an Herzen hinzu"; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/hp/HPGetCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/hp/HPGetCommand.java new file mode 100644 index 0000000..8570727 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/hp/HPGetCommand.java @@ -0,0 +1,54 @@ +package de.fanta.challenge.commands.hp; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class HPGetCommand extends SubCommand { + + private final Challenges plugin; + + public HPGetCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { + if (args.hasNext()) { + String playerName = args.getNext(); + Player player = Bukkit.getPlayer(playerName); + + if (player != null) { + ChatUtil.sendNormalMessage(sender, player.getName() + " besitzt derzeit " + player.getHealth() + "HP!"); + } else { + ChatUtil.sendErrorMessage(sender, "Dieser Spieler ist nicht online!"); + } + return true; + } + } else if (plugin.getCurrentEditor() != null) { + ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); + return true; + } else { + ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); + ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); + return true; + } + return false; + } + + @Override + public boolean requiresPlayer() { + return true; + } + + @Override + public String getUsage() { + return " - Erhalte die aktuellen HP eines Spielers"; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/hp/HPMaxCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/hp/HPMaxCommand.java new file mode 100644 index 0000000..57d4c1e --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/hp/HPMaxCommand.java @@ -0,0 +1,64 @@ +package de.fanta.challenge.commands.hp; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.Bukkit; +import org.bukkit.attribute.Attribute; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class HPMaxCommand extends SubCommand { + + private final Challenges plugin; + + public HPMaxCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { + if (args.hasNext()) { + double next = args.getNext(-1.0); + if (next > 0) { + for (Player pp : Bukkit.getOnlinePlayers()) { + pp.getAttribute(Attribute.GENERIC_MAX_HEALTH).setBaseValue(next); + pp.setHealth(pp.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()); + } + ChatUtil.sendNormalMessage(sender, "Du hast die maximalen HP auf " + next + " gesetzt!"); + + if (!Config.getBoolean("editsettings")) { + Config.setValue("editsettings", true, false); + plugin.getLogger().info("Diese Challenge ist kein SpeedRun mehr da die Max HP von auf " + next + " geändert wurden."); + if (plugin.getCurrentEditor() != null) { + ChatUtil.sendWarningMessage(plugin.getCurrentEditor(), "Diese Challenge wird nicht mehr als Speed Run gezählt, da die Max HP geändert wurden."); + } + } + return true; + } + } + } else if (plugin.getCurrentEditor() != null) { + ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); + return true; + } else { + ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); + ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); + return true; + } + return false; + } + + @Override + public boolean requiresPlayer() { + return true; + } + + @Override + public String getUsage() { + return " - Setze die maximalen HP aller Spieler"; + } +} \ No newline at end of file diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/hp/HPRemoveCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/hp/HPRemoveCommand.java new file mode 100644 index 0000000..6f0804c --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/hp/HPRemoveCommand.java @@ -0,0 +1,75 @@ +package de.fanta.challenge.commands.hp; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.Bukkit; +import org.bukkit.attribute.Attribute; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class HPRemoveCommand extends SubCommand { + + private final Challenges plugin; + + public HPRemoveCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { + if (args.hasNext()) { + String playerName = args.getNext(); + Player player = Bukkit.getPlayer(playerName); + + if (player == null) { + ChatUtil.sendErrorMessage(sender, "Dieser Spieler ist nicht online!"); + return true; + } + + if (args.hasNext()) { + double input = args.getNext(0.0); + double finalRemoveHP = player.getHealth() - input; + if (finalRemoveHP <= player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue() && finalRemoveHP >= 0) { + player.setHealth(finalRemoveHP); + ChatUtil.sendNormalMessage(player, sender.getName() + " hat dir " + input + " HP entfernt!"); + ChatUtil.sendNormalMessage(sender, "Du hast " + player.getName() + " " + input + " HP entfernt!"); + + if (!Config.getBoolean("editsettings")) { + Config.setValue("editsettings", true, false); + plugin.getLogger().info("Diese Challenge ist kein SpeedRun mehr da " + input + " HP von " + player.getName() + " abgezogen wurden"); + if (plugin.getCurrentEditor() != null) { + ChatUtil.sendWarningMessage(plugin.getCurrentEditor(), "Diese Challenge wird nicht mehr als Speed Run gezählt, da die HP von einem Spieler bearbeitet wurden."); + } + } + } else { + ChatUtil.sendErrorMessage(sender, "Operation nicht möglich!"); + } + return true; + } + } + } else if (plugin.getCurrentEditor() != null) { + ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); + return true; + } else { + ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); + ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); + return true; + } + return false; + } + + @Override + public boolean requiresPlayer() { + return true; + } + + @Override + public String getUsage() { + return " - Entferne einem Spieler die angegebene Zahl an Herzen"; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/hp/HPSetCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/hp/HPSetCommand.java new file mode 100644 index 0000000..893796b --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/hp/HPSetCommand.java @@ -0,0 +1,74 @@ +package de.fanta.challenge.commands.hp; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.Bukkit; +import org.bukkit.attribute.Attribute; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class HPSetCommand extends SubCommand { + + private final Challenges plugin; + + public HPSetCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { + if (args.hasNext()) { + String playerName = args.getNext(); + Player player = Bukkit.getPlayer(playerName); + + if (player == null) { + ChatUtil.sendErrorMessage(sender, "Dieser Spieler ist nicht online!"); + return true; + } + + if (args.hasNext()) { + double input = args.getNext(0.0); + if (input <= player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue() && input >= 0) { + player.setHealth(input); + ChatUtil.sendNormalMessage(player, sender.getName() + " hat deine HP auf " + input + " gesetzt!"); + ChatUtil.sendNormalMessage(sender, "Du hast die HP von " + player.getName() + " auf " + input + " gesetzt!"); + + if (!Config.getBoolean("editsettings")) { + Config.setValue("editsettings", true, false); + plugin.getLogger().info("Diese Challenge ist kein SpeedRun mehr da die HP von " + player.getName() + " auf " + input + " geändert wurden."); + if (plugin.getCurrentEditor() != null) { + ChatUtil.sendWarningMessage(plugin.getCurrentEditor(), "Diese Challenge wird nicht mehr als Speed Run gezählt, da die HP von einem Spieler bearbeitet wurden."); + } + } + } else { + ChatUtil.sendErrorMessage(sender, "Operation nicht möglich!"); + } + return true; + } + } + } else if (plugin.getCurrentEditor() != null) { + ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); + return true; + } else { + ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); + ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); + return true; + } + return false; + } + + @Override + public boolean requiresPlayer() { + return true; + } + + @Override + public String getUsage() { + return " - Setze die Herzen eines Spieler auf die angegebene Zahl"; + } +} \ No newline at end of file diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/reset/ResetCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/reset/ResetCommand.java new file mode 100644 index 0000000..a095b23 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/reset/ResetCommand.java @@ -0,0 +1,40 @@ +package de.fanta.challenge.commands.reset; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.guis.ResetGui; +import de.fanta.challenge.utils.ChatUtil; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ResetCommand extends SubCommand { + + private final Challenges plugin; + + public ResetCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player player)) { + return true; + } + + if (plugin.isEditor(player) || player.hasPermission("Challenges.editor.override")) { + new ResetGui(player).open(); + } else if (plugin.getCurrentEditor() != null) { + ChatUtil.sendErrorMessage(player, "Du bist kein Editor! Nur" + plugin.getCurrentEditor().getName() + " kann die Map zurücksetzen!"); + return true; + } else { + ChatUtil.sendErrorMessage(player, "Aktuell gibt es keinen Editor!"); + ChatUtil.sendErrorMessage(player, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); + return true; + } + return true; + } +} + + diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/reset/ResetConfirmCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/reset/ResetConfirmCommand.java new file mode 100644 index 0000000..24806da --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/reset/ResetConfirmCommand.java @@ -0,0 +1,34 @@ +package de.fanta.challenge.commands.reset; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.SaveWorldUtils; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ResetConfirmCommand extends SubCommand { + + private final Challenges plugin; + + public ResetConfirmCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if ((sender instanceof Player && plugin.isEditor((Player) sender)) || sender.hasPermission("Challenges.editor.override")) { + SaveWorldUtils.restartServer(args.getNext(null)); + } else if (plugin.getCurrentEditor() != null) { + ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! Nur " + plugin.getCurrentEditor().getName() + " kann die Map zurücksetzen!"); + return true; + } else { + ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); + ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); + return true; + } + return true; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/settings/SettingsCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/settings/SettingsCommand.java new file mode 100644 index 0000000..192f40e --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/settings/SettingsCommand.java @@ -0,0 +1,36 @@ +package de.fanta.challenge.commands.settings; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.guis.settingsgui.MainGui; +import de.fanta.challenge.utils.ChatUtil; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class SettingsCommand extends SubCommand { + + private final Challenges plugin; + + public SettingsCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String s1, ArgsParser args) { + if (sender instanceof Player p) { + if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { + new MainGui(p).open(); + } else { + ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); + } + } else if (plugin.getCurrentEditor() != null) { + ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); + } else { + ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); + ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP Kaufen!"); + } + return true; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/timer/TimerCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/timer/TimerCommand.java new file mode 100644 index 0000000..6bf5811 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/timer/TimerCommand.java @@ -0,0 +1,40 @@ +package de.fanta.challenge.commands.timer; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.guis.TimerGui; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class TimerCommand extends SubCommand { + + private final Challenges plugin; + + public TimerCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { + Player p = (Player) sender; + new TimerGui(p).open(); + } else if (plugin.getCurrentEditor() != null) { + ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); + return true; + } else { + ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); + ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); + return true; + } + return true; + } + +} \ No newline at end of file diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/timer/TimerGetCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/timer/TimerGetCommand.java new file mode 100644 index 0000000..03649c1 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/timer/TimerGetCommand.java @@ -0,0 +1,26 @@ +package de.fanta.challenge.commands.timer; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import net.kyori.adventure.text.Component; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; + +public class TimerGetCommand extends SubCommand { + + private final Challenges plugin; + + public TimerGetCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + ChatUtil.sendMessage(sender, Component.text("Timer: ", ChatUtil.GREEN).append(plugin.getTimer().formatTime(ChatUtil.BLUE).append(Component.text(" Speedrun: " + (Config.getBoolean("editsettings") ? "Nein" : "Ja"), ChatUtil.ORANGE)))); + return true; + } +} + diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/timer/TimerPauseCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/timer/TimerPauseCommand.java new file mode 100644 index 0000000..578060d --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/timer/TimerPauseCommand.java @@ -0,0 +1,56 @@ +package de.fanta.challenge.commands.timer; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.ServerType; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import net.kyori.adventure.text.Component; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class TimerPauseCommand extends SubCommand { + + private final Challenges plugin; + + public TimerPauseCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { + if (plugin.getTimer().isRunning()) { + plugin.setDayLightCircle(false); + plugin.getTimer().stopTimer(); + ChatUtil.sendBrodCastMessage(Component.text("Der Timer wurde angehalten", ChatUtil.RED)); + if (plugin.getServerType() == ServerType.CHALLENGE) { + if (!Config.getBoolean("editsettings")) { + Config.setValue("editsettings", true, false); + plugin.getLogger().info("Diese Challenge ist kein SpeedRun mehr da der Timer bearbeitet wurde."); + if (plugin.getCurrentEditor() != null) { + ChatUtil.sendWarningMessage(plugin.getCurrentEditor(), "Diese Challenge wird nicht mehr als Speed Run gezählt, da du etwas am Timer geändert hast."); + } + } + } + } else { + ChatUtil.sendWarningMessage(sender, "Der Timer ist bereits pausiert!"); + } + } else if (plugin.getCurrentEditor() != null) { + ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); + return true; + } else { + ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); + ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); + return true; + } + return true; + } + +} \ No newline at end of file diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/timer/TimerResetCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/timer/TimerResetCommand.java new file mode 100644 index 0000000..8539649 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/timer/TimerResetCommand.java @@ -0,0 +1,51 @@ +package de.fanta.challenge.commands.timer; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.ServerType; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import net.kyori.adventure.text.Component; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class TimerResetCommand extends SubCommand { + + private final Challenges plugin; + + public TimerResetCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { + plugin.getTimer().setTime(0); + ChatUtil.sendBrodCastMessage(Component.text("Der Timer wurde zurückgesetzt!", ChatUtil.GREEN)); + if (plugin.getServerType() == ServerType.CHALLENGE) { + if (!Config.getBoolean("editsettings")) { + Config.setValue("editsettings", true, false); + plugin.getLogger().info("Diese Challenge ist kein SpeedRun mehr da der Timer bearbeitet wurde."); + if (plugin.getCurrentEditor() != null) { + ChatUtil.sendWarningMessage(plugin.getCurrentEditor(), "Diese Challenge wird nicht mehr als Speed Run gezählt, da du etwas am Timer geändert hast."); + } + } + } + } else if (plugin.getCurrentEditor() != null) { + ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); + return true; + } else { + ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); + ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); + return true; + } + return true; + } + +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/timer/TimerReverseCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/timer/TimerReverseCommand.java new file mode 100644 index 0000000..65850d4 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/timer/TimerReverseCommand.java @@ -0,0 +1,55 @@ +package de.fanta.challenge.commands.timer; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.ServerType; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import net.kyori.adventure.text.Component; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class TimerReverseCommand extends SubCommand { + + private final Challenges plugin; + + public TimerReverseCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { + plugin.getTimer().reverseTimer(); + if (plugin.getTimer().isReverse()) { + ChatUtil.sendBrodCastMessage(Component.text("Der Timer läuft nun rückwärts!", ChatUtil.BLUE)); + } else { + ChatUtil.sendBrodCastMessage(Component.text("Der Timer läuft nun vorwärts!", ChatUtil.GREEN)); + } + if (plugin.getServerType() == ServerType.CHALLENGE) { + if (!Config.getBoolean("editsettings")) { + Config.setValue("editsettings", true, false); + plugin.getLogger().info("Diese Challenge ist kein SpeedRun mehr da der Timer bearbeitet wurde."); + if (plugin.getCurrentEditor() != null) { + ChatUtil.sendWarningMessage(plugin.getCurrentEditor(), "Diese Challenge wird nicht mehr als Speed Run gezählt, da du etwas am Timer geändert hast."); + } + } + } + } else if (plugin.getCurrentEditor() != null) { + ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); + return true; + } else { + ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); + ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); + return true; + } + return true; + } + +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/timer/TimerSetCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/timer/TimerSetCommand.java new file mode 100644 index 0000000..8b49a56 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/timer/TimerSetCommand.java @@ -0,0 +1,58 @@ +package de.fanta.challenge.commands.timer; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.ServerType; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import net.kyori.adventure.text.Component; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class TimerSetCommand extends SubCommand { + + private final Challenges plugin; + + public TimerSetCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + if (args.hasNext()) { + int time = args.getNext(-1); + if (time >= 0) { + if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { + plugin.getTimer().setTime(time); + ChatUtil.sendBrodCastMessage(Component.text("Der Timer wurde auf ", ChatUtil.GREEN).append(plugin.getTimer().formatTime(ChatUtil.GREEN)).append(Component.text(" gesetzt!", ChatUtil.GREEN))); + if (plugin.getServerType() == ServerType.CHALLENGE) { + if (!Config.getBoolean("editsettings")) { + Config.setValue("editsettings", true, false); + plugin.getLogger().info("Diese Challenge ist kein SpeedRun mehr da der Timer bearbeitet wurde."); + if (plugin.getCurrentEditor() != null) { + ChatUtil.sendWarningMessage(plugin.getCurrentEditor(), "Diese Challenge wird nicht mehr als Speed Run gezählt, da du etwas am Timer geändert hast."); + } + } + } + } else if (plugin.getCurrentEditor() != null) { + ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); + return true; + } else { + ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); + ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); + return true; + } + } else { + ChatUtil.sendErrorMessage(sender, "Zeit muss eine Zahl größer als 0 sein!"); + } + return true; + } + return false; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/timer/TimerStartCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/timer/TimerStartCommand.java new file mode 100644 index 0000000..289f6de --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/timer/TimerStartCommand.java @@ -0,0 +1,52 @@ +package de.fanta.challenge.commands.timer; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import net.kyori.adventure.text.Component; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class TimerStartCommand extends SubCommand { + + private final Challenges plugin; + + public TimerStartCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { + if (!plugin.getTimer().isRunning()) { + plugin.setDayLightCircle(true); + plugin.getTimer().startTimer(); + if (!Config.getBoolean("editsettings")) { + if (!plugin.isCubesideStatisticsInstalled()) { + return true; + } + plugin.getStatistics().addSpeedRunPlayed(); + } + ChatUtil.sendBrodCastMessage(Component.text("Der Timer wird fortgesetzt!", ChatUtil.GREEN)); + } else { + ChatUtil.sendWarningMessage(sender, "Der Timer läuft bereits!"); + } + } else if (plugin.getCurrentEditor() != null) { + ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); + return true; + } else { + ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); + ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); + return true; + } + return true; + } + +} diff --git a/Challenge/src/main/java/de/fanta/challenge/events/ChallengeEventStatusChangedEvent.java b/Challenge/src/main/java/de/fanta/challenge/events/ChallengeEventStatusChangedEvent.java new file mode 100644 index 0000000..f5dabbf --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/events/ChallengeEventStatusChangedEvent.java @@ -0,0 +1,27 @@ +package de.fanta.challenge.events; + +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class ChallengeEventStatusChangedEvent extends Event { + + private static final HandlerList handlers = new HandlerList(); + private final boolean running; + + public ChallengeEventStatusChangedEvent(boolean event) { + this.running = event; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + public boolean isRunning() { + return running; + } + + @Override + public HandlerList getHandlers() { + return handlers; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/events/EventStatusChangedEvent.java b/Challenge/src/main/java/de/fanta/challenge/events/EventStatusChangedEvent.java new file mode 100644 index 0000000..fa93109 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/events/EventStatusChangedEvent.java @@ -0,0 +1,27 @@ +package de.fanta.challenge.events; + +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class EventStatusChangedEvent extends Event { + + private static final HandlerList handlers = new HandlerList(); + private final boolean event; + + public EventStatusChangedEvent(boolean event) { + this.event = event; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + public boolean isEvent() { + return event; + } + + @Override + public HandlerList getHandlers() { + return handlers; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/events/PlayerCountChangedEvent.java b/Challenge/src/main/java/de/fanta/challenge/events/PlayerCountChangedEvent.java new file mode 100644 index 0000000..0a333c8 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/events/PlayerCountChangedEvent.java @@ -0,0 +1,28 @@ +package de.fanta.challenge.events; + +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class PlayerCountChangedEvent extends Event { + + private static final HandlerList handlers = new HandlerList(); + + private final int count; + + public PlayerCountChangedEvent(int count) { + this.count = count; + } + + public int getCount() { + return count; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + @Override + public HandlerList getHandlers() { + return handlers; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/events/ServerStatusChangedEvent.java b/Challenge/src/main/java/de/fanta/challenge/events/ServerStatusChangedEvent.java new file mode 100644 index 0000000..7368c90 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/events/ServerStatusChangedEvent.java @@ -0,0 +1,28 @@ +package de.fanta.challenge.events; + +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class ServerStatusChangedEvent extends Event { + + private static final HandlerList handlers = new HandlerList(); + + private final boolean online; + + public ServerStatusChangedEvent(boolean online) { + this.online = online; + } + + public boolean isOnline() { + return online; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + @Override + public HandlerList getHandlers() { + return handlers; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/events/TimerChangedEvent.java b/Challenge/src/main/java/de/fanta/challenge/events/TimerChangedEvent.java new file mode 100644 index 0000000..4058550 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/events/TimerChangedEvent.java @@ -0,0 +1,27 @@ +package de.fanta.challenge.events; + +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class TimerChangedEvent extends Event { + + private static final HandlerList handlers = new HandlerList(); + private final boolean running; + + public TimerChangedEvent(boolean running) { + this.running = running; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + public boolean isRunning() { + return running; + } + + @Override + public HandlerList getHandlers() { + return handlers; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/gravestones/GravestoneListener.java b/Challenge/src/main/java/de/fanta/challenge/gravestones/GravestoneListener.java new file mode 100644 index 0000000..7704a3a --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/gravestones/GravestoneListener.java @@ -0,0 +1,134 @@ +package de.fanta.challenge.gravestones; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import org.bukkit.GameRule; +import org.bukkit.NamespacedKey; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.PlayerArmorStandManipulateEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.persistence.PersistentDataContainer; +import org.bukkit.persistence.PersistentDataType; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.logging.Level; + +public class GravestoneListener implements Listener { + + private static final Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onDeath(PlayerDeathEvent e) { + if (!Config.getBoolean("gravestone")) { + return; + } + + Player p = e.getEntity(); + World world = p.getLocation().getWorld(); + + if (world != null && world.getGameRuleValue(GameRule.KEEP_INVENTORY) == true) { + return; + } + + if (p.getLocation().getBlockY() > p.getLocation().getWorld().getMinHeight() - 3) { + if (!e.getDrops().isEmpty()) { + e.getDrops().clear(); + Block block = p.getLocation().subtract(0, 1, 0).getBlock(); + String inventoryString = GravestoneUtils.createInventoryString(p.getInventory().getContents()); + byte[] inventoryByte = GravestoneUtils.compressString(inventoryString); + GravestoneUtils.spawnAtBlock(block, p, inventoryByte); + } + } + } + + @EventHandler + public void onEquip(PlayerArmorStandManipulateEvent e) { + ArmorStand stand = e.getRightClicked(); + PersistentDataContainer container = stand.getPersistentDataContainer(); + if (container.get(GravestoneUtils.getUUIDKey(), PersistentDataType.STRING) != null) { + e.setCancelled(true); + } + } + + @EventHandler + public void onEntityDamage(EntityDamageEvent e) { + if (e.getEntity() instanceof ArmorStand stand) { + PersistentDataContainer container = stand.getPersistentDataContainer(); + if (container.get(GravestoneUtils.getUUIDKey(), PersistentDataType.STRING) != null) { + e.setCancelled(true); + } + } + } + + @EventHandler + public void onGravestoneAttack(EntityDamageByEntityEvent e) { + if (!(e.getDamager() instanceof Player player)) { + return; + } + + if (!(e.getEntity() instanceof ArmorStand armorStand)) { + return; + } + + PersistentDataContainer container = armorStand.getPersistentDataContainer(); + NamespacedKey UUIDKey = GravestoneUtils.getUUIDKey(); + if (container.get(GravestoneUtils.getUUIDKey(), PersistentDataType.STRING) != null) { + if (!Config.getBoolean("gravestone")) { + ChatUtil.sendWarningMessage(player, "Grabschsteine können nur gegrabscht werden wenn sie Aktiv sind."); + return; + } + String playerUUID = container.get(UUIDKey, PersistentDataType.STRING); + if (playerUUID.equals(player.getUniqueId().toString())) { + ItemStack[] stacks = new ItemStack[0]; + if (container.get(GravestoneUtils.getInventoryBase64Key(), PersistentDataType.BYTE_ARRAY) != null) { + byte[] inventorybyte = container.get(GravestoneUtils.getInventoryBase64Key(), PersistentDataType.BYTE_ARRAY); + String yamlstring = GravestoneUtils.decompressString(inventorybyte); + stacks = GravestoneUtils.createItemArrayFromString(yamlstring); + } else if (container.get(GravestoneUtils.getInventoryKey(), PersistentDataType.BYTE_ARRAY) != null) { + try { + byte[] inventorybyte = container.get(GravestoneUtils.getInventoryKey(), PersistentDataType.BYTE_ARRAY); + String yamlstring = GravestoneUtils.decompressString(inventorybyte); + YamlConfiguration conf = new YamlConfiguration(); + conf.loadFromString(yamlstring); + stacks = conf.getList("inv").toArray(new ItemStack[0]); + } catch (InvalidConfigurationException ex) { + plugin.getLogger().log(Level.SEVERE, "Error while loading yaml Config", e); + } + } + + List fullinvstacklist = new ArrayList<>(); + for (int i = 0; i < stacks.length; i++) { + ItemStack stack = stacks[i]; + if (stack != null) { + if (player.getInventory().getItem(i) == null) { + player.getInventory().setItem(i, stack); + } else { + fullinvstacklist.add(stack); + } + } + } + Collection droplist = player.getInventory().addItem(fullinvstacklist.toArray(new ItemStack[0])).values(); + for (ItemStack stack : droplist) { + armorStand.getLocation().getWorld().dropItem(armorStand.getLocation().add(0, 1, 0), stack); + } + armorStand.remove(); + } else { + ChatUtil.sendWarningMessage(player, "Du kannst nur deine eigenen Grabschsteine grabschen."); + } + } + + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/gravestones/GravestoneUtils.java b/Challenge/src/main/java/de/fanta/challenge/gravestones/GravestoneUtils.java new file mode 100644 index 0000000..1e499d1 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/gravestones/GravestoneUtils.java @@ -0,0 +1,170 @@ +package de.fanta.challenge.gravestones; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.ItemStackUtil; +import de.iani.cubesideutils.bukkit.items.ItemGroups; +import net.kyori.adventure.text.Component; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.block.data.type.Slab; +import org.bukkit.block.data.type.Snow; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.SkullMeta; +import org.bukkit.persistence.PersistentDataContainer; +import org.bukkit.persistence.PersistentDataType; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.logging.Level; +import java.util.zip.Deflater; +import java.util.zip.DeflaterOutputStream; +import java.util.zip.InflaterInputStream; + +public class GravestoneUtils { + private static final NamespacedKey UUIDKey = new NamespacedKey(Challenges.getPlugin(), "uuid_gravestone"); + private static final NamespacedKey inventoryKey = new NamespacedKey(Challenges.getPlugin(), "inventory_gravestone"); + private static final NamespacedKey inventoryBase64Key = new NamespacedKey(Challenges.getPlugin(), "inventory_base64_gravestone"); + + public static byte[] compressString(String s) { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + try { + OutputStreamWriter osw = new OutputStreamWriter(new DeflaterOutputStream(baos, new Deflater(Deflater.BEST_COMPRESSION)), StandardCharsets.UTF_8); + osw.write(s); + osw.flush(); + osw.close(); + } catch (IOException e) { + throw new RuntimeException("Could not compress data", e); + } + return baos.toByteArray(); + } + + public static String decompressString(byte[] data) { + try { + InputStreamReader reader = new InputStreamReader(new InflaterInputStream(new ByteArrayInputStream(data)), StandardCharsets.UTF_8); + StringBuilder sb = new StringBuilder(); + char[] temp = new char[1024]; + while (true) { + int readBytes; + readBytes = reader.read(temp); + if (readBytes < 0) { + break; + } + sb.append(temp, 0, readBytes); + } + return sb.toString(); + } catch (IOException e) { + throw new RuntimeException("Error while decompressing inventory string", e); + } + } + + public static String createInventoryString(ItemStack[] inventory) { + YamlConfiguration conf = new YamlConfiguration(); + String[] base64Items = new String[inventory.length]; + for (int i = 0; i < inventory.length; i++) { + ItemStack stack = inventory[i]; + if (stack != null && stack.getItemMeta() != null) { + if (stack.getItemMeta().hasEnchant(Enchantment.VANISHING_CURSE)) { + base64Items[i] = null; + } else { + base64Items[i] = ItemStackUtil.getBase64StringFromItemStack(stack); + } + } + } + conf.set("inv", base64Items); + return conf.saveToString(); + } + + public static ItemStack[] createItemArrayFromString(String yamlstring) { + ItemStack[] inventory = new ItemStack[0]; + + try { + YamlConfiguration conf = new YamlConfiguration(); + conf.loadFromString(yamlstring); + List stacks = conf.getList("inv"); + if (stacks == null) { + return inventory; + } + inventory = new ItemStack[stacks.size()]; + for (int i = 0; i < stacks.size(); i++) { + String base64Item = (String) stacks.get(i); + if (base64Item != null) { + inventory[i] = ItemStackUtil.getItemStackFromBase64(base64Item); + } else { + inventory[i] = null; + } + } + } catch (InvalidConfigurationException ex) { + Challenges.getPlugin().getLogger().log(Level.SEVERE, "Error while loading yaml Config", ex); + } + return inventory; + } + + + public static void spawnAtBlock(Block block, Player player, byte[] inventoryBytes) { + World world = block.getWorld(); + double y = block.getY(); + Material type = block.getType(); + String typeName = type.name(); + double placeableY; + if (typeName.endsWith("_SLAB")) { + Slab slab = (Slab) block.getBlockData(); + placeableY = y - 0.44; + if (slab.getType() == Slab.Type.BOTTOM) { + placeableY -= 0.5; + } + } else if (typeName.endsWith("_STAIRS") || type.isOccluding() || type == Material.GLASS || ItemGroups.isStainedGlass(type) || type == Material.ICE || type == Material.PACKED_ICE || type == Material.BLUE_ICE || ItemGroups.isLeaves(type)) { + placeableY = y - 0.44; + } else if (ItemGroups.isCarpet(type)) { + placeableY = y - 1.44 + (1 / 16.0); + } else if (type == Material.SNOW) { + Snow snow = (Snow) block.getBlockData(); + int layers = snow.getLayers(); + placeableY = y - 1.44 + (layers / 8.0); + } else { + placeableY = y - 0.44; + } + if (!Double.isNaN(placeableY)) { + world.spawn(new Location(world, block.getX() + 0.5, placeableY, block.getZ() + 0.5, player.getLocation().getYaw(), 0), ArmorStand.class, t -> { + t.setVisible(false); + t.setGravity(false); + t.customName(Component.text("R.I.P. ", ChatUtil.RED).append(player.name().color(ChatUtil.BLUE))); + t.setCustomNameVisible(true); + ItemStack itemStack = new ItemStack(Material.PLAYER_HEAD, 1); + SkullMeta meta = (SkullMeta) itemStack.getItemMeta(); + meta.setPlayerProfile(player.getPlayerProfile()); + itemStack.setItemMeta(meta); + t.getEquipment().setHelmet(itemStack); + PersistentDataContainer container = t.getPersistentDataContainer(); + container.set(UUIDKey, PersistentDataType.STRING, player.getUniqueId().toString()); + container.set(inventoryBase64Key, PersistentDataType.BYTE_ARRAY, inventoryBytes); + }); + ChatUtil.sendMessage(player, Component.text("Dein Grabschstein steht bei:", ChatUtil.GREEN).append(Component.text(" (" + player.getLocation().getBlockX() + "/" + player.getLocation().getBlockY() + "/" + player.getLocation().getBlockZ() + ")", ChatUtil.ORANGE))); + } + } + + public static NamespacedKey getUUIDKey() { + return UUIDKey; + } + + public static NamespacedKey getInventoryKey() { + return inventoryKey; + } + + public static NamespacedKey getInventoryBase64Key() { + return inventoryBase64Key; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/guis/BackpackGui.java b/Challenge/src/main/java/de/fanta/challenge/guis/BackpackGui.java new file mode 100644 index 0000000..f381ffe --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/guis/BackpackGui.java @@ -0,0 +1,116 @@ +package de.fanta.challenge.guis; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.configuration.MemorySection; +import org.bukkit.entity.HumanEntity; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import java.io.IOException; +import java.util.Map; +import java.util.logging.Level; + +public class BackpackGui { + + public static final Component TITLE = Challenges.getPlugin().getGuiPrefix().append(Component.text(" >> Backpack")); + private Inventory backpack; + + public BackpackGui(int size) { + this.backpack = Bukkit.createInventory(null, size, TITLE); + } + + public BackpackGui(int size, Component title) { + this.backpack = Bukkit.createInventory(null, size, title); + } + + public void resize(int newSize) { + if (newSize == backpack.getSize()) { + return; + } + + Inventory newBackpack = Bukkit.createInventory(backpack.getHolder(), newSize, TITLE); + if (newSize > backpack.getSize()) { + for (int i = 0; i < backpack.getSize(); i++) { + newBackpack.setItem(i, backpack.getItem(i)); + } + } else if (newSize < backpack.getSize()) { + for (int i = 0; i < newSize; i++) { + newBackpack.setItem(i, backpack.getItem(i)); + } + + for (int i = newSize; i < backpack.getSize(); i++) { + ItemStack item = backpack.getItem(i); + if (item != null && item.getType() != Material.AIR) { + if (!newBackpack.addItem(item).isEmpty()) { + ChatUtil.sendBrodCastMessage(Component.text("Backpack kann nicht verkleinert werden. Zu wenig Platz!", ChatUtil.RED)); + return; + } + } + } + } + for (HumanEntity player : backpack.getViewers()) { + player.closeInventory(); + } + this.backpack = newBackpack; + } + + public void open(Player player) { + player.openInventory(this.backpack); + } + + public int getSize() { + return this.backpack.getSize(); + } + + public void clearConfig() { + for (String section : Challenges.getPlugin().getBackpackConfig().getKeys(false)) { + if (section != null) { + Challenges.getPlugin().getBackpackConfig().set(section, null); + } + try { + Challenges.getPlugin().getBackpackConfig().save(Challenges.getPlugin().getBackpackConfigFile()); + } catch (IOException e) { + Challenges.getPlugin().getLogger().log(Level.SEVERE, "Could not save backpack config", e); + } + } + } + + public void saveInventoryToConfig() { + clearConfig(); + for (int slot = 0; slot < backpack.getSize(); slot++) { + ItemStack stack = backpack.getItem(slot); + if (stack != null && stack.getType() != Material.AIR) { + Challenges.getPlugin().getBackpackConfig().set(String.valueOf(slot), stack.serialize()); + } + } + try { + Challenges.getPlugin().getBackpackConfig().save(Challenges.getPlugin().getBackpackConfigFile()); + } catch (IOException e) { + Challenges.getPlugin().getLogger().log(Level.SEVERE, "Could not save backpack config", e); + } + } + + public void loadInventoryFromConfig() { + for (Map.Entry stringObjectEntry : Challenges.getPlugin().getBackpackConfig().getValues(false).entrySet()) { + int slot; + try { + slot = Integer.parseInt(stringObjectEntry.getKey()); + } catch (NumberFormatException e) { + Challenges.getPlugin().getLogger().log(Level.SEVERE, "Fehler! Slot: " + stringObjectEntry.getKey(), e); + continue; + } + if (slot >= backpack.getSize()) { + Challenges.getPlugin().getLogger().log(Level.SEVERE, "Slot " + slot + " befindet sich außerhalb des Inventars!"); + continue; + } + MemorySection memorySection = (MemorySection) stringObjectEntry.getValue(); + ItemStack deserialized = ItemStack.deserialize(memorySection.getValues(false)); + backpack.setItem(slot, deserialized); + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/guis/CheckItemsGUI.java b/Challenge/src/main/java/de/fanta/challenge/guis/CheckItemsGUI.java new file mode 100644 index 0000000..d474e1b --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/guis/CheckItemsGUI.java @@ -0,0 +1,98 @@ +package de.fanta.challenge.guis; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.ItemUtils; +import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.ItemStack; + +import java.io.IOException; +import java.util.List; +import java.util.logging.Level; + +public class CheckItemsGUI extends AbstractWindow { + private static final Challenges plugin = Challenges.getPlugin(); + + private static final int JA_INDEX = 0; + private static final int ITEM_INDEX = 2; + private static final int NEIN_INDEX = 4; + + public static final int INVENTORY_SIZE = 5; + + public CheckItemsGUI(Player player) { + super(player, Bukkit.createInventory(player, InventoryType.HOPPER, plugin.getGuiPrefix().append(Component.text(" >> geht das?? (" + plugin.getMaterials().size() + ")")))); + } + + + @Override + protected void rebuildInventory() { + if (plugin.getMaterials().isEmpty()) { + getPlayer().closeInventory(); + ChatUtil.sendNormalMessage(getPlayer(), "Lol fertig :>"); + return; + } + for (int i = 0; i < INVENTORY_SIZE; i++) { + ItemStack item; + ItemStack stack = new ItemStack(plugin.getMaterials().getFirst()); + switch (i) { + case JA_INDEX -> + item = ItemUtils.createGuiItem(Material.LIME_CONCRETE, Component.text("Ja", ChatUtil.GREEN), true); + case ITEM_INDEX -> item = stack; + case NEIN_INDEX -> + item = ItemUtils.createGuiItem(Material.RED_CONCRETE, Component.text("Nein", ChatUtil.RED), true); + default -> item = ItemUtils.EMPTY_ICON; + } + this.getInventory().setItem(i, item); + } + } + + @Override + public void onItemClicked(InventoryClickEvent event) { + Player player = getPlayer(); + if (!mayAffectThisInventory(event)) { + return; + } + + event.setCancelled(true); + if (!getInventory().equals(event.getClickedInventory())) { + return; + } + + int slot = event.getSlot(); + switch (slot) { + case JA_INDEX -> { + plugin.getMaterials().remove(getInventory().getItem(ITEM_INDEX).getType()); + player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 2.0F); + } + case NEIN_INDEX -> { + Material material = getInventory().getItem(ITEM_INDEX).getType(); + addItem(material); + plugin.getMaterials().remove(material); + player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_BASS, 1.0F, 2.0F); + } + default -> { + } + } + rebuildInventory(); + } + + public static void addItem(Material material) { + FileConfiguration config = Challenges.getPlugin().getItemConfig(); + List list = config.getStringList("items"); + list.add(material.name()); + config.set("items", list); + try { + Challenges.getPlugin().ItemConfig.save(Challenges.getPlugin().ItemConfigFile); + } catch (IOException e) { + plugin.getLogger().log(Level.SEVERE, "Error while saving item Config", e); + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/guis/ResetGui.java b/Challenge/src/main/java/de/fanta/challenge/guis/ResetGui.java new file mode 100644 index 0000000..25ec250 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/guis/ResetGui.java @@ -0,0 +1,64 @@ +package de.fanta.challenge.guis; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.ServerType; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.fanta.challenge.utils.ItemUtils; +import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.ItemStack; + +public class ResetGui extends AbstractWindow { + + private static final Challenges plugin = Challenges.getPlugin(); + + private static final int RESET_INDEX = 2; + + public static final int INVENTORY_SIZE = 5; + + public ResetGui(Player player) { + super(player, Bukkit.createInventory(player, InventoryType.HOPPER, plugin.getGuiPrefix().append(Component.text(" >> Reset")))); + } + + @Override + public void onItemClicked(InventoryClickEvent event) { + if (!mayAffectThisInventory(event)) { + return; + } + + event.setCancelled(true); + if (!getInventory().equals(event.getClickedInventory())) { + return; + } + + int slot = event.getSlot(); + if (slot == RESET_INDEX) { + plugin.getScheduler().run(() -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "reset confirm")); + } + } + + @Override + protected void rebuildInventory() { + for (int i = 0; i < INVENTORY_SIZE; i++) { + ItemStack item; + if (i == RESET_INDEX) { + if (plugin.getServerType() == ServerType.CHALLENGE && !Config.getBoolean("editsettings")) { + item = ItemUtils.createGuiItem(Material.REPEATING_COMMAND_BLOCK, Component.text("Server resetten", ChatUtil.RED), Component.text("Wenn du denn Server resettest,", ChatUtil.RED), Component.text("wird der Server komplett zurückgesetzt.", ChatUtil.RED), Component.empty(), Component.text("Die Map wird als AutoSave gespeichert.", ChatUtil.GREEN), Component.text("und kann in der Lobby wieder geladen werden.", ChatUtil.GREEN), Component.empty(), Component.text("Die Challenge zählt nicht mehr als SpeedRun", ChatUtil.ORANGE)); + } else { + item = ItemUtils.createGuiItem(Material.REPEATING_COMMAND_BLOCK, Component.text("Server resetten", ChatUtil.RED), Component.text("Wenn du denn Server resettest,", ChatUtil.RED), Component.text("wird der Server komplett zurückgesetzt.", ChatUtil.RED), Component.empty(), Component.text("Die Map wird als AutoSave gespeichert.", ChatUtil.GREEN), Component.text("und kann in der Lobby wieder geladen werden.", ChatUtil.GREEN)); + } + + } else { + item = ItemUtils.EMPTY_ICON; + } + this.getInventory().setItem(i, item); + } + } +} + diff --git a/Challenge/src/main/java/de/fanta/challenge/guis/TeleportGUI.java b/Challenge/src/main/java/de/fanta/challenge/guis/TeleportGUI.java new file mode 100644 index 0000000..49d10fb --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/guis/TeleportGUI.java @@ -0,0 +1,101 @@ +package de.fanta.challenge.guis; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.ItemUtils; +import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; +import de.iani.cubesideutils.bukkit.items.CustomHeads; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.SkullMeta; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +public class TeleportGUI extends AbstractWindow { + private static final Challenges plugin = Challenges.getPlugin(); + private static final Map playerPerSlot = new HashMap<>(); + private static final int INVENTORY_SIZE = 9 * (plugin.getVanish().getPlayerListWithoutVanishPlayers().size() / 7 + ((plugin.getVanish().getPlayerListWithoutVanishPlayers().size() % 7 > 0) ? 1 : 0)) + 18; + private static final int CLOSE_IDEX = INVENTORY_SIZE - 9; + + public TeleportGUI(Player player) { + super(player, Bukkit.createInventory(player, INVENTORY_SIZE, plugin.getGuiPrefix().append(Component.text(" >> Event Settings")))); + } + + @Override + protected void rebuildInventory() { + int row = 0; + int cat = 0; + + if (plugin.getVanish().getPlayerListWithoutVanishPlayers().isEmpty()) { + ChatUtil.sendErrorMessage(getPlayer(), "Keine Spieler Online"); + return; + } + for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + int slot = row * 9 + cat + 10; + + ArrayList metalore = new ArrayList<>(); + + ItemStack stack = new ItemStack(Material.PLAYER_HEAD); + SkullMeta skullMeta = (SkullMeta) stack.getItemMeta(); + skullMeta.setPlayerProfile(pp.getPlayerProfile()); + skullMeta.displayName(pp.name().color(ChatUtil.BLUE)); + metalore.add(Component.text("Linksklick: " + getPlayer().getName() + " -> " + pp.getName(), ChatUtil.GREEN)); + metalore.add(Component.text("Rechtsklick: " + pp.getName() + " -> " + getPlayer().getName(), ChatUtil.GREEN)); + skullMeta.lore(metalore); + stack.setItemMeta(skullMeta); + getInventory().setItem(slot, stack); + playerPerSlot.put(slot, pp); + if (cat < 6) { + cat++; + continue; + } + row++; + cat = 0; + } + + getInventory().setItem(CLOSE_IDEX, CustomHeads.RAINBOW_X.getHead(Component.text("Menü verlassen", ChatUtil.RED))); + + for (int i = 0; i < getInventory().getSize(); i++) { + if (getInventory().getItem(i) == null || getInventory().getItem(i).getType() == Material.AIR) { + getInventory().setItem(i, ItemUtils.EMPTY_ICON); + } + } + } + + @Override + public void onItemClicked(InventoryClickEvent event) { + Player player = getPlayer(); + if (!mayAffectThisInventory(event)) { + return; + } + + event.setCancelled(true); + if (!getInventory().equals(event.getClickedInventory())) { + return; + } + int slot = event.getSlot(); + Player pp = playerPerSlot.get(slot); + if (pp != null && pp.isOnline()) { + if (event.isLeftClick()) { + player.teleportAsync(pp.getLocation()); + ChatUtil.sendNormalMessage(player, "Du wurdest zu " + pp.getName() + " teleportiert!"); + } else if (event.isRightClick()) { + pp.teleportAsync(player.getLocation()); + ChatUtil.sendNormalMessage(player, pp.getName() + " wurde zu dir teleportiert!"); + } + player.closeInventory(); + } + + + if (slot == CLOSE_IDEX) { + getPlayer().closeInventory(); + } + } +} + diff --git a/Challenge/src/main/java/de/fanta/challenge/guis/TimerGui.java b/Challenge/src/main/java/de/fanta/challenge/guis/TimerGui.java new file mode 100644 index 0000000..68df9e4 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/guis/TimerGui.java @@ -0,0 +1,212 @@ +package de.fanta.challenge.guis; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.ServerType; +import de.fanta.challenge.Timer; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.fanta.challenge.utils.ItemUtils; +import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; +import de.iani.cubesideutils.bukkit.items.CustomHeads; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.Style; +import net.kyori.adventure.text.format.TextDecoration; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; + +public class TimerGui extends AbstractWindow { + + private static final Challenges plugin = Challenges.getPlugin(); + + public static final int INVENTORY_SIZE = 27; + + private static final int TIMER_TOGGLE_INDEX = 0; + private static final int CLOSE_INDEX = 8; + + private static final int TIME_DAYS_INDEX = 10; + private static final int TIME_HOURS_INDEX = 11; + private static final int TIME_MINUTES_INDEX = 12; + private static final int TIME_SECONDS_INDEX = 13; + + + private static final int DIRECTION_INDEX = 15; + private static final int SHOW_TIMER_INDEX = 16; + + public TimerGui(Player player) { + super(player, Bukkit.createInventory(player, INVENTORY_SIZE, plugin.getGuiPrefix().append(Component.text(" >> Timer")))); + } + + @Override + public void onItemClicked(InventoryClickEvent event) { + Player player = getPlayer(); + if (!mayAffectThisInventory(event)) { + return; + } + + event.setCancelled(true); + if (!getInventory().equals(event.getClickedInventory())) { + return; + } + + int slot = event.getSlot(); + switch (slot) { + case DIRECTION_INDEX -> { + if (plugin.getTimer().isReverse()) { + plugin.getTimer().reverseTimer(); + ChatUtil.sendTitleToAll(Component.text("Timer"), Component.text("Der Timer läuft jetzt vorwärts.", ChatUtil.GREEN)); + } else { + plugin.getTimer().reverseTimer(); + ChatUtil.sendTitleToAll(Component.text("Timer"), Component.text("Der Timer läuft jetzt rückwärts.", ChatUtil.BLUE)); + } + if (plugin.getServerType() == ServerType.CHALLENGE) { + if (!Config.getBoolean("editsettings")) { + Config.setValue("editsettings", true, false); + plugin.getLogger().info("Diese Challenge ist kein SpeedRun mehr da der Timer bearbeitet wurde."); + if (plugin.getCurrentEditor() != null) { + ChatUtil.sendWarningMessage(plugin.getCurrentEditor(), "Diese Challenge wird nicht mehr als Speed Run gezählt, da du etwas am Timer geändert hast."); + } + } + } + rebuildInventory(); + } + case SHOW_TIMER_INDEX -> { + if (Config.getBoolean("showtimer")) { + Config.setValue("showtimer", false, false); + ChatUtil.sendTitleToAll(Component.text("Timer"), Component.text("Der Timer wird jetzt nicht mehr angezeigt!", ChatUtil.RED)); + } else { + Config.setValue("showtimer", true, false); + ChatUtil.sendTitleToAll(Component.text("Timer"), Component.text("Der Timer wird jetzt wieder angezeigt!", ChatUtil.GREEN)); + } + rebuildInventory(); + } + case TIMER_TOGGLE_INDEX -> { + if (plugin.getTimer().isRunning()) { + plugin.getTimer().stopTimer(); + plugin.setDayLightCircle(false); + + if (!Config.getBoolean("editsettings")) { + Config.setValue("editsettings", true, false); + plugin.getLogger().info("Diese Challenge ist kein SpeedRun mehr da der Timer bearbeitet wurde."); + if (plugin.getCurrentEditor() != null) { + ChatUtil.sendWarningMessage(plugin.getCurrentEditor(), "Diese Challenge wird nicht mehr als Speed Run gezählt, da du etwas am Timer geändert hast."); + } + } + ChatUtil.sendTitleToAll(Component.text("Timer"), Component.text("Der Timer wurde pausiert.", ChatUtil.RED), 10, 60, 10, true); + } else { + plugin.getTimer().startTimer(); + if (!Config.getBoolean("editsettings")) { + if (!plugin.isCubesideStatisticsInstalled()) { + return; + } + plugin.getStatistics().addSpeedRunPlayed(); + } + plugin.setDayLightCircle(true); + ChatUtil.sendTitleToAll(Component.text("Timer"), Component.text("Der Timer wurde gestartet.", ChatUtil.GREEN), 10, 60, 10, true); + } + player.closeInventory(); + } + case TIME_DAYS_INDEX -> { + Timer timer = plugin.getTimer(); + if (event.isLeftClick()) { + timer.addTime(!event.isShiftClick() ? 60 * 60 * 24 : 60 * 60 * 24 * 10); + } + + if (event.isRightClick()) { + timer.removeTime(!event.isShiftClick() ? 60 * 60 * 24 : 60 * 60 * 24 * 10); + } + rebuildInventory(); + } + + case TIME_HOURS_INDEX -> { + Timer timer = plugin.getTimer(); + if (event.isLeftClick()) { + timer.addTime(!event.isShiftClick() ? 60 * 60 : 60 * 60 * 10); + } + + if (event.isRightClick()) { + timer.removeTime(!event.isShiftClick() ? 60 * 60 : 60 * 60 * 10); + } + rebuildInventory(); + } + + case TIME_MINUTES_INDEX -> { + Timer timer = plugin.getTimer(); + if (event.isLeftClick()) { + timer.addTime(!event.isShiftClick() ? 60 : 60 * 10); + } + + if (event.isRightClick()) { + timer.removeTime(!event.isShiftClick() ? 60 : 60 * 10); + } + rebuildInventory(); + } + + case TIME_SECONDS_INDEX -> { + Timer timer = plugin.getTimer(); + if (event.isLeftClick()) { + timer.addTime(!event.isShiftClick() ? 1 : 10); + } + + if (event.isRightClick()) { + timer.removeTime(!event.isShiftClick() ? 1 : 10); + } + rebuildInventory(); + } + default -> { + } + } + + if (slot == CLOSE_INDEX) { + player.closeInventory(); + } + } + + @Override + protected void rebuildInventory() { + for (int i = 0; i < INVENTORY_SIZE; i++) { + ItemStack item; + switch (i) { + case DIRECTION_INDEX -> { + if (plugin.getTimer().isReverse()) { + item = ItemUtils.createGuiItem(Material.MAGENTA_GLAZED_TERRACOTTA, Component.text("Timer Richtung - rückwärts", ChatUtil.BLUE)); + } else { + item = ItemUtils.createGuiItem(Material.MAGENTA_GLAZED_TERRACOTTA, Component.text("Timer Richtung - vorwärts", ChatUtil.GREEN)); + } + } + case SHOW_TIMER_INDEX -> { + if (Config.getBoolean("showtimer")) { + item = ItemUtils.createGuiItem(Material.OBSERVER, Component.text("Timer wird angezeigt!", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.OBSERVER, Component.text("Timer wird nicht angezeigt!", ChatUtil.RED), false); + } + } + case TIMER_TOGGLE_INDEX -> { + if (plugin.getTimer().isRunning()) { + item = ItemUtils.createGuiItem(Material.CLOCK, Component.text("Timer gestartet", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.CLOCK, Component.text("Timer pausiert", ChatUtil.RED)); + } + } + case TIME_DAYS_INDEX -> + item = ItemUtils.createGuiItem(Material.GOLD_BLOCK, Component.text("Tage", ChatUtil.GREEN), Component.text(">> ", ChatUtil.ORANGE).append(plugin.getTimer().formatTime(ChatUtil.BLUE)), Component.empty(), Component.text("+1 Tag", ChatUtil.GREEN).append(Component.text(" ‣ Links-Klick", ChatUtil.BLUE)), Component.text("+10 Tage", ChatUtil.GREEN).append(Component.text(" ‣ Shift-Links-Klick", ChatUtil.BLUE)), Component.text(" ", Style.style(ChatUtil.BLUE, TextDecoration.STRIKETHROUGH)), Component.text("-1 Tag", ChatUtil.GREEN).append(Component.text(" ‣ Links-Klick", ChatUtil.BLUE)), Component.text("-10 Tage", ChatUtil.GREEN).append(Component.text(" ‣ Shift-Links-Klick", ChatUtil.BLUE))); + case TIME_HOURS_INDEX -> + item = ItemUtils.createGuiItem(Material.GOLD_INGOT, Component.text("Stunden", ChatUtil.GREEN), Component.text(">> ", ChatUtil.ORANGE).append(plugin.getTimer().formatTime(ChatUtil.BLUE)), Component.empty(), Component.text("+1 Stunde", ChatUtil.GREEN).append(Component.text(" ‣ Links-Klick", ChatUtil.BLUE)), Component.text("+10 Stunden", ChatUtil.GREEN).append(Component.text(" ‣ Shift-Links-Klick", ChatUtil.BLUE)), Component.text(" ", Style.style(ChatUtil.BLUE, TextDecoration.STRIKETHROUGH)), Component.text("-1 Stunde", ChatUtil.GREEN).append(Component.text(" ‣ Links-Klick", ChatUtil.BLUE)), Component.text("-10 Stunden", ChatUtil.GREEN).append(Component.text(" ‣ Shift-Links-Klick", ChatUtil.BLUE))); + case TIME_MINUTES_INDEX -> { + try { + item = ItemUtils.createGuiItem(Material.RAW_GOLD, Component.text("Minuten", ChatUtil.GREEN), Component.text(">> ", ChatUtil.ORANGE).append(plugin.getTimer().formatTime(ChatUtil.BLUE)), Component.empty(), Component.text("+1 Minute", ChatUtil.GREEN).append(Component.text(" ‣ Links-Klick", ChatUtil.BLUE)), Component.text("+10 Minuten", ChatUtil.GREEN).append(Component.text(" ‣ Shift-Links-Klick", ChatUtil.BLUE)), Component.text(" ", Style.style(ChatUtil.BLUE, TextDecoration.STRIKETHROUGH)), Component.text("-1 Minute", ChatUtil.GREEN).append(Component.text(" ‣ Links-Klick", ChatUtil.BLUE)), Component.text("-10 Minuten", ChatUtil.GREEN).append(Component.text(" ‣ Shift-Links-Klick", ChatUtil.BLUE))); + } catch (NoSuchFieldError ex) { + item = ItemUtils.createGuiItem(Material.DANDELION, Component.text("Minuten", ChatUtil.GREEN), Component.text(">> ", ChatUtil.ORANGE).append(plugin.getTimer().formatTime(ChatUtil.BLUE)), Component.empty(), Component.text("+1 Minute", ChatUtil.GREEN).append(Component.text(" ‣ Links-Klick", ChatUtil.BLUE)), Component.text("+10 Minuten", ChatUtil.GREEN).append(Component.text(" ‣ Shift-Links-Klick", ChatUtil.BLUE)), Component.text(" ", Style.style(ChatUtil.BLUE, TextDecoration.STRIKETHROUGH)), Component.text("-1 Minute", ChatUtil.GREEN).append(Component.text(" ‣ Links-Klick", ChatUtil.BLUE)), Component.text("-10 Minuten", ChatUtil.GREEN).append(Component.text(" ‣ Shift-Links-Klick", ChatUtil.BLUE))); + } + } + case TIME_SECONDS_INDEX -> + item = ItemUtils.createGuiItem(Material.GOLD_NUGGET, Component.text("Sekunden", ChatUtil.GREEN), Component.text(">> ", ChatUtil.ORANGE).append(plugin.getTimer().formatTime(ChatUtil.BLUE)), Component.empty(), Component.text("+1 Sekunde", ChatUtil.GREEN).append(Component.text(" ‣ Links-Klick", ChatUtil.BLUE)), Component.text("+10 Sekunden", ChatUtil.GREEN).append(Component.text(" ‣ Shift-Links-Klick", ChatUtil.BLUE)), Component.text(" ", Style.style(ChatUtil.BLUE, TextDecoration.STRIKETHROUGH)), Component.text("-1 Sekunde", ChatUtil.GREEN).append(Component.text(" ‣ Links-Klick", ChatUtil.BLUE)), Component.text("-10 Sekunden", ChatUtil.GREEN).append(Component.text(" ‣ Shift-Links-Klick", ChatUtil.BLUE))); + case CLOSE_INDEX -> item = CustomHeads.RAINBOW_X.getHead(Component.text("Menü verlassen", ChatUtil.RED)); + default -> item = ItemUtils.EMPTY_ICON; + } + this.getInventory().setItem(i, item); + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/guis/challengesettingsguis/BackPackSettingsGui.java b/Challenge/src/main/java/de/fanta/challenge/guis/challengesettingsguis/BackPackSettingsGui.java new file mode 100644 index 0000000..b35ea27 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/guis/challengesettingsguis/BackPackSettingsGui.java @@ -0,0 +1,102 @@ +package de.fanta.challenge.guis.challengesettingsguis; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.guis.settingsgui.OtherSettingsGui; +import de.fanta.challenge.teams.ChallengeTeam; +import de.fanta.challenge.teams.TeamUtils; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.fanta.challenge.utils.ItemUtils; +import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; +import de.iani.cubesideutils.bukkit.items.CustomHeads; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +public class BackPackSettingsGui extends AbstractWindow { + private static final Challenges plugin = Challenges.getPlugin(); + + private static final int ADD_SIZE_INDEX = 2; + private static final int SIZE_INDEX = 5; + private static final int REMOVE_SIZE_INDEX = 8; + + private static final int BACK_INDEX = 6; + + public BackPackSettingsGui(Player player) { + super(player, Bukkit.createInventory(player, InventoryType.DISPENSER, plugin.getGuiPrefix().append(Component.text(" >> Backpack Settings")))); + } + + @Override + public void onItemClicked(InventoryClickEvent event) { + if (!mayAffectThisInventory(event)) { + return; + } + + event.setCancelled(true); + if (!getInventory().equals(event.getClickedInventory())) { + return; + } + + int slot = event.getSlot(); + int size = plugin.getBackpack().getSize() / 9; + switch (slot) { + case ADD_SIZE_INDEX -> { + if (size <= 5) { + size++; + Config.setValue("backpack_size", size); + plugin.getBackpack().resize(size * 9); + + if (TeamUtils.getTeams() != null) { + for (ChallengeTeam team : TeamUtils.getTeams()) { + team.getBackpack().resize(size * 9); + } + } + + rebuildInventory(); + } + } + case REMOVE_SIZE_INDEX -> { + if (size > 1) { + size--; + Config.setValue("backpack_size", size); + plugin.getBackpack().resize(size * 9); + rebuildInventory(); + } + } + case BACK_INDEX -> new OtherSettingsGui(getPlayer()).open(); + default -> { + } + } + } + + @Override + protected void rebuildInventory() { + for (int i = 0; i < 9; i++) { + ItemStack item; + int size = plugin.getBackpack().getSize() / 9; + switch (i) { + case ADD_SIZE_INDEX -> + item = CustomHeads.RAINBOW_ARROW_UP.getHead(Component.text("Größe +1", ChatUtil.GREEN)); + case REMOVE_SIZE_INDEX -> + item = CustomHeads.RAINBOW_ARROW_DOWN.getHead(Component.text("Größe -1", ChatUtil.RED)); + + case SIZE_INDEX -> { + ItemStack stack = new ItemStack(Material.STRUCTURE_VOID, size); + ItemMeta meta = stack.getItemMeta(); + meta.displayName(Component.text("Rucksack größe: " + size + "/6", ChatUtil.GREEN)); + stack.setItemMeta(meta); + item = stack; + } + case BACK_INDEX -> + item = CustomHeads.RAINBOW_ARROW_BACKWARD_II.getHead(Component.text("Zurück", ChatUtil.GREEN)); + default -> item = ItemUtils.EMPTY_ICON; + } + this.getInventory().setItem(i, item); + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/guis/challengesettingsguis/BedrockWallSettingsGui.java b/Challenge/src/main/java/de/fanta/challenge/guis/challengesettingsguis/BedrockWallSettingsGui.java new file mode 100644 index 0000000..09e3cc5 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/guis/challengesettingsguis/BedrockWallSettingsGui.java @@ -0,0 +1,91 @@ +package de.fanta.challenge.guis.challengesettingsguis; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.guis.settingsgui.ChallengesGui; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.fanta.challenge.utils.ItemUtils; +import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; +import de.iani.cubesideutils.bukkit.items.CustomHeads; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +public class BedrockWallSettingsGui extends AbstractWindow { + private static final Challenges plugin = Challenges.getPlugin(); + + private static final int ADD_TIME_INDEX = 2; + private static final int TIME_INDEX = 5; + private static final int REMOVE_TIME_INDEX = 8; + + private static final int BACK_INDEX = 6; + + public BedrockWallSettingsGui(Player player) { + super(player, Bukkit.createInventory(player, InventoryType.DISPENSER, plugin.getGuiPrefix().append(Component.text(" >> Bedrock Wand Settings")))); + } + + @Override + public void onItemClicked(InventoryClickEvent event) { + if (!mayAffectThisInventory(event)) { + return; + } + + event.setCancelled(true); + if (!getInventory().equals(event.getClickedInventory())) { + return; + } + + int slot = event.getSlot(); + int time = Config.getInt("bedrockwalltime"); + switch (slot) { + case ADD_TIME_INDEX -> { + if (time <= 63) { + time++; + Config.setValue("bedrockwalltime", time); + rebuildInventory(); + } + } + case REMOVE_TIME_INDEX -> { + if (time > 1) { + time--; + Config.setValue("bedrockwalltime", time); + rebuildInventory(); + } + } + case BACK_INDEX -> new ChallengesGui(getPlayer()).open(); + default -> { + } + } + } + + @Override + protected void rebuildInventory() { + for (int i = 0; i < 9; i++) { + ItemStack item; + int time = Config.getInt("bedrockwalltime"); + switch (i) { + case ADD_TIME_INDEX -> + item = CustomHeads.RAINBOW_ARROW_UP.getHead(Component.text("+1 Sekunde", ChatUtil.GREEN)); + case REMOVE_TIME_INDEX -> + item = CustomHeads.RAINBOW_ARROW_DOWN.getHead(Component.text("-1 Sekunde", ChatUtil.RED)); + + case TIME_INDEX -> { + ItemStack stack = new ItemStack(Material.CLOCK, time); + ItemMeta meta = stack.getItemMeta(); + meta.displayName(Component.text(time + " Sekunden", ChatUtil.BLUE)); + stack.setItemMeta(meta); + item = stack; + } + case BACK_INDEX -> + item = CustomHeads.RAINBOW_ARROW_BACKWARD_II.getHead(Component.text("Zurück", ChatUtil.GREEN)); + default -> item = ItemUtils.EMPTY_ICON; + } + this.getInventory().setItem(i, item); + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/guis/challengesettingsguis/LevelBorderSettingsGui.java b/Challenge/src/main/java/de/fanta/challenge/guis/challengesettingsguis/LevelBorderSettingsGui.java new file mode 100644 index 0000000..856b8a0 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/guis/challengesettingsguis/LevelBorderSettingsGui.java @@ -0,0 +1,98 @@ +package de.fanta.challenge.guis.challengesettingsguis; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.challenges.WorldBorderLevelChallenge; +import de.fanta.challenge.guis.settingsgui.ChallengesGui; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.fanta.challenge.utils.ItemUtils; +import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; +import de.iani.cubesideutils.bukkit.items.CustomHeads; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +public class LevelBorderSettingsGui extends AbstractWindow { + private static final Challenges plugin = Challenges.getPlugin(); + + private static final int ADD_MULTIPLAYER_INDEX = 2; + private static final int MULTIPLAYER_INDEX = 5; + private static final int REMOVE_MULTIPLAYER_INDEX = 8; + + private static final int BACK_INDEX = 6; + + public LevelBorderSettingsGui(Player player) { + super(player, Bukkit.createInventory(player, InventoryType.DISPENSER, plugin.getGuiPrefix().append(Component.text(" >> World Border Level Settings")))); + } + + @Override + public void onItemClicked(InventoryClickEvent event) { + if (!mayAffectThisInventory(event)) { + return; + } + + event.setCancelled(true); + if (!getInventory().equals(event.getClickedInventory())) { + return; + } + + int slot = event.getSlot(); + int multiplier = Config.getInt("worldborderlevelbordermultiplier"); + switch (slot) { + case ADD_MULTIPLAYER_INDEX -> { + if (multiplier <= 9) { + multiplier++; + Config.setValue("worldborderlevelbordermultiplier", multiplier); + if (Config.getBoolean("worldborderlevel")) { + WorldBorderLevelChallenge.borderSync(); + } + rebuildInventory(); + } + } + case REMOVE_MULTIPLAYER_INDEX -> { + if (multiplier > 1) { + multiplier--; + Config.setValue("worldborderlevelbordermultiplier", multiplier); + if (Config.getBoolean("worldborderlevel")) { + WorldBorderLevelChallenge.borderSync(); + } + rebuildInventory(); + } + } + case BACK_INDEX -> new ChallengesGui(getPlayer()).open(); + default -> { + } + } + } + + @Override + protected void rebuildInventory() { + for (int i = 0; i < 9; i++) { + ItemStack item; + int multiplayer = Config.getInt("worldborderlevelbordermultiplier"); + switch (i) { + case ADD_MULTIPLAYER_INDEX -> + item = CustomHeads.RAINBOW_ARROW_UP.getHead(Component.text("Multiplier +1", ChatUtil.GREEN)); + case REMOVE_MULTIPLAYER_INDEX -> + item = CustomHeads.RAINBOW_ARROW_DOWN.getHead(Component.text("Multiplier -1", ChatUtil.RED)); + + case MULTIPLAYER_INDEX -> { + ItemStack stack = new ItemStack(Material.STRUCTURE_VOID, multiplayer); + ItemMeta meta = stack.getItemMeta(); + meta.displayName(Component.text("World Boarder Multiplier: ", ChatUtil.GREEN).append(Component.text(multiplayer, ChatUtil.BLUE))); + stack.setItemMeta(meta); + item = stack; + } + case BACK_INDEX -> + item = CustomHeads.RAINBOW_ARROW_BACKWARD_II.getHead(Component.text("Zurück", ChatUtil.GREEN)); + default -> item = ItemUtils.EMPTY_ICON; + } + this.getInventory().setItem(i, item); + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/guis/challengesettingsguis/MLGSettingsGui.java b/Challenge/src/main/java/de/fanta/challenge/guis/challengesettingsguis/MLGSettingsGui.java new file mode 100644 index 0000000..d73404b --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/guis/challengesettingsguis/MLGSettingsGui.java @@ -0,0 +1,114 @@ +package de.fanta.challenge.guis.challengesettingsguis; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.guis.settingsgui.ChallengesGui; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.fanta.challenge.utils.ItemUtils; +import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; +import de.iani.cubesideutils.bukkit.items.CustomHeads; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +public class MLGSettingsGui extends AbstractWindow { + private static final Challenges plugin = Challenges.getPlugin(); + private static final int RANDOM_BLOCK_INDEX = 1; + private static final int ADD_TIME_INDEX = 2; + private static final int TIME_INDEX = 5; + private static final int REMOVE_TIME_INDEX = 8; + + private static final int BACK_INDEX = 6; + + public MLGSettingsGui(Player player) { + super(player, Bukkit.createInventory(player, InventoryType.DISPENSER, plugin.getGuiPrefix().append(Component.text(" >> MLG Settings")))); + } + + @Override + public void onItemClicked(InventoryClickEvent event) { + if (!mayAffectThisInventory(event)) { + return; + } + + event.setCancelled(true); + if (!getInventory().equals(event.getClickedInventory())) { + return; + } + + int slot = event.getSlot(); + int time = Config.getInt("mlg.maxtime"); + switch (slot) { + case RANDOM_BLOCK_INDEX -> { + if (Config.getBoolean("mlg.randommlgblock")) { + Config.setValue("mlg.randommlgblock", false); + ChatUtil.sendTitleToAll(Component.text("MLG Challenge"), Component.text("Wassereimer MLG", ChatUtil.GREEN)); + } else { + Config.setValue("mlg.randommlgblock", true); + ChatUtil.sendTitleToAll(Component.text("MLG Challenge"), Component.text("Zufälliger MLG Block", ChatUtil.GREEN)); + } + rebuildInventory(); + } + case ADD_TIME_INDEX -> { + if (event.isShiftClick()) { + time = time + 10; + } else { + time = time + 100; + } + Config.setValue("mlg.maxtime", time); + rebuildInventory(); + } + case REMOVE_TIME_INDEX -> { + if (event.isShiftClick()) { + time = time - 10; + } else { + time = time - 100; + } + if (time > 1) { + Config.setValue("mlg.maxtime", time); + rebuildInventory(); + } + } + case BACK_INDEX -> new ChallengesGui(getPlayer()).open(); + default -> { + } + } + } + + @Override + protected void rebuildInventory() { + for (int i = 0; i < 9; i++) { + ItemStack item; + int time = Config.getInt("mlg.maxtime"); + switch (i) { + case RANDOM_BLOCK_INDEX -> { + if (Config.getBoolean("mlg.randommlgblock")) { + item = ItemUtils.createGuiItem(Material.SLIME_BLOCK, Component.text("Zufälliger MLG Block", ChatUtil.GREEN), true, Component.text("Du bekommst ein Zufälligen Block.", ChatUtil.GREEN)); + } else { + item = ItemUtils.createGuiItem(Material.WATER_BUCKET, Component.text("Wasser MLG", ChatUtil.GREEN), true, Component.text("Du bekommst einen Wassereimer.", ChatUtil.GREEN)); + } + } + case ADD_TIME_INDEX -> + item = CustomHeads.RAINBOW_ARROW_UP.getHead(Component.text("Zeit hinzufügen", ChatUtil.GREEN), Component.text("Klick = +100 Sekunden", ChatUtil.GREEN), Component.text("Shift + Klick = +10 Sekunden", ChatUtil.GREEN)); + case REMOVE_TIME_INDEX -> + item = CustomHeads.RAINBOW_ARROW_DOWN.getHead(Component.text("Zeit entfernen", ChatUtil.RED), Component.text("Klick = -100 Sekunden", ChatUtil.RED), Component.text("Shift + Klick = -10 Sekunden", ChatUtil.RED)); + + case TIME_INDEX -> { + ItemStack stack = new ItemStack(Material.CLOCK, Math.min(time, 64)); + ItemMeta meta = stack.getItemMeta(); + meta.displayName(Component.text(time + " Sekunden", ChatUtil.BLUE)); + stack.setItemMeta(meta); + item = stack; + } + case BACK_INDEX -> + item = CustomHeads.RAINBOW_ARROW_BACKWARD_II.getHead(Component.text("Zurück", ChatUtil.GREEN)); + default -> item = ItemUtils.EMPTY_ICON; + } + this.getInventory().setItem(i, item); + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/guis/challengesettingsguis/NoSneakSettingsGui.java b/Challenge/src/main/java/de/fanta/challenge/guis/challengesettingsguis/NoSneakSettingsGui.java new file mode 100644 index 0000000..87b4d9f --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/guis/challengesettingsguis/NoSneakSettingsGui.java @@ -0,0 +1,98 @@ +package de.fanta.challenge.guis.challengesettingsguis; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.guis.settingsgui.ChallengesGui; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.fanta.challenge.utils.ItemUtils; +import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; +import de.iani.cubesideutils.bukkit.items.CustomHeads; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.attribute.Attribute; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +public class NoSneakSettingsGui extends AbstractWindow { + private static final Challenges plugin = Challenges.getPlugin(); + + private static final int ADD_DAMAGE_INDEX = 2; + private static final int DAMAGE_INDEX = 5; + private static final int REMOVE_DAMAGE_INDEX = 8; + + private static final int BACK_INDEX = 6; + + public NoSneakSettingsGui(Player player) { + super(player, Bukkit.createInventory(player, InventoryType.DISPENSER, plugin.getGuiPrefix().append(Component.text(" >> No Sneak Settings")))); + } + + @Override + public void onItemClicked(InventoryClickEvent event) { + if (!mayAffectThisInventory(event)) { + return; + } + + event.setCancelled(true); + if (!getInventory().equals(event.getClickedInventory())) { + return; + } + + int slot = event.getSlot(); + double damage = Config.getDouble("sneakdmg"); + double maxdamage; + if (plugin.getCurrentEditor() != null) { + maxdamage = plugin.getCurrentEditor().getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue() - 1.0; + } else { + maxdamage = 20.0; + } + switch (slot) { + case ADD_DAMAGE_INDEX -> { + if (damage <= maxdamage) { + damage++; + Config.setValue("sneakdmg", damage); + rebuildInventory(); + } + } + case REMOVE_DAMAGE_INDEX -> { + if (damage > 1) { + damage--; + Config.setValue("sneakdmg", damage); + rebuildInventory(); + } + } + case BACK_INDEX -> new ChallengesGui(getPlayer()).open(); + default -> { + } + } + } + + @Override + protected void rebuildInventory() { + for (int i = 0; i < 9; i++) { + ItemStack item; + int damage = Config.getInt("sneakdmg"); + switch (i) { + case ADD_DAMAGE_INDEX -> + item = CustomHeads.RAINBOW_ARROW_UP.getHead(Component.text("Damage +1", ChatUtil.GREEN)); + case REMOVE_DAMAGE_INDEX -> + item = CustomHeads.RAINBOW_ARROW_DOWN.getHead(Component.text("Damage -1", ChatUtil.RED)); + + case DAMAGE_INDEX -> { + ItemStack stack = new ItemStack(Material.SMOOTH_STONE_SLAB, Math.min(damage, 64)); + ItemMeta meta = stack.getItemMeta(); + meta.displayName(Component.text("Damage: ", ChatUtil.GREEN).append(Component.text(damage, ChatUtil.BLUE))); + stack.setItemMeta(meta); + item = stack; + } + case BACK_INDEX -> + item = CustomHeads.RAINBOW_ARROW_BACKWARD_II.getHead(Component.text("Zurück", ChatUtil.GREEN)); + default -> item = ItemUtils.EMPTY_ICON; + } + this.getInventory().setItem(i, item); + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/guis/challengesettingsguis/TiedTogetherSettingsGui.java b/Challenge/src/main/java/de/fanta/challenge/guis/challengesettingsguis/TiedTogetherSettingsGui.java new file mode 100644 index 0000000..b14b218 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/guis/challengesettingsguis/TiedTogetherSettingsGui.java @@ -0,0 +1,97 @@ +package de.fanta.challenge.guis.challengesettingsguis; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.guis.settingsgui.ChallengesGui; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.fanta.challenge.utils.ItemUtils; +import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; +import de.iani.cubesideutils.bukkit.items.CustomHeads; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +public class TiedTogetherSettingsGui extends AbstractWindow { + private static final Challenges plugin = Challenges.getPlugin(); + + private static final int ADD_RANGE_INDEX = 2; + private static final int RANGE_INDEX = 5; + private static final int REMOVE_RANGE_INDEX = 8; + + private static final int BACK_INDEX = 6; + + public TiedTogetherSettingsGui(Player player) { + super(player, Bukkit.createInventory(player, InventoryType.DISPENSER, plugin.getGuiPrefix().append(Component.text(" >> Zusammengebunden Settings")))); + } + + @Override + public void onItemClicked(InventoryClickEvent event) { + if (!mayAffectThisInventory(event)) { + return; + } + + event.setCancelled(true); + if (!getInventory().equals(event.getClickedInventory())) { + return; + } + + int slot = event.getSlot(); + double range = Config.getDouble("playerrange"); + switch (slot) { + case ADD_RANGE_INDEX -> { + if (event.isShiftClick()) { + range = range + 10; + } else { + range = range + 100; + } + Config.setValue("playerrange", range); + rebuildInventory(); + } + case REMOVE_RANGE_INDEX -> { + if (event.isShiftClick()) { + range = range - 10; + } else { + range = range - 100; + } + if (range > 1) { + Config.setValue("playerrange", range); + rebuildInventory(); + } + } + case BACK_INDEX -> new ChallengesGui(getPlayer()).open(); + default -> { + } + } + } + + @Override + protected void rebuildInventory() { + for (int i = 0; i < 9; i++) { + ItemStack item; + int range = Config.getInt("playerrange"); + switch (i) { + case ADD_RANGE_INDEX -> + item = CustomHeads.RAINBOW_ARROW_UP.getHead(Component.text("Range hinzufügen", ChatUtil.GREEN), Component.text("Klick = Range +100", ChatUtil.GREEN), Component.text("Shift + Klick = Range +10", ChatUtil.GREEN)); + case REMOVE_RANGE_INDEX -> + item = CustomHeads.RAINBOW_ARROW_DOWN.getHead(Component.text("Range entfernen", ChatUtil.RED), Component.text("Klick = Range -100", ChatUtil.RED), Component.text("Shift + Klick = Range -10", ChatUtil.RED)); + + case RANGE_INDEX -> { + ItemStack stack = new ItemStack(Material.COMPASS, Math.min(range, 64)); + ItemMeta meta = stack.getItemMeta(); + meta.displayName(Component.text("Maximale Range: ", ChatUtil.GREEN).append(Component.text(range, ChatUtil.GREEN))); + stack.setItemMeta(meta); + item = stack; + } + case BACK_INDEX -> + item = CustomHeads.RAINBOW_ARROW_BACKWARD_II.getHead(Component.text("Zurück", ChatUtil.GREEN)); + default -> item = ItemUtils.EMPTY_ICON; + } + this.getInventory().setItem(i, item); + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/guis/coordsgui/CoordsDeleteGUI.java b/Challenge/src/main/java/de/fanta/challenge/guis/coordsgui/CoordsDeleteGUI.java new file mode 100644 index 0000000..1e61535 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/guis/coordsgui/CoordsDeleteGUI.java @@ -0,0 +1,72 @@ +package de.fanta.challenge.guis.coordsgui; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.fanta.challenge.utils.ItemUtils; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +public class CoordsDeleteGUI implements Listener { + private static final Challenges plugin = Challenges.getPlugin(); + + private static final int ACCEPT_INDEX = 0; + private static final int DENY_INDEX = 4; + private static final int ITEM_INDEX = 2; + + public static final int INVENTORY_SIZE = 5; + public static final Inventory COORDS_DELETE_GUI = Bukkit.createInventory(null, InventoryType.HOPPER, plugin.getGuiPrefix().append(Component.text(" >> Waypoint Löschen"))); + + public static void createCoordsDeleteGUI(Player p, String waypointName, ItemStack stack) { + COORDS_DELETE_GUI.setItem(ACCEPT_INDEX, ItemUtils.createGuiItem(Material.LIME_CONCRETE, Component.text("Löschen bestätigen", ChatUtil.GREEN), Component.text("Wegpunkt: ", ChatUtil.GREEN).append(Component.text(waypointName, ChatUtil.BLUE)))); + + if (stack != null) { + COORDS_DELETE_GUI.setItem(ITEM_INDEX, ItemUtils.createGuiItem(stack.getType(), Component.text(waypointName, ChatUtil.BLUE))); + } else { + COORDS_DELETE_GUI.setItem(ITEM_INDEX, ItemUtils.createGuiItem(Material.GRAY_BANNER, Component.text(waypointName, ChatUtil.BLUE))); + } + + COORDS_DELETE_GUI.setItem(DENY_INDEX, ItemUtils.createGuiItem(Material.RED_CONCRETE, Component.text("Löschen abbrechen", ChatUtil.RED), Component.text("Wegpunkt: ", ChatUtil.GREEN).append(Component.text(waypointName, ChatUtil.BLUE)))); + + for (int i = 0; i < INVENTORY_SIZE; i++) { + ItemStack item = COORDS_DELETE_GUI.getItem(i); + if (item == null || item.getType() == Material.AIR) { + COORDS_DELETE_GUI.setItem(i, ItemUtils.EMPTY_ICON); + } + } + + p.openInventory(COORDS_DELETE_GUI); + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent e) { + if (COORDS_DELETE_GUI.equals(e.getClickedInventory())) { + int slot = e.getRawSlot(); + Player player = (Player) e.getWhoClicked(); + ItemStack stack = e.getClickedInventory().getItem(ITEM_INDEX); + + if (stack == null) { + return; + } + + String waypointName = stack.getItemMeta().getDisplayName().substring(14); + + if (slot == ACCEPT_INDEX) { + Config.setValue("Saved_Locations." + waypointName, null, false); + ChatUtil.sendMessage(player, Component.text(waypointName, ChatUtil.BLUE).append(Component.text(" wurde gelöscht!", ChatUtil.GREEN))); + player.closeInventory(); + } else if (slot == DENY_INDEX) { + CoordsGUI.buildCoordsInventory(player); + } + e.setCancelled(true); + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/guis/coordsgui/CoordsGUI.java b/Challenge/src/main/java/de/fanta/challenge/guis/coordsgui/CoordsGUI.java new file mode 100644 index 0000000..8c4ecba --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/guis/coordsgui/CoordsGUI.java @@ -0,0 +1,126 @@ +package de.fanta.challenge.guis.coordsgui; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.fanta.challenge.utils.ItemUtils; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.Set; + +public class CoordsGUI implements Listener { + private static final Challenges plugin = Challenges.getPlugin(); + private static final Map wayPointPerSlot = new HashMap<>(); + private static final Map InventoryperPlayer = new HashMap<>(); + private static int CLOSE_IDEX = 0; + + public static void buildCoordsInventory(Player p) { + Set waypoints = Config.getConfigurationSection("Saved_Locations").getKeys(false); + + if (waypoints.isEmpty()) { + ChatUtil.sendErrorMessage(p, "Keine WayPoints vorhanden"); + return; + } + + Inventory COORDS_UI = Bukkit.createInventory(p, 9 * (waypoints.size() / 7 + ((waypoints.size() % 7 > 0) ? 1 : 0)) + 18, plugin.getGuiPrefix().append(Component.text(" >> Waypoints"))); + InventoryperPlayer.put(p, COORDS_UI); + CLOSE_IDEX = COORDS_UI.getSize() - 9; + int row = 0; + int cat = 0; + + for (String waypoint : waypoints) { + int slot = row * 9 + cat + 10; + + World world = Bukkit.getWorld(Objects.requireNonNull(Config.getString("Saved_Locations." + waypoint + ".World"))); + double x = Double.parseDouble(Objects.requireNonNull(Config.getString("Saved_Locations." + waypoint + ".BlockX"))); + double y = Double.parseDouble(Objects.requireNonNull(Config.getString("Saved_Locations." + waypoint + ".BlockY"))); + double z = Double.parseDouble(Objects.requireNonNull(Config.getString("Saved_Locations." + waypoint + ".BlockZ"))); + + Location waypointlocation = new Location(world, x, y, z); + + if (world != null) { + ItemStack stack = ItemUtils.createGuiItem(getBlock(world.getName()), Component.text(waypoint, ChatUtil.BLUE), Component.text("X: ", ChatUtil.BLUE).append(Component.text(x, ChatUtil.GREEN).append(Component.text(" Y: ", ChatUtil.BLUE).append(Component.text(y, ChatUtil.GREEN).append(Component.text(" Z: ", ChatUtil.BLUE)).append(Component.text(z, ChatUtil.GREEN))))), Component.text("Linksklick: Zeigt Coords im Chat.", ChatUtil.GREEN), Component.text("Rechtsklick: Waypoint Löschen.", ChatUtil.RED)); + COORDS_UI.setItem(slot, stack); + wayPointPerSlot.put(waypoint, waypointlocation); + if (cat < 6) { + cat++; + continue; + } + row++; + cat = 0; + } + + } + + COORDS_UI.setItem(CLOSE_IDEX, ItemUtils.createGuiItem(Material.BARRIER, Component.text("Menü verlassen!", ChatUtil.RED))); + for (int i = 0; i < COORDS_UI.getSize(); i++) { + if (COORDS_UI.getItem(i) == null || COORDS_UI.getItem(i).getType() == Material.AIR) { + COORDS_UI.setItem(i, ItemUtils.EMPTY_ICON); + } + } + p.openInventory(COORDS_UI); + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent e) { + Player p = (Player) e.getWhoClicked(); + + if (e.getInventory() == InventoryperPlayer.get(p)) { + int slot = e.getRawSlot(); + if (slot == -999) { + return; + } + ItemStack stack = e.getClickedInventory().getItem(slot); + + if (stack == null) { + return; + } + + String waypointName = stack.getItemMeta().getDisplayName(); + + if (waypointName.length() > 14) { + waypointName = waypointName.substring(14); + } + + Location location = wayPointPerSlot.get(waypointName); + + if (location != null) { + if (e.isLeftClick()) { + ChatUtil.sendMessage(p, Component.text("Position ", ChatUtil.GREEN).append(Component.text(waypointName, ChatUtil.ORANGE).append(Component.text(": ", ChatUtil.GREEN).append(Component.text("[" + location.getX() + "/" + location.getY() + "/" + location.getZ() + " " + location.getWorld().getName() + "]", ChatUtil.ORANGE))))); + p.closeInventory(); + } else if (e.isRightClick()) { + CoordsDeleteGUI.createCoordsDeleteGUI(p, waypointName, stack); + } + } + + if (slot == CLOSE_IDEX) { + p.closeInventory(); + } + e.setCancelled(true); + } + } + + private static Material getBlock(String wname) { + ItemStack mat = new ItemStack(Material.GRASS_BLOCK); + if (wname.equals(Bukkit.getWorlds().get(1).getName())) { + mat = mat.withType(Material.NETHERRACK); + } else if (wname.equals(Bukkit.getWorlds().get(2).getName())) { + mat = mat.withType(Material.END_STONE); + } + return mat.getType(); + } + +} diff --git a/Challenge/src/main/java/de/fanta/challenge/guis/eventgui/BingoItemsGui.java b/Challenge/src/main/java/de/fanta/challenge/guis/eventgui/BingoItemsGui.java new file mode 100644 index 0000000..8d60ea8 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/guis/eventgui/BingoItemsGui.java @@ -0,0 +1,75 @@ +package de.fanta.challenge.guis.eventgui; + +import de.fanta.challenge.challenges.ChallengeEvents.BingoChallengeEvent; +import de.fanta.challenge.Challenges; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +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.InventoryType; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.stream.Collectors; + +public class BingoItemsGui implements Listener { + + private static final Challenges plugin = Challenges.getPlugin(); + + public static final Component TITLE = plugin.getGuiPrefix().append(Component.text(" >> Event Items")); + private static final Inventory event_items = Bukkit.createInventory(null, InventoryType.DISPENSER, TITLE); + + private static final Map playerInvs = new HashMap<>(); + + public static void openEventGUI(Player p) { + p.openInventory(event_items); + } + + public static List getEventItems() { + return Arrays.stream(event_items.getContents()).filter(itemStack -> itemStack != null && !itemStack.getType().equals(Material.AIR)).map(ItemStack::getType).collect(Collectors.toList()); + } + + public static Map getPlayerInvs() { + return playerInvs; + } + + public static void openPlayerInv(Player player, Player sender) { + Inventory inventory = Bukkit.createInventory(player, InventoryType.DISPENSER, plugin.getGuiPrefix().append(Component.text(" >> Bingo"))); + List playerMaterials = BingoChallengeEvent.getPlayerMaterials().getOrDefault(player.getUniqueId(), new ArrayList<>()); + BingoChallengeEvent.getMaterials().forEach(material -> { + ItemStack itemStack = new ItemStack(material); + if (playerMaterials.contains(material)) { + ItemMeta itemMeta = itemStack.getItemMeta(); + itemMeta.addEnchant(Enchantment.MENDING, 1, false); + itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS); + itemStack.setItemMeta(itemMeta); + } + inventory.addItem(itemStack); + }); + playerInvs.put(player.getUniqueId(), inventory); + sender.openInventory(inventory); + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent e) { + UUID uuid = e.getWhoClicked().getUniqueId(); + if (e.getInventory() == playerInvs.get(uuid)) { + e.setCancelled(true); + } + } +} + + + diff --git a/Challenge/src/main/java/de/fanta/challenge/guis/eventgui/EventGui.java b/Challenge/src/main/java/de/fanta/challenge/guis/eventgui/EventGui.java new file mode 100644 index 0000000..e0b16a0 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/guis/eventgui/EventGui.java @@ -0,0 +1,280 @@ +package de.fanta.challenge.guis.eventgui; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.challenges.ChallengeEvents.BridgeRaceChallengeEvent; +import de.fanta.challenge.challenges.ChallengeEvents.DeathrunChallengeEvent; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.fanta.challenge.utils.ItemUtils; +import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; +import de.iani.cubesideutils.bukkit.items.CustomHeads; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; + +import java.util.Objects; + +public class EventGui extends AbstractWindow { + private static final Challenges plugin = Challenges.getPlugin(); + + public static final int INVENTORY_SIZE = 54; + private static final int NULL_EVENT_INDEX = 0; + private static final int TEAM_INDEX = 8; + + private static final int BINGO_EVENT_INDEX = 10; + private static final int DEATHRUN_EVENT_INDEX = 11; + private static final int FORCE_ITEM_INDEX = 12; + private static final int SAMMEL_FIEBER_INDEX = 13; + private static final int BRIDGE_RACE_INDEX = 14; + private static final int ORE_BATTLE_INDEX = 15; + private static final int DEATH_COUNTER_INDEX = 16; + + private static final int BINGO_ITEMS_INDEX = 19; + private static final int FORCE_ITEM_SETTINGS_INDEX = 21; + private static final int SAMMEL_FIEBER_SETTINGS_INDEX = 22; + + private static final int DIFFERENT_ITEMS_INDEX = 28; + private static final int TIME_EVENT_INDEX = 29; + + private static final int EVENT_SETTINGS_INDEX = 45; + private static final int CLOSE_IDEX = 54; + + public EventGui(Player player) { + super(player, Bukkit.createInventory(player, INVENTORY_SIZE, plugin.getGuiPrefix().append(Component.text(" >> Event Settings")))); + } + + @Override + protected void rebuildInventory() { + for (int i = 0; i < INVENTORY_SIZE; i++) { + ItemStack item; + switch (i) { + case NULL_EVENT_INDEX -> { + if (!Objects.equals(Config.getString("event.type"), "nix")) { + item = CustomHeads.RAINBOW_X.getHead(Component.text("Event beenden", ChatUtil.RED)); + } else { + item = ItemUtils.EMPTY_ICON; + } + } + case TEAM_INDEX -> + item = ItemUtils.createGuiItem(Material.GRAY_BED, Component.text("Team Settings", ChatUtil.BLUE)); + case BINGO_EVENT_INDEX -> { + if (Objects.equals(Config.getString("event.type"), "bingo")) { + item = ItemUtils.createGuiItem(Material.GRAY_SHULKER_BOX, Component.text("Bingo Event", ChatUtil.GREEN), true, Component.text("Sammle Vorgegebene Items", ChatUtil.GREEN), Component.text("Items kann man mit /bingo sehen", ChatUtil.GREEN)); + } else { + item = ItemUtils.createGuiItem(Material.GRAY_SHULKER_BOX, Component.text("Bingo Event", ChatUtil.RED), Component.text("Sammle Vorgegebene Items", ChatUtil.GREEN), Component.text("Items kann man mit /bingo sehen", ChatUtil.GREEN)); + } + } + case DEATHRUN_EVENT_INDEX -> { + if (Objects.equals(Config.getString("event.type"), "deathrun")) { + item = ItemUtils.createGuiItem(Material.LEATHER_BOOTS, Component.text("Deathrun Event", ChatUtil.GREEN), true, Component.text("Laufe so weit wie möglich ohne zu sterben", ChatUtil.GREEN)); + } else { + item = ItemUtils.createGuiItem(Material.LEATHER_BOOTS, Component.text("Deathrun Event", ChatUtil.RED), Component.text("Laufe so weit wie möglich ohne zu sterben", ChatUtil.GREEN)); + } + } + case FORCE_ITEM_INDEX -> { + if (Objects.equals(Config.getString("event.type"), "forcequest")) { + item = ItemUtils.createGuiItem(Material.DIAMOND_PICKAXE, Component.text("Force Quest Event", ChatUtil.GREEN), true, Component.text("Erledige so viele Aufgaben wie möglich.", ChatUtil.GREEN)); + } else { + item = ItemUtils.createGuiItem(Material.DIAMOND_PICKAXE, Component.text("Force Quest Event", ChatUtil.RED), Component.text("Erledige so viele Aufgaben wie möglich.", ChatUtil.GREEN)); + } + } + case SAMMEL_FIEBER_INDEX -> { + if (Objects.equals(Config.getString("event.type"), "sammelfieber")) { + item = ItemUtils.createGuiItem(Material.HOPPER, Component.text("Sammel Fieber Event", ChatUtil.GREEN), true, Component.text("Sammle so viel Items wie möglich!", ChatUtil.GREEN)); + } else { + item = ItemUtils.createGuiItem(Material.HOPPER, Component.text("Sammel Fieber Event", ChatUtil.RED), Component.text("Sammle so viel Items wie möglich!", ChatUtil.GREEN)); + } + } + case BRIDGE_RACE_INDEX -> { + if (Objects.equals(Config.getString("event.type"), "bridgerace")) { + item = ItemUtils.createGuiItem(Material.SCAFFOLDING, Component.text("Bridge Race Event", ChatUtil.GREEN), true, Component.text("Komme so weit wie möglich.", ChatUtil.GREEN)); + } else { + item = ItemUtils.createGuiItem(Material.SCAFFOLDING, Component.text("Bridge Race Event", ChatUtil.RED), Component.text("Komme so weit wie möglich.", ChatUtil.GREEN)); + } + } + case ORE_BATTLE_INDEX -> { + if (Objects.equals(Config.getString("event.type"), "orebattle")) { + item = ItemUtils.createGuiItem(Material.DEEPSLATE_IRON_ORE, Component.text("Ore Battle Event", ChatUtil.GREEN), true, Component.text("Baue so viele erze ab wie möglich.", ChatUtil.GREEN)); + } else { + item = ItemUtils.createGuiItem(Material.DEEPSLATE_IRON_ORE, Component.text("Ore Battle Event", ChatUtil.RED), Component.text("Baue so viele erze ab wie möglich.", ChatUtil.GREEN)); + } + } + case DEATH_COUNTER_INDEX -> { + if (Objects.equals(Config.getString("event.type"), "deathcounter")) { + item = ItemUtils.createGuiItem(Material.DAMAGED_ANVIL, Component.text("Death Counter Event", ChatUtil.GREEN), true, Component.text("Zeigt Tode bei einem Event.", ChatUtil.GREEN), Component.text("Kann nicht mit anderen Events verbunden Werden.", ChatUtil.GREEN)); + } else { + item = ItemUtils.createGuiItem(Material.DAMAGED_ANVIL, Component.text("Death Counter Event", ChatUtil.RED), Component.text("Zeigt Tode bei einem Event.", ChatUtil.GREEN), Component.text("Kann nicht mit anderen Events verbunden Werden.", ChatUtil.GREEN)); + } + } + case BINGO_ITEMS_INDEX -> { + if (Objects.equals(Config.getString("event.type"), "bingo")) { + item = ItemUtils.createGuiItem(Material.CHEST, Component.text("Items", ChatUtil.GREEN), Component.text("Anklicken um Items Hinzuzufügen", ChatUtil.GREEN)); + } else { + item = ItemUtils.EMPTY_ICON; + } + } + case FORCE_ITEM_SETTINGS_INDEX -> { + if (Objects.equals(Config.getString("event.type"), "forcequest")) { + item = ItemUtils.createGuiItem(Material.REPEATING_COMMAND_BLOCK, Component.text("Force Item Event Settings", ChatUtil.GREEN)); + } else { + item = ItemUtils.EMPTY_ICON; + } + } + case SAMMEL_FIEBER_SETTINGS_INDEX -> { + if (Objects.equals(Config.getString("event.type"), "sammelfieber")) { + item = ItemUtils.createGuiItem(Material.NETHER_STAR, Component.text("Sammel Fieber Event Settings", ChatUtil.GREEN)); + } else { + item = ItemUtils.EMPTY_ICON; + } + } + case DIFFERENT_ITEMS_INDEX -> { + if (Objects.equals(Config.getString("event.type"), "differentitems")) { + item = ItemUtils.createGuiItem(Material.CRAFTING_TABLE, Component.text("DifferentItems", ChatUtil.GREEN), true, Component.text("Sammel so viele verschiedene Items wie möglich.", ChatUtil.GREEN)); + } else { + item = ItemUtils.createGuiItem(Material.CRAFTING_TABLE, Component.text("DifferentItems", ChatUtil.RED), Component.text("Sammel so viele verschiedene Items wie möglich.", ChatUtil.GREEN)); + } + } + case TIME_EVENT_INDEX -> { + if (Objects.equals(Config.getString("event.type"), "time")) { + item = ItemUtils.createGuiItem(Material.CLOCK, Component.text("Time", ChatUtil.GREEN), true, Component.text("Zeigt wie lang ein Spieler mitgespielt hat.", ChatUtil.GREEN)); + } else { + item = ItemUtils.createGuiItem(Material.CLOCK, Component.text("Time", ChatUtil.RED), Component.text("Zeigt wie lang ein Spieler mitgespielt hat.", ChatUtil.GREEN)); + } + } + case EVENT_SETTINGS_INDEX -> + item = ItemUtils.createGuiItem(Material.CHAIN_COMMAND_BLOCK, Component.text("Event Settings", ChatUtil.BLUE)); + + case CLOSE_IDEX -> + item = CustomHeads.RAINBOW_X.getHead(Component.text("Menü verlassen!", ChatUtil.RED)); + default -> item = ItemUtils.EMPTY_ICON; + } + this.getInventory().setItem(i, item); + } + } + + @Override + public void onItemClicked(InventoryClickEvent event) { + if (!mayAffectThisInventory(event)) { + return; + } + + event.setCancelled(true); + if (!getInventory().equals(event.getClickedInventory())) { + return; + } + + Player p = getPlayer(); + int slot = event.getSlot(); + switch (slot) { + case NULL_EVENT_INDEX -> { + if (!Objects.equals(Config.getString("event.type"), "nix")) { + plugin.getScoreManager().resetScores(); + Config.setValue("event.type", "nix"); + ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Event beendet", ChatUtil.RED)); + } + } + case BINGO_EVENT_INDEX -> { + if (!Objects.equals(Config.getString("event.type"), "bingo")) { + Config.setValue("event.type", "bingo"); + ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Sammle Vorgegebene Items! (/bingo)", ChatUtil.GREEN)); + } else { + ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits"); + } + } + case DEATHRUN_EVENT_INDEX -> { + if (!Objects.equals(Config.getString("event.type"), "deathrun")) { + Config.setValue("event.type", "deathrun"); + ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Laufe so weit wie möglich ohne zu sterben!", ChatUtil.GREEN)); + DeathrunChallengeEvent.load(p); + } else { + ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits"); + } + } + case DEATH_COUNTER_INDEX -> { + if (!Objects.equals(Config.getString("event.type"), "deathcounter")) { + Config.setValue("event.type", "deathcounter"); + ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Death Counter", ChatUtil.GREEN)); + } else { + ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits"); + } + } + case SAMMEL_FIEBER_INDEX -> { + if (!Objects.equals(Config.getString("event.type"), "sammelfieber")) { + Config.setValue("event.type", "sammelfieber"); + ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("SammelFieber", ChatUtil.GREEN)); + } else { + ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits"); + } + } + case ORE_BATTLE_INDEX -> { + if (!Objects.equals(Config.getString("event.type"), "orebattle")) { + Config.setValue("event.type", "orebattle"); + ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Ore Battle", ChatUtil.GREEN)); + } else { + ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits"); + } + } + case FORCE_ITEM_INDEX -> { + if (!Objects.equals(Config.getString("event.type"), "forcequest")) { + Config.setValue("event.type", "forcequest"); + ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Force Quest", ChatUtil.GREEN)); + } else { + ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits"); + } + } + case BRIDGE_RACE_INDEX -> { + if (!Objects.equals(Config.getString("event.type"), "bridgerace")) { + if (BridgeRaceChallengeEvent.load(p)) { + Config.setValue("event.type", "bridgerace"); + ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Bridge Race", ChatUtil.GREEN)); + } + } else { + ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits"); + } + } + case DIFFERENT_ITEMS_INDEX -> { + if (!Objects.equals(Config.getString("event.type"), "differentitems")) { + Config.setValue("event.type", "differentitems"); + ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Different Items", ChatUtil.GREEN)); + } else { + ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits"); + } + } + case TIME_EVENT_INDEX -> { + if (!Objects.equals(Config.getString("event.type"), "time")) { + Config.setValue("event.type", "time"); + ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Time", ChatUtil.GREEN)); + } else { + ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits"); + } + } + } + rebuildInventory(); + + switch (slot) { + case BINGO_ITEMS_INDEX -> { + if (Objects.equals(Config.getString("event.type"), "bingo")) { + BingoItemsGui.openEventGUI(p); + } + } + case SAMMEL_FIEBER_SETTINGS_INDEX -> { + if (Objects.equals(Config.getString("event.type"), "sammelfieber")) { + new SammelFieberSettingsGui(this, p).open(); + } + } + case FORCE_ITEM_SETTINGS_INDEX -> { + if (Objects.equals(Config.getString("event.type"), "forcequest")) { + new ForceQuestSettingsGui(p).open(); + } + } + case TEAM_INDEX -> new TeamSettingsGUI(p).open(); + case EVENT_SETTINGS_INDEX -> new EventSettingsGui(p).open(); + case CLOSE_IDEX -> p.closeInventory(); + } + } +} + + diff --git a/Challenge/src/main/java/de/fanta/challenge/guis/eventgui/EventSettingsGui.java b/Challenge/src/main/java/de/fanta/challenge/guis/eventgui/EventSettingsGui.java new file mode 100644 index 0000000..755dd43 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/guis/eventgui/EventSettingsGui.java @@ -0,0 +1,107 @@ +package de.fanta.challenge.guis.eventgui; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.fanta.challenge.utils.ItemUtils; +import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; + +public class EventSettingsGui extends AbstractWindow { + private static final Challenges plugin = Challenges.getPlugin(); + + public static final int INVENTORY_SIZE = 27; + + private static final int MINI_LWC_INDEX = 10; + private static final int TOURNAMENT_INDEX = 11; + private static final int START_INVENTORY_INDEX = 12; + + public EventSettingsGui(Player player) { + super(player, Bukkit.createInventory(player, INVENTORY_SIZE, plugin.getGuiPrefix().append(Component.text(" >> Event Settings")))); + } + + @Override + public void onItemClicked(InventoryClickEvent event) { + Player player = getPlayer(); + if (!mayAffectThisInventory(event)) { + return; + } + + event.setCancelled(true); + if (!getInventory().equals(event.getClickedInventory())) { + return; + } + + int slot = event.getSlot(); + switch (slot) { + case MINI_LWC_INDEX -> { + if (Config.getBoolean("event.minilwc")) { + Config.setValue("event.minilwc", false); + ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Mini LWC deaktiviert.", ChatUtil.RED), true); + } else { + Config.setValue("event.minilwc", true); + ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Mini LWC aktiviert.", ChatUtil.GREEN), true); + } + rebuildInventory(); + } + case TOURNAMENT_INDEX -> { + if (Config.getBoolean("event.tournament")) { + Config.setValue("event.tournament", false); + ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Turnier Modus deaktiviert.", ChatUtil.RED), true); + } else { + Config.setValue("event.tournament", true); + ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Turnier Modus aktiviert.", ChatUtil.GREEN), true); + } + player.closeInventory(); + } + case START_INVENTORY_INDEX -> { + if (event.isLeftClick()) { + if (Config.getBoolean("event.startinv")) { + Config.setValue("event.startinv", false); + ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Start Inventar deaktiviert.", ChatUtil.RED), true); + } else { + Config.setValue("event.startinv", true); + ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Start Inventar aktiviert.", ChatUtil.GREEN), true); + } + } + + if (event.isRightClick()) { + + } + rebuildInventory(); + } + default -> { + } + } + } + + @Override + protected void rebuildInventory() { + for (int i = 0; i < INVENTORY_SIZE; i++) { + ItemStack item; + switch (i) { + case MINI_LWC_INDEX -> { + if (Config.getBoolean("event.minilwc")) { + item = ItemUtils.createGuiItem(Material.BARREL, Component.text("Mini LWC aktiviert.", ChatUtil.GREEN)); + } else { + item = ItemUtils.createGuiItem(Material.BARREL, Component.text("Mini LWC deaktiviert.", ChatUtil.RED)); + } + } + case TOURNAMENT_INDEX -> { + if (Config.getBoolean("event.tournament")) { + item = ItemUtils.createGuiItem(Material.TARGET, Component.text("Turnier Modus aktiviert.", ChatUtil.GREEN)); + } else { + item = ItemUtils.createGuiItem(Material.TARGET, Component.text("Turnier Modus deaktiviert.", ChatUtil.RED)); + } + } + default -> item = ItemUtils.EMPTY_ICON; + } + this.getInventory().setItem(i, item); + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/guis/eventgui/ForceQuestSettingsGui.java b/Challenge/src/main/java/de/fanta/challenge/guis/eventgui/ForceQuestSettingsGui.java new file mode 100644 index 0000000..a6989ec --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/guis/eventgui/ForceQuestSettingsGui.java @@ -0,0 +1,182 @@ +package de.fanta.challenge.guis.eventgui; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.challenges.ChallengeEvents.forcequest.ForceQuestChallengeEvent; +import de.fanta.challenge.challenges.ChallengeEvents.forcequest.QuestType; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.ItemUtils; +import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; +import de.iani.cubesideutils.bukkit.items.CustomHeads; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +public class ForceQuestSettingsGui extends AbstractWindow { + private static final Challenges plugin = Challenges.getPlugin(); + + private static final int ADD_SKIP_INDEX = 8; + private static final int SKIP_COUNT_INDEX = 17; + private static final int REMOVE_SKIP_INDEX = 26; + private static final int FORCE_ITEM_INDEX = 10; + private static final int FORCE_BIOME_INDEX = 11; + private static final int FORCE_MOB_INDEX = 12; + private static final int FORCE_EFFECT_INDEX = 13; + private static final int FORCE_DEATH_INDEX = 14; + private static final int FORCE_LOCATION_INDEX = 15; + + private static final int BACK_INDEX = 18; + + public ForceQuestSettingsGui(Player player) { + super(player, Bukkit.createInventory(player, 27, plugin.getGuiPrefix().append(Component.text(" >> Force Quest Settings")))); + } + + @Override + public void onItemClicked(InventoryClickEvent event) { + if (!mayAffectThisInventory(event)) { + return; + } + + event.setCancelled(true); + if (!getInventory().equals(event.getClickedInventory())) { + return; + } + + int slot = event.getSlot(); + switch (slot) { + case ADD_SKIP_INDEX -> { + if (ForceQuestChallengeEvent.skipQuestCount <= 63) { + ForceQuestChallengeEvent.skipQuestCount++; + rebuildInventory(); + } + } + case REMOVE_SKIP_INDEX -> { + if (ForceQuestChallengeEvent.skipQuestCount > 1) { + ForceQuestChallengeEvent.skipQuestCount--; + rebuildInventory(); + } + } + case FORCE_ITEM_INDEX -> { + if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceItem)) { + ForceQuestChallengeEvent.activeQuestTypes.remove(QuestType.ForceItem); + } else { + ForceQuestChallengeEvent.activeQuestTypes.add(QuestType.ForceItem); + } + rebuildInventory(); + } + case FORCE_BIOME_INDEX -> { + if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceBiome)) { + ForceQuestChallengeEvent.activeQuestTypes.remove(QuestType.ForceBiome); + } else { + ForceQuestChallengeEvent.activeQuestTypes.add(QuestType.ForceBiome); + } + rebuildInventory(); + } + case FORCE_MOB_INDEX -> { + if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceMob)) { + ForceQuestChallengeEvent.activeQuestTypes.remove(QuestType.ForceMob); + } else { + ForceQuestChallengeEvent.activeQuestTypes.add(QuestType.ForceMob); + } + rebuildInventory(); + } + case FORCE_EFFECT_INDEX -> { + if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceEffect)) { + ForceQuestChallengeEvent.activeQuestTypes.remove(QuestType.ForceEffect); + } else { + ForceQuestChallengeEvent.activeQuestTypes.add(QuestType.ForceEffect); + } + rebuildInventory(); + } + case FORCE_DEATH_INDEX -> { + if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceDeath)) { + ForceQuestChallengeEvent.activeQuestTypes.remove(QuestType.ForceDeath); + } else { + ForceQuestChallengeEvent.activeQuestTypes.add(QuestType.ForceDeath); + } + rebuildInventory(); + } + case FORCE_LOCATION_INDEX -> { + if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceLocation)) { + ForceQuestChallengeEvent.activeQuestTypes.remove(QuestType.ForceLocation); + } else { + ForceQuestChallengeEvent.activeQuestTypes.add(QuestType.ForceLocation); + } + rebuildInventory(); + } + case BACK_INDEX -> new EventGui(getPlayer()).open(); + default -> { + } + } + } + + @Override + protected void rebuildInventory() { + for (int i = 0; i < 27; i++) { + ItemStack item; + switch (i) { + case ADD_SKIP_INDEX -> + item = CustomHeads.RAINBOW_ARROW_UP.getHead(Component.text("Add Skip", ChatUtil.GREEN)); + case REMOVE_SKIP_INDEX -> + item = CustomHeads.RAINBOW_ARROW_DOWN.getHead(Component.text("Remove Skip", ChatUtil.RED)); + + case SKIP_COUNT_INDEX -> { + ItemStack stack = new ItemStack(Material.STRUCTURE_VOID, ForceQuestChallengeEvent.skipQuestCount); + ItemMeta meta = stack.getItemMeta(); + meta.displayName(Component.text(ForceQuestChallengeEvent.skipQuestCount + "x ", ChatUtil.BLUE).append(Component.text("Skip Item", ChatUtil.GREEN))); + stack.setItemMeta(meta); + item = stack; + } + case FORCE_ITEM_INDEX -> { + if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceItem)) { + item = ItemUtils.createGuiItem(Material.CHEST, Component.text("Force Item", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.CHEST, Component.text("Force Item", ChatUtil.RED), false); + } + } + case FORCE_BIOME_INDEX -> { + if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceBiome)) { + item = ItemUtils.createGuiItem(Material.GRASS_BLOCK, Component.text("Force Biome", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.GRASS_BLOCK, Component.text("Force Biome", ChatUtil.RED), false); + } + } + case FORCE_MOB_INDEX -> { + if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceMob)) { + item = ItemUtils.createGuiItem(Material.PIG_SPAWN_EGG, Component.text("Force Mob", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.PIG_SPAWN_EGG, Component.text("Force Mob", ChatUtil.RED), false); + } + } + case FORCE_EFFECT_INDEX -> { + if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceEffect)) { + item = ItemUtils.createGuiItem(Material.POTION, Component.text("Force Effect", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.POTION, Component.text("Force Effect", ChatUtil.RED), false); + } + } + case FORCE_DEATH_INDEX -> { + if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceDeath)) { + item = ItemUtils.createGuiItem(Material.NETHERITE_AXE, Component.text("Force Death", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.NETHERITE_AXE, Component.text("Force Death", ChatUtil.RED), false); + } + } + case FORCE_LOCATION_INDEX -> { + if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceLocation)) { + item = ItemUtils.createGuiItem(Material.COMPASS, Component.text("Force Location", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.COMPASS, Component.text("Force Location", ChatUtil.RED), false); + } + } + case BACK_INDEX -> + item = CustomHeads.RAINBOW_ARROW_BACKWARD_II.getHead(Component.text("Zurück", ChatUtil.GREEN)); + default -> item = ItemUtils.EMPTY_ICON; + } + this.getInventory().setItem(i, item); + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/guis/eventgui/SammelFieberSettingsGui.java b/Challenge/src/main/java/de/fanta/challenge/guis/eventgui/SammelFieberSettingsGui.java new file mode 100644 index 0000000..8058c81 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/guis/eventgui/SammelFieberSettingsGui.java @@ -0,0 +1,189 @@ +package de.fanta.challenge.guis.eventgui; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.challenges.ChallengeEvents.SammelFieberChallengeEvent; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.fanta.challenge.utils.ItemUtils; +import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; +import de.iani.cubesideutils.bukkit.inventory.Window; +import de.iani.cubesideutils.bukkit.items.CustomHeads; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.FluidCollisionMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryDragEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.ItemStack; + +import java.util.Objects; + +public class SammelFieberSettingsGui extends AbstractWindow { + + public static final int INVENTORY_SIZE = 9; + private static final Challenges plugin = Challenges.getPlugin(); + private static final int SET_HOPPER_INDEX = 0; + private static final int ADD_MONEY_INDEX = 2; + private static final int SINGLEPLAYER_INDEX = 3; + private static final int ITEM_INDEX = 4; + private static final int MONEY_INDEX = 5; + private static final int BACK_INDEX = 6; + private static final int REMOVE_MONEY_INDEX = 8; + public static int MONEY = 100; + public static boolean singlePlayer = true; + + public static ItemStack eventItem = null; + + public SammelFieberSettingsGui(Window parentWindow, Player player) { + super(parentWindow, Bukkit.createInventory(player, InventoryType.DISPENSER, plugin.getGuiPrefix().append(Component.text(" >> Sammel Fieber Settings")))); + } + + @Override + public void onItemClicked(InventoryClickEvent event) { + Player player = getPlayer(); + if (!mayAffectThisInventory(event)) { + return; + } + + if (!getInventory().equals(event.getClickedInventory())) { + return; + } + + if (!Config.getBoolean("event.enabled")) { + return; + } + + int slot = event.getSlot(); + switch (slot) { + case SET_HOPPER_INDEX -> { + Block block = player.getTargetBlockExact(5, FluidCollisionMode.NEVER); + if (block != null && block.getType() == Material.HOPPER) { + Location loc = block.getLocation(); + SammelFieberChallengeEvent.setHopperLocation(new Location(loc.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ())); + ChatUtil.sendNormalMessage(player, "Hopper wurde gesetzt."); + } else { + ChatUtil.sendErrorMessage(player, "Du musst auf einen Hopper schauen!"); + } + event.setCancelled(true); + } + case ADD_MONEY_INDEX -> { + if (!event.isShiftClick()) { + MONEY = MONEY + 10; + } else { + MONEY = MONEY + 1; + } + Config.setValue("event.sammelfieber.money", MONEY); + rebuildInventory(); + event.setCancelled(true); + } + case REMOVE_MONEY_INDEX -> { + if (MONEY > 10) { + if (!event.isShiftClick()) { + MONEY = MONEY - 10; + } else { + MONEY = MONEY - 1; + } + Config.setValue("event.sammelfieber.money", MONEY); + rebuildInventory(); + } + event.setCancelled(true); + } + case SINGLEPLAYER_INDEX -> { + singlePlayer = !singlePlayer; + rebuildInventory(); + event.setCancelled(true); + } + case ITEM_INDEX -> { + switch (event.getAction()) { + case MOVE_TO_OTHER_INVENTORY: + case NOTHING: + case PICKUP_ALL: + case PICKUP_HALF: + case PICKUP_ONE: + case PICKUP_SOME: + case PLACE_ALL: + case PLACE_ONE: + case PLACE_SOME: + case SWAP_WITH_CURSOR: + break; + default: + event.setCancelled(true); + return; + + } + plugin.getScheduler().run(() -> getPlayer().updateInventory()); + return; + } + default -> event.setCancelled(true); + } + + if (slot == BACK_INDEX) { + returnToEventSettingsSafely(); + } + } + + @Override + public void onItemDraged(InventoryDragEvent event) { + if (!this.mayAffectThisInventory(event)) { + return; + } + for (int slot : event.getRawSlots()) { + if (slot != ITEM_INDEX) { + event.setCancelled(true); + return; + } + } + + plugin.getScheduler().run(() -> getPlayer().updateInventory()); + } + + @Override + protected void rebuildInventory() { + for (int i = 0; i < INVENTORY_SIZE; i++) { + ItemStack item; + switch (i) { + case SET_HOPPER_INDEX -> + item = ItemUtils.createGuiItem(Material.HOPPER, Component.text("Set Hopper", ChatUtil.GREEN), Component.text("Du musst auf einen Hopper schauen.", ChatUtil.GREEN)); + case ADD_MONEY_INDEX -> + item = CustomHeads.RAINBOW_ARROW_UP.getHead(Component.text("Add Money", ChatUtil.GREEN), Component.text("Klick = +10", ChatUtil.GREEN), Component.text("Shift + Klick = +1", ChatUtil.GREEN)); + case MONEY_INDEX -> + item = ItemUtils.createGuiItem(Material.GOLD_INGOT, Component.text("Money: " + MONEY, ChatUtil.GREEN)); + case SINGLEPLAYER_INDEX -> + item = singlePlayer ? ItemUtils.createGuiItem(Material.EMERALD, Component.text("SiglePlayer", ChatUtil.GREEN), true) : ItemUtils.createGuiItem(Material.EMERALD, Component.text("SiglePlayer", ChatUtil.RED), false); + case BACK_INDEX -> + item = CustomHeads.RAINBOW_ARROW_BACKWARD_II.getHead(Component.text("Zurück", ChatUtil.GREEN)); + case REMOVE_MONEY_INDEX -> + item = CustomHeads.RAINBOW_ARROW_DOWN.getHead(Component.text("Remove Money", ChatUtil.RED), Component.text("Klick = -10", ChatUtil.RED), Component.text("Shift + Klick = -1", ChatUtil.RED)); + case ITEM_INDEX -> item = Objects.requireNonNullElseGet(eventItem, () -> new ItemStack(Material.AIR)); + default -> item = ItemUtils.EMPTY_ICON; + } + this.getInventory().setItem(i, item); + } + } + + @Override + public void closed() { + ItemStack stack = getInventory().getItem(ITEM_INDEX); + if (stack != null) { + eventItem = stack; + Config.setValue("event.sammelfieber.item", stack.getType().name()); + } else { + eventItem = null; + Config.setValue("event.sammelfieber.item", ""); + } + } + + public static ItemStack getEventItem() { + return eventItem; + } + + private void returnToEventSettingsSafely() { + plugin.getScheduler().run(() -> getParent().open()); + } +} + + diff --git a/Challenge/src/main/java/de/fanta/challenge/guis/eventgui/TeamSelectGUI.java b/Challenge/src/main/java/de/fanta/challenge/guis/eventgui/TeamSelectGUI.java new file mode 100644 index 0000000..5c61830 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/guis/eventgui/TeamSelectGUI.java @@ -0,0 +1,109 @@ +package de.fanta.challenge.guis.eventgui; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.teams.ChallengeTeam; +import de.fanta.challenge.teams.TeamUtils; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.ItemUtils; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +public class TeamSelectGUI implements Listener { + + private static final Challenges plugin = Challenges.getPlugin(); + private static final Map teamperSlot = new HashMap<>(); + private static final Map slotbyTeam = new HashMap<>(); + private static int CLOSE_IDEX; + private static Inventory TEAM_SELECT_UI; + + public static void buildTeamSelectInventory() { + TEAM_SELECT_UI = Bukkit.createInventory(null, 9 * (TeamUtils.getTeams().length / 7 + ((TeamUtils.getTeams().length % 7 > 0) ? 1 : 0)) + 18, plugin.getGuiPrefix().append(Component.text(" >> Select Team..."))); + CLOSE_IDEX = TEAM_SELECT_UI.getSize() - 9; + int row = 0; + int cat = 0; + + if (TeamUtils.getTeams().length == 0) { + return; + } + + for (ChallengeTeam team : TeamUtils.getTeams()) { + int slot = row * 9 + cat + 10; + + TEAM_SELECT_UI.setItem(slot, team.getDisplayItem()); + teamperSlot.put(slot, team); + slotbyTeam.put(team, slot); + if (cat < 6) { + cat++; + continue; + } + row++; + cat = 0; + } + + TEAM_SELECT_UI.setItem(CLOSE_IDEX, ItemUtils.createGuiItem(Material.BARRIER, Component.text("Menü verlassen!", ChatUtil.RED))); + for (int i = 0; i < TEAM_SELECT_UI.getSize(); i++) { + if (TEAM_SELECT_UI.getItem(i) == null || TEAM_SELECT_UI.getItem(i).getType() == Material.AIR) { + TEAM_SELECT_UI.setItem(i, ItemUtils.EMPTY_ICON); + } + } + } + + public static void openTeamSelectGui(Player p) { + p.openInventory(TEAM_SELECT_UI); + } + + public static void updateTeamSelectGui() { + for (ChallengeTeam challengeTeam : TeamUtils.getTeams()) { + ArrayList lore = new ArrayList<>(); + if (challengeTeam == null) { + lore.add(Component.empty()); + } else { + int slot = slotbyTeam.get(challengeTeam); + ItemStack stack = TEAM_SELECT_UI.getItem(slot); + ItemMeta meta = stack.getItemMeta(); + for (OfflinePlayer pp : TeamUtils.getPlayersInTeam(challengeTeam)) { + lore.add(Component.text(pp.getName(), ChatUtil.BLUE)); + } + meta.lore(lore); + stack.setItemMeta(meta); + + TEAM_SELECT_UI.setItem(slot, stack); + } + } + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent e) { + if (e.getInventory() == TEAM_SELECT_UI) { + int slot = e.getRawSlot(); + Player p = (Player) e.getWhoClicked(); + ChallengeTeam team = teamperSlot.get(slot); + if (team != null) { + if (e.isLeftClick()) { + TeamUtils.selectTeam(p, team); + p.closeInventory(); + } + } + + if (slot == CLOSE_IDEX) { + p.closeInventory(); + } + + e.setCancelled(true); + } + } +} + diff --git a/Challenge/src/main/java/de/fanta/challenge/guis/eventgui/TeamSettingsGUI.java b/Challenge/src/main/java/de/fanta/challenge/guis/eventgui/TeamSettingsGUI.java new file mode 100644 index 0000000..4493e3c --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/guis/eventgui/TeamSettingsGUI.java @@ -0,0 +1,132 @@ +package de.fanta.challenge.guis.eventgui; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.teams.TeamUtils; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.fanta.challenge.utils.ItemUtils; +import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.ItemStack; + +public class TeamSettingsGUI extends AbstractWindow { + private static final Challenges plugin = Challenges.getPlugin(); + + private static final int TEAM_INDEX = 0; + private static final int TEAM_SELECT_INDEX = 2; + private static final int AUTOTEAM_BY_JOIN_INDEX = 4; + + public static final int INVENTORY_SIZE = 5; + + public TeamSettingsGUI(Player player) { + super(player, Bukkit.createInventory(player, InventoryType.HOPPER, plugin.getGuiPrefix().append(Component.text(" >> Team Settings")))); + } + + @Override + protected void rebuildInventory() { + for (int i = 0; i < INVENTORY_SIZE; i++) { + ItemStack item; + switch (i) { + case TEAM_INDEX -> { + if (!Config.getBoolean("event.teams")) { + item = ItemUtils.createGuiItem(Material.RED_BED, Component.text("Teams deaktiviert", ChatUtil.RED)); + } else { + item = ItemUtils.createGuiItem(Material.LIME_BED, Component.text("Teams aktiviert", ChatUtil.GREEN), true); + } + } + case TEAM_SELECT_INDEX -> { + if (!Config.getBoolean("event.teamselect")) { + item = ItemUtils.createGuiItem(Material.RED_CONCRETE_POWDER, Component.text("Team auswahl deaktiviert", ChatUtil.RED)); + } else { + item = ItemUtils.createGuiItem(Material.LIME_CONCRETE_POWDER, Component.text("Team auswahl aktiviert", ChatUtil.GREEN), true); + } + } + case AUTOTEAM_BY_JOIN_INDEX -> { + if (!Config.getBoolean("event.autoteams")) { + item = ItemUtils.createGuiItem(Material.RED_CONCRETE_POWDER, Component.text("Autoteams by Join deaktiviert", ChatUtil.RED)); + } else { + item = ItemUtils.createGuiItem(Material.LIME_CONCRETE_POWDER, Component.text("Autoteams by Join aktiviert", ChatUtil.GREEN), true); + } + } + default -> item = ItemUtils.EMPTY_ICON; + } + this.getInventory().setItem(i, item); + } + } + + @Override + public void onItemClicked(InventoryClickEvent event) { + Player player = getPlayer(); + if (!mayAffectThisInventory(event)) { + return; + } + + event.setCancelled(true); + if (!getInventory().equals(event.getClickedInventory())) { + return; + } + + int slot = event.getSlot(); + switch (slot) { + case TEAM_INDEX -> { + if (TeamUtils.getTeams() != null && TeamUtils.getTeamSize() != 0) { + if (!Config.getBoolean("event.teams")) { + Config.setValue("event.teams", true); + ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Teams aktiviert", ChatUtil.GREEN)); + plugin.getScoreManager().resetScores(); + plugin.getSBManager().updateEventScoreboard(); + } else { + Config.setValue("event.teams", false); + ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Teams deaktiviert", ChatUtil.RED)); + for (Player pp : Bukkit.getOnlinePlayers()) { + pp.getInventory().removeItem(TeamUtils.selctItem()); + } + } + } else { + ChatUtil.sendErrorMessage(player, "Du musst erst teams anlegen! /event createteams "); + } + } + case TEAM_SELECT_INDEX -> { + if (TeamUtils.getTeams() != null && TeamUtils.getTeamSize() != 0) { + if (!Config.getBoolean("event.teamselect")) { + Config.setValue("event.teamselect", true); + ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Team auswahl aktiviert", ChatUtil.GREEN)); + for (Player pp : Bukkit.getOnlinePlayers()) { + plugin.getSBManager().removeScoreboard(pp); + pp.getInventory().setItem(8, TeamUtils.selctItem()); + } + } else { + Config.setValue("event.teamselect", false); + ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Team auswahl deaktiviert", ChatUtil.RED)); + for (Player pp : Bukkit.getOnlinePlayers()) { + pp.getInventory().removeItem(TeamUtils.selctItem()); + } + } + } else { + ChatUtil.sendErrorMessage(player, "Du musst erst teams anlegen! /event createteams "); + } + } + case AUTOTEAM_BY_JOIN_INDEX -> { + if (TeamUtils.getTeams() != null && TeamUtils.getTeamSize() != 0) { + if (Config.getBoolean("event.autoteams")) { + Config.setValue("event.autoteams", false); + ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Autoteams by Join deaktiviert", ChatUtil.RED)); + } else { + Config.setValue("event.autoteams", true); + ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Autoteams by Join aktiviert", ChatUtil.GREEN)); + } + } else { + ChatUtil.sendErrorMessage(player, "Du musst erst teams anlegen! /event createteams "); + } + } + default -> { + } + } + rebuildInventory(); + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/guis/savegui/ChallengeSaveConfirmGui.java b/Challenge/src/main/java/de/fanta/challenge/guis/savegui/ChallengeSaveConfirmGui.java new file mode 100644 index 0000000..6cd3d0d --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/guis/savegui/ChallengeSaveConfirmGui.java @@ -0,0 +1,78 @@ +package de.fanta.challenge.guis.savegui; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.SaveSlot; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.SaveWorldUtils; +import de.fanta.challenge.utils.ItemUtils; +import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.ItemStack; + +import java.util.HashMap; +import java.util.UUID; + +public class ChallengeSaveConfirmGui extends AbstractWindow { + private static final Challenges plugin = Challenges.getPlugin(); + + private static final int JA_INDEX = 0; + private static final int ITEM_INDEX = 2; + private static final int NEIN_INDEX = 4; + + private static final int INVENTORY_SIZE = 5; + private static final HashMap playerItemList = new HashMap<>(); + private static final HashMap savePlayerList = new HashMap<>(); + private static final HashMap saveSlotList = new HashMap<>(); + + public ChallengeSaveConfirmGui(Player player, UUID savePlayerID, SaveSlot saveSlot, ItemStack displayItem) { + super(player, Bukkit.createInventory(player, InventoryType.HOPPER, plugin.getGuiPrefix().append(Component.text(" >> Save überschreiben?")))); + playerItemList.put(player.getUniqueId(), displayItem); + savePlayerList.put(player.getUniqueId(), savePlayerID); + saveSlotList.put(player.getUniqueId(), saveSlot); + } + + @Override + protected void rebuildInventory() { + for (int i = 0; i < INVENTORY_SIZE; i++) { + ItemStack item; + switch (i) { + case JA_INDEX -> + item = ItemUtils.createGuiItem(Material.LIME_CONCRETE, Component.text("Ja", ChatUtil.GREEN), true); + case ITEM_INDEX -> item = playerItemList.get(getPlayer().getUniqueId()); + case NEIN_INDEX -> + item = ItemUtils.createGuiItem(Material.RED_CONCRETE, Component.text("Nein", ChatUtil.RED), true); + default -> item = ItemUtils.EMPTY_ICON; + } + this.getInventory().setItem(i, item); + } + } + + @Override + public void onItemClicked(InventoryClickEvent event) { + Player player = getPlayer(); + if (!mayAffectThisInventory(event)) { + return; + } + + event.setCancelled(true); + if (!getInventory().equals(event.getClickedInventory())) { + return; + } + + int slot = event.getSlot(); + switch (slot) { + case JA_INDEX -> { + getPlayer().closeInventory(); + SaveWorldUtils.saveWorld(player, savePlayerList.get(player.getUniqueId()).toString(), saveSlotList.get(player.getUniqueId())); + } + case NEIN_INDEX -> getPlayer().closeInventory(); + default -> { + } + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/guis/savegui/ChallengeSaveGui.java b/Challenge/src/main/java/de/fanta/challenge/guis/savegui/ChallengeSaveGui.java new file mode 100644 index 0000000..16a208f --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/guis/savegui/ChallengeSaveGui.java @@ -0,0 +1,197 @@ +package de.fanta.challenge.guis.savegui; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.SaveSlot; +import de.fanta.challenge.ServerType; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.SaveWorldUtils; +import de.fanta.challenge.utils.ItemUtils; +import de.iani.cubesideutils.StringUtil; +import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; +import de.iani.playerUUIDCache.CachedPlayer; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.UUID; +import java.util.logging.Level; + +public class ChallengeSaveGui extends AbstractWindow { + private static final Challenges plugin = Challenges.getPlugin(); + private static final int SAVE_1_INDEX = 1; + private static final int SAVE_2_INDEX = 3; + private static final int SAVE_3_INDEX = 5; + private static final int SAVE_AUTO_INDEX = 7; + private static final int WINDOW_SIZE = 9; + private static final HashMap savePlayerList = new HashMap<>(); + + public ChallengeSaveGui(Player player, CachedPlayer savePlayer) { + super(player, Bukkit.createInventory(null, WINDOW_SIZE, plugin.getGuiPrefix().append(Component.text(" >> Map speichern")))); + savePlayerList.put(player.getUniqueId(), savePlayer.getUniqueId()); + } + + @Override + protected void rebuildInventory() { + Player player = getPlayer(); + UUID savePlayerID = savePlayerList.get(player.getUniqueId()); + File save1; + File save2; + File save3; + File saveAuto; + if (plugin.getServerType() != ServerType.ADVENTURE) { + save1 = new File(plugin.getChallengeSavePath().toFile(), savePlayerID + "/1"); + save2 = new File(plugin.getChallengeSavePath().toFile(), savePlayerID + "/2"); + save3 = new File(plugin.getChallengeSavePath().toFile(), savePlayerID + "/3"); + saveAuto = new File(plugin.getChallengeSavePath().toFile(), savePlayerID + "/autosave"); + } else { + save1 = new File(plugin.getAdventureSavePath().toFile(), savePlayerID + "/1"); + save2 = new File(plugin.getAdventureSavePath().toFile(), savePlayerID + "/2"); + save3 = new File(plugin.getAdventureSavePath().toFile(), savePlayerID + "/3"); + saveAuto = new File(plugin.getAdventureSavePath().toFile(), savePlayerID + "/autosave"); + } + + for (int i = 0; i < WINDOW_SIZE; i++) { + ItemStack item; + switch (i) { + case SAVE_1_INDEX -> item = getDisplayItem(player, SaveSlot.SLOT_1, save1); + case SAVE_2_INDEX -> item = getDisplayItem(player, SaveSlot.SLOT_2, save2); + case SAVE_3_INDEX -> item = getDisplayItem(player, SaveSlot.SLOT_3, save3); + case SAVE_AUTO_INDEX -> item = getDisplayItem(player, SaveSlot.SLOT_AUTO, saveAuto); + default -> item = ItemUtils.EMPTY_ICON; + } + this.getInventory().setItem(i, item); + } + } + + @Override + public void onItemClicked(InventoryClickEvent event) { + Player player = getPlayer(); + if (!mayAffectThisInventory(event)) { + return; + } + + event.setCancelled(true); + if (!getInventory().equals(event.getClickedInventory())) { + return; + } + + Player p = getPlayer(); + UUID savePlayerID = savePlayerList.get(p.getUniqueId()); + File save1; + File save2; + File save3; + if (plugin.getServerType() != ServerType.ADVENTURE) { + save1 = new File(plugin.getChallengeSavePath().toFile(), savePlayerID + "/1"); + save2 = new File(plugin.getChallengeSavePath().toFile(), savePlayerID + "/2"); + save3 = new File(plugin.getChallengeSavePath().toFile(), savePlayerID + "/3"); + } else { + save1 = new File(plugin.getAdventureSavePath().toFile(), savePlayerID + "/1"); + save2 = new File(plugin.getAdventureSavePath().toFile(), savePlayerID + "/2"); + save3 = new File(plugin.getAdventureSavePath().toFile(), savePlayerID + "/3"); + } + + int slot = event.getSlot(); + switch (slot) { + case SAVE_1_INDEX -> { + if (!p.hasPermission("challenge.save.slot1")) { + ChatUtil.sendErrorMessage(p, "Für diesen Slot hast du keine Rechte!"); + return; + } + if (!save1.isDirectory()) { + player.closeInventory(); + SaveWorldUtils.saveWorld(player, savePlayerID.toString(), SaveSlot.SLOT_1); + return; + } + new ChallengeSaveConfirmGui(player, savePlayerID, SaveSlot.SLOT_1, event.getCurrentItem()).open(); + } + case SAVE_2_INDEX -> { + if (!p.hasPermission("challenge.save.slot2")) { + ChatUtil.sendErrorMessage(p, "Für diesen Slot brauchst du VIP!"); + return; + } + if (!save2.isDirectory()) { + player.closeInventory(); + SaveWorldUtils.saveWorld(player, savePlayerID.toString(), SaveSlot.SLOT_2); + return; + } + new ChallengeSaveConfirmGui(player, savePlayerID, SaveSlot.SLOT_2, event.getCurrentItem()).open(); + } + case SAVE_3_INDEX -> { + if (!p.hasPermission("challenge.save.slot3")) { + ChatUtil.sendErrorMessage(p, "Für diesen Slot brauchst du VIP!"); + return; + } + if (!save3.isDirectory()) { + player.closeInventory(); + SaveWorldUtils.saveWorld(player, savePlayerID.toString(), SaveSlot.SLOT_3); + return; + } + new ChallengeSaveConfirmGui(player, savePlayerID, SaveSlot.SLOT_3, event.getCurrentItem()).open(); + } + default -> { + } + } + } + + private static String getFileDate(YamlConfiguration serverConfig) { + return StringUtil.formatDate(serverConfig.getLong("saveTime", 0)); + } + + private static ItemStack getDisplayItem(Player player, SaveSlot saveSlot, File save) { + ItemStack item; + if (player.hasPermission(saveSlot.getPermission())) { + if (save.isDirectory()) { + File mapConfig = new File(save, "/Challenges/serverconfig.yml"); + Material displayItem = null; + String displayName = null; + YamlConfiguration serverConfig = new YamlConfiguration(); + try { + serverConfig.load(mapConfig); + String itemType = serverConfig.getString("displayItem.item"); + String itemName = serverConfig.getString("displayItem.name"); + if (itemType != null) { + try { + displayItem = Material.valueOf(itemType); + } catch (IllegalArgumentException ignore) { + } + } + if (itemName != null) { + displayName = itemName; + } + } catch (IOException | InvalidConfigurationException ex) { + plugin.getLogger().log(Level.SEVERE, "Fehler beim laden der config", ex); + } + + ItemStack stack = new ItemStack(displayItem != null ? displayItem : Material.MAP); + ItemMeta meta = stack.getItemMeta(); + meta.displayName(displayName != null ? Component.text(displayName) : Component.text("Save " + saveSlot.getSlot(), ChatUtil.GREEN)); + + if (saveSlot == SaveSlot.SLOT_AUTO) { + meta.lore(List.of(Component.text("AutoSave kann nicht überschrieben werden!", ChatUtil.RED), Component.text("Gespeichert am " + getFileDate(serverConfig), ChatUtil.GREEN))); + } else { + meta.lore(List.of(Component.text("Gespeichert am " + getFileDate(serverConfig), ChatUtil.GREEN))); + } + + stack.setItemMeta(meta); + item = stack; + + + } else { + item = ItemUtils.createGuiItem(Material.LIME_STAINED_GLASS_PANE, Component.text("Frei", ChatUtil.GREEN)); + } + } else { + item = ItemUtils.createGuiItem(Material.BARRIER, Component.text("Für diesen Slot brauchst du VIP", ChatUtil.RED)); + } + return item; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/guis/settingsgui/ChallengesGui.java b/Challenge/src/main/java/de/fanta/challenge/guis/settingsgui/ChallengesGui.java new file mode 100644 index 0000000..c2e8990 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/guis/settingsgui/ChallengesGui.java @@ -0,0 +1,504 @@ +package de.fanta.challenge.guis.settingsgui; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.challenges.AllAdvancementsChallenge; +import de.fanta.challenge.challenges.AllItemsChallenge; +import de.fanta.challenge.challenges.MLGChallenge; +import de.fanta.challenge.challenges.ManHunt; +import de.fanta.challenge.challenges.WorldBorderLevelChallenge; +import de.fanta.challenge.guis.challengesettingsguis.BedrockWallSettingsGui; +import de.fanta.challenge.guis.challengesettingsguis.LevelBorderSettingsGui; +import de.fanta.challenge.guis.challengesettingsguis.MLGSettingsGui; +import de.fanta.challenge.guis.challengesettingsguis.NoSneakSettingsGui; +import de.fanta.challenge.guis.challengesettingsguis.TiedTogetherSettingsGui; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.fanta.challenge.utils.ItemUtils; +import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; +import de.iani.cubesideutils.bukkit.items.CustomHeads; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; + +public class ChallengesGui extends AbstractWindow { + + private static final Challenges plugin = Challenges.getPlugin(); + + public static final int WINDOW_SIZE = 54; + + private static final int GOAL_INDEX = 0; + private static final int SHUFFLE_RANDOM_DROP_INDEX = 1; + + private static final int BACK_INDEX = 7; + private static final int CLOSE_INDEX = 8; + + private static final int SHARED_DAMAGE_INDEX = 19; + private static final int FLOOR_IS_LAVA_INDEX = 20; + private static final int CHUNK_RANDOM_EFFECT_INDEX = 21; + private static final int BEDROCK_WALL_INDEX = 22; + private static final int MLG_INDEX = 23; + private static final int WORLD_BORDER_LEVEL_INDEX = 24; + private static final int ALL_ITEMS_INDEX = 25; + + private static final int DEATH_ON_XP_INDEX = 28; + private static final int DEATH_ON_FALLDAMAGE_INDEX = 29; + private static final int DEATH_ON_SPRINT_INDEX = 30; + private static final int DEATH_ON_JUMP_INDEX = 31; + private static final int CLEAR_INVENTAR_ON_DAMAGE_INDEX = 32; + private static final int ICE_RUNNER_INDEX = 33; + private static final int RANDOM_MOBS_INDEX = 34; + + private static final int RANDOM_DROPS_INDEX = 37; + private static final int DAMAGE_ON_SNEAK_INDEX = 38; + private static final int TIED_TOGETHER_INDEX = 39; + private static final int MOB_REMOVE_WORLD_INDEX = 40; + private static final int ALL_ADVANCEMENT_INDEX = 41; + private static final int MANHUNT_INDEX = 42; + + public ChallengesGui(Player player) { + super(player, Bukkit.createInventory(player, WINDOW_SIZE, plugin.getGuiPrefix().append(Component.text(" >> Challenges")))); + } + + @Override + public void onItemClicked(InventoryClickEvent event) { + Player player = getPlayer(); + if (!mayAffectThisInventory(event)) { + return; + } + + event.setCancelled(true); + if (!getInventory().equals(event.getClickedInventory())) { + return; + } + + int slot = event.getSlot(); + switch (slot) { + case GOAL_INDEX -> { + EntityType entityType = EntityType.valueOf(Config.getString("goal").toUpperCase()); + if (entityType == EntityType.ENDER_DRAGON) { + Config.setValue("goal", EntityType.WITHER.name()); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Ziel: Töte den Wither", ChatUtil.GREEN)); + } else if (entityType == EntityType.WITHER) { + Config.setValue("goal", EntityType.WARDEN.name()); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Ziel: Töte den Warden", ChatUtil.GREEN)); + } else if (entityType == EntityType.WARDEN) { + Config.setValue("goal", EntityType.ENDER_DRAGON.name()); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Ziel: Töte den Enderdrachen", ChatUtil.GREEN)); + } + } + case SHUFFLE_RANDOM_DROP_INDEX -> { + plugin.rndDrops.shuffleItems(); + plugin.rndDrops.saveItems(); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Zufällige Drops neu gemischt!", ChatUtil.GREEN)); + } + + case SHARED_DAMAGE_INDEX -> { + if (Config.getBoolean("sharedmg")) { + Config.setValue("sharedmg", false); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Geteielter Schaden deaktiviert", ChatUtil.RED)); + } else { + Config.setValue("sharedmg", true); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Geteielter Schaden aktiviert", ChatUtil.GREEN)); + } + } + case FLOOR_IS_LAVA_INDEX -> { + if (Config.getBoolean("lavafloor")) { + Config.setValue("lavafloor", false); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Der Boden ist Lava deaktiviert", ChatUtil.RED)); + } else { + Config.setValue("lavafloor", true); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Der Boden ist Lava aktiviert", ChatUtil.GREEN)); + } + } + case CHUNK_RANDOM_EFFECT_INDEX -> { + if (Config.getBoolean("randomeffect")) { + Config.setValue("randomeffect", false); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Chunk Random Effekt deaktiviert", ChatUtil.RED)); + } else { + Config.setValue("randomeffect", true); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Chunk Random Effekt aktiviert", ChatUtil.GREEN)); + } + } + case BEDROCK_WALL_INDEX -> { + if (event.isLeftClick()) { + if (Config.getBoolean("bedrockwall")) { + Config.setValue("bedrockwall", false); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Bedrock Wand deaktiviert", ChatUtil.RED)); + } else { + Config.setValue("bedrockwall", true); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Bedrock Wand aktiviert", ChatUtil.GREEN)); + } + } else if (event.isRightClick()) { + new BedrockWallSettingsGui(player).open(); + } + } + case MLG_INDEX -> { + if (event.isLeftClick()) { + if (Config.getBoolean("mlg.enabled")) { + Config.setValue("mlg.enabled", false); + MLGChallenge.setRunning(false); + MLGChallenge.stopTask(); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("MLG deaktiviert", ChatUtil.RED)); + } else { + Config.setValue("mlg.enabled", true); + MLGChallenge.setRunning(true); + MLGChallenge.startTask(); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("MLG aktiviert", ChatUtil.GREEN)); + } + } else if (event.isRightClick()) { + new MLGSettingsGui(player).open(); + } + } + case WORLD_BORDER_LEVEL_INDEX -> { + if (event.isLeftClick()) { + if (Config.getBoolean("worldborderlevel")) { + Config.setValue("worldborderlevel", false); + for (Player pp : Bukkit.getOnlinePlayers()) { + if (pp.getWorldBorder() != null) { + pp.getWorldBorder().reset(); + } + } + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("World Border Level deaktiviert", ChatUtil.RED)); + } else { + Config.setValue("worldborderlevel", true); + new WorldBorderLevelChallenge(); + WorldBorderLevelChallenge.borderSync(); + for (Player pp : Bukkit.getOnlinePlayers()) { + pp.teleportAsync(pp.getWorld().getSpawnLocation()); + } + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("World Border Level aktiviert", ChatUtil.GREEN)); + } + } else if (event.isRightClick()) { + new LevelBorderSettingsGui(player).open(); + } + + } + case ALL_ITEMS_INDEX -> { + if (Config.getBoolean("allitems")) { + Config.setValue("allitems", false); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("All Items deaktiviert", ChatUtil.RED)); + } else { + Config.setValue("allitems", true); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("All Items aktiviert", ChatUtil.GREEN)); + AllItemsChallenge.start(); + } + } + + case DEATH_ON_XP_INDEX -> { + if (Config.getBoolean("xpdeath")) { + Config.setValue("xpdeath", false); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Sterben durch Einsammeln von XP deaktiviert", ChatUtil.RED)); + } else { + Config.setValue("xpdeath", true); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Sterben durch Einsammeln von XP aktiviert", ChatUtil.GREEN)); + } + } + case DEATH_ON_FALLDAMAGE_INDEX -> { + if (Config.getBoolean("deathonfall")) { + Config.setValue("deathonfall", false); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Sterben durch Fallschaden deaktiviert", ChatUtil.RED)); + } else { + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Sterben durch Fallschaden aktiviert", ChatUtil.GREEN)); + Config.setValue("deathonfall", true); + } + } + case DEATH_ON_SPRINT_INDEX -> { + if (Config.getBoolean("deathonsprint")) { + Config.setValue("deathonsprint", false); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Sterben durch Sprinten deaktiviert", ChatUtil.RED)); + } else { + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Sterben durch Sprinten aktiviert", ChatUtil.GREEN)); + Config.setValue("deathonsprint", true); + } + } + case DEATH_ON_JUMP_INDEX -> { + if (Config.getBoolean("deathonjump")) { + Config.setValue("deathonjump", false); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Sterben durch Springen deaktiviert", ChatUtil.RED)); + } else { + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Sterben durch Springen aktiviert", ChatUtil.GREEN)); + Config.setValue("deathonjump", true); + } + } + case CLEAR_INVENTAR_ON_DAMAGE_INDEX -> { + if (Config.getBoolean("clinvdmg")) { + Config.setValue("clinvdmg", false); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Inventar von allen löschen wenn einer Schaden bekommt deaktiviert", ChatUtil.RED)); + } else { + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Inventar von allen löschen wenn einer Schaden bekommt aktiviert", ChatUtil.GREEN)); + Config.setValue("clinvdmg", true); + } + } + case ICE_RUNNER_INDEX -> { + if (Config.getBoolean("icerunner")) { + Config.setValue("icerunner", false); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Ice-Runner deaktiviert", ChatUtil.RED)); + } else { + Config.setValue("icerunner", true); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Ice-Runner aktiviert", ChatUtil.GREEN)); + } + } + case RANDOM_MOBS_INDEX -> { + if (Config.getBoolean("randommobs")) { + Config.setValue("randommobs", false); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Random Mobs deaktiviert", ChatUtil.RED)); + } else { + Config.setValue("randommobs", true); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Random Mobs aktiviert", ChatUtil.GREEN)); + } + } + + case RANDOM_DROPS_INDEX -> { + if (Config.getBoolean("rnddrops")) { + Config.setValue("rnddrops", false); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Zufällige Drops deaktiviert", ChatUtil.RED)); + } else { + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Zufällige Drops aktiviert", ChatUtil.GREEN)); + Config.setValue("rnddrops", true); + } + } + case DAMAGE_ON_SNEAK_INDEX -> { + if (event.isLeftClick()) { + if (Config.getBoolean("damageonsneak")) { + Config.setValue("damageonsneak", false); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Schaden bekommen beim Schleichen deaktiviert", ChatUtil.RED)); + } else { + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Schaden bekommen beim Schleichen aktiviert", ChatUtil.GREEN)); + Config.setValue("damageonsneak", true); + } + } else if (event.isRightClick()) { + new NoSneakSettingsGui(player).open(); + } + } + case TIED_TOGETHER_INDEX -> { + if (event.isLeftClick()) { + if (Config.getBoolean("tiedtogether")) { + Config.setValue("tiedtogether", false); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Zusammengebunden deaktiviert", ChatUtil.RED)); + } else { + Config.setValue("tiedtogether", true); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Zusammengebunden aktiviert", ChatUtil.GREEN)); + } + } else if (event.isRightClick()) { + new TiedTogetherSettingsGui(player).open(); + } + } + case MOB_REMOVE_WORLD_INDEX -> { + if (Config.getBoolean("mobremoveworld")) { + Config.setValue("mobremoveworld", false); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Mobs entfernen Welt deaktiviert", ChatUtil.RED)); + } else { + Config.setValue("mobremoveworld", true); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Mobs entfernen Welt aktiviert", ChatUtil.GREEN)); + } + } + case ALL_ADVANCEMENT_INDEX -> { + if (Config.getBoolean("alladvancements")) { + AllAdvancementsChallenge.stop(); + Config.setValue("alladvancements", false); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("All Advancement deaktiviert", ChatUtil.RED)); + } else { + AllAdvancementsChallenge.start(); + Config.setValue("alladvancements", true); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("All Advancement aktiviert", ChatUtil.GREEN)); + } + } + case MANHUNT_INDEX -> { + if (Config.getBoolean("manhunt")) { + ManHunt.stop(); + Config.setValue("manhunt", false); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Manhunt deaktiviert", ChatUtil.RED)); + } else { + ManHunt.start(); + Config.setValue("manhunt", true); + ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Manhunt aktiviert", ChatUtil.GREEN)); + } + } + default -> { + } + } + rebuildInventory(); + + switch (slot) { + case BACK_INDEX -> new MainGui(player).open(); + case CLOSE_INDEX -> player.closeInventory(); + } + } + + @Override + protected void rebuildInventory() { + for (int i = 0; i < WINDOW_SIZE; i++) { + ItemStack item; + switch (i) { + case GOAL_INDEX -> { + EntityType entityType = EntityType.valueOf(Config.getString("goal").toUpperCase()); + if (entityType == EntityType.ENDER_DRAGON) { + item = ItemUtils.createGuiItem(Material.DRAGON_HEAD, Component.text("Ziel: Enderdrachen töten", ChatUtil.GREEN)); + } else if (entityType == EntityType.WITHER) { + item = ItemUtils.createGuiItem(Material.WITHER_SKELETON_SKULL, Component.text("Ziel: Wither töten", ChatUtil.GREEN)); + } else if (entityType == EntityType.WARDEN) { + item = ItemUtils.createGuiItem(Material.SCULK_SHRIEKER, Component.text("Ziel: Warden töten", ChatUtil.GREEN)); + } else { + item = ItemUtils.createGuiItem(Material.DRAGON_HEAD, Component.text("Ziel: Enderdrachen töten", ChatUtil.GREEN)); + } + } + case SHUFFLE_RANDOM_DROP_INDEX -> + item = ItemUtils.createGuiItem(Material.CHORUS_FLOWER, Component.text("Zufällige Drops neu mischen", ChatUtil.GREEN)); + case BACK_INDEX -> + item = CustomHeads.RAINBOW_ARROW_BACKWARD_II.getHead(Component.text("Zurück", ChatUtil.RED)); + case CLOSE_INDEX -> + item = CustomHeads.RAINBOW_X.getHead(Component.text("Menü verlassen", ChatUtil.RED)); + + case SHARED_DAMAGE_INDEX -> { + if (Config.getBoolean("sharedmg")) { + item = ItemUtils.createGuiItem(Material.MELON_SLICE, Component.text("Geteilter Schaden aktiviert", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.MELON_SLICE, Component.text("Geteilter Schaden deaktiviert", ChatUtil.RED)); + } + } + case FLOOR_IS_LAVA_INDEX -> { + if (Config.getBoolean("lavafloor")) { + item = ItemUtils.createGuiItem(Material.MAGMA_BLOCK, Component.text("Der Boden ist Lava aktiviert", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.MAGMA_BLOCK, Component.text("Der Boden ist Lava deaktiviert", ChatUtil.RED)); + } + } + case CHUNK_RANDOM_EFFECT_INDEX -> { + if (Config.getBoolean("randomeffect")) { + item = ItemUtils.createGuiItem(Material.SPLASH_POTION, Component.text("Chunk Random Effekt aktiviert", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.SPLASH_POTION, Component.text("Chunk Random Effekt deaktiviert", ChatUtil.RED)); + } + } + case BEDROCK_WALL_INDEX -> { + if (Config.getBoolean("bedrockwall")) { + item = ItemUtils.createGuiItem(Material.BEDROCK, Component.text("Bedrock Wand aktiviert", ChatUtil.GREEN), true, Component.text("Linksklick = ", ChatUtil.GREEN).append(Component.text("Deaktivieren", ChatUtil.RED)), Component.text("Rechtsklick = Einstellungen", ChatUtil.GREEN)); + } else { + item = ItemUtils.createGuiItem(Material.BEDROCK, Component.text("Bedrock Wand deaktiviert", ChatUtil.RED), Component.text("Linksklick = Aktivieren", ChatUtil.GREEN), Component.text("Rechtsklick = Einstellungen", ChatUtil.GREEN)); + } + } + case MLG_INDEX -> { + if (Config.getBoolean("mlg.enabled")) { + item = ItemUtils.createGuiItem(Material.WATER_BUCKET, Component.text("MLG aktiviert", ChatUtil.GREEN), true, Component.text("Linksklick = ", ChatUtil.GREEN).append(Component.text("Deaktivieren", ChatUtil.RED)), Component.text("Rechtsklick = Einstellungen", ChatUtil.GREEN)); + } else { + item = ItemUtils.createGuiItem(Material.WATER_BUCKET, Component.text("MLG deaktiviert", ChatUtil.RED), Component.text("Linksklick = Aktivieren", ChatUtil.GREEN), Component.text("Rechtsklick = Einstellungen", ChatUtil.GREEN)); + } + } + case WORLD_BORDER_LEVEL_INDEX -> { + if (Config.getBoolean("worldborderlevel")) { + item = ItemUtils.createGuiItem(Material.STRUCTURE_VOID, Component.text("World Border Level aktiviert", ChatUtil.GREEN), true, Component.text("Linksklick = ", ChatUtil.GREEN).append(Component.text("Deaktivieren", ChatUtil.RED)), Component.text("Rechtsklick = Einstellungen", ChatUtil.GREEN)); + } else { + item = ItemUtils.createGuiItem(Material.STRUCTURE_VOID, Component.text("World Border Level deaktiviert", ChatUtil.RED), Component.text("Linksklick = Aktivieren", ChatUtil.GREEN), Component.text("Rechtsklick = Einstellungen", ChatUtil.GREEN)); + } + } + case ALL_ITEMS_INDEX -> { + if (Config.getBoolean("allitems")) { + item = ItemUtils.createGuiItem(Material.ITEM_FRAME, Component.text("All Items aktiviert", ChatUtil.GREEN), true, Component.text("/skipitem um ein Item zu überspringen", ChatUtil.GREEN)); + } else { + item = ItemUtils.createGuiItem(Material.ITEM_FRAME, Component.text("All Items deaktiviert", ChatUtil.RED), Component.text("/skipitem um ein Item zu überspringen", ChatUtil.GREEN)); + } + } + + case DEATH_ON_XP_INDEX -> { + if (Config.getBoolean("xpdeath")) { + item = ItemUtils.createGuiItem(Material.ENCHANTING_TABLE, Component.text("Sterben durch XP aktiviert", ChatUtil.GREEN), true, Component.text("Wenn ein Spieler XP einsammelt wird er sterben", ChatUtil.GREEN)); + } else { + item = ItemUtils.createGuiItem(Material.ENCHANTING_TABLE, Component.text("Sterben durch XP deaktiviert", ChatUtil.RED), Component.text("Wenn ein Spieler XP einsammelt wird er sterben", ChatUtil.RED)); + } + } + case DEATH_ON_FALLDAMAGE_INDEX -> { + if (Config.getBoolean("deathonfall")) { + item = ItemUtils.createGuiItem(Material.NETHERITE_BOOTS, Component.text("Tod bei Fallschaden aktiviert", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.NETHERITE_BOOTS, Component.text("Tod bei Fallschaden deaktiviert", ChatUtil.RED)); + } + } + case DEATH_ON_SPRINT_INDEX -> { + if (Config.getBoolean("deathonsprint")) { + item = ItemUtils.createGuiItem(Material.POTION, Component.text("Tod beim Sprinten aktiviert", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.GLASS_BOTTLE, Component.text("Tod beim Sprinten deaktiviert", ChatUtil.RED)); + } + } + case DEATH_ON_JUMP_INDEX -> { + if (Config.getBoolean("deathonjump")) { + item = ItemUtils.createGuiItem(Material.RABBIT_FOOT, Component.text("Tod beim Springen aktiviert", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.RABBIT_FOOT, Component.text("Tod beim Springen deaktiviert", ChatUtil.RED)); + } + } + case CLEAR_INVENTAR_ON_DAMAGE_INDEX -> { + if (Config.getBoolean("clinvdmg")) { + item = ItemUtils.createGuiItem(Material.BARRIER, Component.text("Alle Inventare löschen wenn ein Spieler Schaden bekommt aktiviert", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.BARRIER, Component.text("Alle Inventare löschen wenn ein Spieler Schaden bekommt deaktiviert", ChatUtil.RED)); + } + } + case ICE_RUNNER_INDEX -> { + if (Config.getBoolean("icerunner")) { + item = ItemUtils.createGuiItem(Material.BLUE_ICE, Component.text("Ice-Runner aktiviert", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.BLUE_ICE, Component.text("Ice-Runner deaktiviert", ChatUtil.RED)); + } + } + case RANDOM_MOBS_INDEX -> { + if (Config.getBoolean("randommobs")) { + item = ItemUtils.createGuiItem(Material.PARROT_SPAWN_EGG, Component.text("Random Mobs aktiviert", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.PARROT_SPAWN_EGG, Component.text("Random Mobs deaktiviert", ChatUtil.RED)); + } + } + + case RANDOM_DROPS_INDEX -> { + if (Config.getBoolean("rnddrops")) { + item = ItemUtils.createGuiItem(Material.NETHERITE_PICKAXE, Component.text("Zufällige Drops aktiviert", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.NETHERITE_PICKAXE, Component.text("Zufällige Drops deaktiviert", ChatUtil.RED)); + } + } + case DAMAGE_ON_SNEAK_INDEX -> { + if (Config.getBoolean("damageonsneak")) { + item = ItemUtils.createGuiItem(Material.SMOOTH_STONE_SLAB, Component.text("Schaden beim Schleichen aktiviert", ChatUtil.GREEN), true, Component.text("Schaden beim Schleichen: " + Config.getDouble("sneakdmg"), ChatUtil.GREEN), Component.text("Linksklick = ", ChatUtil.GREEN).append(Component.text("Deaktivieren", ChatUtil.RED)), Component.text("Rechtsklick = Einstellungen", ChatUtil.GREEN)); + + } else { + item = ItemUtils.createGuiItem(Material.SMOOTH_STONE_SLAB, Component.text("Schaden beim Schleichen deaktiviert", ChatUtil.RED), Component.text("Linksklick = Aktivieren", ChatUtil.GREEN), Component.text("Rechtsklick = Einstellungen", ChatUtil.GREEN)); + } + } + case TIED_TOGETHER_INDEX -> { + if (Config.getBoolean("tiedtogether")) { + item = ItemUtils.createGuiItem(Material.DIAMOND_BOOTS, Component.text("Zusammengebunden aktiviert", ChatUtil.GREEN), true, Component.text("Maximale Entfernung der Spieler: " + Config.getDouble("playerrange"), ChatUtil.GREEN), Component.text("Linksklick = ", ChatUtil.GREEN).append(Component.text("Deaktivieren", ChatUtil.RED)), Component.text("Rechtsklick = Einstellungen", ChatUtil.GREEN)); + } else { + item = ItemUtils.createGuiItem(Material.DIAMOND_BOOTS, Component.text("Zusammengebunden deaktiviert", ChatUtil.RED), Component.text("Linksklick = Aktivieren", ChatUtil.GREEN), Component.text("Rechtsklick = Einstellungen", ChatUtil.GREEN)); + } + } + case MOB_REMOVE_WORLD_INDEX -> { + if (Config.getBoolean("mobremoveworld")) { + item = ItemUtils.createGuiItem(Material.BLACK_CONCRETE, Component.text("Mobs entfernen Welt aktiviert", ChatUtil.GREEN), true, Component.text("Monster und Tiere löschen hinter sich die Welt.", ChatUtil.GREEN)); + } else { + item = ItemUtils.createGuiItem(Material.BLACK_CONCRETE, Component.text("Mobs entfernen Welt deaktiviert", ChatUtil.RED), Component.text("Monster und Tiere löschen hinter sich die Welt.", ChatUtil.GREEN)); + } + } + case ALL_ADVANCEMENT_INDEX -> { + if (Config.getBoolean("alladvancements")) { + item = ItemUtils.createGuiItem(Material.KNOWLEDGE_BOOK, Component.text("All Advancement aktiviert", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.KNOWLEDGE_BOOK, Component.text("All Advancement deaktiviert", ChatUtil.RED)); + } + } + case MANHUNT_INDEX -> { + if (Config.getBoolean("manhunt")) { + item = ItemUtils.createGuiItem(Material.COMPASS, Component.text("ManHunt aktiviert", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.COMPASS, Component.text("ManHunt deaktiviert", ChatUtil.RED)); + } + } + default -> item = ItemUtils.EMPTY_ICON; + } + this.getInventory().setItem(i, item); + } + } +} \ No newline at end of file diff --git a/Challenge/src/main/java/de/fanta/challenge/guis/settingsgui/MainGui.java b/Challenge/src/main/java/de/fanta/challenge/guis/settingsgui/MainGui.java new file mode 100644 index 0000000..d6d4e45 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/guis/settingsgui/MainGui.java @@ -0,0 +1,80 @@ +package de.fanta.challenge.guis.settingsgui; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.ServerType; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.ItemUtils; +import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; +import de.iani.cubesideutils.bukkit.items.CustomHeads; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; + +public class MainGui extends AbstractWindow { + + private static final Challenges plugin = Challenges.getPlugin(); + + public static final int WINDOW_SIZE = 27; + + private static final int CLOSE_IDEX = 8; + private static final int CHALLENGES_INDEX = 10; + private static final int OTHER_SETTINGS_INDEX = 13; + private static final int SERVER_SETTINGS_INDEX = 16; + + public MainGui(Player player) { + super(player, Bukkit.createInventory(null, WINDOW_SIZE, plugin.getGuiPrefix().append(Component.text(" >> Settings")))); + } + + @Override + public void onItemClicked(InventoryClickEvent event) { + Player player = getPlayer(); + if (!mayAffectThisInventory(event)) { + return; + } + + event.setCancelled(true); + if (!getInventory().equals(event.getClickedInventory())) { + return; + } + + int slot = event.getSlot(); + switch (slot) { + case CHALLENGES_INDEX -> { + if (plugin.getServerType() != ServerType.ADVENTURE) { + new ChallengesGui(player).open(); + } + } + case OTHER_SETTINGS_INDEX -> new OtherSettingsGui(player).open(); + case SERVER_SETTINGS_INDEX -> new ServerSettingsGui(player).open(); + case CLOSE_IDEX -> player.closeInventory(); + default -> { + } + } + } + + @Override + protected void rebuildInventory() { + for (int i = 0; i < WINDOW_SIZE; i++) { + ItemStack item; + switch (i) { + case CHALLENGES_INDEX -> { + if (plugin.getServerType() != ServerType.ADVENTURE) { + item = ItemUtils.createGuiItem(Material.REPEATER, Component.text("Challenges", ChatUtil.GREEN)); + } else { + item = ItemUtils.createGuiItem(Material.BARRIER, Component.text("Challenges sind nur bei /tt challenge verfügbar", ChatUtil.RED)); + } + } + case OTHER_SETTINGS_INDEX -> + item = ItemUtils.createGuiItem(Material.COMPARATOR, Component.text("Andere Einstellungen", ChatUtil.GREEN)); + case SERVER_SETTINGS_INDEX -> + item = ItemUtils.createGuiItem(Material.COMMAND_BLOCK, Component.text("Server Einstellungen", ChatUtil.GREEN)); + case CLOSE_IDEX -> item = CustomHeads.RAINBOW_X.getHead(Component.text("Menü verlassen", ChatUtil.RED)); + default -> item = ItemUtils.EMPTY_ICON; + } + this.getInventory().setItem(i, item); + } + } +} \ No newline at end of file diff --git a/Challenge/src/main/java/de/fanta/challenge/guis/settingsgui/OtherSettingsGui.java b/Challenge/src/main/java/de/fanta/challenge/guis/settingsgui/OtherSettingsGui.java new file mode 100644 index 0000000..32894f0 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/guis/settingsgui/OtherSettingsGui.java @@ -0,0 +1,208 @@ +package de.fanta.challenge.guis.settingsgui; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.guis.challengesettingsguis.BackPackSettingsGui; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.fanta.challenge.utils.ItemUtils; +import de.iani.cubesideutils.bukkit.MinecraftVersion; +import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; +import de.iani.cubesideutils.bukkit.items.CustomHeads; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; + +public class OtherSettingsGui extends AbstractWindow { + + private static final Challenges plugin = Challenges.getPlugin(); + + public static final int INVENTORY_SIZE = 45; + + private static final int BACK_INDEX = 7; + private static final int CLOSE_IDEX = 8; + + private static final int VILLAGER_TRADE_LIMITS_INDEX = 19; + private static final int DAMAGE_IN_CHAT_INDEX = 20; + private static final int TELEPORT_COMMAND_INDEX = 21; + private static final int HP_ON_TAB_INDEX = 22; + private static final int SMELT_ORES_ON_BREAK_INDEX = 23; + private static final int FAST_FURNACE_INDEX = 24; //TODO: SPEED SETTING + private static final int BACKPACK_INDEX = 25; + + private static final int GRAVESTONE_INDEX = 28; + + public OtherSettingsGui(Player player) { + super(player, Bukkit.createInventory(null, INVENTORY_SIZE, plugin.getGuiPrefix().append(Component.text(" >> Other Settings")))); + } + + @Override + public void onItemClicked(InventoryClickEvent event) { + Player player = getPlayer(); + if (!mayAffectThisInventory(event)) { + return; + } + + event.setCancelled(true); + if (!getInventory().equals(event.getClickedInventory())) { + return; + } + + int slot = event.getSlot(); + switch (slot) { + case VILLAGER_TRADE_LIMITS_INDEX -> { + if (Config.getBoolean("disablevillagertradelimits")) { + ChatUtil.sendTitleToAll(Component.text("Einstellungen"), Component.text("Villager Trade Limits aktiviert", ChatUtil.RED)); + Config.setValue("disablevillagertradelimits", false); + } else { + ChatUtil.sendTitleToAll(Component.text("Einstellungen"), Component.text("Villager Trade Limits deaktiviert (Default)", ChatUtil.GREEN)); + Config.setValue("disablevillagertradelimits", true); + } + } + case DAMAGE_IN_CHAT_INDEX -> { + if (Config.getBoolean("dmginchat")) { + ChatUtil.sendTitleToAll(Component.text("Einstellungen"), Component.text("Schaden im Chat anzeigen deaktiviert", ChatUtil.RED)); + Config.setValue("dmginchat", false); + } else { + ChatUtil.sendTitleToAll(Component.text("Einstellungen"), Component.text("Schaden im Chat anzeigen aktiviert", ChatUtil.GREEN)); + Config.setValue("dmginchat", true); + } + } + case TELEPORT_COMMAND_INDEX -> { + if (Config.getBoolean("teleportcommand")) { + ChatUtil.sendTitleToAll(Component.text("Einstellungen"), Component.text("Teleport Command deaktiviert", ChatUtil.RED)); + Config.setValue("teleportcommand", false); + } else { + ChatUtil.sendTitleToAll(Component.text("Einstellungen"), Component.text("Teleport Command aktiviert", ChatUtil.GREEN)); + Config.setValue("teleportcommand", true); + } + } + case HP_ON_TAB_INDEX -> { + if (Config.getBoolean("tabhp")) { + ChatUtil.sendTitleToAll(Component.text("Einstellungen"), Component.text("Herzen in der Tablist anzeigen deaktiviert", ChatUtil.RED)); + Config.setValue("tabhp", false); + } else { + ChatUtil.sendTitleToAll(Component.text("Einstellungen"), Component.text("Herzen in der Tablist anzeigen aktiviert", ChatUtil.GREEN)); + Config.setValue("tabhp", true); + } + plugin.getSBManager().updateTabHP(); + } + case SMELT_ORES_ON_BREAK_INDEX -> { + if (Config.getBoolean("silkore")) { + ChatUtil.sendTitleToAll(Component.text("Einstellungen"), Component.text("Abgebaute Erze droppen Barren deaktiviert", ChatUtil.RED)); + Config.setValue("silkore", false); + } else { + ChatUtil.sendTitleToAll(Component.text("Einstellungen"), Component.text("Abgebaute Erze droppen Barren aktiviert", ChatUtil.GREEN)); + Config.setValue("silkore", true); + } + } + case FAST_FURNACE_INDEX -> { + if (Config.getBoolean("speedfurnace")) { + ChatUtil.sendTitleToAll(Component.text("Einstellungen"), Component.text("Schneller Ofen deaktiviert", ChatUtil.RED)); + Config.setValue("speedfurnace", false); + } else { + ChatUtil.sendTitleToAll(Component.text("Einstellungen"), Component.text("Schneller Ofen aktiviert", ChatUtil.GREEN)); + Config.setValue("speedfurnace", true); + } + } + case BACKPACK_INDEX -> { + if (event.isRightClick()) { + new BackPackSettingsGui(player).open(); + } + } + + case GRAVESTONE_INDEX -> { + if (Config.getBoolean("gravestone")) { + ChatUtil.sendTitleToAll(Component.text("Einstellungen"), Component.text("Grabsteine deaktiviert", ChatUtil.RED)); + Config.setValue("gravestone", false); + } else { + ChatUtil.sendTitleToAll(Component.text("Einstellungen"), Component.text("Grabsteine aktiviert", ChatUtil.GREEN)); + Config.setValue("gravestone", true); + } + } + default -> { + } + } + rebuildInventory(); + + switch (slot) { + case BACK_INDEX -> new MainGui(player).open(); + case CLOSE_IDEX -> player.closeInventory(); + } + } + + @Override + protected void rebuildInventory() { + for (int i = 0; i < INVENTORY_SIZE; i++) { + ItemStack item; + switch (i) { + case BACK_INDEX -> + item = CustomHeads.RAINBOW_ARROW_BACKWARD_II.getHead(Component.text("Zurück", ChatUtil.RED)); + case CLOSE_IDEX -> item = CustomHeads.RAINBOW_X.getHead(Component.text("Menü verlassen", ChatUtil.RED)); + + case VILLAGER_TRADE_LIMITS_INDEX -> { + if (Config.getBoolean("disablevillagertradelimits")) { + item = ItemUtils.createGuiItem(Material.EMERALD, Component.text("Villager Trade Limits aktiviert", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.EMERALD, Component.text("Villager Trade Limits deaktiviert (Default)", ChatUtil.RED)); + } + } + case DAMAGE_IN_CHAT_INDEX -> { + if (Config.getBoolean("dmginchat")) { + item = ItemUtils.createGuiItem(Material.PAPER, Component.text("Schaden im Chat anzeigen aktiviert", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.PAPER, Component.text("Schaden im Chat anzeigen deaktiviert", ChatUtil.RED)); + } + } + case TELEPORT_COMMAND_INDEX -> { + if (Config.getBoolean("teleportcommand")) { + item = ItemUtils.createGuiItem(Material.ENDER_PEARL, Component.text("Teleport Command aktiviert", ChatUtil.GREEN), true, Component.text("Deaktiviert den \"/challenges tp\" command", ChatUtil.GREEN)); + } else { + item = ItemUtils.createGuiItem(Material.ENDER_PEARL, Component.text("Teleport Command deaktiviert", ChatUtil.RED), Component.text("Aktiviert den \"/challenges tp\" command", ChatUtil.RED)); + } + } + case HP_ON_TAB_INDEX -> { + if (Config.getBoolean("tabhp")) { + item = ItemUtils.createGuiItem(Material.HEART_OF_THE_SEA, Component.text("Herzen in der Tablist anzeigen aktiviert", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.HEART_OF_THE_SEA, Component.text("Herzen in der Tablist anzeigen deaktiviert", ChatUtil.RED)); + } + } + case SMELT_ORES_ON_BREAK_INDEX -> { + if (Config.getBoolean("silkore")) { + item = ItemUtils.createGuiItem(Material.IRON_INGOT, Component.text("Abgebaute Erze droppen Barren aktiviert", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.IRON_INGOT, Component.text("Abgebaute Erze droppen Barren deaktiviert", ChatUtil.RED)); + } + } + case FAST_FURNACE_INDEX -> { + if (Config.getBoolean("speedfurnace")) { + item = ItemUtils.createGuiItem(Material.FURNACE, Component.text("Schneller Ofen aktiviert", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.FURNACE, Component.text("Schneller Ofen deaktiviert", ChatUtil.RED)); + } + } + case BACKPACK_INDEX -> { + if (MinecraftVersion.isAboveOrEqual(1, 16, 5)) { + item = ItemUtils.createGuiItem(Material.BUNDLE, Component.text("Rucksack Größe: " + plugin.getBackpack().getSize() / 9 + "/6", ChatUtil.GREEN), Component.text("Rechtsklick = Einstellungen", ChatUtil.GREEN)); + } else { + item = ItemUtils.createGuiItem(Material.CHEST, Component.text("Rucksack Größe: " + plugin.getBackpack().getSize() / 9 + "/6", ChatUtil.GREEN), Component.text("Rechtsklick = Einstellungen", ChatUtil.GREEN)); + } + + } + + case GRAVESTONE_INDEX -> { + if (Config.getBoolean("gravestone")) { + item = ItemUtils.createGuiItem(Material.HOPPER, Component.text("Grabstein aktiviert", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.HOPPER, Component.text("Grabstein deaktiviert", ChatUtil.RED)); + } + } + default -> item = ItemUtils.EMPTY_ICON; + } + this.getInventory().setItem(i, item); + } + } +} \ No newline at end of file diff --git a/Challenge/src/main/java/de/fanta/challenge/guis/settingsgui/ServerSettingsGui.java b/Challenge/src/main/java/de/fanta/challenge/guis/settingsgui/ServerSettingsGui.java new file mode 100644 index 0000000..38a77b3 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/guis/settingsgui/ServerSettingsGui.java @@ -0,0 +1,211 @@ +package de.fanta.challenge.guis.settingsgui; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.fanta.challenge.utils.ItemUtils; +import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; +import de.iani.cubesideutils.bukkit.items.CustomHeads; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Difficulty; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; + +public class ServerSettingsGui extends AbstractWindow { + + private static final Challenges plugin = Challenges.getPlugin(); + + public static final int INVENTORY_SIZE = 36; + + private static final int BACK_INDEX = 7; + private static final int CLOSE_IDEX = 8; + + private static final int DIFFICULTY_INDEX = 19; + private static final int KEEP_INVENTORY_INDEX = 20; + private static final int NATURAL_REGENERATION_INDEX = 21; + private static final int ULTRA_HARDCORE_INDEX = 22; + private static final int ONE_LIFE_INDEX = 23; + private static final int RESPAWN_INDEX = 24; + private static final int PVP_INDEX = 25; + + public ServerSettingsGui(Player player) { + super(player, Bukkit.createInventory(null, INVENTORY_SIZE, plugin.getGuiPrefix().append(Component.text(" >> Server Settings")))); + } + + @Override + public void onItemClicked(InventoryClickEvent event) { + Player player = getPlayer(); + if (!mayAffectThisInventory(event)) { + return; + } + + event.setCancelled(true); + if (!getInventory().equals(event.getClickedInventory())) { + return; + } + + int slot = event.getSlot(); + switch (slot) { + case DIFFICULTY_INDEX -> { + if (plugin.getDifficulty() == Difficulty.EASY) { + plugin.setDifficulty(Difficulty.NORMAL); + ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("Schwierigkeitsgrad Mittel", ChatUtil.ORANGE)); + } else if (plugin.getDifficulty() == Difficulty.NORMAL) { + plugin.setDifficulty(Difficulty.HARD); + ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("Schwierigkeitsgrad Schwer", ChatUtil.RED)); + } else if (plugin.getDifficulty() == Difficulty.HARD) { + plugin.setDifficulty(Difficulty.PEACEFUL); + ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("Schwierigkeitsgrad Friedlich", ChatUtil.GREEN)); + Config.setValue("editsettings", true); + ChatUtil.sendWarningMessage(plugin.getCurrentEditor(), "Diese Challenge wird nicht mehr als Speed Run gezählt, da die Difficulty auf Friedlich gesetzt wurde."); + } else if (plugin.getDifficulty() == Difficulty.PEACEFUL) { + plugin.setDifficulty(Difficulty.EASY); + ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("Schwierigkeitsgrad Leicht", ChatUtil.BLUE)); + } + } + case KEEP_INVENTORY_INDEX -> { + if (plugin.getKeepInventory()) { + plugin.setKeepInventory(false); + ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("Keep Inventory deaktiviert", ChatUtil.RED)); + } else { + plugin.setKeepInventory(true); + ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("Keep Inventory aktiviert", ChatUtil.GREEN)); + Config.setValue("editsettings", true); + ChatUtil.sendWarningMessage(plugin.getCurrentEditor(), "Diese Challenge wird nicht mehr als Speed Run gezählt, da du KeepInventory aktiviert hast."); + } + } + case NATURAL_REGENERATION_INDEX -> { + if (plugin.getNaturalRegeneration()) { + plugin.setNaturalRegeneration(false); + ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("Natürliche Regeneration aktiviert", ChatUtil.GREEN)); + } else { + plugin.setNaturalRegeneration(true); + ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("Natürliche Regeneration deaktiviert", ChatUtil.RED)); + } + Config.setValue("editsettings", true); + } + case ULTRA_HARDCORE_INDEX -> { + if (Config.getBoolean("ultrahardcore")) { + Config.setValue("ultrahardcore", false); + ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("Ultra Hardcore deaktiviert", ChatUtil.RED)); + } else { + Config.setValue("ultrahardcore", true); + ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("Ultra Hardcore aktiviert", ChatUtil.GREEN)); + } + } + case ONE_LIFE_INDEX -> { + if (Config.getBoolean("onelife")) { + Config.setValue("onelife", false, false); + ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("Ein Leben für alle deaktiviert", ChatUtil.RED)); + } else { + Config.setValue("onelife", true, false); + ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("Ein Leben für alle aktiviert", ChatUtil.GREEN)); + } + } + case RESPAWN_INDEX -> { + if (Config.getBoolean("respawn")) { + Config.setValue("respawn", false); + ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("Wiederbeleben deaktiviert", ChatUtil.RED)); + } else { + Config.setValue("respawn", true); + ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("Wiederbeleben aktiviert", ChatUtil.GREEN)); + } + } + case PVP_INDEX -> { + if (plugin.getPvP()) { + plugin.setPvP(false); + Config.setValue("pvp", false, false); + ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("PVP deaktiviert", ChatUtil.RED)); + } else { + plugin.setPvP(true); + Config.setValue("pvp", true, false); + ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("PVP aktiviert", ChatUtil.GREEN)); + } + } + default -> { + } + } + rebuildInventory(); + + switch (slot) { + case BACK_INDEX -> new MainGui(player).open(); + case CLOSE_IDEX -> player.closeInventory(); + } + } + + @Override + protected void rebuildInventory() { + for (int i = 0; i < INVENTORY_SIZE; i++) { + ItemStack item; + switch (i) { + case BACK_INDEX -> + item = CustomHeads.RAINBOW_ARROW_BACKWARD_II.getHead(Component.text("Zurück", ChatUtil.RED)); + case CLOSE_IDEX -> item = CustomHeads.RAINBOW_X.getHead(Component.text("Menü verlassen", ChatUtil.RED)); + + case DIFFICULTY_INDEX -> { + if (plugin.getDifficulty() == Difficulty.EASY) { + item = ItemUtils.createGuiItem(Material.IRON_SWORD, Component.text("Schwierigkeitsgrad Leicht", ChatUtil.BLUE)); + } else if (plugin.getDifficulty() == Difficulty.NORMAL) { + item = ItemUtils.createGuiItem(Material.DIAMOND_SWORD, Component.text("Schwierigkeitsgrad Mittel", ChatUtil.ORANGE)); + } else if (plugin.getDifficulty() == Difficulty.HARD) { + item = ItemUtils.createGuiItem(Material.NETHERITE_SWORD, Component.text("Schwierigkeitsgrad Schwer", ChatUtil.RED)); + } else { + item = ItemUtils.createGuiItem(Material.POPPY, Component.text("Schwierigkeitsgrad Friedlich", ChatUtil.GREEN)); + } + } + case KEEP_INVENTORY_INDEX -> { + if (plugin.getKeepInventory()) { + item = ItemUtils.createGuiItem(Material.CHEST_MINECART, Component.text("Keep Inventory aktiviert", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.CHEST_MINECART, Component.text("Keep Inventory deaktiviert", ChatUtil.RED)); + } + } + case NATURAL_REGENERATION_INDEX -> { + if (plugin.getNaturalRegeneration()) { + item = ItemUtils.createGuiItem(Material.GOLDEN_APPLE, Component.text("Natürliche Regeneration aktiviert", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.GOLDEN_APPLE, Component.text("Natürliche Regeneration deaktiviert", ChatUtil.RED)); + } + } + case ULTRA_HARDCORE_INDEX -> { + if (Config.getBoolean("ultrahardcore")) { + item = ItemUtils.createGuiItem(Material.SUSPICIOUS_STEW, Component.text("Ultra Hardcore aktiviert", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.SUSPICIOUS_STEW, Component.text("Ultra Hardcore deaktiviert", ChatUtil.RED)); + } + } + case ONE_LIFE_INDEX -> { + if (Config.getBoolean("onelife")) { + item = ItemUtils.createGuiItem(Material.SUNFLOWER, Component.text("Ein Leben für alle aktiviert", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.SUNFLOWER, Component.text("Ein Leben für alle deaktiviert", ChatUtil.RED)); + } + } + case RESPAWN_INDEX -> { + if (Config.getBoolean("respawn")) { + item = ItemUtils.createGuiItem(Material.TOTEM_OF_UNDYING, Component.text("Wiederbeleben aktiviert", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.TOTEM_OF_UNDYING, Component.text("Wiederbeleben deaktiviert", ChatUtil.RED)); + } + } + case PVP_INDEX -> { + World world = plugin.getServer().getWorld("world"); + if (world == null) { + return; + } + if (world.getPVP()) { + item = ItemUtils.createGuiItem(Material.WOODEN_SWORD, Component.text("PVP aktiviert", ChatUtil.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.WOODEN_SWORD, Component.text("PVP deaktiviert", ChatUtil.RED)); + } + } + default -> item = ItemUtils.EMPTY_ICON; + } + this.getInventory().setItem(i, item); + } + } +} \ No newline at end of file diff --git a/Challenge/src/main/java/de/fanta/challenge/listeners/BlockCreateListener.java b/Challenge/src/main/java/de/fanta/challenge/listeners/BlockCreateListener.java new file mode 100644 index 0000000..5273551 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/listeners/BlockCreateListener.java @@ -0,0 +1,27 @@ +package de.fanta.challenge.listeners; + +import de.fanta.challenge.Challenges; +import org.bukkit.GameMode; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.player.PlayerBucketEmptyEvent; + +public class BlockCreateListener implements Listener { + + private final Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onBlockPlace(BlockPlaceEvent e) { + if (!plugin.getTimer().isRunning() && e.getPlayer().getGameMode() != GameMode.CREATIVE) { + e.setCancelled(true); + } + } + + @EventHandler + public void onBucketPlace(PlayerBucketEmptyEvent e) { + if (!plugin.getTimer().isRunning() && e.getPlayer().getGameMode() != GameMode.CREATIVE) { + e.setCancelled(true); + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/listeners/BlockDestroyListener.java b/Challenge/src/main/java/de/fanta/challenge/listeners/BlockDestroyListener.java new file mode 100644 index 0000000..d01999b --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/listeners/BlockDestroyListener.java @@ -0,0 +1,55 @@ +package de.fanta.challenge.listeners; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.MinecraftVersion; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockDropItemEvent; +import org.bukkit.inventory.ItemStack; + +public class BlockDestroyListener implements Listener { + + private final Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onBlockBreak(BlockBreakEvent e) { + if ((!plugin.getTimer().isRunning()) && e.getPlayer().getGameMode() != GameMode.CREATIVE) { + e.setCancelled(true); + } + } + + @EventHandler + public void onBlockDrop(BlockDropItemEvent e) { + if (Config.getBoolean("silkore")) { + Block block = e.getBlock(); + Material dropType; + if (MinecraftVersion.isAboveOrEqual(1, 17, 0)) { + dropType = switch (e.getBlockState().getType()) { + case IRON_ORE, DEEPSLATE_IRON_ORE -> Material.IRON_INGOT; + case GOLD_ORE, DEEPSLATE_GOLD_ORE -> Material.GOLD_INGOT; + case COPPER_ORE, DEEPSLATE_COPPER_ORE -> Material.COPPER_INGOT; + default -> null; + }; + } else { + dropType = switch (e.getBlockState().getType()) { + case IRON_ORE -> Material.IRON_INGOT; + case GOLD_ORE -> Material.GOLD_INGOT; + default -> null; + }; + } + + if (dropType != null) { + e.getItems().forEach(item -> block.getLocation().getWorld().dropItem(block.getLocation().add(0.5D, 0.5D, 0.5D), new ItemStack(dropType, item.getItemStack().getAmount()))); + e.setCancelled(true); + } + } + } + + +} + diff --git a/Challenge/src/main/java/de/fanta/challenge/listeners/CommandBlockListener.java b/Challenge/src/main/java/de/fanta/challenge/listeners/CommandBlockListener.java new file mode 100644 index 0000000..f9bdfbd --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/listeners/CommandBlockListener.java @@ -0,0 +1,34 @@ +package de.fanta.challenge.listeners; + +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.command.ProxiedCommandSender; +import org.bukkit.command.RemoteConsoleCommandSender; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.server.ServerCommandEvent; + +public class CommandBlockListener implements Listener { + + @EventHandler + public void onDispatchCommandBlockCommand(ServerCommandEvent e) { + + if (e.getSender() instanceof ConsoleCommandSender || e.getSender() instanceof ProxiedCommandSender || e.getSender() instanceof RemoteConsoleCommandSender) { + return; + } + String commandString = e.getCommand(); + if (commandString.startsWith("/minecraft:op") || commandString.startsWith("minecraft:op") || commandString.startsWith("/op") || commandString.startsWith("op") || (commandString.contains("execute") && commandString.matches(".*\\bop\\b.*"))) { + e.setCancelled(true); + } + + if (commandString.startsWith("/")) { + String command = commandString.replaceFirst("/", ""); + if (!command.startsWith("minecraft:")) { + e.setCommand("minecraft:" + command); + } + } else { + if (!e.getCommand().startsWith("minecraft:")) { + e.setCommand("minecraft:" + e.getCommand()); + } + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/listeners/ContainerListener.java b/Challenge/src/main/java/de/fanta/challenge/listeners/ContainerListener.java new file mode 100644 index 0000000..663c029 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/listeners/ContainerListener.java @@ -0,0 +1,113 @@ +package de.fanta.challenge.listeners; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.teams.ChallengeTeam; +import de.fanta.challenge.teams.TeamUtils; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import net.kyori.adventure.text.Component; +import org.bukkit.block.Block; +import org.bukkit.block.BlockState; +import org.bukkit.block.Container; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.inventory.FurnaceStartSmeltEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.metadata.MetadataValue; + +import java.util.ArrayList; +import java.util.Optional; +import java.util.UUID; + +public class ContainerListener implements Listener { + + private static final String META_PLACED_BY_PLAYER = "PlacedByPlayer"; + private static final String META_PLACED_BY_TEAM = "PlacedByTeam"; + + private final Challenges plugin = Challenges.getPlugin(); + + public static final ArrayList unlockList = new ArrayList<>(); + + @EventHandler + public void onContainerPlace(BlockPlaceEvent e) { + BlockState state = e.getBlockPlaced().getState(); + if (!Config.getBoolean("event.minilwc")) { + return; + } + if (state instanceof Container container) { + if (Config.getBoolean("event.teams")) { + ChallengeTeam challengeTeam = TeamUtils.getPlayerTeam(e.getPlayer()); + if (challengeTeam != null) { + container.setMetadata(META_PLACED_BY_TEAM, new FixedMetadataValue(plugin, challengeTeam.getName())); + container.update(); + } + + } else { + container.setMetadata(META_PLACED_BY_PLAYER, new FixedMetadataValue(plugin, e.getPlayer().getUniqueId().toString())); + container.update(); + } + + } + } + + @EventHandler + public void onFurnaceStartSmelt(FurnaceStartSmeltEvent e) { + if (Config.getBoolean("speedfurnace")) { + e.setTotalCookTime(e.getTotalCookTime() / 10); + } + } + + + @EventHandler + public void onInteract(PlayerInteractEvent e) { + if (!Config.getBoolean("event.minilwc")) { + return; + } + + Block block = e.getClickedBlock(); + if (block != null) { + BlockState state = block.getState(); + if (state instanceof Container container && container.hasMetadata(META_PLACED_BY_PLAYER)) { + Optional valueOptional = container.getMetadata(META_PLACED_BY_PLAYER).stream().filter(metadataValue -> metadataValue.getOwningPlugin().equals(plugin)).findFirst(); + if (valueOptional.isPresent()) { + UUID uuid = UUID.fromString(valueOptional.get().asString()); + if (!e.getPlayer().getUniqueId().equals(uuid)) { + ChatUtil.sendMessage(e.getPlayer(), Component.text("Diese/r ", ChatUtil.GREEN).append(Component.translatable(container.getType().translationKey(), ChatUtil.GREEN).append(Component.text(" gehört: ", ChatUtil.GREEN).append(Component.text(plugin.getPlayerUUIDCache().getPlayer(uuid).getName(), ChatUtil.GREEN))))); + e.setCancelled(true); + return; + } + + if (unlockList.contains(e.getPlayer().getUniqueId())) { + container.removeMetadata(META_PLACED_BY_PLAYER, plugin); + unlockList.remove(e.getPlayer().getUniqueId()); + ChatUtil.sendMessage(e.getPlayer(), Component.translatable(container.getType().translationKey(), ChatUtil.GREEN).append(Component.text(" entsichert.", ChatUtil.GREEN))); + return; + } + + ChatUtil.sendMessage(e.getPlayer(), Component.text("Diese/r ", ChatUtil.GREEN).append(Component.translatable(container.getType().translationKey(), ChatUtil.GREEN).append(Component.text(" gehört: " + plugin.getPlayerUUIDCache().getPlayer(uuid).getName(), ChatUtil.GREEN)))); + } + } else if (state instanceof Container container && container.hasMetadata(META_PLACED_BY_TEAM)) { + Optional valueOptional = container.getMetadata(META_PLACED_BY_TEAM).stream().filter(metadataValue -> metadataValue.getOwningPlugin().equals(plugin)).findFirst(); + if (valueOptional.isPresent()) { + ChallengeTeam team = TeamUtils.getTeam(valueOptional.get().asString()); + if (TeamUtils.getPlayerTeam(e.getPlayer()) != team) { + ChatUtil.sendMessage(e.getPlayer(), Component.text("Diese/r ", ChatUtil.GREEN).append(Component.translatable(container.getType().translationKey(), ChatUtil.GREEN).append(Component.text(" gehört: Team ", ChatUtil.GREEN).append(Component.text(team.getName(), team.getChatColor()))))); + e.setCancelled(true); + return; + } + + if (unlockList.contains(e.getPlayer().getUniqueId())) { + container.removeMetadata(META_PLACED_BY_TEAM, plugin); + unlockList.remove(e.getPlayer().getUniqueId()); + ChatUtil.sendMessage(e.getPlayer(), Component.translatable(container.getType().translationKey(), ChatUtil.GREEN).append(Component.text(" entsichert.", ChatUtil.GREEN))); + return; + } + + ChatUtil.sendMessage(e.getPlayer(), Component.text("Diese/r ", ChatUtil.GREEN).append(Component.translatable(container.getType().translationKey(), ChatUtil.GREEN).append(Component.text(" gehört: Team ", ChatUtil.GREEN).append(Component.text(team.getName(), team.getChatColor()))))); + } + } + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/listeners/DamageListener.java b/Challenge/src/main/java/de/fanta/challenge/listeners/DamageListener.java new file mode 100644 index 0000000..a26bd76 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/listeners/DamageListener.java @@ -0,0 +1,64 @@ +package de.fanta.challenge.listeners; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.StringUtil; +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.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; + +import java.text.DecimalFormat; + +public class DamageListener implements Listener { + + private final Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onDamage(EntityDamageEvent e) { + if (e.getEntity() instanceof Player p) { + if (plugin.getTimer().isRunning() && !plugin.getVanish().isVanish(p)) { + String dmg = new DecimalFormat("#.##").format(e.getFinalDamage()); + if (Config.getBoolean("dmginchat")) { + if ((e.getFinalDamage() > 0) && (e.getFinalDamage() < 10000)) { + if (!e.getCause().name().startsWith("ENTITY_")) { + if (e.getCause() == DamageCause.CUSTOM) { + ChatUtil.sendBrodCastMessage(p.name().color(ChatUtil.BLUE).append(Component.text(" hat ", ChatUtil.GREEN).append(Component.text(Config.getDouble("sneakdmg"), ChatUtil.ORANGE).append(Component.text(" HP Schaden genommen durch", ChatUtil.GREEN).append(Component.text(" Server", ChatUtil.ORANGE)))))); + } else { + ChatUtil.sendBrodCastMessage(p.name().color(ChatUtil.BLUE).append(Component.text(" hat ", ChatUtil.GREEN).append(Component.text(dmg, ChatUtil.ORANGE).append(Component.text(" HP Schaden genommen durch ", ChatUtil.GREEN).append(Component.text(StringUtil.capitalizeFirstLetter(e.getCause().toString(), true), ChatUtil.ORANGE)))))); + } + } + } + } + } else { + e.setCancelled(true); + } + } + } + + @EventHandler + public void onEntityDamage(EntityDamageByEntityEvent e) { + if (!plugin.getTimer().isRunning()) { + e.setCancelled(true); + return; + } + if ((e.getEntity() instanceof Player p) && (e.getFinalDamage() > 0) && !plugin.getVanish().isVanish(p)) { + String dmg = new DecimalFormat("#.##").format(e.getFinalDamage()); + if ((e.getCause() == DamageCause.ENTITY_ATTACK || e.getCause() == DamageCause.ENTITY_EXPLOSION) && Config.getBoolean("dmginchat")) { + if (e.getDamager() instanceof Player damager) { + if (!plugin.getVanish().isVanish(damager)) { + ChatUtil.sendBrodCastMessage(p.name().color(ChatUtil.BLUE).append(Component.text(" hat ", ChatUtil.GREEN).append(Component.text(dmg, ChatUtil.ORANGE)).append(Component.text(" HP Schaden genommen durch ", ChatUtil.GREEN)).append(e.getDamager().name()).color(ChatUtil.ORANGE))); + } + } else { + ChatUtil.sendBrodCastMessage(p.name().color(ChatUtil.BLUE).append(Component.text(" hat ", ChatUtil.GREEN).append(Component.text(dmg, ChatUtil.ORANGE)).append(Component.text(" HP Schaden genommen durch ", ChatUtil.GREEN)).append(e.getDamager().name()).color(ChatUtil.ORANGE))); + } + + } + } + } +} + diff --git a/Challenge/src/main/java/de/fanta/challenge/listeners/DeathListener.java b/Challenge/src/main/java/de/fanta/challenge/listeners/DeathListener.java new file mode 100644 index 0000000..c77376e --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/listeners/DeathListener.java @@ -0,0 +1,44 @@ +package de.fanta.challenge.listeners; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; + +public class DeathListener implements Listener { + + private final Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + TextComponent component = plugin.getPrefixComponent().append(e.deathMessage().color(ChatUtil.BLUE)); + if (Config.getBoolean("onelife")) { + plugin.getTimer().stopTimer(); + for (Player p : Bukkit.getOnlinePlayers()) { + p.setGameMode(GameMode.SPECTATOR); + } + e.deathMessage(component); + ChatUtil.sendBrodCastMessage(Component.text("Verschwendete Zeit ", ChatUtil.GREEN).append(plugin.getTimer().formatTime(ChatUtil.ORANGE))); + ChatUtil.sendBrodCastMessage(Component.text("Welt Seed: " + Bukkit.getWorlds().getFirst().getSeed(), ChatUtil.GREEN)); + ChatUtil.sendBrodCastMessage(Component.text("Um alle wiederzubeleben benutze §c/revive ALL", ChatUtil.GREEN)); + } else { + if (Config.getBoolean("event.enabled")) { + e.deathMessage(component); + } else { + component = component.append(Component.text(" (" + e.getEntity().getLocation().getBlockX() + "/" + e.getEntity().getLocation().getBlockY() + "/" + e.getEntity().getLocation().getBlockZ() + ")").color(ChatUtil.ORANGE)); + e.deathMessage(component); + } + if (!Config.getBoolean("respawn")) { + Player editor = plugin.getCurrentEditor(); + ChatUtil.sendMessage(editor, Component.text("Benutze ", ChatUtil.GREEN).append(Component.text("/revive " + e.getEntity().getName() + " [world] [x] [y] [z] ", ChatUtil.BLUE).append(Component.text("um ihn wiederzubeleben!", ChatUtil.GREEN)))); + } + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/listeners/EventRegistration.java b/Challenge/src/main/java/de/fanta/challenge/listeners/EventRegistration.java new file mode 100644 index 0000000..8d6f174 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/listeners/EventRegistration.java @@ -0,0 +1,106 @@ +package de.fanta.challenge.listeners; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.challenges.AllAdvancementsChallenge; +import de.fanta.challenge.challenges.BedrockWallChallenge; +import de.fanta.challenge.challenges.ChallengeEvents.BingoChallengeEvent; +import de.fanta.challenge.challenges.ChallengeEvents.BridgeRaceChallengeEvent; +import de.fanta.challenge.challenges.ChallengeEvents.DeathrunChallengeEvent; +import de.fanta.challenge.challenges.ChallengeEvents.DifferentItemsChallenge; +import de.fanta.challenge.challenges.ChallengeEvents.forcequest.ForceQuestChallengeEvent; +import de.fanta.challenge.challenges.ChallengeEvents.OreBattleChallengeEvent; +import de.fanta.challenge.challenges.ChallengeEvents.SammelFieberChallengeEvent; +import de.fanta.challenge.challenges.ChallengeEvents.TimeChallengeEvent; +import de.fanta.challenge.challenges.ChallengeGoals; +import de.fanta.challenge.challenges.ClearInventoryByDamageChallenge; +import de.fanta.challenge.challenges.CraftingTableChallenge; +import de.fanta.challenge.challenges.FloorIsLavaChallenge; +import de.fanta.challenge.challenges.IceRunnerChallenge; +import de.fanta.challenge.challenges.MLGChallenge; +import de.fanta.challenge.challenges.ManHunt; +import de.fanta.challenge.challenges.MobRemoveWorldChallenge; +import de.fanta.challenge.challenges.NoFallDamageChallenge; +import de.fanta.challenge.challenges.NoJumpChallenge; +import de.fanta.challenge.challenges.NoSneakChallenge; +import de.fanta.challenge.challenges.NoSprintChallenge; +import de.fanta.challenge.challenges.NoTradingChallenge; +import de.fanta.challenge.challenges.RandomDropsChallenge; +import de.fanta.challenge.challenges.RandomEffectChallenge; +import de.fanta.challenge.challenges.RandomMobChallenge; +import de.fanta.challenge.challenges.ShareDamageChallenge; +import de.fanta.challenge.challenges.TiedTogetherChallenge; +import de.fanta.challenge.challenges.WorldBorderLevelChallenge; +import de.fanta.challenge.challenges.XPChallenge; +import de.fanta.challenge.gravestones.GravestoneListener; +import de.fanta.challenge.guis.coordsgui.CoordsDeleteGUI; +import de.fanta.challenge.guis.coordsgui.CoordsGUI; +import de.fanta.challenge.guis.eventgui.BingoItemsGui; +import de.fanta.challenge.guis.eventgui.TeamSelectGUI; +import de.fanta.challenge.teams.TeamListener; +import de.fanta.challenge.utils.CoordsTargeter; +import de.iani.cubesideutils.bukkit.MinecraftVersion; +import org.bukkit.Bukkit; +import org.bukkit.plugin.PluginManager; + +public record EventRegistration(Challenges plugin) { + public static final PluginManager pM = Bukkit.getPluginManager(); + + public void registerEvents() { + pM.registerEvents(new QuitJoinListener(), plugin); + pM.registerEvents(new BlockDestroyListener(), plugin); + pM.registerEvents(new BlockCreateListener(), plugin); + pM.registerEvents(new InteractListener(), plugin); + pM.registerEvents(new DamageListener(), plugin); + pM.registerEvents(new DeathListener(), plugin); + pM.registerEvents(new PlayerListener(), plugin); + pM.registerEvents(new MinimapListener(), plugin); + + pM.registerEvents(new BingoItemsGui(), plugin); + pM.registerEvents(new ContainerListener(), plugin); + pM.registerEvents(new CommandBlockListener(), plugin); + pM.registerEvents(new TeamSelectGUI(), plugin); + pM.registerEvents(new CoordsGUI(), plugin); + pM.registerEvents(new CoordsDeleteGUI(), plugin); + + pM.registerEvents(new GravestoneListener(), plugin); + + pM.registerEvents(new TeamListener(), plugin); + + pM.registerEvents(new ChallengeGoals(), plugin); + + pM.registerEvents(new RandomEffectChallenge(), plugin); + pM.registerEvents(new CraftingTableChallenge(), plugin); + pM.registerEvents(new RandomDropsChallenge(), plugin); + pM.registerEvents(new NoTradingChallenge(), plugin); + pM.registerEvents(new ShareDamageChallenge(), plugin); + pM.registerEvents(new FloorIsLavaChallenge(), plugin); + pM.registerEvents(new XPChallenge(), plugin); + pM.registerEvents(new NoFallDamageChallenge(), plugin); + pM.registerEvents(new NoSprintChallenge(), plugin); + pM.registerEvents(new NoJumpChallenge(), plugin); + pM.registerEvents(new ClearInventoryByDamageChallenge(), plugin); + pM.registerEvents(new TiedTogetherChallenge(), plugin); + pM.registerEvents(new NoSneakChallenge(), plugin); + pM.registerEvents(new BingoChallengeEvent(), plugin); + pM.registerEvents(new DeathrunChallengeEvent(), plugin); + pM.registerEvents(new IceRunnerChallenge(), plugin); + pM.registerEvents(new RandomMobChallenge(), plugin); + pM.registerEvents(new BedrockWallChallenge(), plugin); + pM.registerEvents(new SammelFieberChallengeEvent(), plugin); + pM.registerEvents(new OreBattleChallengeEvent(), plugin); + pM.registerEvents(new ForceQuestChallengeEvent(), plugin); + pM.registerEvents(new AllAdvancementsChallenge(), plugin); + pM.registerEvents(new MobRemoveWorldChallenge(), plugin); + pM.registerEvents(new BridgeRaceChallengeEvent(), plugin); + pM.registerEvents(new DifferentItemsChallenge(), plugin); + pM.registerEvents(new MLGChallenge(), plugin); + pM.registerEvents(new ManHunt(), plugin); + pM.registerEvents(new TimeChallengeEvent(), plugin); + //pM.registerEvents(new Troll(plugin), plugin); + + if (MinecraftVersion.isAboveOrEqual(1, 19, 0)) { + pM.registerEvents(new WorldBorderLevelChallenge(), plugin); + pM.registerEvents(new CoordsTargeter(), plugin); + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/listeners/InteractListener.java b/Challenge/src/main/java/de/fanta/challenge/listeners/InteractListener.java new file mode 100644 index 0000000..48e0960 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/listeners/InteractListener.java @@ -0,0 +1,42 @@ +package de.fanta.challenge.listeners; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.Config; +import org.bukkit.GameMode; +import org.bukkit.entity.Villager; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.MerchantRecipe; + +public class InteractListener implements Listener { + + private final Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onBlockClick(PlayerInteractEvent e) { + if (e.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (!plugin.getTimer().isRunning() && e.getPlayer().getGameMode() != GameMode.CREATIVE) { + e.setCancelled(true); + } + } + } + + @EventHandler + public void onEntityClick(PlayerInteractEntityEvent e) { + if (!plugin.getTimer().isRunning() && e.getPlayer().getGameMode() != GameMode.CREATIVE) { + e.setCancelled(true); + } + + if (Config.getBoolean("disablevillagertradelimits")) { + if (e.getRightClicked() instanceof Villager villager) { + for (MerchantRecipe trade : villager.getRecipes()) { + trade.setMaxUses(Integer.MAX_VALUE); + } + } + } + } +} + diff --git a/Challenge/src/main/java/de/fanta/challenge/listeners/MinimapListener.java b/Challenge/src/main/java/de/fanta/challenge/listeners/MinimapListener.java new file mode 100644 index 0000000..78f84e8 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/listeners/MinimapListener.java @@ -0,0 +1,32 @@ +package de.fanta.challenge.listeners; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.events.GetMinimapWorldNameEvent; +import org.bukkit.World; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import java.util.UUID; + +public class MinimapListener implements Listener { + + private static final Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void getMiniMapWorldName(GetMinimapWorldNameEvent e) { + e.setServerName(plugin.getServerType().getPrefix()); + World world = e.getPlayer().getWorld(); + String worldName; + if (Config.getString("minimap." + world.getName()) != null) { + worldName = Config.getString("minimap." + world.getName()); + } else { + UUID worldUUID = UUID.randomUUID(); + Config.setValue("minimap." + world.getName(), worldUUID.toString(), false); + plugin.saveConfig(); + worldName = worldUUID.toString(); + } + + e.setWorldName(worldName); + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/listeners/PlayerListener.java b/Challenge/src/main/java/de/fanta/challenge/listeners/PlayerListener.java new file mode 100644 index 0000000..0ac9edc --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/listeners/PlayerListener.java @@ -0,0 +1,179 @@ +package de.fanta.challenge.listeners; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.ServerType; +import de.fanta.challenge.challenges.ChallengeEvents.BridgeRaceChallengeEvent; +import de.fanta.challenge.events.PlayerCountChangedEvent; +import de.fanta.challenge.scoreboard.ChallengePlayer; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityPickupItemEvent; +import org.bukkit.event.entity.EntityRegainHealthEvent; +import org.bukkit.event.entity.EntityTargetLivingEntityEvent; +import org.bukkit.event.entity.FoodLevelChangeEvent; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerItemConsumeEvent; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerPortalEvent; +import org.bukkit.event.player.PlayerRespawnEvent; +import org.kitteh.vanish.event.VanishStatusChangeEvent; +import org.spigotmc.event.player.PlayerSpawnLocationEvent; + +import java.util.Objects; + +import static org.bukkit.Bukkit.getServer; + +public class PlayerListener implements Listener { + + private final Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onEntityTarget(EntityTargetLivingEntityEvent e) { + if (!plugin.getTimer().isRunning()) { + e.setCancelled(true); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (Objects.equals(Config.getString("event.type"), "deathcounter") && plugin.getTimer().isRunning()) { + plugin.getScoreManager().updateScore(new ChallengePlayer(e.getEntity().getUniqueId()), 1); + } + } + + @EventHandler + public void onFoodChange(FoodLevelChangeEvent e) { + if (!plugin.getTimer().isRunning()) { + e.setCancelled(true); + } + } + + @EventHandler + public void onPickUpItem(EntityPickupItemEvent e) { + if (e.getEntity() instanceof Player player) { + if (!plugin.getTimer().isRunning() && player.getGameMode() != GameMode.CREATIVE) { + e.setCancelled(true); + } + } + } + + @EventHandler + public void onDropItem(PlayerDropItemEvent e) { + Player p = e.getPlayer(); + if (!plugin.getTimer().isRunning() && p.getGameMode() != GameMode.CREATIVE) { + e.setCancelled(true); + } + } + + @EventHandler + public void onPayerMove(PlayerMoveEvent e) { + if (BridgeRaceChallengeEvent.isLoaded()) { + return; + } + + Player player = e.getPlayer(); + Location playerloc = player.getLocation(); + if (!Config.getBoolean("firsttimerstart") && plugin.getServerType() != ServerType.ADVENTURE) { + if (!plugin.getTimer().isRunning() && player.getGameMode() == GameMode.SURVIVAL) { + Location spawn = e.getPlayer().getWorld().getSpawnLocation(); + if (playerloc.distance(spawn) > 20) { + plugin.getScheduler().runAsync(() -> player.teleportAsync(spawn)); + + ChatUtil.sendWarningMessage(player, "Du kommst erst vom Spawn weg, wenn der Timer gestartet wurde!"); + } + } + } + } + + @EventHandler + public void onPlayerRespawn(PlayerRespawnEvent e) { + if (!Config.getBoolean("respawn")) { + ChatUtil.sendTitleToPlayer(e.getPlayer(), Component.text("Du bist gestorben!", ChatUtil.GREEN), Component.text("Du bist nun Zuschauer", ChatUtil.RED), 10, 80, 10, false); + plugin.getScheduler().runDelayedOnEntity(e.getPlayer(), () -> e.getPlayer().setGameMode(GameMode.SPECTATOR), 1); + } + if (Config.getBoolean("nether.enabled")) { + Location spawn = Bukkit.getWorlds().get(1).getSpawnLocation(); + e.setRespawnLocation(spawn); + } + if (!e.isBedSpawn() && !e.isAnchorSpawn() && !Config.getBoolean("nether.enabled")) { + e.setRespawnLocation(getServer().getWorlds().getFirst().getSpawnLocation().add(0.5, 0.0, 0.5)); + } + } + + @EventHandler + public void onPlayerSpawn(PlayerSpawnLocationEvent e) { + if (!e.getPlayer().hasPlayedBefore() && !Config.getBoolean("nether.enabled")) { + e.setSpawnLocation(getServer().getWorlds().getFirst().getSpawnLocation().add(0.5, 0.0, 0.5)); + } + } + + @EventHandler + public void onPlayerPortal(PlayerPortalEvent e) { + Location endspawn = Bukkit.getWorlds().get(2).getSpawnLocation().add(60, -15, 60); + if (plugin.getTimer().isRunning()) { + if (Config.getBoolean("nether.enabled")) { + 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); + e.setCancelled(true); + } + } else { + e.setCancelled(true); + } + } + + @EventHandler + public void vanishToggle(VanishStatusChangeEvent e) { + Player p = e.getPlayer(); + if (e.isVanishing()) { + plugin.getSBManager().removeScoreboard(p); + if (plugin.getCurrentEditor() == p) { + if (plugin.getServerType() != ServerType.CHALLENGE_EVENT) { + plugin.updateEditor(); + } + } + } else { + if (plugin.getServerType() != ServerType.ADVENTURE) { + plugin.getSBManager().setScoreboardtoPlayer(p); + } + if (plugin.getCurrentEditor() == null) { + plugin.setCurrentEditor(p); + } + } + Bukkit.getPluginManager().callEvent(new PlayerCountChangedEvent(Bukkit.getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers())); + } + + @EventHandler + public void onHealing(EntityRegainHealthEvent e) { + if (Config.getBoolean("ultrahardcore")) { + if (e.getEntity() instanceof Player) { + e.setCancelled(true); + } + } + } + + @EventHandler + public void onEat(PlayerItemConsumeEvent e) { + if (Config.getBoolean("ultrahardcore")) { + if (e.getItem().getType() == Material.ENCHANTED_GOLDEN_APPLE || e.getItem().getType() == Material.GOLDEN_APPLE) { + ChatUtil.sendErrorMessage(e.getPlayer(), "Goldäpfel sind in Ultra Hardcore nicht erlaubt!"); + e.setCancelled(true); + } + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/listeners/QuitJoinListener.java b/Challenge/src/main/java/de/fanta/challenge/listeners/QuitJoinListener.java new file mode 100644 index 0000000..89de875 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/listeners/QuitJoinListener.java @@ -0,0 +1,152 @@ +package de.fanta.challenge.listeners; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.SaveSlot; +import de.fanta.challenge.ServerType; +import de.fanta.challenge.challenges.ChallengeEvents.DeathrunChallengeEvent; +import de.fanta.challenge.events.PlayerCountChangedEvent; +import de.fanta.challenge.events.ServerStatusChangedEvent; +import de.fanta.challenge.scoreboard.ChallengePlayer; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.fanta.challenge.utils.SaveWorldUtils; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerLoginEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.spigotmc.event.player.PlayerSpawnLocationEvent; + +public class QuitJoinListener implements Listener { + + private final Challenges plugin = Challenges.getPlugin(); + + @EventHandler(priority = EventPriority.MONITOR) + public void onPlayerJoin(PlayerJoinEvent e) { + Player p = e.getPlayer(); + + if (plugin.reset) { + plugin.stopResetTask(); + } + + if (plugin.texturepacklink != null) { + p.setResourcePack(plugin.texturepacklink, ""); + } + + if (!plugin.getVanish().isVanish(p)) { + e.joinMessage(plugin.getPrefixComponent().append(p.name().color(ChatUtil.BLUE).append(Component.text(" hat die Lobby betreten! ", ChatUtil.GREEN).append(Component.text("[" + (Bukkit.getServer().getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers()) + "/" + Bukkit.getServer().getMaxPlayers() + "]", ChatUtil.YELLOW))))); + plugin.addstatisticPlayers(p.getUniqueId()); + if (plugin.getServerType() != ServerType.ADVENTURE) { + if (!DeathrunChallengeEvent.getDeadPlayer().contains(p.getUniqueId())) { + plugin.getScheduler().run(() -> { + plugin.getScoreManager().join(new ChallengePlayer(p.getUniqueId())); + plugin.getSBManager().setScoreboardtoPlayer(p); + plugin.getSBManager().updateEventScoreboard(); + if (!Config.getBoolean("event.teams") && plugin.getScoreManager().getScores() != null && plugin.getScoreManager().getScore(new ChallengePlayer(p.getUniqueId())) == 0) { + plugin.getScoreManager().updateScore(new ChallengePlayer(e.getPlayer().getUniqueId()), 0); + } + }); + } + } + if (plugin.getCurrentEditor() == null) { + plugin.getScheduler().runDelayedOnEntity(p, () -> { + if (p.hasPermission("Challenges.editor")) { + plugin.setCurrentEditor(p); + + } else { + ChatUtil.sendWarningMessage(p, "Es ist aktuell kein Editor in dieser Lobby"); + ChatUtil.sendWarningMessage(p, "Um selbst Editor zu werden musst du VIP sein!"); + } + }, 1L); + } else { + ChatUtil.sendMessage(p, plugin.getCurrentEditor().name().color(ChatUtil.BLUE).append(Component.text(" ist der Editor dieser Lobby!", ChatUtil.GREEN))); + } + } else { + ChatUtil.sendNormalMessage(p, "Du bist im Vanish, niemand weiß, dass du in der Lobby bist."); + } + + + Bukkit.getPluginManager().callEvent(new PlayerCountChangedEvent(Bukkit.getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers())); + } + + @EventHandler + public void onPlayerSpawn(PlayerSpawnLocationEvent e) { + Player p = e.getPlayer(); + if (Config.getBoolean("nether.enabled") && !p.hasPlayedBefore()) { + Location netherspawn = Bukkit.getWorlds().get(1).getSpawnLocation(); + e.setSpawnLocation(netherspawn); + } + } + + @EventHandler + public void onPlayerLogin(PlayerLoginEvent e) { + if (plugin.getServerType() == ServerType.CHALLENGE_EVENT) { + if (!Config.getBoolean("firsttimerstart") && Bukkit.getOnlinePlayers().isEmpty()) { + if (!e.getPlayer().hasPermission("challenges.event")) { + e.setResult(PlayerLoginEvent.Result.KICK_OTHER); + e.kickMessage(Component.text("Aktuell läuft kein Event.")); + } + } else { + if (!plugin.getTimer().isRunning() && Config.getBoolean("firsttimerstart")) { + if (!e.getPlayer().hasPermission("challenges.event")) { + e.setResult(PlayerLoginEvent.Result.KICK_OTHER); + e.kickMessage(Component.text("Das Event wurde pausiert.")); + } + } + } + + } + + if (plugin.isPlayerBanned(e.getPlayer().getUniqueId())) { + e.setResult(PlayerLoginEvent.Result.KICK_OTHER); + e.kickMessage(Component.text("Du wurdest von dieser Lobby gebannt.")); + } + + if (plugin.isWaitingForShutdown()) { + e.setResult(PlayerLoginEvent.Result.KICK_OTHER); + e.kickMessage(Component.text("Der Server wird gerade neu gestartet.")); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerQuit(PlayerQuitEvent e) { + Player player = e.getPlayer(); + + if (plugin.getServerType() != ServerType.CHALLENGE_EVENT) { + if (Bukkit.getOnlinePlayers().size() - 1 == 0) { + plugin.getTimer().stopTimer(); + Challenges.LOGGER.info("Stop Timer " + (Bukkit.getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers())); + } + + if (Bukkit.getServer().getOnlinePlayers().size() - 1 == 0) { + if (!plugin.isWaitingForShutdown()) { + if (Config.getBoolean("firsttimerstart")) { + SaveWorldUtils.saveWorld(plugin.getFirstEditor().getUniqueId().toString(), SaveSlot.SLOT_AUTO); + plugin.startResetTask(); + } else { + plugin.getScheduler().run(() -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "reset confirm")); + } + } + } + + if (player == plugin.getCurrentEditor()) { + plugin.updateEditor(); + } + } + if (!plugin.getVanish().isVanish(player)) { + e.quitMessage(plugin.getPrefixComponent().append(player.name().color(ChatUtil.BLUE).append(Component.text(" hat die Lobby verlassen! ", ChatUtil.RED).append(Component.text("[" + (Bukkit.getServer().getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers() - 1) + "/" + Bukkit.getServer().getMaxPlayers() + "]", ChatUtil.YELLOW))))); + this.plugin.getSBManager().removeScoreboard(player); + + Bukkit.getPluginManager().callEvent(new PlayerCountChangedEvent(Bukkit.getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers() - 1)); + + if (plugin.isWaitingForShutdown() && Bukkit.getOnlinePlayers().size() == 1) { + plugin.getScheduler().runGlobalDelayed(() -> Bukkit.getPluginManager().callEvent(new ServerStatusChangedEvent(false)), 1L); + } + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/schedular/BukkitScheduler.java b/Challenge/src/main/java/de/fanta/challenge/schedular/BukkitScheduler.java new file mode 100644 index 0000000..22b78cf --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/schedular/BukkitScheduler.java @@ -0,0 +1,83 @@ +package de.fanta.challenge.schedular; + +import de.fanta.challenge.Challenges; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.Entity; + +import java.util.function.Consumer; + +public class BukkitScheduler implements Scheduler { + + private final Challenges plugin; + + public BukkitScheduler(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public void runAsync(Runnable task) { + Bukkit.getScheduler().runTaskAsynchronously(this.plugin, task); + } + + @Override + public void run(Runnable task) { + Bukkit.getScheduler().runTask(this.plugin, task); + } + + @Override + public void runLocal(Location location, Runnable task) { + Bukkit.getScheduler().runTask(this.plugin, task); + } + + @Override + public void runAtChunk(World world, int chunkX, int chunkZ, Runnable task) { + Bukkit.getScheduler().runTask(this.plugin, task); + } + + @Override + public CancellableTask runGlobalDelayed(Runnable task, long delay) { + return Bukkit.getScheduler().runTaskLater(this.plugin, task, delay)::cancel; + } + + @Override + public void runLocalDelayed(Location location, Runnable task, long delay) { + runGlobalDelayed(task, delay); + } + + @Override + public CancellableTask runLocalAtFixedRate(Location location, Runnable task, long delay, long period) { + return runGlobalAtFixedRate(task, delay, period); + } + + @Override + public void runLocalAtFixedRate(Location location, Consumer taskConsumer, long delay, long period) { + runGlobalAtFixedRate(taskConsumer, delay, period); + } + + @Override + public CancellableTask runGlobalAtFixedRate(Runnable task, long delay, long period) { + return Bukkit.getScheduler().runTaskTimer(this.plugin, task, delay, period)::cancel; + } + + @Override + public void runGlobalAtFixedRate(Consumer taskConsumer, long delay, long period) { + Bukkit.getScheduler().runTaskTimer(this.plugin, bukkitTask -> taskConsumer.accept(bukkitTask::cancel), delay, period); + } + + @Override + public CancellableTask runOnEntityAtFixedRate(Entity entity, Runnable task, long delay, long period) { + return runGlobalAtFixedRate(task, delay, period); + } + + @Override + public void runOnEntityAtFixedRate(Entity entity, Consumer taskConsumer, long delay, long period) { + runLocalAtFixedRate(null, taskConsumer, delay, period); + } + + @Override + public void runDelayedOnEntity(Entity entity, Runnable task, long delay) { + Bukkit.getScheduler().scheduleSyncDelayedTask(this.plugin, task, delay); + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/schedular/CancellableTask.java b/Challenge/src/main/java/de/fanta/challenge/schedular/CancellableTask.java new file mode 100644 index 0000000..5009ab4 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/schedular/CancellableTask.java @@ -0,0 +1,5 @@ +package de.fanta.challenge.schedular; + +public interface CancellableTask { + void cancel(); +} diff --git a/Challenge/src/main/java/de/fanta/challenge/schedular/Scheduler.java b/Challenge/src/main/java/de/fanta/challenge/schedular/Scheduler.java new file mode 100644 index 0000000..57728bd --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/schedular/Scheduler.java @@ -0,0 +1,44 @@ +package de.fanta.challenge.schedular; + +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.Entity; + +import java.util.function.Consumer; + +public interface Scheduler { + + void runAsync(Runnable task); + + void run(Runnable task); + + void runLocal(Location location, Runnable task); + + void runAtChunk(World world, int chunkX, int chunkZ, Runnable task); + + CancellableTask runGlobalDelayed(Runnable task, long delay); + + default void runGlobalDelayed(Runnable task) { + runGlobalDelayed(task, 1); + } + + void runLocalDelayed(Location location, Runnable task, long delay); + + default void runLocalDelayed(Runnable task) { + runGlobalDelayed(task, 1); + } + + CancellableTask runLocalAtFixedRate(Location location, Runnable task, long delay, long period); + + void runLocalAtFixedRate(Location location, Consumer taskConsumer, long delay, long period); + + CancellableTask runGlobalAtFixedRate(Runnable task, long delay, long period); + + void runGlobalAtFixedRate(Consumer taskConsumer, long delay, long period); + + CancellableTask runOnEntityAtFixedRate(Entity entity, Runnable task, long delay, long period); + + void runOnEntityAtFixedRate(Entity entity, Consumer taskConsumer, long delay, long period); + + void runDelayedOnEntity(Entity entity, Runnable task, long delay); +} diff --git a/Challenge/src/main/java/de/fanta/challenge/scoreboard/BukkitScoreBoardManager.java b/Challenge/src/main/java/de/fanta/challenge/scoreboard/BukkitScoreBoardManager.java new file mode 100644 index 0000000..001bdcd --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/scoreboard/BukkitScoreBoardManager.java @@ -0,0 +1,167 @@ +package de.fanta.challenge.scoreboard; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.ServerType; +import de.fanta.challenge.teams.ChallengeTeam; +import de.fanta.challenge.teams.TeamUtils; +import de.fanta.challenge.utils.Config; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.scoreboard.Criteria; +import org.bukkit.scoreboard.DisplaySlot; +import org.bukkit.scoreboard.Objective; +import org.bukkit.scoreboard.RenderType; +import org.bukkit.scoreboard.Score; +import org.bukkit.scoreboard.Scoreboard; +import org.bukkit.scoreboard.Team; + +public class BukkitScoreBoardManager implements ScoreBoardMananger { + + private final Challenges plugin; + private Scoreboard scoreboard; + private Team team; + + private Objective event; + private Objective tabHP; + + public BukkitScoreBoardManager(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public void initScoreboard() { // only possible after first world has loaded + this.scoreboard = Bukkit.getScoreboardManager().getNewScoreboard(); + this.team = scoreboard.registerNewTeam("Player"); + + this.team.color(NamedTextColor.GREEN); + + updateTabHP(); + } + + @Override + public void setScoreboardtoPlayer(Player p) { + if (this.scoreboard == null) { + if (plugin.getServerType() != ServerType.ADVENTURE) { + initScoreboard(); + } + } + + team.addEntry(p.getName()); + + p.setScoreboard(scoreboard); + } + + @Override + public void setScoreboardtoTeam(ChallengeTeam challengeTeam) { + if (this.scoreboard == null) { + if (plugin.getServerType() != ServerType.ADVENTURE) { + initScoreboard(); + } + } + + team.addEntry(challengeTeam.getChatColor() + challengeTeam.getName()); + } + + @Override + public void removeScoreboard(Player p) { + if (team != null) { + if (plugin.getServerType() != ServerType.ADVENTURE) { + team.removeEntry(p.getName()); + p.setScoreboard(scoreboard); + } + } + } + + @Override + public void removeAllFromScoreboard() { + for (String s : team.getEntries()) { + team.removeEntry(s); + } + } + + @Override + public int countScoreboardPlayers() { + return team.getEntries().size(); + } + + @Override + public void updateTabHP() { + if (plugin.getServerType() == ServerType.ADVENTURE) { + return; + } + if (Config.getBoolean("tabhp")) { + if (this.tabHP == null) { + tabHP = scoreboard.registerNewObjective("health", Criteria.HEALTH, Component.empty()); + } + tabHP.setRenderType(RenderType.HEARTS); + tabHP.setDisplaySlot(DisplaySlot.PLAYER_LIST); + } else { + if (tabHP != null) { + tabHP.unregister(); + tabHP = null; + } + } + } + + @Override + public void updateEventScoreboard() { + if (plugin.getServerType() == ServerType.ADVENTURE) { + return; + } + if (Config.getBoolean("event.enabled")) { + if (!Config.getBoolean("event.teams")) { + this.team.color(NamedTextColor.BLUE); + this.team.displayName(Component.text("Event")); + + if (this.event == null) { + event = this.scoreboard.registerNewObjective("event", Criteria.DUMMY, Component.text("Challenges", NamedTextColor.GOLD)); + } + event.setDisplaySlot(DisplaySlot.SIDEBAR); + event.displayName(team.prefix().append(team.displayName()).color(team.color())); + event.setRenderType(RenderType.INTEGER); + + for (String entry : team.getEntries()) { + if (!event.getScore(entry).isScoreSet()) { + event.getScore(entry).setScore(0); + } + } + } else { + this.team.color(NamedTextColor.BLUE); + this.team.displayName(Component.text("Team Event")); + + event = TeamUtils.getTeamscoreboardObjective(); + + event.setDisplaySlot(DisplaySlot.SIDEBAR); + event.displayName(team.prefix().append(team.displayName()).color(team.color())); + event.setRenderType(RenderType.INTEGER); + } + + + } else { + if (event != null) { + event.unregister(); + event = null; + } + this.team.color(NamedTextColor.GREEN); + this.team.displayName(Component.text("Player")); + } + } + + @Override + public void updateEventScore(Scorable s) { + if (plugin.getServerType() == ServerType.ADVENTURE) { + return; + } + if (this.event != null) { + Score score = event.getScore(s.getIdentifier()); + score.setScore(plugin.getScoreManager().getScore(s)); + } + } + + @Override + public Scoreboard getScoreboard() { + return scoreboard; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/scoreboard/ChallengePlayer.java b/Challenge/src/main/java/de/fanta/challenge/scoreboard/ChallengePlayer.java new file mode 100644 index 0000000..5ce9b31 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/scoreboard/ChallengePlayer.java @@ -0,0 +1,48 @@ +package de.fanta.challenge.scoreboard; + +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; +import org.bukkit.scoreboard.Scoreboard; + +import java.util.UUID; + +public class ChallengePlayer implements Scorable { + + private final UUID uuid; + + public ChallengePlayer(UUID uuid) { + this.uuid = uuid; + } + + public int hashCode() { + return uuid.hashCode(); + } + + public boolean equals(Object other) { + if (!(other instanceof ChallengePlayer cp)) { + return false; + } + return this.uuid.equals(cp.uuid); + } + + @Override + public void setScoreboard(Scoreboard scoreboard) { + Player player = Bukkit.getPlayer(uuid); + if (player != null) { + player.setScoreboard(scoreboard); + } + } + + @Override + public String getIdentifier() { + OfflinePlayer player = Bukkit.getOfflinePlayer(uuid); + return player.getName(); + } + + @Override + public String getName() { + OfflinePlayer player = Bukkit.getOfflinePlayer(uuid); + return player.getName(); + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/scoreboard/Scorable.java b/Challenge/src/main/java/de/fanta/challenge/scoreboard/Scorable.java new file mode 100644 index 0000000..8efc73d --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/scoreboard/Scorable.java @@ -0,0 +1,13 @@ +package de.fanta.challenge.scoreboard; + +import org.bukkit.scoreboard.Scoreboard; + +public interface Scorable { + + void setScoreboard(Scoreboard scoreboard); + + String getIdentifier(); + + String getName(); + +} diff --git a/Challenge/src/main/java/de/fanta/challenge/scoreboard/ScoreBoardMananger.java b/Challenge/src/main/java/de/fanta/challenge/scoreboard/ScoreBoardMananger.java new file mode 100644 index 0000000..91e199e --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/scoreboard/ScoreBoardMananger.java @@ -0,0 +1,19 @@ +package de.fanta.challenge.scoreboard; + +import de.fanta.challenge.teams.ChallengeTeam; +import org.bukkit.entity.Player; +import org.bukkit.scoreboard.Scoreboard; + +public interface ScoreBoardMananger { + + void initScoreboard(); + void setScoreboardtoPlayer(Player p); + void setScoreboardtoTeam(ChallengeTeam challengeTeam); + void removeScoreboard(Player p); + void removeAllFromScoreboard(); + int countScoreboardPlayers(); + void updateTabHP(); + void updateEventScoreboard(); + void updateEventScore(Scorable s); + Scoreboard getScoreboard(); +} diff --git a/Challenge/src/main/java/de/fanta/challenge/scoreboard/ScoreManager.java b/Challenge/src/main/java/de/fanta/challenge/scoreboard/ScoreManager.java new file mode 100644 index 0000000..90ded9d --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/scoreboard/ScoreManager.java @@ -0,0 +1,342 @@ +package de.fanta.challenge.scoreboard; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.challenges.ChallengeEvents.SammelFieberChallengeEvent; +import de.fanta.challenge.challenges.ChallengeEvents.TimeChallengeEvent; +import de.fanta.challenge.guis.eventgui.SammelFieberSettingsGui; +import de.fanta.challenge.teams.ChallengeTeam; +import de.fanta.challenge.teams.TeamUtils; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.HastebinUtil; +import de.iani.cubesideutils.StringUtil; +import de.iani.playerUUIDCache.CachedPlayer; +import org.bukkit.entity.Player; +import org.bukkit.scoreboard.Team; + +import javax.annotation.Nullable; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.UUID; +import java.util.function.IntPredicate; +import java.util.logging.Level; +import java.util.stream.Collectors; + +public class ScoreManager { + + public static class ScoreData { + private final Scorable scorable; + private int score; + private int position; + private int index; + + public ScoreData(Scorable scorable, int index) { + this.scorable = scorable; + this.index = index; + + this.score = 0; + this.position = 1; + } + + public Scorable getScorable() { + return scorable; + } + + public int getPostition() { + return position; + } + + public void setPosition(int position) { + this.position = position; + } + + public int getIndex() { + return index; + } + + public void setIndex(int index) { + this.index = index; + } + + public int getScore() { + return score; + } + + public void setScore(int score) { + this.score = score; + } + + public void changeScore(int difference) { + this.score += difference; + } + } + + private final Challenges plugin; + private final Map scores; + private final List positions; + + public ScoreManager(Challenges plugin) { + this.plugin = plugin; + this.scores = new HashMap<>(); + this.positions = new ArrayList<>(); + } + + public void join(Scorable s) { + if (!scores.containsKey(s)) { + ScoreData data = new ScoreData(s, positions.size()); + scores.put(s, data); + positions.add(data); + } + } + + public void updateScore(Scorable s, int difference) { + if (difference == 0) { + return; + } + + ScoreData data = scores.get(s); + data.changeScore(difference); + + int current = data.getIndex(); + int dir = (int) Math.signum(difference * -1); + + IntPredicate forCondition = (dir == -1) ? curr -> curr > 0 && positions.get(curr - 1).getScore() < data.getScore() : curr -> curr < positions.size() - 1 && positions.get(curr + 1).getScore() > data.getScore(); + + int startingIndex = data.getIndex(); + + // swap with neighbors as long as we are now better/worse then them + for (; forCondition.test(current); current += dir) { + ScoreData other = positions.get(current + dir); + + positions.set(current + dir, data); + positions.set(current, other); + data.setIndex(current + dir); + other.setIndex(current); + } + + // update positions + int endIndex = data.getIndex(); + int i = Math.min(startingIndex, endIndex); + + ScoreData curr; + int lastPosition; + int lastScore; + if (i == 0) { + curr = positions.getFirst(); + curr.setPosition(1); + lastPosition = 1; + lastScore = curr.getScore(); + i++; + } else { + curr = positions.get(i - 1); + lastPosition = curr.getPostition(); + lastScore = curr.getScore(); + } + + for (; i < positions.size(); i++) { + curr = positions.get(i); + int correctPosition = (curr.getScore() == lastScore) ? lastPosition : lastPosition + 1; + if (curr.getPostition() == correctPosition && i > Math.max(startingIndex, endIndex)) { + break; + } + + curr.setPosition(correctPosition); + lastPosition = correctPosition; + lastScore = curr.getScore(); + } + + this.plugin.getSBManager().updateEventScore(s); + } + + public void setScore(Scorable s, int score) { + int diff = score - getScore(s); + updateScore(s, diff); + } + + public int getScore(Scorable s) { + return scores.get(s).getScore(); + } + + public int getPosition(Scorable s) { + return scores.get(s).getPostition(); + } + + public Set getByPositon(int position) { + if (positions.isEmpty() || positions.getLast().getPostition() < position) { + return Collections.emptySet(); + } + + int start = position - 1; + int end = positions.size(); + + int found; + while (true) { + int middle = start + (end - start) / 2; + ScoreData current = positions.get(middle); + if (current.getPostition() == position) { + found = middle; + break; + } else if (start >= end - 1) { + plugin.getLogger().log(Level.SEVERE, "position not found but expected to be present: " + position); + plugin.getLogger().log(Level.SEVERE, positions.toString()); + return Collections.emptySet(); + } else if (current.getPostition() > position) { + end = middle; + } else { + start = middle; + } + } + + start = end = found; + for (; start > 0 && positions.get(start - 1).getPostition() == position; start--) { + } + for (; end < positions.size() - 2 && positions.get(end + 1).getPostition() == position; end++) { + } + + return positions.subList(start, end + 1).stream().map(ScoreData::getScorable).collect(Collectors.toSet()); + } + + public void saveScores(@Nullable Player player) { + saveScores(player, 0); + } + + public void saveScores(@Nullable Player player, int minScore) { + StringBuilder sb = new StringBuilder(); + String ownerName = player != null ? player.getName() : "Console"; + SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy - HH:mm:ss"); + Date currentTime = new Date(); + + sb.append("Challenges Event -> ").append(StringUtil.capitalizeFirstLetter(Config.getString("event.type"), false)).append('\n'); + sb.append("=".repeat(20)).append('\n'); + sb.append("Erstellt von: ").append(ownerName).append('\n'); + sb.append("Erstellt am: ").append(formatter.format(currentTime)).append('\n'); + sb.append("Timer: ").append(plugin.getTimer().formatTime()).append('\n'); + if (Objects.equals(Config.getString("event.type"), "sammelfieber")) { + if (SammelFieberSettingsGui.getEventItem() != null) { + sb.append("Item: ").append(SammelFieberSettingsGui.getEventItem().getType().name()).append('\n'); + sb.append("Cubes pro Item: ").append(SammelFieberSettingsGui.MONEY).append('\n'); + sb.append("Items abgegeben: ").append(SammelFieberChallengeEvent.getCount()).append('\n'); + sb.append("Cubes gesammt: ").append(SammelFieberSettingsGui.MONEY * SammelFieberChallengeEvent.getCount()).append('\n'); + sb.append("Cubes pro Spieler: ").append(SammelFieberSettingsGui.MONEY * SammelFieberChallengeEvent.getCount() / scores.size()).append('\n'); + } + } + sb.append("=".repeat(20)).append('\n'); + sb.append("Teilnehmer (").append(this.scores.size()).append("):\n"); + + if (!Objects.equals(Config.getString("event.type"), "time")) { + if (this.scores.isEmpty()) { + sb.append(" Das Event hatte keine Teilnehmer!\n"); + } else { + if (Config.getBoolean("event.teams")) { + for (ScoreData entry : positions) { + ChallengeTeam challengeTeam = TeamUtils.getTeam(entry.getScorable().getName()); + if (challengeTeam != null) { + Team team = TeamUtils.getScoreboard().getTeam(challengeTeam.getName()); + if (team != null) { + sb.append(entry.getPostition()).append(". ").append(entry.getScorable().getName()).append(" (").append(team.getEntries().toString().replace("[", "").replace("]", "")).append(")").append(" ").append(entry.getScore()).append("\n"); + } + } + } + } else { + if (Config.getBoolean("event.tournament")) { + HashMap tournamentScores = getTournamentScores(new ArrayList<>(positions), minScore); + for (ScoreData entry : positions) { + sb.append(entry.getPostition()).append(". ").append(entry.getScorable().getName()).append(" ").append(entry.getScore()).append(" (").append(tournamentScores.getOrDefault(entry.getScorable(), 0)).append(")").append("\n"); + } + } else { + for (ScoreData entry : positions) { + sb.append(entry.getPostition()).append(". ").append(entry.getScorable().getName()).append(" ").append(entry.getScore()).append("\n"); + } + } + } + } + } else { + HashMap times = TimeChallengeEvent.getPlayerPlayTimes(); + for (UUID uuid : times.keySet()) { + CachedPlayer cp = plugin.getPlayerUUIDCache().getPlayer(uuid); + sb.append(cp != null ? cp.getName() : uuid.toString()).append(": ").append(formatTime(times.get(uuid))).append("\n"); + } + } + + HastebinUtil.paste(sb.toString(), new HastebinUtil.PasteCompletedListener() { + @Override + public void onSuccess(String url) { + if (player != null) { + ChatUtil.sendNormalMessage(player, "Event Log gepastet: " + url); + } + plugin.getLogger().log(Level.SEVERE, "Event Log gepastet: " + url); + } + + @Override + public void onError(Exception e) { + if (player != null) { + ChatUtil.sendErrorMessage(player, "Paste konnte nicht erstellt werden"); + } + plugin.getLogger().log(Level.SEVERE, "Could not paste event log", e); + plugin.getLogger().log(Level.SEVERE, "Log Score String", sb.toString()); + } + }); + } + + public void resetScores() { + this.scores.clear(); + plugin.getSBManager().updateEventScoreboard(); + } + + public Map getScores() { + return scores; + } + + public List getPositions() { + return positions; + } + + public HashMap getTournamentScores(List scoreDataList, int minScore) { + HashMap tournamentScores = new HashMap<>(); + List newScoreDataList = new ArrayList<>(); + + for (ScoreData scoreData : scoreDataList) { + int score = scoreData.getScore(); + if (score >= minScore) { + newScoreDataList.add(scoreData); + } + } + + + int length = newScoreDataList.size(); + if (length > 0) { + int lastPostition = newScoreDataList.get(length - 1).getPostition() - 1; + int threePoints = Math.round((lastPostition + 1 - 3) / 3.0f + 3); + int twoPoints = Math.round((lastPostition + 1 - 3) / 3.0f * 2 + 3); + for (ScoreData scoreData : newScoreDataList) { + Scorable scorable = scoreData.getScorable(); + int pos = scoreData.getPostition() - 1; + if (pos < 3) { + tournamentScores.put(scorable, 6 - pos); + } else if (pos < threePoints) { + tournamentScores.put(scorable, 3); + } else if (pos < twoPoints) { + tournamentScores.put(scorable, 2); + } else { + tournamentScores.put(scorable, 1); + } + } + } + return tournamentScores; + } + + public String formatTime(long time) { + String formattime = StringUtil.formatTimespan((time / 1000) * 1000, " Tage, ", ":", "", "", "", ":", false, true); + if (formattime.startsWith("1 Tage")) { + return StringUtil.formatTimespan((time / 1000) * 1000, " Tag, ", ":", "", "", "", ":", false, true); + } + return formattime; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/teams/ChallengeTeam.java b/Challenge/src/main/java/de/fanta/challenge/teams/ChallengeTeam.java new file mode 100644 index 0000000..fa62530 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/teams/ChallengeTeam.java @@ -0,0 +1,82 @@ +package de.fanta.challenge.teams; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.guis.BackpackGui; +import de.fanta.challenge.scoreboard.Scorable; +import de.fanta.challenge.utils.Config; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scoreboard.Scoreboard; + +public class ChallengeTeam implements Scorable { + private String name; + + private final NamedTextColor chatColor; + + private Location spawn; + + private final ItemStack displayItem; + + private int score; + + private final BackpackGui backpack; + + public ChallengeTeam(String name, NamedTextColor chatColor, ItemStack displayItem) { + this.name = name; + this.chatColor = chatColor; + this.displayItem = displayItem; + this.backpack = new BackpackGui(Config.getInt("backpack_size") * 9, Challenges.getPlugin().getGuiPrefix().append(Component.text(" >> " + name))); + } + + public String getName() { + return name; + } + + public NamedTextColor getChatColor() { + return chatColor; + } + + public Location getSpawn() { + return spawn; + } + + public int getScore() { + return score; + } + + public void setName(String name) { + this.name = name; + } + + public void setSpawn(Location spawn) { + this.spawn = spawn; + } + + public ItemStack getDisplayItem() { + return displayItem; + } + + @Override + public void setScoreboard(Scoreboard scoreboard) { + for (OfflinePlayer pp : TeamUtils.getPlayersInTeam(this)) { + Player tempPlayer = Bukkit.getPlayer(pp.getUniqueId()); + if (tempPlayer != null && tempPlayer.isOnline()) { + tempPlayer.setScoreboard(scoreboard); + } + } + } + + @Override + public String getIdentifier() { + return getChatColor() + getName(); + } + + public BackpackGui getBackpack() { + return backpack; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/teams/TeamListener.java b/Challenge/src/main/java/de/fanta/challenge/teams/TeamListener.java new file mode 100644 index 0000000..b83e1c8 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/teams/TeamListener.java @@ -0,0 +1,220 @@ +package de.fanta.challenge.teams; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.ServerType; +import de.fanta.challenge.guis.eventgui.TeamSelectGUI; +import de.fanta.challenge.utils.ChatUtil; +import de.fanta.challenge.utils.Config; +import net.kyori.adventure.text.Component; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryDragEvent; +import org.bukkit.event.inventory.InventoryMoveItemEvent; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerLoginEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.event.player.PlayerSwapHandItemsEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.HashMap; +import java.util.UUID; + +public class TeamListener implements Listener { + + private static final HashMap playerTeams = new HashMap<>(); + private final Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onSwapItem(PlayerSwapHandItemsEvent e) { + if (plugin.getServerType() == ServerType.ADVENTURE) { + return; + } + Player p = e.getPlayer(); + ItemStack stack = p.getInventory().getItemInMainHand(); + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(TeamUtils.getSelectKey())) { + e.setCancelled(true); + } + } + + @EventHandler + public void onDrop(PlayerDropItemEvent e) { + if (plugin.getServerType() == ServerType.ADVENTURE) { + return; + } + ItemStack stack = e.getItemDrop().getItemStack(); + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(TeamUtils.getSelectKey())) { + e.setCancelled(true); + } + } + + @EventHandler + public void onItemMove(InventoryMoveItemEvent e) { + if (plugin.getServerType() == ServerType.ADVENTURE) { + return; + } + ItemStack stack = e.getItem(); + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(TeamUtils.getSelectKey())) { + e.setCancelled(true); + } + } + + @EventHandler + public void onItemClick(PlayerInteractEvent e) { + if (plugin.getServerType() == ServerType.ADVENTURE) { + return; + } + Player p = e.getPlayer(); + ItemStack stack = p.getInventory().getItemInMainHand(); + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(TeamUtils.getSelectKey())) { + TeamSelectGUI.openTeamSelectGui(p); + } + } + + @EventHandler + public void onPlace(BlockPlaceEvent e) { + if (plugin.getServerType() == ServerType.ADVENTURE) { + return; + } + Player p = e.getPlayer(); + ItemStack stack = p.getInventory().getItemInMainHand(); + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(TeamUtils.getSelectKey())) { + e.setCancelled(true); + } + } + + @EventHandler + public void onDrag(InventoryDragEvent e) { + if (plugin.getServerType() == ServerType.ADVENTURE) { + return; + } + ItemStack stack = e.getCursor(); + if (stack != null) { + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(TeamUtils.getSelectKey())) { + e.setCancelled(true); + } + } + } + + @EventHandler + public void onClick(InventoryClickEvent e) { + if (plugin.getServerType() == ServerType.ADVENTURE) { + return; + } + ItemStack stack = e.getCurrentItem(); + if (stack != null) { + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(TeamUtils.getSelectKey())) { + e.setCancelled(true); + } + } + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onJoin(PlayerJoinEvent e) { + if (plugin.getServerType() == ServerType.ADVENTURE) { + return; + } + Inventory inventory = e.getPlayer().getInventory(); + if (Config.getBoolean("event.teams") && Config.getBoolean("event.teamselect") && !plugin.getTimer().isRunning()) { + inventory.setItem(8, TeamUtils.selctItem()); + } else { + inventory.removeItem(TeamUtils.selctItem()); + } + + if (Config.getBoolean("event.teams") && !Config.getBoolean("event.autoteams") && plugin.getTimer().isRunning() && !playerTeams.containsKey(e.getPlayer().getUniqueId())) { + e.getPlayer().setGameMode(GameMode.SPECTATOR); + ChatUtil.sendNormalMessage(e.getPlayer(), "Du bist nur zuschauer diese Runde."); + return; + } + + if (Config.getBoolean("event.teams") && plugin.getTimer().isRunning()) { + if (!plugin.getVanish().isVanish(e.getPlayer())) { + if (TeamUtils.getPlayerTeam(e.getPlayer()) == null) { + if (playerTeams.containsKey(e.getPlayer().getUniqueId())) { + TeamUtils.selectTeam(e.getPlayer(), playerTeams.get(e.getPlayer().getUniqueId())); + } else { + if (Config.getBoolean("event.autoteams") && e.getPlayer().getGameMode() == GameMode.SURVIVAL) { + TeamUtils.setAllPlayerWithoutTeamToTeam(); + plugin.getScoreManager().updateScore(TeamUtils.getPlayerTeam(e.getPlayer()), 0); + if (TeamUtils.getPlayerTeam(e.getPlayer()) != null && TeamUtils.getPlayerTeam(e.getPlayer()).getSpawn() != null) { + e.getPlayer().teleportAsync(TeamUtils.getPlayerTeam(e.getPlayer()).getSpawn()); + } + } + } + } + } + } + if (Config.getBoolean("event.teams") && plugin.getScoreManager().getScores() != null && plugin.getScoreManager().getScore(TeamUtils.getPlayerTeam(e.getPlayer())) == 0) { + plugin.getScoreManager().updateScore(TeamUtils.getPlayerTeam(e.getPlayer()), 0); + } + } + + @EventHandler + public void onDeath(PlayerRespawnEvent e) { + if (plugin.getServerType() == ServerType.ADVENTURE) { + return; + } + Player p = e.getPlayer(); + + plugin.getScheduler().runDelayedOnEntity(p, () -> { + ChallengeTeam team = TeamUtils.getPlayerTeam(p); + if (team == null) { + return; + } + + Location location = team.getSpawn(); + + if (location == null) { + return; + } + + p.teleportAsync(location); + }, 1L); + } + + @EventHandler + public void onLogin(PlayerLoginEvent e) { + if (plugin.getServerType() == ServerType.ADVENTURE) { + return; + } + if (Config.getBoolean("event.teams") && !Config.getBoolean("event.autoteams") && plugin.getTimer().isRunning()) { + if (e.getPlayer().hasPermission("challenges.event")) { + return; + } + if (!playerTeams.containsKey(e.getPlayer().getUniqueId())) { + e.setResult(PlayerLoginEvent.Result.KICK_OTHER); + e.kickMessage(Component.text("Bei diesem Event kannst du nicht nach joinen.")); + } + } + } + + @EventHandler + public void onDisconect(PlayerQuitEvent e) { + if (plugin.getServerType() == ServerType.ADVENTURE) { + return; + } + if (Config.getBoolean("event.teams") && plugin.getTimer().isRunning()) { + ChallengeTeam team = TeamUtils.getPlayerTeam(e.getPlayer()); + if (team != null) { + playerTeams.put(e.getPlayer().getUniqueId(), team); + } + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/teams/TeamUtils.java b/Challenge/src/main/java/de/fanta/challenge/teams/TeamUtils.java new file mode 100644 index 0000000..7f3ddb7 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/teams/TeamUtils.java @@ -0,0 +1,283 @@ +package de.fanta.challenge.teams; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.guis.eventgui.TeamSelectGUI; +import de.fanta.challenge.utils.ChatUtil; +import de.iani.playerUUIDCache.CachedPlayer; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Color; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.LeatherArmorMeta; +import org.bukkit.persistence.PersistentDataType; +import org.bukkit.scoreboard.Criteria; +import org.bukkit.scoreboard.DisplaySlot; +import org.bukkit.scoreboard.Objective; +import org.bukkit.scoreboard.Scoreboard; +import org.bukkit.scoreboard.Team; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Set; +import java.util.UUID; + +public class TeamUtils { + + private static final HashMap playerTeams = new HashMap<>(); + private static final NamespacedKey selectKey = new NamespacedKey(Challenges.getPlugin(), "selectitem"); + private static ChallengeTeam[] teams; + private static int teamSize; + private static Scoreboard scoreboard; + private static Objective teamscoreboardObjective; + + private static ChallengeTeam createDefaultTeam(int nr) { + if (nr == 0) { + return new ChallengeTeam("Schwarz", NamedTextColor.BLACK, createDisplayItem(Color.fromRGB(0, 0, 0), NamedTextColor.BLACK, "Schwarz")); + } + if (nr == 1) { + return new ChallengeTeam("Dunkel-Blau", NamedTextColor.DARK_BLUE, createDisplayItem(Color.fromRGB(0, 0, 170), NamedTextColor.DARK_BLUE, "Dunkel-Blau")); + } + if (nr == 2) { + return new ChallengeTeam("Dunkel-Grün", NamedTextColor.DARK_GREEN, createDisplayItem(Color.fromRGB(0, 170, 0), NamedTextColor.DARK_GREEN, "Dunkel-Grün")); + } + if (nr == 3) { + return new ChallengeTeam("Türkis", NamedTextColor.DARK_AQUA, createDisplayItem(Color.fromRGB(0, 170, 170), NamedTextColor.DARK_AQUA, "Türkis")); + } + if (nr == 4) { + return new ChallengeTeam("Dunkel-Rot", NamedTextColor.DARK_RED, createDisplayItem(Color.fromRGB(170, 0, 0), NamedTextColor.DARK_RED, "Dunkel-Rot")); + } + if (nr == 5) { + return new ChallengeTeam("Lila", NamedTextColor.DARK_PURPLE, createDisplayItem(Color.fromRGB(170, 0, 170), NamedTextColor.DARK_PURPLE, "Lila")); + } + if (nr == 6) { + return new ChallengeTeam("Gold", NamedTextColor.GOLD, createDisplayItem(Color.fromRGB(255, 170, 0), NamedTextColor.GOLD, "Gold")); + } + if (nr == 7) { + return new ChallengeTeam("Grau", NamedTextColor.GRAY, createDisplayItem(Color.fromRGB(170, 170, 170), NamedTextColor.GRAY, "Grau")); + } + if (nr == 8) { + return new ChallengeTeam("Dunkel-Grau", NamedTextColor.DARK_GRAY, createDisplayItem(Color.fromRGB(85, 85, 85), NamedTextColor.DARK_GRAY, "Dunkel-Grau")); + } + if (nr == 9) { + return new ChallengeTeam("Blau", NamedTextColor.BLUE, createDisplayItem(Color.fromRGB(85, 85, 255), NamedTextColor.BLUE, "Blau")); + } + if (nr == 10) { + return new ChallengeTeam("Grün", NamedTextColor.GREEN, createDisplayItem(Color.fromRGB(85, 255, 85), NamedTextColor.GREEN, "Grün")); + } + if (nr == 11) { + return new ChallengeTeam("Hell-Blau", NamedTextColor.AQUA, createDisplayItem(Color.fromRGB(85, 255, 255), NamedTextColor.AQUA, "Hell-Blau")); + } + if (nr == 12) { + return new ChallengeTeam("Rot", NamedTextColor.RED, createDisplayItem(Color.fromRGB(255, 85, 85), NamedTextColor.RED, "Rot")); + } + if (nr == 13) { + return new ChallengeTeam("Pink", NamedTextColor.LIGHT_PURPLE, createDisplayItem(Color.fromRGB(255, 85, 255), NamedTextColor.LIGHT_PURPLE, "Pink")); + } + if (nr == 14) { + return new ChallengeTeam("Gelb", NamedTextColor.YELLOW, createDisplayItem(Color.fromRGB(255, 255, 85), NamedTextColor.YELLOW, "Gelb")); + } + + return new ChallengeTeam("Team_" + nr, NamedTextColor.WHITE, createDisplayItem(Color.WHITE, NamedTextColor.WHITE, "Team " + nr)); + } + + public static void setTeamCount(int teamcount) { + ChallengeTeam[] oldTeams = teams; + teams = new ChallengeTeam[teamcount]; + for (int i = 0; i < teamcount; i++) { + teams[i] = (oldTeams != null && oldTeams.length > i && oldTeams[i] != null) ? oldTeams[i] : createDefaultTeam(i); + } + createScoreBoardTeams(); + TeamSelectGUI.buildTeamSelectInventory(); + TeamSelectGUI.updateTeamSelectGui(); + } + + private static ItemStack createDisplayItem(Color color, NamedTextColor chatColor, String teamName) { + ItemStack displayItem = new ItemStack(Material.LEATHER_HELMET, 1); + LeatherArmorMeta meta = (LeatherArmorMeta) displayItem.getItemMeta(); + meta.setColor(color); + meta.displayName(Component.text(teamName, chatColor)); + meta.addItemFlags(ItemFlag.HIDE_DYE); + displayItem.setItemMeta(meta); + return displayItem; + } + + + public static int getTeamSize() { + return teamSize; + } + + public static void setTeamSize(int size) { + teamSize = size; + } + + public static ChallengeTeam[] getTeams() { + return teams; + } + + public static ItemStack selctItem() { + ItemStack stack = new ItemStack(Material.LIME_BED); + ItemMeta meta = stack.getItemMeta(); + meta.displayName(Component.text("Team Auswahl", ChatUtil.GREEN)); + meta.getPersistentDataContainer().set(selectKey, PersistentDataType.STRING, "SelectTool"); + stack.setItemMeta(meta); + + + return stack; + } + + public static ChallengeTeam getTeam(int nr) { + return nr >= 0 && nr < teams.length ? teams[nr] : null; + } + + public static ChallengeTeam getTeam(String name) { + ChallengeTeam team = null; + for (ChallengeTeam t : teams) { + if (name.equalsIgnoreCase(t.getName())) { + team = t; + } + } + return team; + } + + public static ChallengeTeam getPlayerTeam(OfflinePlayer player) { + ChallengeTeam team = null; + if (TeamUtils.getTeams() != null) { + for (ChallengeTeam challengeTeam : TeamUtils.getTeams()) { + if (challengeTeam != null) { + for (OfflinePlayer pp : getPlayersInTeam(challengeTeam)) { + if (pp == player) { + team = challengeTeam; + break; + } + } + } + } + } + + return team; + } + + public static @NotNull Collection getPlayersInTeam(ChallengeTeam team) { + Collection players = new ArrayList<>(); + Team scoreTeam = TeamUtils.getScoreboard().getTeam(team.getName()); + if (scoreTeam == null) { + return players; + } + Set entries = scoreTeam.getEntries(); + entries.forEach(string -> { + CachedPlayer cachedPlayer = Challenges.getPlugin().playerUUIDCache.getPlayer(string); + players.add(cachedPlayer); + }); + + return players; + } + + public static void createScoreBoardTeams() { + if (Challenges.getPlugin().getSBManager().getScoreboard() instanceof Scoreboard currentScore) { + scoreboard = currentScore; + if (teamscoreboardObjective == null) { + teamscoreboardObjective = scoreboard.registerNewObjective("teams", Criteria.DUMMY, Component.text("Event")); + teamscoreboardObjective.displayName(Component.text("Event")); + teamscoreboardObjective.setDisplaySlot(DisplaySlot.SIDEBAR); + } + Team[] scoreboardTeams = new Team[teams.length]; + for (int i = 0; i < teams.length; i++) { + ChallengeTeam t = getTeam(i); + if (scoreboardTeams[i] == null) { + if (scoreboard.getTeam(t.getName()) == null) { + scoreboardTeams[i] = scoreboard.registerNewTeam(t.getName()); + scoreboardTeams[i].prefix(Component.empty().color(t.getChatColor())); + scoreboardTeams[i].color(t.getChatColor()); + scoreboardTeams[i].setAllowFriendlyFire(false); + scoreboardTeams[i].setOption(Team.Option.COLLISION_RULE, Team.OptionStatus.FOR_OWN_TEAM); + } + } + } + } + } + + public static void selectTeam(Player player, ChallengeTeam team) { + ChallengeTeam oldteam = playerTeams.get(player.getUniqueId()); + if (team != null && !Challenges.getPlugin().getConfig().getBoolean("event.teams")) { + ChatUtil.sendErrorMessage(player, "In dieser Arena können keine Teams gewählt werden!"); + return; + } + if (team != null && oldteam == team) { + ChatUtil.sendMessage(player, Component.text("Du bist bereits in Team ", ChatUtil.GREEN).append(Component.text(team.getName(), team.getChatColor()).append(Component.text(".", ChatUtil.GREEN)))); + Team scoreboardteam = scoreboard.getTeam(team.getName()); + if (scoreboardteam != null && !scoreboardteam.getEntries().contains(player.getName())) { + scoreboardteam.addPlayer(player); + } + return; + } + int count = Collections.frequency(new ArrayList<>(playerTeams.values()), team); + if (team != null && count >= teamSize) { + ChatUtil.sendMessage(player, Component.text("Das Team ", ChatUtil.GREEN).append(Component.text(team.getName(), team.getChatColor()).append(Component.text(" ist voll.", ChatUtil.GREEN)))); + return; + } + playerTeams.put(player.getUniqueId(), team); + ChatUtil.sendMessage(player, Component.text("Du bist nun in Team ", ChatUtil.GREEN).append(Component.text(team.getName(), team.getChatColor()))); + + if (oldteam != null) { + scoreboard.getTeam(oldteam.getName()).removePlayer(player); + } + scoreboard.getTeam(team.getName()).addPlayer(player); + + TeamSelectGUI.updateTeamSelectGui(); + Challenges.getPlugin().getSBManager().setScoreboardtoTeam(team); + } + + public static void setAllPlayerWithoutTeamToTeam() { + ArrayList playersWithoutTeam = new ArrayList<>(); + for (Player pp : Challenges.getPlugin().getVanish().getPlayerListWithoutVanishPlayers()) { + if (getPlayerTeam(pp) == null && pp.getGameMode() == GameMode.SURVIVAL) { + playersWithoutTeam.add(pp); + } + } + + int emptyteamsize = 0; + for (ChallengeTeam challengeTeam : getTeams()) { + Team team = TeamUtils.getScoreboard().getTeam(challengeTeam.getName()); + if (team != null && team.getEntries().isEmpty()) { + emptyteamsize++; + } + } + + if (playersWithoutTeam.size() > emptyteamsize) { + setTeamCount(getTeams().length + playersWithoutTeam.size() - emptyteamsize); + } + + if (!playersWithoutTeam.isEmpty()) { + for (Player pp : playersWithoutTeam) { + for (ChallengeTeam challengeTeam : getTeams()) { + Team team = TeamUtils.getScoreboard().getTeam(challengeTeam.getName()); + if (team != null && team.getEntries().isEmpty()) { + selectTeam(pp, challengeTeam); + } + } + } + } + } + + public static Scoreboard getScoreboard() { + return scoreboard; + } + + public static Objective getTeamscoreboardObjective() { + return teamscoreboardObjective; + } + + public static NamespacedKey getSelectKey() { + return selectKey; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/utils/ChatSkullAPI/ChatSkull.java b/Challenge/src/main/java/de/fanta/challenge/utils/ChatSkullAPI/ChatSkull.java new file mode 100644 index 0000000..ccac422 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/utils/ChatSkullAPI/ChatSkull.java @@ -0,0 +1,19 @@ +package de.fanta.challenge.utils.ChatSkullAPI; + +import net.kyori.adventure.text.Component; +import org.bukkit.entity.Player; +import org.bukkit.event.Listener; +import org.bukkit.plugin.java.JavaPlugin; + +public class ChatSkull extends JavaPlugin implements Listener { + + public static void sendAll(Player head, Component[] lines) { + SkullClass cs = new SkullClass(head, lines); + cs.sendAll(); + } + + public static void sendPlayer(Player head, Player target, Component[] lines) { + SkullClass cs = new SkullClass(head, lines); + cs.sendPlayer(target); + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/utils/ChatSkullAPI/Message.java b/Challenge/src/main/java/de/fanta/challenge/utils/ChatSkullAPI/Message.java new file mode 100644 index 0000000..3685b6c --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/utils/ChatSkullAPI/Message.java @@ -0,0 +1,75 @@ +package de.fanta.challenge.utils.ChatSkullAPI; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.TextColor; +import org.bukkit.entity.Player; + +import java.awt.geom.AffineTransform; +import java.awt.image.AffineTransformOp; +import java.awt.image.BufferedImage; + +public class Message { + + private final Component[] lines; + + public Message(BufferedImage image, int height, char imgChar) { + TextColor[][] chatColors = toChatColorArray(image, height); + this.lines = toImgMessage(chatColors, imgChar); + } + + public Message appendText(Component[] text) { + for (int y = 0; y < this.lines.length; y++) { + if (text.length > y) { + Component[] tmp16_12 = this.lines; + tmp16_12[y] = tmp16_12[y].append(text[y]); + } + } + return this; + } + + private TextColor[][] toChatColorArray(BufferedImage image, int height) { + double ratio = ((double) image.getHeight() / image.getWidth()); + BufferedImage resized = resizeImage(image, (int) (height / ratio), height); + TextColor[][] chatImg = new TextColor[resized.getWidth()][resized.getHeight()]; + for (int x = 0; x < resized.getWidth(); x++) { + for (int y = 0; y < resized.getHeight(); y++) { + int rgb = resized.getRGB(x, y); + String hex = "#" + Integer.toHexString(rgb).substring(2); + TextColor closest = getClosestChatColor(TextColor.fromHexString(hex)); + chatImg[x][y] = closest; + } + } + return chatImg; + } + + private Component[] toImgMessage(TextColor[][] colors, char imgchar) { + Component[] lines = new Component[(colors[0]).length]; + for (int y = 0; y < (colors[0]).length; y++) { + Component line = Component.empty(); + for (TextColor[] textColors : colors) { + TextColor color = textColors[y]; + line = line.append(Component.text(color != null ? imgchar : ' ', color != null ? textColors[y] : NamedTextColor.WHITE)); + } + lines[y] = line; + } + return lines; + } + + private BufferedImage resizeImage(BufferedImage originalImage, int width, int height) { + AffineTransform af = new AffineTransform(); + af.scale(((double) width / originalImage.getWidth()), ((double) height / originalImage.getHeight())); + AffineTransformOp operation = new AffineTransformOp(af, 1); + return operation.filter(originalImage, null); + } + + public void sendToPlayer(Player player) { + for (Component line : lines) { + player.sendMessage(line); + } + } + + private TextColor getClosestChatColor(TextColor color) { + return color; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/utils/ChatSkullAPI/SkullClass.java b/Challenge/src/main/java/de/fanta/challenge/utils/ChatSkullAPI/SkullClass.java new file mode 100644 index 0000000..925701e --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/utils/ChatSkullAPI/SkullClass.java @@ -0,0 +1,46 @@ +package de.fanta.challenge.utils.ChatSkullAPI; + +import de.fanta.challenge.Challenges; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.net.URI; +import java.net.URL; +import java.util.logging.Level; + +public class SkullClass { + private final Player player; + + private final Component[] lines; + + public SkullClass(Player player, Component[] lines) { + this.player = player; + this.lines = lines; + } + + public void sendAll() { + for (Player player : Bukkit.getOnlinePlayers()) { + sendPlayer(player); + } + } + + public void sendPlayer(Player player) { + String name = this.player.getPlayer().getName(); + BufferedImage imageToSend = null; + try { + imageToSend = ImageIO.read(newURL(name)); + } catch (Exception e) { + Challenges.getPlugin().getLogger().log(Level.SEVERE, "Error while load skin", e); + } + new Message(imageToSend, 8, '█').appendText(this.lines).sendToPlayer(player); + } + + private static URL newURL(String name) throws Exception { + String url = "https://mineskin.eu/helm/%pname%/8.png"; + url = url.replace("%pname%", name); + return new URI(url).toURL(); + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/utils/ChatUtil.java b/Challenge/src/main/java/de/fanta/challenge/utils/ChatUtil.java new file mode 100644 index 0000000..7822ce7 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/utils/ChatUtil.java @@ -0,0 +1,101 @@ +package de.fanta.challenge.utils; + +import de.fanta.challenge.Challenges; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TranslatableComponent; +import net.kyori.adventure.text.format.TextColor; +import net.kyori.adventure.title.Title; +import net.kyori.adventure.util.Ticks; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import javax.annotation.Nullable; + +public class ChatUtil { + + public static final TextColor GREEN = TextColor.fromHexString("#32CD32"); + public static final TextColor YELLOW = TextColor.fromHexString("#FFD700"); + public static final TextColor ORANGE = TextColor.fromHexString("#FF8C00"); + public static final TextColor RED = TextColor.fromHexString("#B22222"); + public static final TextColor PINK = TextColor.fromHexString("#FF1493"); + public static final TextColor BLUE = TextColor.fromHexString("#1E90FF"); + + private ChatUtil() { + } + + public static void sendMessage(CommandSender sender, Component component) { + Component message = Challenges.getPlugin().getPrefixComponent().append(component); + sender.sendMessage(message); + } + + public static void sendNormalMessage(CommandSender sender, String string) { + sendMessage(sender, Component.text(string).color(GREEN)); + } + + public static void sendWarningMessage(CommandSender sender, String string) { + sendMessage(sender, Component.text(string).color(ORANGE)); + } + + public static void sendErrorMessage(CommandSender sender, String string) { + sendMessage(sender, Component.text(string).color(RED)); + } + + public static void sendDebugMessage(CommandSender sender, String string) { + if (sender != null) { + if (sender.hasPermission("fanta.debug")) { + sendMessage(sender, Component.text(string).color(PINK)); + } + } + } + + public static void sendBrodCastMessage(Component component) { + for (Player player : Bukkit.getOnlinePlayers()) { + sendMessage(player, component); + } + } + + public static void sendTitleToAll(Component headline, Component text, int in, int time, int out, boolean pling) { + for (Player p : Bukkit.getOnlinePlayers()) { + sendTitleToPlayer(p, headline, text, in, time, out, pling); + } + } + + public static void sendTitleToAll(Component headline, Component text, boolean pling) { + sendTitleToAll(headline, text, 10, 60, 10, pling); + } + + public static void sendTitleToAll(Component headline, Component text) { + sendTitleToAll(headline, text, 10, 60, 10, true); + } + + public static void sendTitleToPlayer(Player player, @Nullable Component headline, @Nullable Component text, int in, int time, int out, boolean pling) { + Component headLine = headline != null ? headline.color(BLUE) : Component.empty(); + Component textComponent = text != null ? text : Component.empty(); + + Title title = Title.title(headLine, textComponent, Title.Times.times(Ticks.duration(in), Ticks.duration(time), Ticks.duration(out))); + player.showTitle(title); + if (pling) { + player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 2.0F); + } + } + + public static Component getTrasnlateItemComponent(Material material) { + TranslatableComponent component = Component.translatable(material.translationKey()); + if (material.name().toLowerCase().contains("music_disc") || material.name().toLowerCase().contains("banner_pattern")) { + component = component.append(Component.text(" ").append(Component.translatable(material.translationKey() + ".desc"))); + } + + if (material == Material.NETHERITE_UPGRADE_SMITHING_TEMPLATE) { + component = component.append(Component.text(" ").append(Component.translatable("upgrade.minecraft.netherite_upgrade"))); + } else if (material.name().endsWith("_SMITHING_TEMPLATE")) { + String key = material.getItemTranslationKey(); + key = key.replace("item.minecraft.", "").replace("_armor_trim_smithing_template", ""); + component = component.append(Component.text(" ").append(Component.translatable("trim_pattern.minecraft." + key))); + } + + return component; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/utils/ColorUtils.java b/Challenge/src/main/java/de/fanta/challenge/utils/ColorUtils.java new file mode 100644 index 0000000..ded87cf --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/utils/ColorUtils.java @@ -0,0 +1,196 @@ +package de.fanta.challenge.utils; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.Timer; +import de.fanta.challenge.schedular.CancellableTask; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.Style; +import net.kyori.adventure.text.format.TextColor; +import net.kyori.adventure.text.format.TextDecoration; + +public class ColorUtils { + + private final Challenges plugin; + private long time; + private CancellableTask cancellableTask; + + public ColorUtils(Challenges plugin) { + this.plugin = plugin; + restartTask(1); + } + + public static TextColor getColorGradient(int[] baseColors, long time, double extraTime, double speed) { + int v = Math.floorMod((int) (time * speed + extraTime * 21), baseColors.length * 100); + int step = v / 100; + double ratio = (v % 100) * 0.01; + int c0 = baseColors[step]; + int c1 = baseColors[(step + 1) % baseColors.length]; + + int r1 = (c0 >> 16) & 0xff; + int g1 = (c0 >> 8) & 0xff; + int b1 = c0 & 0xff; + + int r2 = (c1 >> 16) & 0xff; + int g2 = (c1 >> 8) & 0xff; + int b2 = c1 & 0xff; + + double cmax1 = Math.max(r1, g1); + if (b1 > cmax1) { + cmax1 = b1; + } + double cmin1 = Math.min(r1, g1); + if (b1 < cmin1) { + cmin1 = b1; + } + + double brightness1 = (cmax1) / 255.0; + double saturation1; + if (cmax1 != 0) { + saturation1 = ((cmax1 - cmin1)) / (cmax1); + } else { + saturation1 = 0; + } + double hue1; + if (saturation1 == 0) { + hue1 = 0; + } else { + double redc = ((cmax1 - r1)) / ((cmax1 - cmin1)); + double greenc = ((cmax1 - g1)) / ((cmax1 - cmin1)); + double bluec = ((cmax1 - b1)) / ((cmax1 - cmin1)); + if (r1 == cmax1) { + hue1 = bluec - greenc; + } else if (g1 == cmax1) { + hue1 = 2.0 + redc - bluec; + } else { + hue1 = 4.0 + greenc - redc; + } + hue1 = hue1 / 6.0; + if (hue1 < 0) { + hue1 = hue1 + 1.0; + } + } + + double cmax2 = Math.max(r2, g2); + if (b2 > cmax2) { + cmax2 = b2; + } + double cmin2 = Math.min(r2, g2); + if (b2 < cmin2) { + cmin2 = b2; + } + + double brightness2 = (cmax2) / 255.0; + double saturation2; + if (cmax2 != 0) { + saturation2 = ((cmax2 - cmin2)) / (cmax2); + } else { + saturation2 = 0; + } + double hue2; + if (saturation2 == 0) { + hue2 = 0; + } else { + double redc = ((cmax2 - r2)) / ((cmax2 - cmin2)); + double greenc = ((cmax2 - g2)) / ((cmax2 - cmin2)); + double bluec = ((cmax2 - b2)) / ((cmax2 - cmin2)); + if (r2 == cmax2) { + hue2 = bluec - greenc; + } else if (g2 == cmax2) { + hue2 = 2.0 + redc - bluec; + } else { + hue2 = 4.0 + greenc - redc; + } + hue2 = hue2 / 6.0; + if (hue2 < 0) { + hue2 = hue2 + 1.0; + } + } + + double ratio2 = 1.0 - ratio; + double brightness = brightness1 * ratio2 + brightness2 * ratio; + double saturation = saturation1 * ratio2 + saturation2 * ratio; + if (hue2 - hue1 > 0.5) { + hue1 += 1; + } else if (hue1 - hue2 > 0.5) { + hue2 += 1; + } + double hue = hue1 * ratio2 + hue2 * ratio; + if (hue > 1.0) { + hue -= 1.0; + } + + double r = 0.0; + double g = 0.0; + double b = 0.0; + if (saturation == 0) { + r = g = b = (int) (brightness * 255.0f + 0.5f); + } else { + double h = (hue - Math.floor(hue)) * 6.0f; + double f = h - Math.floor(h); + double p = brightness * (1.0f - saturation); + double q = brightness * (1.0f - saturation * f); + double t = brightness * (1.0f - (saturation * (1.0f - f))); + switch ((int) h) { + case 0 -> { + r = (int) (brightness * 255.0f + 0.5f); + g = (int) (t * 255.0f + 0.5f); + b = (int) (p * 255.0f + 0.5f); + } + case 1 -> { + r = (int) (q * 255.0f + 0.5f); + g = (int) (brightness * 255.0f + 0.5f); + b = (int) (p * 255.0f + 0.5f); + } + case 2 -> { + r = (int) (p * 255.0f + 0.5f); + g = (int) (brightness * 255.0f + 0.5f); + b = (int) (t * 255.0f + 0.5f); + } + case 3 -> { + r = (int) (p * 255.0f + 0.5f); + g = (int) (q * 255.0f + 0.5f); + b = (int) (brightness * 255.0f + 0.5f); + } + case 4 -> { + r = (int) (t * 255.0f + 0.5f); + g = (int) (p * 255.0f + 0.5f); + b = (int) (brightness * 255.0f + 0.5f); + } + case 5 -> { + r = (int) (brightness * 255.0f + 0.5f); + g = (int) (p * 255.0f + 0.5f); + b = (int) (q * 255.0f + 0.5f); + } + } + } + int rFinal = (int) r; + int gFinal = (int) g; + int bFinal = (int) b; + + int c = (rFinal << 16) | (gFinal << 8) | (bFinal); + + return TextColor.color(c); + } + + public void restartTask(long l) { + if (this.cancellableTask != null) { + cancellableTask.cancel(); + } + + cancellableTask = plugin.getScheduler().runGlobalAtFixedRate(() -> time++, 0L, l); + } + + public long getTime() { + return this.time; + } + + public Component addChatColorToString(String input, int[] baseColors, double speed) { + Component output = Component.empty(); + double extraTime = 0.0; + for (char c : input.toCharArray()) { + extraTime = plugin.getTimer().getMode() == Timer.TimerMode.UP ? extraTime - 0.40 : extraTime + 0.40; + output = output.append(Component.text(c, Style.style(getColorGradient(baseColors, getTime(), extraTime, speed), TextDecoration.BOLD))); + } + return output; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/utils/Config.java b/Challenge/src/main/java/de/fanta/challenge/utils/Config.java new file mode 100644 index 0000000..288ad5f --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/utils/Config.java @@ -0,0 +1,77 @@ +package de.fanta.challenge.utils; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.ServerType; +import org.bukkit.Location; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.inventory.ItemStack; + +import java.util.List; + +public class Config { + + private static final Challenges plugin = Challenges.getPlugin(); + + public static void setValue(String path, Object value) { + setValue(path, value, true); + } + + public static void setValue(String path, Object value, boolean edit) { + plugin.getConfig().set(path, value); + plugin.saveConfig(); + Challenges.getPlugin().getLogger().info("Save Config " + path + ": " + value + " (" + edit + ")"); + if (edit && plugin.getServerType() == ServerType.CHALLENGE) { + if (!getBoolean("editsettings")) { + setValue("editsettings", true, false); + plugin.getLogger().info("Diese Challenge ist kein SpeedRun mehr " + "(" + path + ": " + value + ")"); + if (plugin.getCurrentEditor() != null) { + ChatUtil.sendWarningMessage(plugin.getCurrentEditor(), "Diese Challenge wird nicht mehr als Speed Run gezählt, da du etwas in den Einstellungen bearbeitet hast."); + } + } + } + } + + public static ConfigurationSection createSection(String path) { + return plugin.getConfig().createSection(path); + } + + public static boolean getBoolean(String path) { + return plugin.getConfig().getBoolean(path); + } + + public static int getInt(String path) { + return plugin.getConfig().getInt(path); + } + + public static String getString(String path) { + return plugin.getConfig().getString(path); + } + + public static double getDouble(String path) { + return plugin.getConfig().getDouble(path); + } + + public static double getDouble(String path, Double def) { + return plugin.getConfig().getDouble(path, def); + } + + public static ItemStack getItemStack(String path) { + return plugin.getConfig().getItemStack(path); + } + + public static Location getLocation(String path) { + return plugin.getConfig().getLocation(path); + } + + public static ConfigurationSection getConfigurationSection(String path) { + return plugin.getConfig().getConfigurationSection(path); + } + + public static List getStringList(String path) { + return plugin.getConfig().getStringList(path); + } + + public static boolean contains(String path) { + return plugin.getConfig().contains(path); + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/utils/CoordsTargeter.java b/Challenge/src/main/java/de/fanta/challenge/utils/CoordsTargeter.java new file mode 100644 index 0000000..adb0bd6 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/utils/CoordsTargeter.java @@ -0,0 +1,104 @@ +package de.fanta.challenge.utils; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.events.TimerChangedEvent; +import de.fanta.challenge.schedular.CancellableTask; +import org.bukkit.Location; +import org.bukkit.Particle; +import org.bukkit.Vibration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerQuitEvent; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.UUID; + +public class CoordsTargeter implements Listener { + + private static final Challenges plugin = Challenges.getPlugin(); + private static final HashMap locationMap = new HashMap<>(); + private static final Collection autoDetectionList = new ArrayList<>(); + + private CancellableTask task; + + @EventHandler + public void onTimer(TimerChangedEvent e) { + if (e.isRunning()) { + startUpdateTask(); + } else { + locationMap.clear(); + stopUpdateTask(); + } + } + + @EventHandler + public void onLeave(PlayerQuitEvent e) { + if (locationMap.containsKey(e.getPlayer().getUniqueId())) { + removeLocation(e.getPlayer().getUniqueId()); + } + } + + public void updateTargeter() { + for (Player p : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + if (locationMap.containsKey(p.getUniqueId())) { + Location targetLocation = locationMap.get(p.getUniqueId()); + + if (targetLocation != null && targetLocation.getWorld() == p.getWorld()) { + Location playerlocation; + if (p.getVehicle() != null) { + playerlocation = p.getLocation().clone().add(0, 0.5, 0); + } else { + playerlocation = p.getLocation().clone().add(0, 1, 0); + } + + int distance = (int) playerlocation.toVector().subtract(targetLocation.toVector()).length(); + Vibration vibration = new Vibration(new Vibration.Destination.BlockDestination(targetLocation.getBlock()), distance * 2); + p.spawnParticle(Particle.VIBRATION, playerlocation, 1, vibration); + + if (autoDetectionList.contains(p.getUniqueId()) && distance < 5) { + removeLocation(p.getUniqueId()); + ChatUtil.sendNormalMessage(p, "Sie haben ihr Ziel erreicht!"); + } + } else if (autoDetectionList.contains(p.getUniqueId())) { + removeLocation(p.getUniqueId()); + ChatUtil.sendWarningMessage(p, "Du bist nicht mehr in der Welt vom Waypoint, der Weg wird nicht mehr angezeigt!"); + } + } + } + } + + public void startUpdateTask() { + task = plugin.getScheduler().runGlobalAtFixedRate(this::updateTargeter, 5L, 5L); + } + + public void stopUpdateTask() { + if (task != null) { + task.cancel(); + } + task = null; + } + + public static void addLocation(UUID uuid, Location location) { + addLocation(uuid, location, true); + } + + public static void addLocation(UUID uuid, Location location, boolean autoDetection) { + locationMap.put(uuid, location); + if (autoDetection) { + autoDetectionList.add(uuid); + } + + } + + public static void removeLocation(UUID uuid) { + locationMap.remove(uuid); + autoDetectionList.remove(uuid); + } + + public static boolean containsLocation(UUID uuid) { + return locationMap.containsKey(uuid); + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/utils/CubesideModUtils.java b/Challenge/src/main/java/de/fanta/challenge/utils/CubesideModUtils.java new file mode 100644 index 0000000..f405cc8 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/utils/CubesideModUtils.java @@ -0,0 +1,41 @@ +package de.fanta.challenge.utils; + +import de.fanta.challenge.Challenges; +import de.iani.cubesideutils.MinecraftDataOutputStream; +import net.kyori.adventure.text.format.TextColor; +import org.bukkit.entity.Player; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +public class CubesideModUtils { + + + + public static void sendFlashScreenToCubesideMod(Challenges plugin, Player player, int duration, TextColor color) { + plugin.getScheduler().runDelayedOnEntity(player, () -> { + if (player == null) { + return; + } + if (!player.getListeningPluginChannels().contains(plugin.getCubesideMod_ModChannel())) { + return; + } + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + MinecraftDataOutputStream dataOut = new MinecraftDataOutputStream(out); + int cubesideDateChannel = 1; + int cubesideDateChannelVersion = 0; + try { + dataOut.writeByte(cubesideDateChannel); + dataOut.writeByte(cubesideDateChannelVersion); + dataOut.writeInt(color.value()); + dataOut.writeInt(duration); + dataOut.flush(); + } catch (IOException e) { + throw new RuntimeException(e); + } + player.sendPluginMessage(plugin, plugin.getCubesideMod_ModChannel(), out.toByteArray()); + }, 1L); + } + +} diff --git a/Challenge/src/main/java/de/fanta/challenge/utils/ItemStackUtil.java b/Challenge/src/main/java/de/fanta/challenge/utils/ItemStackUtil.java new file mode 100644 index 0000000..187014b --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/utils/ItemStackUtil.java @@ -0,0 +1,20 @@ +package de.fanta.challenge.utils; + +import org.bukkit.inventory.ItemStack; + +import java.util.Base64; + +public class ItemStackUtil { + + public static String getBase64StringFromItemStack(ItemStack stack) { + if (stack == null) { + return null; + } + return Base64.getEncoder().encodeToString(stack.serializeAsBytes()); + } + + public static ItemStack getItemStackFromBase64(String itemString) { + byte[] itemBytes = Base64.getDecoder().decode(itemString); + return ItemStack.deserializeBytes(itemBytes); + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/utils/ItemUtils.java b/Challenge/src/main/java/de/fanta/challenge/utils/ItemUtils.java new file mode 100644 index 0000000..5105cb0 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/utils/ItemUtils.java @@ -0,0 +1,45 @@ +package de.fanta.challenge.utils; + +import de.iani.cubesideutils.bukkit.items.ItemBuilder; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.TextDecoration; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; + +public class ItemUtils { + + public static final ItemStack EMPTY_ICON = createGuiItem(Material.GRAY_STAINED_GLASS_PANE, Component.empty(), true, false); + + public static ItemStack createGuiItem(Material material, Component name, Component... lore) { + return createGuiItem(material, name, false, lore); + } + + public static ItemStack createGuiItem(Material material, Component name, boolean glowing, boolean showTooltip, Component... lore) { + if (!name.style().hasDecoration(TextDecoration.ITALIC)) { + name = name.decoration(TextDecoration.ITALIC, TextDecoration.State.FALSE); + } + + for (int i = 0; i < lore.length; i++) { + Component component = lore[i]; + if (!component.style().hasDecoration(TextDecoration.ITALIC)) { + component = component.decoration(TextDecoration.ITALIC, TextDecoration.State.FALSE); + } + lore[i] = component; + } + + ItemBuilder builder = ItemBuilder.fromMaterial(material).displayName(name).lore(lore); + if (glowing) { + builder.enchantment(Enchantment.UNBREAKING, 1, true).flag(ItemFlag.HIDE_ENCHANTS); + } + if (!showTooltip) { + builder.hideTooltip(true); + } + return builder.build(); + } + + public static ItemStack createGuiItem(Material material, Component name, boolean glowing, Component... lore) { + return createGuiItem(material, name, glowing, true, lore); + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/utils/SaveWorldUtils.java b/Challenge/src/main/java/de/fanta/challenge/utils/SaveWorldUtils.java new file mode 100644 index 0000000..61d65c5 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/utils/SaveWorldUtils.java @@ -0,0 +1,272 @@ +package de.fanta.challenge.utils; + +import de.cubeside.nmsutils.NMSUtils; +import de.fanta.challenge.Challenges; +import de.fanta.challenge.SaveSlot; +import de.fanta.challenge.ServerType; +import de.fanta.challenge.events.ChallengeEventStatusChangedEvent; +import de.fanta.challenge.events.EventStatusChangedEvent; +import de.fanta.challenge.events.ServerStatusChangedEvent; +import net.kyori.adventure.text.Component; +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.entity.Player; + +import javax.annotation.Nullable; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileOutputStream; +import java.io.FileReader; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; +import java.util.HashMap; +import java.util.Properties; +import java.util.concurrent.CompletableFuture; +import java.util.logging.Level; + +public class SaveWorldUtils { + + private static final Challenges plugin = Challenges.getPlugin(); + + public static boolean isSavingWorld = false; + public static boolean isCopyWorld = false; + private static boolean isServerRestartRequested = false; + private static boolean restart = false; + private static String restartSeed = null; + public static double progress = 0.0; + + public static void saveWorld(String saveID, SaveSlot saveSlot) { + saveWorld(null, saveID, saveSlot); + } + + public static void saveWorld(@Nullable Player player, String saveID, SaveSlot saveSlot) { + plugin.getLogger().info("Try Save world slot: " + saveSlot.getSlot()); + try { + if (isSavingWorld) { + if (player != null) { + ChatUtil.sendErrorMessage(player, "Diese Welt wird aktuell gespeichert. Bitte warte bis der Vorgang abgeschlossen ist. Dies kann einige Minuten dauern."); + } + return; + } + if (plugin.getServerType() == ServerType.CHALLENGE_EVENT) { + if (player != null) { + ChatUtil.sendErrorMessage(player, "Challenge Events können nicht gespeichert werden."); + } + return; + } + isSavingWorld = true; + plugin.getServerConfig().set("saveTime", System.currentTimeMillis()); + plugin.saveServerConfig(); + Config.setValue("timertime", Challenges.getPlugin().getTimer().getTime()); + Config.setValue("backpack_size", Challenges.getPlugin().getBackpack().getSize() / 9); + Challenges.getPlugin().getBackpack().saveInventoryToConfig(); + + for (Player p : Bukkit.getOnlinePlayers()) { + p.saveData(); + } + NMSUtils nms = plugin.getNMSUtils(); + if (nms != null) { + for (World world : Bukkit.getWorlds()) { + nms.getWorldUtils().saveWorldNow(world); + } + copyWorldAsync(player, saveID, saveSlot); + } + } catch (Exception ex) { + plugin.getLogger().log(Level.SEVERE, "Welt konnte nicht gespeichert werden", ex); + } + } + + private static void copyWorldAsync(Player player, String saveID, SaveSlot saveSlot) { + File dir = new File(saveID); + File configs = new File("plugins/Challenges"); + File end = new File("world_the_end"); + File nether = new File("world_nether"); + File world = new File("world"); + File saveend = new File(saveID + "/world_the_end"); + File savenether = new File(saveID + "/world_nether"); + File saveworld = new File(saveID + "/world"); + File saveconfigs = new File(saveID + "/Challenges"); + File saveFolder; + if (plugin.getServerType() != ServerType.ADVENTURE) { + saveFolder = new File(plugin.getChallengeSavePath().toFile(), saveID + "/"); + } else { + saveFolder = new File(plugin.getAdventureSavePath().toFile(), saveID + "/"); + } + try { + FileUtils.forceMkdir(dir); + FileUtils.copyDirectory(configs, saveconfigs); + FileUtils.copyDirectory(end, saveend); + FileUtils.copyDirectory(nether, savenether); + FileUtils.copyDirectory(world, saveworld); + + if (player != null) { + ChatUtil.sendNormalMessage(player, "Welt wurde erfolgreich kopiert und wird nun gespeichert. Dies kann einige Minuten dauern. Du kannst aber ganz normal weiter spielen."); + } + + CompletableFuture copyFuture = CompletableFuture.supplyAsync(() -> { + try { + if (!saveFolder.isDirectory()) { + saveFolder.mkdirs(); + } + + File saveSlotFolder = new File(saveFolder, saveSlot.getSlot()); + + if (saveSlotFolder.isDirectory()) { + FileUtils.forceDelete(saveSlotFolder); + } + HashMap copyMap = new HashMap<>(); + copyMap.put(dir, saveSlotFolder); + moveFolderWithProgress(copyMap); + return true; + } catch (IOException ex) { + plugin.getLogger().log(Level.SEVERE, "Could not save world ", ex); + return false; + } + }); + + copyFuture.thenAccept(result -> { + plugin.getServer().getScheduler().runTask(plugin, () -> { + plugin.getLogger().info("Save result: " + result); + if (result) { + if (player != null) { + ChatUtil.sendNormalMessage(player, "Welt wurde erfolgreich auf Slot " + saveSlot.getSlot() + " gespeichert!"); + } + + if (isServerRestartRequested) { + restartServerInternal(restartSeed); + } else if (restart) { + Config.setValue("World_Reset", true); + Bukkit.shutdown(); + } + } else { + if (player != null) { + ChatUtil.sendErrorMessage(Bukkit.getPlayer(saveID), "Map konnte nicht richtig gespeichert werden, bitte versuche es noch einmal"); + } + } + isSavingWorld = false; + try { + FileUtils.deleteDirectory(dir); + } catch (IOException ex) { + plugin.getLogger().log(Level.SEVERE, "Could not delete tempFolder ", ex); + } + }); + }); + } catch (IOException ex) { + plugin.getLogger().log(Level.SEVERE, "Could not save world ", ex); + } + } + + public static void restartServer(@Nullable String seed) { + if (isSavingWorld) { + restartSeed = seed; + isServerRestartRequested = true; + } else { + restartServerInternal(seed); + } + } + + private static void restartServerInternal(@Nullable String seed) { + plugin.setWaitingForShutdown(true); + + Bukkit.getPluginManager().callEvent(new EventStatusChangedEvent(false)); + Bukkit.getPluginManager().callEvent(new ChallengeEventStatusChangedEvent(false)); + Bukkit.getPluginManager().callEvent(new ServerStatusChangedEvent(false)); + + for (Player p : Bukkit.getOnlinePlayers()) { + plugin.portPlayerToLobby(p); + } + + Config.setValue("editsettings", true, false); + + setSeedInServerProperties(seed); + + plugin.getTimer().stopTimer(); + + for (String key : Config.getConfigurationSection("Saved_Locations").getKeys(false)) { + Config.setValue("Saved_Locations." + key, null, false); + } + + plugin.saveConfig(); + plugin.getBackpack().saveInventoryToConfig(); + + if (Config.getBoolean("firsttimerstart") && plugin.getFirstEditor() != null && plugin.getServerType() != ServerType.CHALLENGE_EVENT) { + restart = true; + SaveWorldUtils.saveWorld(plugin.getFirstEditor().getUniqueId().toString(), SaveSlot.SLOT_AUTO); + } else { + Config.setValue("World_Reset", true); + Bukkit.shutdown(); + } + + } + + private static void setSeedInServerProperties(@Nullable String seed) { + try { + BufferedReader in = new BufferedReader(new FileReader("server.properties")); + Properties props = new Properties(); + props.load(in); + in.close(); + if (seed != null) { + props.setProperty("level-seed", seed); + Config.setValue("resetwithseed", true, false); + } else { + props.setProperty("level-seed", ""); + } + FileOutputStream out = new FileOutputStream("server.properties"); + props.store(out, null); + out.close(); + } catch (IOException e) { + plugin.getLogger().log(Level.SEVERE, "Error while read server properties Config", e); + } + } + + public static void moveFolderWithProgress(HashMap copyMap) throws IOException { + isCopyWorld = true; + final long[] totalBytes = {0}; + final long[] copiedBytes = {0}; + + for (File sourceFolder : copyMap.keySet()) { + Files.walk(sourceFolder.toPath()).forEach(source -> { + if (!Files.isDirectory(source)) { + totalBytes[0] += source.toFile().length(); + } + }); + } + + for (File sourceFolder : copyMap.keySet()) { + Files.walk(sourceFolder.toPath()).forEach(source -> { + try { + File target = new File(copyMap.get(sourceFolder).toPath().resolve(sourceFolder.toPath().relativize(source)).toString()); + if (Files.isDirectory(source)) { + target.mkdir(); + } else { + Files.copy(source, target.toPath(), StandardCopyOption.REPLACE_EXISTING); + copiedBytes[0] += source.toFile().length(); + progress = (double) copiedBytes[0] / totalBytes[0] * 100; + } + } catch (IOException e) { + plugin.getLogger().log(Level.SEVERE, "Error while copy files", e); + } + }); + } + isCopyWorld = false; + } + + public static Component getProgressBar(double value) { + int progress = (int) (value / 100 * 40); + + Component progressBar = Component.empty(); + progressBar = progressBar.append(Component.text("[", ChatUtil.RED)); + for (int i = 0; i < 40; i++) { + if (i < progress) { + progressBar = progressBar.append(Component.text("|", ChatUtil.PINK)); + } else { + progressBar = progressBar.append(Component.text("|", ChatUtil.GREEN)); + } + } + progressBar = progressBar.append(Component.text("] ", ChatUtil.RED).append(Component.text(String.format("%.2f", value) + "%", ChatUtil.PINK))); + + return progressBar; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/utils/Statistics.java b/Challenge/src/main/java/de/fanta/challenge/utils/Statistics.java new file mode 100644 index 0000000..bf4bd97 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/utils/Statistics.java @@ -0,0 +1,141 @@ +package de.fanta.challenge.utils; + +import de.fanta.challenge.Challenges; +import de.fanta.challenge.ServerType; +import de.iani.cubesidestats.api.CubesideStatisticsAPI; +import de.iani.cubesidestats.api.StatisticKey; + +import java.util.UUID; + +public class Statistics { + private final Challenges plugin; + + private final CubesideStatisticsAPI statistics; + + private final StatisticKey speedRunsPlayedSolo; + private final StatisticKey speedRunsWonSolo; + private final StatisticKey speedRunsTimeSolo; + + private final StatisticKey speedRunsPlayedDuo; + private final StatisticKey speedRunsWonDuo; + private final StatisticKey speedRunsTimeDuo; + + private final StatisticKey speedRunsPlayedTeam; + private final StatisticKey speedRunsWonTeam; + private final StatisticKey speedRunsTimeTeam; + + private final StatisticKey challengeWeekStats; + + public Statistics(Challenges plugin) { + this.plugin = plugin; + statistics = plugin.getCubesideStatistics(); + + speedRunsPlayedSolo = statistics.getStatisticKey("challenge.speedruns.solo.played"); + speedRunsPlayedSolo.setDisplayName("Challenge - SpeedRun's gespielt (Solo)"); + speedRunsPlayedSolo.setIsMonthlyStats(true); + + speedRunsWonSolo = statistics.getStatisticKey("challenge.speedruns.solo.won"); + speedRunsWonSolo.setDisplayName("Challenge - SpeedRun's gewonnen (Solo)"); + speedRunsWonSolo.setIsMonthlyStats(true); + + speedRunsTimeSolo = statistics.getStatisticKey("challenge.speedruns.solo.time"); + speedRunsTimeSolo.setDisplayName("Beste Zeit (Solo)"); + speedRunsTimeSolo.setIsMonthlyStats(true); + + + speedRunsPlayedDuo = statistics.getStatisticKey("challenge.speedruns.duo.played"); + speedRunsPlayedDuo.setDisplayName("Challenge - SpeedRun's gespielt (Duo)"); + speedRunsPlayedDuo.setIsMonthlyStats(true); + + speedRunsWonDuo = statistics.getStatisticKey("challenge.speedruns.duo.won"); + speedRunsWonDuo.setDisplayName("Challenge - SpeedRun's gewonnen (Duo)"); + speedRunsWonDuo.setIsMonthlyStats(true); + + speedRunsTimeDuo = statistics.getStatisticKey("challenge.speedruns.duo.time"); + speedRunsTimeDuo.setDisplayName("Beste Zeit (Duo)"); + speedRunsTimeDuo.setIsMonthlyStats(true); + + + speedRunsPlayedTeam = statistics.getStatisticKey("challenge.speedruns.team.played"); + speedRunsPlayedTeam.setDisplayName("Challenge - SpeedRun's gespielt (Team)"); + speedRunsPlayedTeam.setIsMonthlyStats(true); + + speedRunsWonTeam = statistics.getStatisticKey("challenge.speedruns.team.won"); + speedRunsWonTeam.setDisplayName("Challenge - SpeedRun's gewonnen (Team)"); + speedRunsWonTeam.setIsMonthlyStats(true); + + speedRunsTimeTeam = statistics.getStatisticKey("challenge.speedruns.team.time"); + speedRunsTimeTeam.setDisplayName("Beste Zeit (Team)"); + speedRunsTimeTeam.setIsMonthlyStats(true); + + + challengeWeekStats = statistics.getStatisticKey("challenge.challengeweek"); + challengeWeekStats.setDisplayName("Beste Spieler Challenge Woche"); + challengeWeekStats.setIsMonthlyStats(false); + } + + public void increaseChallengeWeekStats(UUID uuid, int points) { + statistics.getStatistics(uuid).increaseScore(challengeWeekStats, points); + } + + public void addSpeedRunWonSolo(UUID uuid, int time) { + statistics.getStatistics(uuid).increaseScore(speedRunsWonSolo, 1); + statistics.getStatistics(uuid).minScore(speedRunsTimeSolo, time); + } + + public void addSpeedRunsPlayedSolo(UUID uuid) { + statistics.getStatistics(uuid).increaseScore(speedRunsPlayedSolo, 1); + } + + public void addSpeedRunWonDuo(UUID uuid, int time) { + statistics.getStatistics(uuid).increaseScore(speedRunsWonDuo, 1); + statistics.getStatistics(uuid).minScore(speedRunsTimeDuo, time); + } + + public void addSpeedRunsPlayedDuo(UUID uuid) { + statistics.getStatistics(uuid).increaseScore(speedRunsPlayedDuo, 1); + } + + public void addSpeedRunWonTeam(UUID uuid, int time) { + statistics.getStatistics(uuid).increaseScore(speedRunsWonTeam, 1); + statistics.getStatistics(uuid).minScore(speedRunsTimeTeam, time); + } + + public void addSpeedRunsPlayedTeam(UUID uuid) { + statistics.getStatistics(uuid).increaseScore(speedRunsPlayedTeam, 1); + } + + public void saveSpeedRun() { + if (plugin.getServerType() != ServerType.CHALLENGE) { + return; + } + + for (UUID uuid : plugin.getstatisticPlayers()) { + int playerPlays = plugin.getstatisticPlayers().size(); + if (playerPlays == 1) { + addSpeedRunWonSolo(uuid, (int) (plugin.getTimer().getTimeInMs() / 1000) * 1000); + } else if (playerPlays == 2) { + addSpeedRunWonDuo(uuid, (int) (plugin.getTimer().getTimeInMs() / 1000) * 1000); + } else if (playerPlays >= 3) { + addSpeedRunWonTeam(uuid, (int) (plugin.getTimer().getTimeInMs() / 1000) * 1000); + } + } + } + + public void addSpeedRunPlayed() { + if (plugin.getServerType() != ServerType.CHALLENGE) { + return; + } + + for (UUID uuid : plugin.getstatisticPlayers()) { + int playerPlays = plugin.getstatisticPlayers().size(); + if (playerPlays == 1) { + addSpeedRunsPlayedSolo(uuid); + } else if (playerPlays == 2) { + addSpeedRunsPlayedDuo(uuid); + } else if (playerPlays >= 3) { + addSpeedRunsPlayedTeam(uuid); + } + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/utils/VanishUtils.java b/Challenge/src/main/java/de/fanta/challenge/utils/VanishUtils.java new file mode 100644 index 0000000..7e25fb1 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/utils/VanishUtils.java @@ -0,0 +1,41 @@ +package de.fanta.challenge.utils; + +import de.fanta.challenge.Challenges; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.kitteh.vanish.VanishPlugin; + +import java.util.ArrayList; +import java.util.List; + +public class VanishUtils { + + private final VanishPlugin vanish; + + public VanishUtils(Challenges plugin) { + vanish = (VanishPlugin) plugin.getServer().getPluginManager().getPlugin("VanishNoPacket"); + } + + public boolean isVanish(Player player) { + return vanish.getManager().isVanished(player); + } + + public int countVanishPlayers() { + return vanish.getManager().getVanishedPlayers().size(); + } + + public List getVanishPlayerList() { + return new ArrayList<>(vanish.getManager().getVanishedPlayers()); + } + + public List getPlayerListWithoutVanishPlayers() { + List playerlistwithoutvanishplayer = new ArrayList<>(); + for (Player player : Bukkit.getOnlinePlayers()) { + if (!isVanish(player)) { + playerlistwithoutvanishplayer.add(player); + } + } + return playerlistwithoutvanishplayer; + } + +} diff --git a/Challenge/src/main/java/de/fanta/challenge/waypoints/Waypoint.java b/Challenge/src/main/java/de/fanta/challenge/waypoints/Waypoint.java new file mode 100644 index 0000000..fd90613 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/waypoints/Waypoint.java @@ -0,0 +1,9 @@ +package de.fanta.challenge.waypoints; + +import org.bukkit.Location; + +import javax.annotation.Nullable; +import java.util.UUID; + +public record Waypoint(String name, @Nullable UUID creator, Location location) { +} diff --git a/Challenge/src/main/java/de/fanta/challenge/waypoints/WaypointManager.java b/Challenge/src/main/java/de/fanta/challenge/waypoints/WaypointManager.java new file mode 100644 index 0000000..b94b154 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/waypoints/WaypointManager.java @@ -0,0 +1,43 @@ +package de.fanta.challenge.waypoints; + +import de.fanta.challenge.Challenges; + +import java.util.HashMap; + +public class WaypointManager { + + private final Challenges plugin; + private final HashMap waypoints; + + public WaypointManager(Challenges plugin) { + this.plugin = plugin; + this.waypoints = loadWaypoints(); + } + + private HashMap loadWaypoints() { + HashMap points = new HashMap<>(); + + + return points; + } + + public HashMap getWaypoints() { + return waypoints; + } + + public boolean addWaypoint(Waypoint waypoint) { + if (waypoints.containsKey(waypoint.name())) { + return false; + } + waypoints.put(waypoint.name(), waypoint); + return true; + } + + public boolean deleteWaypoint(Waypoint waypoint) { + if (!waypoints.containsKey(waypoint.name())) { + return false; + } + waypoints.remove(waypoint.name()); + return true; + } +} diff --git a/Challenge/src/main/resources/allitems.yml b/Challenge/src/main/resources/allitems.yml new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Challenge/src/main/resources/allitems.yml diff --git a/Challenge/src/main/resources/backpack.yml b/Challenge/src/main/resources/backpack.yml new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Challenge/src/main/resources/backpack.yml diff --git a/Challenge/src/main/resources/config.yml b/Challenge/src/main/resources/config.yml new file mode 100644 index 0000000..7990a1d --- /dev/null +++ b/Challenge/src/main/resources/config.yml @@ -0,0 +1,67 @@ +craftingtable: true +allowtrading: true +deathonfall: false +damageonsneak: false +randommobs: false +sneakdmg: 2 +randomeffect: false +rnddrops: false +sharedmg: false +respawn: true +onelife: false +dmginchat: false +deathonsprint: false +deathonjump: false +xpdeath: false +clinvdmg: false +tabhp: false +tntdeath: false +goal: ender_dragon +lavafloor: false +tiedtogether: false +playerrange: 30 +icerunner: false +bedrockwall: false +bedrockwalltime: 10 +mobremoveworld: false +alladvancements: false +worldborderlevel: false +worldborderlevelnether: false +worldborderlevellevel: 0 +worldborderlevelxp: 0 +worldborderlevelbordermultiplier: 2 +disablevillagertradelimits: false +teleportcommand: false +gravestone: false +editsettings: false +resetwithseed: false +manhunt: false +#Mögliche werte: 1-6 +backpack_size: 3 +mlg: + enabled: false + maxtime: 380 + randommlgblock: false +timertime: 0 +firsttimerstart: false +showtimer: true +Saved_Locations: { } +World_Reset: false +silkore: false +ultrahardcore: false +speedfurnace: false +pvp: false +event: + enabled: false + type: nix + teams: false + teamselect: false + autoteams: false + tournament: false + minilwc: false + startinv: false + sammelfieber: + item: AIR + money: 100 +nether: + enabled: false \ No newline at end of file diff --git a/Challenge/src/main/resources/items.yml b/Challenge/src/main/resources/items.yml new file mode 100644 index 0000000..9f5a9ae --- /dev/null +++ b/Challenge/src/main/resources/items.yml @@ -0,0 +1,114 @@ +items: + - BEDROCK + - BUDDING_AMETHYST + - PETRIFIED_OAK_SLAB + - CHORUS_PLANT + - SPAWNER + - FARMLAND + - INFESTED_STONE + - INFESTED_COBBLESTONE + - INFESTED_STONE_BRICKS + - INFESTED_MOSSY_STONE_BRICKS + - INFESTED_CRACKED_STONE_BRICKS + - INFESTED_CHISELED_STONE_BRICKS + - INFESTED_DEEPSLATE + - REINFORCED_DEEPSLATE + - END_PORTAL_FRAME + - COMMAND_BLOCK + - BARRIER + - LIGHT + - DIRT_PATH + - REPEATING_COMMAND_BLOCK + - CHAIN_COMMAND_BLOCK + - STRUCTURE_VOID + - STRUCTURE_BLOCK + - JIGSAW + - BUNDLE + - ALLAY_SPAWN_EGG + - AXOLOTL_SPAWN_EGG + - BAT_SPAWN_EGG + - BEE_SPAWN_EGG + - BLAZE_SPAWN_EGG + - CAT_SPAWN_EGG + - CAVE_SPIDER_SPAWN_EGG + - CHICKEN_SPAWN_EGG + - COD_SPAWN_EGG + - COW_SPAWN_EGG + - CREEPER_SPAWN_EGG + - DOLPHIN_SPAWN_EGG + - DONKEY_SPAWN_EGG + - DROWNED_SPAWN_EGG + - ELDER_GUARDIAN_SPAWN_EGG + - ENDERMAN_SPAWN_EGG + - ENDERMITE_SPAWN_EGG + - EVOKER_SPAWN_EGG + - FOX_SPAWN_EGG + - FROG_SPAWN_EGG + - GHAST_SPAWN_EGG + - GLOW_SQUID_SPAWN_EGG + - GOAT_SPAWN_EGG + - GUARDIAN_SPAWN_EGG + - HOGLIN_SPAWN_EGG + - HORSE_SPAWN_EGG + - HUSK_SPAWN_EGG + - LLAMA_SPAWN_EGG + - MAGMA_CUBE_SPAWN_EGG + - MOOSHROOM_SPAWN_EGG + - MULE_SPAWN_EGG + - OCELOT_SPAWN_EGG + - PANDA_SPAWN_EGG + - PARROT_SPAWN_EGG + - PHANTOM_SPAWN_EGG + - PIG_SPAWN_EGG + - PIGLIN_SPAWN_EGG + - PIGLIN_BRUTE_SPAWN_EGG + - PILLAGER_SPAWN_EGG + - POLAR_BEAR_SPAWN_EGG + - PUFFERFISH_SPAWN_EGG + - RABBIT_SPAWN_EGG + - RAVAGER_SPAWN_EGG + - SALMON_SPAWN_EGG + - SHEEP_SPAWN_EGG + - SHULKER_SPAWN_EGG + - SILVERFISH_SPAWN_EGG + - SKELETON_SPAWN_EGG + - SKELETON_HORSE_SPAWN_EGG + - SLIME_SPAWN_EGG + - SPIDER_SPAWN_EGG + - SQUID_SPAWN_EGG + - STRAY_SPAWN_EGG + - STRIDER_SPAWN_EGG + - TADPOLE_SPAWN_EGG + - TRADER_LLAMA_SPAWN_EGG + - TROPICAL_FISH_SPAWN_EGG + - TURTLE_SPAWN_EGG + - VEX_SPAWN_EGG + - VILLAGER_SPAWN_EGG + - VINDICATOR_SPAWN_EGG + - WANDERING_TRADER_SPAWN_EGG + - WARDEN_SPAWN_EGG + - WITCH_SPAWN_EGG + - WITHER_SKELETON_SPAWN_EGG + - WOLF_SPAWN_EGG + - ZOGLIN_SPAWN_EGG + - ZOMBIE_SPAWN_EGG + - ZOMBIE_HORSE_SPAWN_EGG + - ZOMBIE_VILLAGER_SPAWN_EGG + - ZOMBIFIED_PIGLIN_SPAWN_EGG + - PLAYER_HEAD + - COMMAND_BLOCK_MINECART + - KNOWLEDGE_BOOK + - DEBUG_STICK + - GLOBE_BANNER_PATTERN + - FROGSPAWN + - CAMEL_SPAWN_EGG + - ENDER_DRAGON_SPAWN_EGG + - WITHER_SPAWN_EGG + - IRON_GOLEM_SPAWN_EGG + - SNOW_GOLEM_SPAWN_EGG + - SUSPICIOUS_SAND + - SNIFFER_SPAWN_EGG + - BREEZE_SPAWN_EGG + - TRIAL_SPAWNER + - ARMADILLO_SPAWN_EGG + - BOGGED_SPAWN_EGG \ No newline at end of file diff --git a/Challenge/src/main/resources/plugin.yml b/Challenge/src/main/resources/plugin.yml new file mode 100644 index 0000000..3000b4a --- /dev/null +++ b/Challenge/src/main/resources/plugin.yml @@ -0,0 +1,74 @@ +name: ${artifactId} +main: ${mainClass} +version: ${project.version} +author: ${project.author} +api-version: 1.16 +depend: [CubesideUtils, VanishNoPacket, GlobalPort, CubesideNMSUtils, PlayerUUIDCache] +softdepend: [CubesideStatistics] +commands: + hp: + description: Verwalte die HP eines Spielers + usage: Benutze /hp get/add/remove/set/max [Spieler] [Wert] + coords: + description: Teile oder speichere deine Position! + usage: Benutze /coords share/get/save/delete [Name] + settings: + description: Verwalte die Plugineinstellungen + usage: Benutze /settings Get/Crafting/Trading/DeathFall/DMGOnSneak/Respawn/OneLife/ChatDMG [True/False] + revive: + description: Wiederbelebe einen gestorbenen Spieler! + usage: Benutze /revive [world] [x] [y] [z] + timer: + description: Verwalte den Timer + usage: Benutze /timer resume/pause/reset/set [Zeit in Sekunden] + challenges: + description: Main Command + usage: Benutze /Challenges + aliases: [challenge, c] + adventure: + description: Main Command alias + usage: Benutze /adventure + aliases: [adventure, a] + backpack: + description: Oeffne ein Backpack + usage: Benutze /backpack oder /bp + aliases: [bp] + reset: + description: Setzte die Welt zurueck + usage: Benutze /Reset + aliases: + - stop + forcemlg: + description: Triggert einen MLG + usage: Use /forcemlg + editor: + description: Editor Befehl + usage: Use /editor + leave: + description: Spiel verlassen + usage: Use /leave + aliases: + - l + kick: + description: Spieler Kicken + usage: Use /kick + event: + description: Event + usage: Use /event + bingo: + description: Bingo + usage: Use /bingo + village: + description: Village + usage: /village + aliases: + - dorf + nether: + description: Spiele die Challenge vom Nether ins End durch + usage: Use /nether + test: + description: test command + skipitem: + description: skip item in All Items Challenge! + unlock: + cremove: \ No newline at end of file diff --git a/Challenge/src/main/resources/rnddrops.yml b/Challenge/src/main/resources/rnddrops.yml new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Challenge/src/main/resources/rnddrops.yml diff --git a/Challenge/src/main/resources/serverconfig.yml b/Challenge/src/main/resources/serverconfig.yml new file mode 100644 index 0000000..9bf7a84 --- /dev/null +++ b/Challenge/src/main/resources/serverconfig.yml @@ -0,0 +1,2 @@ +# ServerTyes: ADVENTURE, CHALLENGE, CHALLENGE_EVENT +servertype: CHALLENGE \ No newline at end of file diff --git a/ChallengeCore/pom.xml b/ChallengeCore/pom.xml new file mode 100644 index 0000000..49b5a45 --- /dev/null +++ b/ChallengeCore/pom.xml @@ -0,0 +1,34 @@ + + 4.0.0 + ChallengeCore + + de.fanta.ChallengeCore + + + ChallengeSystem + de.fanta + 0.0.1-SNAPSHOT + ../pom.xml + + + + de.iani.cubeside + CubesideStatistics + 1.0.0-SNAPSHOT + provided + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + ${project.artifactId} + + + + + diff --git a/ChallengeCore/src/main/java/de/fanta/challengecore/ChallengeCore.java b/ChallengeCore/src/main/java/de/fanta/challengecore/ChallengeCore.java new file mode 100644 index 0000000..7593260 --- /dev/null +++ b/ChallengeCore/src/main/java/de/fanta/challengecore/ChallengeCore.java @@ -0,0 +1,17 @@ +package de.fanta.challengecore; + +import org.bukkit.plugin.java.JavaPlugin; + +public final class ChallengeCore extends JavaPlugin { + + @Override + public void onEnable() { + // Plugin startup logic + + } + + @Override + public void onDisable() { + // Plugin shutdown logic + } +} diff --git a/ChallengeCore/src/main/resources/plugin.yml b/ChallengeCore/src/main/resources/plugin.yml new file mode 100644 index 0000000..79a197a --- /dev/null +++ b/ChallengeCore/src/main/resources/plugin.yml @@ -0,0 +1,4 @@ +name: ChallengeCore +version: '${project.version}' +main: de.fanta.challengecore.ChallengeCore +api-version: '1.20' diff --git a/pom.xml b/pom.xml index 6b7e39e..f98b054 100644 --- a/pom.xml +++ b/pom.xml @@ -1,103 +1,96 @@ - - 4.0.0 - de.fanta.challenges - Challenges - 1.0.0 - - UTF-8 - UTF-8 - ${project.groupId}.Challenges - fanta, vollkorntomate - - - - papermc - https://repo.papermc.io/repository/maven-public/ - - - brokkonaut - https://www.iani.de/nexus/content/groups/public - - - jitpack.io - https://jitpack.io - - - - - io.papermc.paper - paper-api - 1.20.5-R0.1-SNAPSHOT - provided - - - de.iani.cubeside - CubesideUtilsBukkit - 1.16-SNAPSHOT - provided - - - de.iani.cubeside - GlobalPort - 0.0.1-SNAPSHOT - provided - - - org.kitteh - VanishNoPacket - 3.20.2-SNAPSHOT - provided - - - de.cubeside.nmsutils - nmsutils-plugin - 0.0.1-SNAPSHOT - provided - - - commons-io - commons-io - 2.11.0 - provided - - - de.iani.cubeside - CubesideStatistics - 1.0.0-SNAPSHOT - provided - - - de.iani.cubeside - PlayerUUIDCache - 2.0.0-SNAPSHOT - provided - - - - - - org.apache.maven.plugins - maven-jar-plugin - 3.3.0 - - ${project.artifactId} - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.13.0 - - 21 - - - - - - src/main/resources - true - - - - + + + 4.0.0 + de.fanta + ChallengeSystem + pom + 0.0.1-SNAPSHOT + + DEV + UTF-8 + UTF-8 + fanta, vollkorntomate + + + ChallengeCore + Challenge + Adventure + + + + papermc + https://repo.papermc.io/repository/maven-public/ + + + brokkonaut + https://www.iani.de/nexus/content/groups/public + + + jitpack.io + https://jitpack.io + + + + + io.papermc.paper + paper-api + 1.20.6-R0.1-SNAPSHOT + provided + + + de.iani.cubeside + CubesideUtilsBukkit + 1.16-SNAPSHOT + provided + + + de.iani.cubeside + PlayerUUIDCache + 2.0.0-SNAPSHOT + provided + + + commons-io + commons-io + 2.11.0 + provided + + + de.cubeside.nmsutils + nmsutils-plugin + 0.0.1-SNAPSHOT + provided + + + org.kitteh + VanishNoPacket + 3.20.2-SNAPSHOT + provided + + + de.iani.cubeside + GlobalPort + 0.0.1-SNAPSHOT + provided + + + + + + maven-compiler-plugin + 3.13.0 + + 21 + + + + + + src/main/resources + true + + + + \ No newline at end of file diff --git a/src/main/java/de/fanta/challenges/Challenges.java b/src/main/java/de/fanta/challenges/Challenges.java deleted file mode 100644 index 9a1f424..0000000 --- a/src/main/java/de/fanta/challenges/Challenges.java +++ /dev/null @@ -1,688 +0,0 @@ -package de.fanta.challenges; - -import com.destroystokyo.paper.profile.PlayerProfile; -import de.cubeside.nmsutils.NMSUtils; -import de.fanta.challenges.challenges.AllItemsChallenge; -import de.fanta.challenges.challenges.MLGChallenge; -import de.fanta.challenges.challenges.RandomDropsChallenge; -import de.fanta.challenges.commands.CommandRegistration; -import de.fanta.challenges.events.ChallengeEventStatusChangedEvent; -import de.fanta.challenges.events.EventStatusChangedEvent; -import de.fanta.challenges.events.PlayerCountChangedEvent; -import de.fanta.challenges.events.ServerStatusChangedEvent; -import de.fanta.challenges.events.TimerChangedEvent; -import de.fanta.challenges.guis.BackpackGui; -import de.fanta.challenges.listeners.EventRegistration; -import de.fanta.challenges.schedular.BukkitScheduler; -import de.fanta.challenges.schedular.CancellableTask; -import de.fanta.challenges.schedular.Scheduler; -import de.fanta.challenges.scoreboard.BukkitScoreBoardManager; -import de.fanta.challenges.scoreboard.ScoreBoardMananger; -import de.fanta.challenges.scoreboard.ScoreManager; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.ColorUtils; -import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.Statistics; -import de.fanta.challenges.utils.VanishUtils; -import de.fanta.challenges.waypoints.WaypointManager; -import de.iani.cubesidestats.api.CubesideStatisticsAPI; -import de.iani.playerUUIDCache.PlayerUUIDCache; -import de.speedy64.globalport.GlobalApi; -import io.papermc.paper.ban.BanListType; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.TextComponent; -import org.apache.commons.io.FileUtils; -import org.bukkit.BanList; -import org.bukkit.Bukkit; -import org.bukkit.Difficulty; -import org.bukkit.GameRule; -import org.bukkit.Material; -import org.bukkit.OfflinePlayer; -import org.bukkit.World; -import org.bukkit.advancement.Advancement; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.jetbrains.annotations.NotNull; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Random; -import java.util.UUID; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.stream.Collectors; - -public class Challenges extends JavaPlugin { - - public static Logger LOGGER; - private static Challenges plugin; - public File RndDropsConfigFile; - public FileConfiguration RndDropsConfig; - public FileConfiguration AllItemsConfig; - public FileConfiguration ServerConfig; - public File serverConfigFile; - public RandomDropsChallenge rndDrops; - public NMSUtils nmsUtils; - public PlayerUUIDCache playerUUIDCache; - public String texturepacklink = null; - public CancellableTask resetTask; - public boolean reset = false; - private TextComponent prefixComponent; - private TextComponent guiPrefix; - private File backpackConfigFile; - private FileConfiguration BackpackConfig; - private File AllItemsConfigFile; - private Timer timer; - private VanishUtils vanish; - private BackpackGui backpack; - private ScoreBoardMananger sbManager; - private ScoreManager scoreManager; - private Player currentEditor; - - private OfflinePlayer firstEditor; - - private boolean waitingForShutdown; - - private ServerType serverType; - - public FileConfiguration ItemConfig; - public File ItemConfigFile; - - private static final ArrayList not_available_materials = new ArrayList<>(); - private static final ArrayList materials = new ArrayList<>(); - private static final ArrayList advancements = new ArrayList<>(); - - private CubesideStatisticsAPI cubesideStatistics; - - private Statistics statistics; - - private static final ArrayList statisticPlayers = new ArrayList<>(); - - private static final ArrayList bannedPlayers = new ArrayList<>(); - - public boolean resetwithseed; - - private static final String CubesideMod_ModChannel = "cubesidemod:data"; - private Scheduler scheduler; - private ColorUtils colorUtils; - private final Path challengeSavePath = new File("/home/storagebox/Challenge-saves").toPath(); - private final Path adventureSavePath = new File("/home/storagebox/Adventure-saves/").toPath(); - - private WaypointManager waypointMananger; - - public static Challenges getPlugin() { - return plugin; - } - - @Override - public void onEnable() { - LOGGER = getLogger(); - plugin = this; - nmsUtils = getServer().getServicesManager().load(NMSUtils.class); - playerUUIDCache = (PlayerUUIDCache) Bukkit.getPluginManager().getPlugin("PlayerUUIDCache"); - try { - cubesideStatistics = getServer().getServicesManager().load(CubesideStatisticsAPI.class); - } catch (NoClassDefFoundError ex) { - cubesideStatistics = null; - } - - if (isCubesideStatisticsInstalled()) { - statistics = new Statistics(this); - } - - getLogger().log(Level.INFO, "Bukkit found. Use Bukkit Scheduler"); - scheduler = new BukkitScheduler(this); - - colorUtils = new ColorUtils(this); - this.timer = new Timer(this); - this.rndDrops = new RandomDropsChallenge(); - - this.scoreManager = new ScoreManager(this); - this.vanish = new VanishUtils(this); - - saveDefaultConfig(); - reloadConfig(); - createServerConfig(); - createItemConfig(); - - serverType = ServerType.valueOf(getServerConfig().getString("servertype")); - - String prefix = serverType.getPrefix(); - prefixComponent = Component.text("[").color(ChatUtil.BLUE).append(Component.text(prefix).color(ChatUtil.GREEN)).append(Component.text("] ").color(ChatUtil.BLUE)); - guiPrefix = Component.text(prefix).color(ChatUtil.GREEN); - - createRndDropsConfig(); - createAllItemsConfig(); - createBackpackConfig(); - - this.backpack = new BackpackGui(Config.getInt("backpack_size") * 9); - - new CommandRegistration(this).registerCommands(); - new EventRegistration(this).registerEvents(); - - this.backpack.loadInventoryFromConfig(); - this.sbManager = new BukkitScoreBoardManager(this); - - getScheduler().runGlobalDelayed(() -> { - plugin.setDayLightCircle(false); - MLGChallenge.checkMLGWorld(); - setPvP(Config.getBoolean("pvp")); - if (plugin.getServerType() != ServerType.ADVENTURE) { - plugin.getSBManager().initScoreboard(); - } - }, 1L); - - resetwithseed = Config.getBoolean("resetwithseed"); - - if (Config.getBoolean("World_Reset") && (serverType == ServerType.CHALLENGE || serverType == ServerType.CHALLENGE_EVENT)) { - if (!Config.getBoolean("firsttimerstart")) { - timer.setTime(0); - } - File config = new File(plugin.getDataFolder(), "config.yml"); - config.delete(); - reloadConfig(); - saveConfig(); - this.backpack.clearConfig(); - this.rndDrops.shuffleItems(); - this.rndDrops.saveItems(); - this.rndDrops.loadItems(); - } else { - this.getBackpack().resize(Config.getInt("backpack_size") * 9); - this.rndDrops.loadItems(); - this.backpack.loadInventoryFromConfig(); - timer.setTime(getConfig().getInt("timertime")); - } - - waypointMananger = new WaypointManager(this); - - if (plugin.getServerType() == ServerType.ADVENTURE) { - File texturepack = new File("world/resources.zip"); - if (texturepack.exists()) { - File mapConfigFile = new File("plugins/Challenges/serverconfig.yml"); - YamlConfiguration mapConfig = YamlConfiguration.loadConfiguration(mapConfigFile); - String texturepackname = mapConfig.getString("displayItem.name"); - String textureID = texturepackname != null ? texturepackname.replace("§", "").replace(" ", "_") : UUID.randomUUID().toString(); - - File texturepackdownload = new File("/home/web/fanta/AdventureMap-TexturePacks/" + textureID + "/"); - File temp = new File(textureID); - - try { - if (!texturepackdownload.isDirectory()) { - FileUtils.forceMkdir(temp); - FileUtils.copyFileToDirectory(texturepack, temp, false); - File renameTP = new File(textureID + "/" + "resources.zip"); - File renamedTP = new File(textureID + "/" + textureID + ".zip"); - renameTP.renameTo(renamedTP); - if (temp.isDirectory()) { - FileUtils.moveDirectory(temp, texturepackdownload); - } else { - Challenges.getPlugin().getLogger().info("Ordner nicht da!"); - } - } - texturepacklink = "https://fantacs.de/AdventureMap-TexturePacks/" + textureID + "/" + textureID + ".zip"; - } catch (IOException e) { - plugin.getLogger().log(Level.SEVERE, "Error while move directory", e); - } - } - getConfig().set("showtimer", false); - } else { - getConfig().set("showtimer", true); - } - - for (String string : getItemConfig().getStringList("items")) { - try { - Material material = Material.valueOf(string); - not_available_materials.add(material); - } catch (IllegalArgumentException ex) { - Challenges.getPlugin().getLogger().log(Level.INFO, "Some items could not be loaded into the ItemGroup"); - } - - } - - for (Material material : Material.values()) { - if (material.isItem() && !material.isAir()) { - materials.add(material); - } - } - - if (getConfig().getBoolean("allitems")) { - AllItemsChallenge.start(); - } - - if (serverType != ServerType.ADVENTURE) { - for (@NotNull Iterator it = Bukkit.advancementIterator(); it.hasNext(); ) { - Advancement advancement = it.next(); - if (advancement.getDisplay() != null) { - advancements.add(advancement); - } - } - } - - if (getServerType() == ServerType.CHALLENGE) { - if (resetwithseed) { - Config.setValue("editsettings", true); - } - } else { - Config.setValue("editsettings", true); - } - - for (String UUIDString : Config.getStringList("bannedPlayers")) { - addBannedPlayer(UUID.fromString(UUIDString), false); - } - - if (plugin.getServerType() == ServerType.ADVENTURE || plugin.getServerType() == ServerType.CHALLENGE_LOAD) { - startResetTask(); - } - - getServer().getMessenger().registerOutgoingPluginChannel(this, CubesideMod_ModChannel); - - plugin.getScheduler().runGlobalDelayed(() -> { - EventRegistration.pM.callEvent(new ServerStatusChangedEvent(true)); - EventRegistration.pM.callEvent(new TimerChangedEvent(timer.isRunning())); - EventRegistration.pM.callEvent(new PlayerCountChangedEvent(Bukkit.getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers())); - }, 200L); - getLogger().info("Plugin loaded!"); - } - - @Override - public void onDisable() { - BanList banList = Bukkit.getBanList(BanListType.PROFILE); - banList.getEntries().forEach(banEntry -> banList.pardon((PlayerProfile) banEntry)); - if (!getConfig().getBoolean("World_Reset")) { - this.backpack.saveInventoryToConfig(); - Config.setValue("backpack_size", backpack.getSize() / 9); - } else if (serverType == ServerType.CHALLENGE || serverType == ServerType.CHALLENGE_EVENT) { - this.backpack.clearConfig(); - } - try { - this.RndDropsConfig.save(this.RndDropsConfigFile); - this.AllItemsConfig.save(this.getAllItemsConfigFile()); - } catch (IOException e) { - plugin.getLogger().log(Level.SEVERE, "Error while saving configs", e); - } - Config.setValue("timertime", timer.getTime()); - if (getConfig().getBoolean("event.enabled")) { - Config.setValue("event.enabled", false); - Bukkit.getPluginManager().callEvent(new EventStatusChangedEvent(false)); - Bukkit.getPluginManager().callEvent(new ChallengeEventStatusChangedEvent(false)); - getScoreManager().saveScores(null); - } - - saveConfig(); - getLogger().info("Plugin unloaded"); - } - - public RandomDropsChallenge getRandomDropsManager() { - return this.rndDrops; - } - - public FileConfiguration getBackpackConfig() { - return this.BackpackConfig; - } - - private void createBackpackConfig() { - this.backpackConfigFile = new File(getDataFolder(), "backpack.yml"); - if (!this.backpackConfigFile.exists()) { - this.backpackConfigFile.getParentFile().mkdirs(); - saveResource("backpack.yml", false); - } - this.BackpackConfig = new YamlConfiguration(); - try { - this.BackpackConfig.load(this.backpackConfigFile); - } catch (InvalidConfigurationException | IOException e) { - plugin.getLogger().log(Level.SEVERE, "Error while loading Backpack", e); - } - } - - public FileConfiguration getRndDropsConfig() { - return this.RndDropsConfig; - } - - private void createRndDropsConfig() { - this.RndDropsConfigFile = new File(getDataFolder(), "rnddrops.yml"); - if (!this.RndDropsConfigFile.exists()) { - this.RndDropsConfigFile.getParentFile().mkdirs(); - saveResource("rnddrops.yml", false); - } - this.RndDropsConfig = new YamlConfiguration(); - try { - this.RndDropsConfig.load(this.RndDropsConfigFile); - } catch (IOException | org.bukkit.configuration.InvalidConfigurationException e) { - plugin.getLogger().log(Level.SEVERE, "Error while load RandomDrops Config", e); - } - } - - public FileConfiguration getAllItemsConfig() { - return this.AllItemsConfig; - } - - private void createAllItemsConfig() { - this.AllItemsConfigFile = new File(getDataFolder(), "allitems.yml"); - if (!AllItemsConfigFile.exists() || ((serverType == ServerType.CHALLENGE || serverType == ServerType.CHALLENGE_EVENT) && Config.getBoolean("World_Reset"))) { - this.getAllItemsConfigFile().getParentFile().mkdirs(); - saveResource("allitems.yml", true); - } - this.AllItemsConfig = new YamlConfiguration(); - try { - this.AllItemsConfig.load(this.AllItemsConfigFile); - } catch (IOException | org.bukkit.configuration.InvalidConfigurationException e) { - plugin.getLogger().log(Level.SEVERE, "Error while loading AllItems Config", e); - } - } - - public FileConfiguration getServerConfig() { - return ServerConfig; - } - - public void saveServerConfig() { - try { - ServerConfig.save(serverConfigFile); - } catch (IOException e) { - getLogger().log(Level.SEVERE, "Error while saving Server Config", e); - } - } - - private void createServerConfig() { - serverConfigFile = new File(getDataFolder(), "serverconfig.yml"); - if (!serverConfigFile.exists()) { - serverConfigFile.getParentFile().mkdirs(); - saveResource("serverconfig.yml", false); - } - this.ServerConfig = new YamlConfiguration(); - try { - ServerConfig.load(serverConfigFile); - } catch (IOException | InvalidConfigurationException e) { - plugin.getLogger().log(Level.SEVERE, "Error while loading Server Config", e); - } - } - - public FileConfiguration getItemConfig() { - return ItemConfig; - } - - private void createItemConfig() { - ItemConfigFile = new File(getDataFolder(), "items.yml"); - ItemConfigFile.getParentFile().mkdirs(); - saveResource("items.yml", true); - this.ItemConfig = new YamlConfiguration(); - try { - ItemConfig.load(ItemConfigFile); - } catch (IOException | InvalidConfigurationException e) { - plugin.getLogger().log(Level.SEVERE, "Error while loading Item Config", e); - } - } - - public ScoreBoardMananger getSBManager() { - return this.sbManager; - } - - public Player getCurrentEditor() { - return currentEditor; - } - - public void setCurrentEditor(Player currentEditor) { - this.currentEditor = currentEditor; - plugin.setFirstEditor(currentEditor); - if (currentEditor != null) { - ChatUtil.sendNormalMessage(currentEditor, "Du bist nun der Editor dieser Lobby!"); - ChatUtil.sendNormalMessage(currentEditor, "Alle Befehle und Funktionen vom Challenge Plugin findest du in unserem Wiki."); - ChatUtil.sendNormalMessage(currentEditor, "Hier Klicken --> https://wiki.cubeside.de/Challenge"); - ChatUtil.sendBrodCastMessage(Component.text(currentEditor.getName(), ChatUtil.BLUE).append(Component.text(" ist nun der Editor dieser Lobby!", ChatUtil.GREEN))); - } - } - - public OfflinePlayer getFirstEditor() { - return firstEditor; - } - - public void setFirstEditor(Player firstEditor) { - if (this.firstEditor == null) { - this.firstEditor = firstEditor; - } - } - - public void updateEditor() { - Random random = new Random(); - Player randomPlayer = null; - Player oldEditor = plugin.getCurrentEditor(); - - List onlinePlayersWithPermission = Bukkit.getOnlinePlayers().stream().filter(p -> p.hasPermission("Challenges.editor")).distinct().collect(Collectors.toList()); - onlinePlayersWithPermission.remove(oldEditor); - if (!onlinePlayersWithPermission.isEmpty()) { - int rnd = random.nextInt(onlinePlayersWithPermission.size()); - randomPlayer = onlinePlayersWithPermission.get(rnd); - } else { - ArrayList onlinePlayers = Bukkit.getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toCollection(ArrayList::new)); - List vanishPlayers = plugin.getVanish().getVanishPlayerList(); - onlinePlayers.removeAll(vanishPlayers); - onlinePlayers.remove(oldEditor.getName()); - - if (!onlinePlayers.isEmpty()) { - int rnd = random.nextInt(onlinePlayers.size()); - randomPlayer = Bukkit.getPlayer(onlinePlayers.get(rnd)); - } - } - plugin.setCurrentEditor(randomPlayer); - } - - public boolean hasEditor() { - return currentEditor != null; - } - - public boolean isEditor(Player player) { - return hasEditor() && currentEditor.getUniqueId().equals(player.getUniqueId()); - } - - public void startResetTask() { - getLogger().info("Start Reset Task"); - resetTask = plugin.getScheduler().runGlobalDelayed(() -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "reset confirm"), 3 * 60 * 20); - reset = true; - } - - public void stopResetTask() { - getLogger().info("Stop Reset Task"); - resetTask.cancel(); - resetTask = null; - reset = false; - } - - public void setPvP(Boolean value) { - for (World w : plugin.getServer().getWorlds()) { - if (w != null) { - w.setPVP(value); - } - - } - } - - public boolean getPvP() { - return Bukkit.getWorld("world").getPVP(); - } - - public void setDifficulty(Difficulty difficulty) { - for (World w : plugin.getServer().getWorlds()) { - if (w != null) { - w.setDifficulty(difficulty); - } - } - } - - public Difficulty getDifficulty() { - return Bukkit.getWorld("world").getDifficulty(); - } - - public void setKeepInventory(Boolean value) { - for (World w : plugin.getServer().getWorlds()) { - if (w != null) { - getScheduler().run(() -> w.setGameRule(GameRule.KEEP_INVENTORY, value)); - } - } - } - - public boolean getKeepInventory() { - return Bukkit.getWorld("world").getGameRuleValue(GameRule.KEEP_INVENTORY); - } - - public void setNaturalRegeneration(Boolean value) { - for (World w : plugin.getServer().getWorlds()) { - if (w != null) { - getScheduler().run(() -> w.setGameRule(GameRule.NATURAL_REGENERATION, value)); - } - } - } - - public boolean getNaturalRegeneration() { - return Bukkit.getWorld("world").getGameRuleValue(GameRule.NATURAL_REGENERATION); - } - - public void setDayLightCircle(boolean value) { - for (World world : Bukkit.getWorlds()) { - if (world.getEnvironment() == World.Environment.NORMAL && plugin.getServerType() != ServerType.ADVENTURE) { - getScheduler().run(() -> world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, value)); - } - } - } - - public void portPlayerToLobby(Player player) { - if (plugin.getServerType() == ServerType.CHALLENGE || plugin.getServerType() == ServerType.CHALLENGE_LOAD) { - GlobalApi.portOnlinePlayerToLocation(player.getName(), "challenge"); - } else if (plugin.getServerType() == ServerType.ADVENTURE) { - GlobalApi.portOnlinePlayerToLocation(player.getName(), "adventure"); - } else if (plugin.getServerType() == ServerType.CHALLENGE_EVENT) { - GlobalApi.portOnlinePlayerToLocation(player.getName(), "challenge_event"); - } - } - - public Timer getTimer() { - return timer; - } - - public VanishUtils getVanish() { - return vanish; - } - - public boolean isWaitingForShutdown() { - return waitingForShutdown; - } - - public void setWaitingForShutdown(boolean waitingForShutdown) { - this.waitingForShutdown = waitingForShutdown; - } - - public BackpackGui getBackpack() { - return backpack; - } - - public File getBackpackConfigFile() { - return backpackConfigFile; - } - - public ScoreManager getScoreManager() { - return scoreManager; - } - - public NMSUtils getNMSUtils() { - return nmsUtils; - } - - public File getAllItemsConfigFile() { - return AllItemsConfigFile; - } - - public ServerType getServerType() { - return serverType; - } - - public TextComponent getPrefixComponent() { - return prefixComponent; - } - - public TextComponent getGuiPrefix() { - return guiPrefix; - } - - public ArrayList getNotAvailableMaterials() { - return not_available_materials; - } - - public ArrayList getMaterials() { - return materials; - } - - public ArrayList getAdvancements() { - return advancements; - } - - public CubesideStatisticsAPI getCubesideStatistics() { - return cubesideStatistics; - } - - public boolean isCubesideStatisticsInstalled() { - return cubesideStatistics != null; - } - - public Statistics getStatistics() { - return statistics; - } - - public PlayerUUIDCache getPlayerUUIDCache() { - return playerUUIDCache; - } - - public void addstatisticPlayers(UUID uuid) { - statisticPlayers.add(uuid); - } - - public ArrayList getstatisticPlayers() { - return statisticPlayers; - } - - public void addBannedPlayer(UUID uuid, boolean isPermaBan) { - bannedPlayers.add(uuid); - if (isPermaBan) { - List bannedPlayer = Config.getStringList("bannedPlayers"); - bannedPlayer.add(uuid.toString()); - Config.setValue("bannedPlayers", bannedPlayer, false); - } - } - - public void removeBannedPlayer(UUID uuid, Boolean removeConfig) { - bannedPlayers.remove(uuid); - if (removeConfig) { - List bannedPlayer = Config.getStringList("bannedPlayers"); - bannedPlayer.remove(uuid.toString()); - Config.setValue("bannedPlayers", bannedPlayer, false); - } - } - - public boolean isPlayerBanned(UUID uuid) { - return bannedPlayers.contains(uuid); - } - - public String getCubesideMod_ModChannel() { - return CubesideMod_ModChannel; - } - - public Scheduler getScheduler() { - return scheduler; - } - - public ColorUtils getColorUtils() { - return colorUtils; - } - - public Path getAdventureSavePath() { - return adventureSavePath; - } - - public Path getChallengeSavePath() { - return challengeSavePath; - } -} diff --git a/src/main/java/de/fanta/challenges/SaveSlot.java b/src/main/java/de/fanta/challenges/SaveSlot.java deleted file mode 100644 index 6ec00b0..0000000 --- a/src/main/java/de/fanta/challenges/SaveSlot.java +++ /dev/null @@ -1,25 +0,0 @@ -package de.fanta.challenges; - -public enum SaveSlot { - - SLOT_1("1", "challenge.save.slot1"), - SLOT_2("2", "challenge.save.slot2"), - SLOT_3("3", "challenge.save.slot3"), - SLOT_AUTO("autosave", "challenge.save.slotauto"); - - private final String slot; - private final String permission; - - SaveSlot(String prefix, String permission) { - this.slot = prefix; - this.permission = permission; - } - - public String getSlot() { - return slot; - } - - public String getPermission() { - return permission; - } -} diff --git a/src/main/java/de/fanta/challenges/ServerType.java b/src/main/java/de/fanta/challenges/ServerType.java deleted file mode 100644 index ee32386..0000000 --- a/src/main/java/de/fanta/challenges/ServerType.java +++ /dev/null @@ -1,20 +0,0 @@ -package de.fanta.challenges; - -public enum ServerType { - - ADVENTURE("Adventure"), - CHALLENGE("Challenge"), - CHALLENGE_LOAD("Challenge"), - CHALLENGE_EVENT("Challenge Event"); - - private final String prefix; - - ServerType(String prefix) { - this.prefix = prefix; - } - - public String getPrefix() { - return prefix; - } - -} diff --git a/src/main/java/de/fanta/challenges/Timer.java b/src/main/java/de/fanta/challenges/Timer.java deleted file mode 100644 index 4cf779b..0000000 --- a/src/main/java/de/fanta/challenges/Timer.java +++ /dev/null @@ -1,204 +0,0 @@ -package de.fanta.challenges; - -import de.fanta.challenges.events.TimerChangedEvent; -import de.fanta.challenges.schedular.CancellableTask; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.SaveWorldUtils; -import de.iani.cubesideutils.StringUtil; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.Style; -import net.kyori.adventure.text.format.TextColor; -import net.kyori.adventure.text.format.TextDecoration; -import org.bukkit.Bukkit; -import org.bukkit.Effect; -import org.bukkit.GameMode; -import org.bukkit.World; -import org.bukkit.entity.Creature; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; - -import java.util.Optional; - -public class Timer { - - private final Challenges plugin; - private CancellableTask actionBarTaskId; - private CancellableTask idleActionBarTaskId; - private long time; // milliseconds - private TimerMode mode; - private long countingSinceTimestamp; - - private static final int[] baseColorsTimer = new int[]{0xFF6668, 0xFFB566, 0xFFED66, 0x66FF75, 0x66B8FF, 0xE666FF}; - private static final int[] baseColorsReserveTimer = new int[]{0x7FD4E0, 0x947DFF, 0xFF88F1, 0xFF7D7D}; - - public Timer(Challenges plugin) { - this.plugin = plugin; - this.mode = TimerMode.UP; - - if (!isRunning()) { - sendIdleActionBar(); - } - } - - public void startTimer() { - countingSinceTimestamp = System.currentTimeMillis(); - if (idleActionBarTaskId != null) { - idleActionBarTaskId.cancel(); - idleActionBarTaskId = null; - } - actionBarTaskId = plugin.getScheduler().runGlobalAtFixedRate(() -> { - if (mode == TimerMode.DOWN) { - if (time <= 0) { - if (Config.getBoolean("event.enabled")) { - for (Player p : Bukkit.getOnlinePlayers()) { - p.setGameMode(GameMode.SPECTATOR); - } - ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Die Zeit ist abgelaufen!", ChatUtil.GREEN)); - } else { - for (Player p : Bukkit.getOnlinePlayers()) { - p.setGameMode(GameMode.SPECTATOR); - } - ChatUtil.sendTitleToAll(Component.text("ZEIT ABGELAUFEN!", ChatUtil.RED), Component.text("Challenge fehlgeschlagen", ChatUtil.RED)); - - ChatUtil.sendBrodCastMessage(Component.text("Die Zeit ist abgelaufen und die Challenge somit fehlgeschlagen!", ChatUtil.RED)); - Optional optionalWorld = Bukkit.getWorlds().stream().findFirst(); - optionalWorld.ifPresent(world -> ChatUtil.sendBrodCastMessage(Component.text("Seed: ", ChatUtil.GREEN).append(Component.text(world.getSeed(), ChatUtil.BLUE)))); - - } - stopTimer(); - } else { - time -= (System.currentTimeMillis() - countingSinceTimestamp); - countingSinceTimestamp = System.currentTimeMillis(); - sendTimerActionBar(); - } - } else { - time += (System.currentTimeMillis() - countingSinceTimestamp); - countingSinceTimestamp = System.currentTimeMillis(); - sendTimerActionBar(); - } - }, 1L, 1L); - if (!Config.getBoolean("firsttimerstart")) { - Config.setValue("firsttimerstart", true, false); - } - Bukkit.getPluginManager().callEvent(new TimerChangedEvent(true)); - } - - public void stopTimer() { - if (actionBarTaskId != null) { - actionBarTaskId.cancel(); - actionBarTaskId = null; - sendIdleActionBar(); - } - for (Player pp : Bukkit.getOnlinePlayers()) { - plugin.getScheduler().runDelayedOnEntity(pp, () -> { - for (final Entity entity : pp.getNearbyEntities(100, 100, 100)) { - if ((entity instanceof final Creature creature)) { - if ((creature.getTarget() != null) && creature.getTarget().equals(pp)) { - creature.setTarget(null); - } - } - } - }, 1); - } - Bukkit.getPluginManager().callEvent(new TimerChangedEvent(false)); - } - - private void sendIdleActionBar() { - idleActionBarTaskId = plugin.getScheduler().runGlobalAtFixedRate(() -> { - for (Player p : Bukkit.getOnlinePlayers()) { - if (!plugin.getVanish().isVanish(p)) { - sendFormatedTimerActionBarToPlayer(p, Component.text("Der Timer ist pausiert.", Style.style(ChatUtil.RED, TextDecoration.BOLD))); - if (p.getGameMode() != GameMode.SPECTATOR) { - p.getWorld().playEffect(p.getLocation(), Effect.ENDER_SIGNAL, 2); - } - } - } - }, 20L, 20L); - } - - private void sendTimerActionBar() { - for (Player p : Bukkit.getOnlinePlayers()) { - if (!plugin.getVanish().isVanish(p)) { - if (Config.getBoolean("showtimer")) { - sendFormatedTimerActionBarToPlayer(p, formateRainbowTime(!Config.getBoolean("editsettings"))); - } - } - } - } - - private void sendFormatedTimerActionBarToPlayer(Player player, Component text) { - player.sendActionBar(text.append(SaveWorldUtils.isCopyWorld ? Component.text(" Save: ", ChatUtil.GREEN).append(SaveWorldUtils.getProgressBar(SaveWorldUtils.progress)) : Component.empty())); - } - - public Component formatTime(TextColor color) { - return Component.text(formatTime()).color(color); - } - - public String formatTime() { - String formatTime = StringUtil.formatTimespan((time / 1000) * 1000, " Tage, ", ":", "", "", "", ":", false, true); - if (formatTime.startsWith("1 Tage")) { - return StringUtil.formatTimespan((time / 1000) * 1000, " Tag, ", ":", "", "", "", ":", false, true); - } - return formatTime; - } - - public Component formateRainbowTime(boolean speedRun) { - return plugin.getColorUtils().addChatColorToString((speedRun ? "SpeedRun " : "") + formatTime(), mode == TimerMode.UP ? baseColorsTimer : baseColorsReserveTimer, 1.5); - } - - public void reverseTimer() { - if (mode == TimerMode.DOWN) { - mode = TimerMode.UP; - } else { - mode = TimerMode.DOWN; - } - if (isRunning()) { - countingSinceTimestamp = System.currentTimeMillis(); - } - } - - public boolean isRunning() { - return actionBarTaskId != null; - } - - public boolean isReverse() { - return mode == TimerMode.DOWN; - } - - public long getTime() { - return time / 1000; - } - - public long getTimeInMs() { - return time; - } - - public void setTime(int seconds) { - this.time = seconds * 1000L; - this.countingSinceTimestamp = System.currentTimeMillis(); - } - - public void addTime(int seconds) { - this.time = Math.max(time + (seconds * 1000L), 0); - this.countingSinceTimestamp = System.currentTimeMillis(); - Config.setValue("editsettings", true); - - } - - public void removeTime(int seconds) { - this.time = Math.max(time - (seconds * 1000L), 0); - this.countingSinceTimestamp = System.currentTimeMillis(); - Config.setValue("editsettings", true); - } - - public TimerMode getMode() { - return mode; - } - - public enum TimerMode { - UP, - DOWN - } - -} \ No newline at end of file diff --git a/src/main/java/de/fanta/challenges/challenges/AllAdvancementsChallenge.java b/src/main/java/de/fanta/challenges/challenges/AllAdvancementsChallenge.java deleted file mode 100644 index f936c22..0000000 --- a/src/main/java/de/fanta/challenges/challenges/AllAdvancementsChallenge.java +++ /dev/null @@ -1,178 +0,0 @@ -package de.fanta.challenges.challenges; - -import com.destroystokyo.paper.event.player.PlayerAdvancementCriterionGrantEvent; -import de.fanta.challenges.Challenges; -import de.fanta.challenges.events.TimerChangedEvent; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import net.kyori.adventure.audience.Audience; -import net.kyori.adventure.bossbar.BossBar; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.NamespacedKey; -import org.bukkit.advancement.Advancement; -import org.bukkit.advancement.AdvancementProgress; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerAdvancementDoneEvent; -import org.bukkit.event.player.PlayerJoinEvent; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; - -public class AllAdvancementsChallenge implements Listener { - - public static BossBar bossBar; - private static boolean running; - private static final Challenges plugin = Challenges.getPlugin(); - - @EventHandler - public void onActivation(TimerChangedEvent event) { - if (Config.getBoolean("alladvancements")) { - if (event.isRunning()) { - start(); - } else { - stop(); - } - } - } - - - @EventHandler - public void onAdvancementDone(PlayerAdvancementDoneEvent e) { - if (isRunning()) { - createAdvancementString(e.getPlayer()); - } - } - - @EventHandler - public void onAdvancementCriteria(PlayerAdvancementCriterionGrantEvent e) { - if (isRunning()) { - createAdvancementString(e.getPlayer()); - } - } - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent e) { - if (!isRunning()) { - return; - } - bossBar.addViewer(e.getPlayer()); - setAdvancementsToPlayer(); - } - - public static boolean isRunning() { - return running; - } - - public static void setRunning(boolean run) { - running = run; - } - - private static void updateBossbar() { - int done = countDone(); - Component bossBarTitle = Component.text("(" + done + "/" + plugin.getAdvancements().size() + ") Advancements", ChatUtil.GREEN); - float progress = done * 100.0f / plugin.getAdvancements().size() / 100.0f; - if (bossBar == null) { - bossBar = BossBar.bossBar(bossBarTitle, progress, BossBar.Color.GREEN, BossBar.Overlay.PROGRESS); - } else { - bossBar.name(bossBarTitle); - } - bossBar.progress(progress); - } - - private void createAdvancementString(Player player) { - ConfigurationSection advancements = Config.createSection("advancements"); - ArrayList advancementsDone = new ArrayList<>(); - ConfigurationSection progress = advancements.createSection("progress"); - Iterator it = Bukkit.advancementIterator(); - while (it.hasNext()) { - Advancement a = it.next(); - NamespacedKey key = a.getKey(); - if (key.getNamespace().equals(NamespacedKey.MINECRAFT) && !key.getKey().startsWith("recipes/")) { - AdvancementProgress ap = player.getAdvancementProgress(a); - if (ap.isDone()) { - advancementsDone.add(key.getKey()); - } else { - Collection ac = ap.getAwardedCriteria(); - if (!ac.isEmpty()) { - progress.set(key.getKey(), new ArrayList<>(ac)); - } - } - } - } - advancements.set("done", advancementsDone); - plugin.saveConfig(); - - setAdvancementsToPlayer(); - } - - private static void setAdvancementsToPlayer() { - if (Config.contains("advancements")) { - ConfigurationSection advancements = Config.getConfigurationSection("advancements"); - if (advancements != null) { - HashSet done = new HashSet<>(advancements.getStringList("done")); - ConfigurationSection progress = advancements.getConfigurationSection("progress"); - if (progress == null) { - return; - } - Iterator it = Bukkit.advancementIterator(); - while (it.hasNext()) { - Advancement a = it.next(); - NamespacedKey key = a.getKey(); - if (key.getNamespace().equals(NamespacedKey.MINECRAFT) && !key.getKey().startsWith("recipes/")) { - for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { - AdvancementProgress ap = pp.getAdvancementProgress(a); - if (done.contains(key.getKey())) { - if (!ap.isDone()) { - for (String crit : ap.getRemainingCriteria()) { - ap.awardCriteria(crit); - } - } - } else if (progress.contains(key.getKey())) { - List parts = progress.getStringList(key.getKey()); - for (String part : parts) { - ap.awardCriteria(part); - } - } - } - } - } - } - } - updateBossbar(); - } - - private static int countDone() { - int i = 0; - ConfigurationSection advancements = Config.getConfigurationSection("advancements"); - if (advancements != null) { - HashSet done = new HashSet<>(advancements.getStringList("done")); - for (String ignored : done) { - i++; - } - } - return i; - } - - public static void start() { - setAdvancementsToPlayer(); - updateBossbar(); - for (Player pp : Bukkit.getOnlinePlayers()) { - bossBar.addViewer(pp); - } - setRunning(true); - } - - public static void stop() { - if (bossBar != null) { - bossBar.viewers().forEach(bossBarViewer -> bossBar.removeViewer((Audience) bossBarViewer)); - } - setRunning(false); - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/AllItemsChallenge.java b/src/main/java/de/fanta/challenges/challenges/AllItemsChallenge.java deleted file mode 100644 index b9ea7a4..0000000 --- a/src/main/java/de/fanta/challenges/challenges/AllItemsChallenge.java +++ /dev/null @@ -1,140 +0,0 @@ -package de.fanta.challenges.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.schedular.CancellableTask; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.CubesideModUtils; -import net.kyori.adventure.audience.Audience; -import net.kyori.adventure.bossbar.BossBar; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; -import java.util.logging.Level; - -public class AllItemsChallenge { - - public static CancellableTask ItemScheduler; - public static BossBar bossBar; - public static Material item; - public static final List foundItems = new ArrayList<>(); - public static final List itemsToSearch = new ArrayList<>(); - - private static final Challenges plugin = Challenges.getPlugin(); - - private static int itemcount = 0; - - public static void start() { - if (foundItems.isEmpty()) { - loadItems(); - } - - if (itemsToSearch.isEmpty()) { - for (Material mat : Material.values()) { - if (mat.isItem() && !mat.isAir() && !plugin.getNotAvailableMaterials().contains(mat)) { - itemcount++; - - if (!foundItems.contains(mat)) { - itemsToSearch.add(mat); - } - } - } - } - - ItemStack configStack = Config.getItemStack("allitemscurrentitem"); - if (configStack != null) { - item = configStack.getType(); - } - - if (item == null) { - Random r = new Random(); - item = itemsToSearch.get(r.nextInt((itemsToSearch.size() - 1) + 1)); - Config.setValue("allitemscurrentitem", new ItemStack(item)); - } - - bossBar = BossBar.bossBar(Component.empty(), 0.f, BossBar.Color.GREEN, BossBar.Overlay.PROGRESS); - for (Player pl : Bukkit.getOnlinePlayers()) { - bossBar.addViewer(pl); - } - update(); - } - - public static void update() { - ItemScheduler = plugin.getScheduler().runGlobalAtFixedRate(() -> { - if (Config.getBoolean("allitems") && Challenges.getPlugin().getTimer().isRunning()) { - if (!itemsToSearch.isEmpty()) { - for (Player pp : Bukkit.getOnlinePlayers()) { - bossBar.addViewer(pp); - if (pp.getInventory().contains(item)) { - next(pp, false); - } - } - - bossBar.name(Component.text("Item » ", ChatUtil.GREEN).append(ChatUtil.getTrasnlateItemComponent(item).color(ChatUtil.BLUE).append(Component.text(" (", ChatUtil.BLUE).append(Component.text(foundItems.size() + "/" + itemcount, ChatUtil.GREEN).append(Component.text(")", ChatUtil.BLUE)))))); - float progress = foundItems.size() * 100.0f / itemcount / 100.0f; - bossBar.progress(progress); - } else { - bossBar.name(Component.text("Alle Items gesammelt!", ChatUtil.GREEN)); - ChatUtil.sendBrodCastMessage(Component.text("Alle Items gesammelt!", ChatUtil.GREEN)); - Challenges.getPlugin().getTimer().stopTimer(); - for (Player pl : Bukkit.getOnlinePlayers()) { - pl.playSound(pl.getLocation(), Sound.UI_TOAST_CHALLENGE_COMPLETE, 0.2f, 1); - } - ItemScheduler.cancel(); - } - } else { - bossBar.viewers().forEach(bossBarViewer -> bossBar.removeViewer((Audience) bossBarViewer)); - } - }, 1, 10); - } - - public static void next(Player p, Boolean skipped) { - Material old = item; - itemsToSearch.remove(old); - foundItems.add(old); - saveItems(); - if (!itemsToSearch.isEmpty()) { - Random r = new Random(); - item = itemsToSearch.get(r.nextInt((itemsToSearch.size() - 1) + 1)); - Config.setValue("allitemscurrentitem", new ItemStack(item)); - if (skipped) { - ChatUtil.sendBrodCastMessage(Component.text("Item: ", ChatUtil.GREEN).append(ChatUtil.getTrasnlateItemComponent(old).color(ChatUtil.BLUE).append(Component.text(" wurde von " + p.getName() + " übersprungen.", ChatUtil.GREEN)))); - } else { - ChatUtil.sendBrodCastMessage(Component.text("Item: ", ChatUtil.GREEN).append(ChatUtil.getTrasnlateItemComponent(old).color(ChatUtil.BLUE).append(Component.text(" wurde von " + p.getName() + " Registriert.", ChatUtil.GREEN)))); - } - ChatUtil.sendBrodCastMessage(Component.text("Neues Item: ", ChatUtil.GREEN).append(ChatUtil.getTrasnlateItemComponent(item).color(ChatUtil.BLUE)).append(Component.text(" (Es fehlen noch ", ChatUtil.GREEN).append(Component.text((itemcount - foundItems.size()), ChatUtil.BLUE).append(Component.text(" Items)", ChatUtil.GREEN))))); - for (Player pp : Bukkit.getOnlinePlayers()) { - pp.playSound(pp.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1, 1); - CubesideModUtils.sendFlashScreenToCubesideMod(plugin, pp, 50, ChatUtil.GREEN); - } - } - } - - private static void saveItems() { - FileConfiguration config = Challenges.getPlugin().getAllItemsConfig(); - ArrayList itemStings = new ArrayList<>(); - foundItems.forEach(material -> itemStings.add(material.name())); - config.set("items", itemStings); - try { - Challenges.getPlugin().AllItemsConfig.save(Challenges.getPlugin().getAllItemsConfigFile()); - } catch (IOException e) { - plugin.getLogger().log(Level.SEVERE, "Error while saving Items", e); - } - } - - private static void loadItems() { - FileConfiguration config = Challenges.getPlugin().getAllItemsConfig(); - if (config.isList("items")) { - config.getStringList("items").forEach(itemSting -> foundItems.add(Material.valueOf(itemSting))); - } - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/BedrockWallChallenge.java b/src/main/java/de/fanta/challenges/challenges/BedrockWallChallenge.java deleted file mode 100644 index 77ea931..0000000 --- a/src/main/java/de/fanta/challenges/challenges/BedrockWallChallenge.java +++ /dev/null @@ -1,39 +0,0 @@ -package de.fanta.challenges.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.Config; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.block.Block; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerMoveEvent; - -public class BedrockWallChallenge implements Listener { - - private final Challenges plugin = Challenges.getPlugin(); - - @EventHandler - public void onMove(PlayerMoveEvent e) { - Player p = e.getPlayer(); - if (Config.getBoolean("bedrockwall") && plugin.getTimer().isRunning() && !plugin.getVanish().isVanish(e.getPlayer())) { - if (!e.getTo().equals(e.getFrom())) { - Location loc = p.getLocation(); - setWall(loc); - } - } - - } - - private void setWall(Location loc) { - plugin.getScheduler().runLocalDelayed(loc, () -> { - World world = loc.getWorld(); - for (int y = world.getMinHeight(); y < world.getMaxHeight(); y++) { - Block block = loc.set(loc.getX(), y, loc.getZ()).getBlock(); - block.setType(Material.BEDROCK); - } - }, 20L * Config.getInt("bedrockwalltime")); - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/Challenge.java b/src/main/java/de/fanta/challenges/challenges/Challenge.java deleted file mode 100644 index 56f0272..0000000 --- a/src/main/java/de/fanta/challenges/challenges/Challenge.java +++ /dev/null @@ -1,17 +0,0 @@ -package de.fanta.challenges.challenges; - -import org.bukkit.event.player.PlayerExpChangeEvent; -import org.bukkit.inventory.ItemStack; - -public interface Challenge { - - String getName(); - - ItemStack createNewDisplayItem(); - - boolean isActive(); - - default void handlePlayerExpChange(PlayerExpChangeEvent e) { - - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/BingoChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/BingoChallengeEvent.java deleted file mode 100644 index 6028658..0000000 --- a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/BingoChallengeEvent.java +++ /dev/null @@ -1,281 +0,0 @@ -package de.fanta.challenges.challenges.ChallengeEvents; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.events.TimerChangedEvent; -import de.fanta.challenges.guis.eventgui.BingoItemsGui; -import de.fanta.challenges.scoreboard.ChallengePlayer; -import de.fanta.challenges.teams.ChallengeTeam; -import de.fanta.challenges.teams.TeamUtils; -import de.fanta.challenges.utils.ChatSkullAPI.ChatSkull; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.CubesideModUtils; -import net.kyori.adventure.bossbar.BossBar; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.Material; -import org.bukkit.OfflinePlayer; -import org.bukkit.Sound; -import org.bukkit.Statistic; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityPickupItemEvent; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.player.PlayerBucketEmptyEvent; -import org.bukkit.event.player.PlayerBucketEntityEvent; -import org.bukkit.event.player.PlayerBucketFillEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerStatisticIncrementEvent; -import org.bukkit.inventory.CraftingInventory; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.UUID; - -public class BingoChallengeEvent implements Listener { - - private static final Map> playerMaterials = new HashMap<>(); - - private static final Map> teamMaterials = new HashMap<>(); - private static boolean running; - - private static boolean eventend = false; - - private static List materials = new ArrayList<>(); - private static final BossBar bossBar = BossBar.bossBar(Component.text("Nutze ", ChatUtil.GREEN).append(Component.text("/bingo", ChatUtil.BLUE).append(Component.text(" um die Items zu sehen", ChatUtil.GREEN))), 1.0f, BossBar.Color.GREEN, BossBar.Overlay.PROGRESS); - private final Challenges plugin = Challenges.getPlugin(); - - public static List getMaterials() { - return materials; - } - - public void setMaterials(List mat) { - materials = mat; - } - - public static Map> getPlayerMaterials() { - return playerMaterials; - } - - public static boolean isRunning() { - return running; - } - - public void setRunning(boolean run) { - running = run; - } - - @EventHandler - public void onInventoryClick(InventoryClickEvent e) { - Player player = (Player) e.getWhoClicked(); - Inventory playerInv = BingoItemsGui.getPlayerInvs().get(player.getUniqueId()); - if (e.getClickedInventory() == null) { - return; - } - if (!isRunning()) { - return; - } - if (playerInv != null && playerInv.equals(e.getClickedInventory())) { - return; - } - - if (e.getClickedInventory() instanceof CraftingInventory) { - return; - } - - ItemStack itemStack = e.getCurrentItem(); - if (itemStack != null && itemStack.getType() != Material.AIR) { - addDiscoveredItem(player, itemStack); - } - } - - @EventHandler - public void onItemCraft(PlayerStatisticIncrementEvent e) { - Player player = e.getPlayer(); - if (!isRunning()) { - return; - } - - if (e.getStatistic() != Statistic.CRAFT_ITEM) { - return; - } - - Material material = e.getMaterial(); - if (material == null) { - return; - } - - ItemStack itemStack = new ItemStack(material); - if (itemStack.getType() != Material.AIR) { - addDiscoveredItem(player, itemStack); - } - } - - @EventHandler - public void onPickUpItem(EntityPickupItemEvent e) { - ItemStack itemStack = e.getItem().getItemStack(); - if (e.getEntity() instanceof Player player) { - if (isRunning()) { - addDiscoveredItem(player, itemStack); - } - } - } - - @EventHandler - public void onBucketFill(PlayerBucketFillEvent e) { - ItemStack itemStack = e.getItemStack(); - Player player = e.getPlayer(); - if (isRunning()) { - if (itemStack != null) { - addDiscoveredItem(player, itemStack); - } - } - } - - @EventHandler - public void onBucketChatchFish(PlayerBucketEntityEvent e) { - ItemStack itemStack = e.getEntityBucket(); - if (isRunning()) { - addDiscoveredItem(e.getPlayer(), itemStack); - } - } - - @EventHandler - public void onBucketEmpty(PlayerBucketEmptyEvent e) { - ItemStack itemStack = e.getItemStack(); - Player player = e.getPlayer(); - if (isRunning()) { - if (itemStack != null) { - addDiscoveredItem(player, itemStack); - } - } - } - - @EventHandler - public void onActivation(TimerChangedEvent event) { - if (Objects.equals(Config.getString("event.type"), "bingo")) { - if (event.isRunning()) { - setMaterials(BingoItemsGui.getEventItems()); - for (Player p : Bukkit.getOnlinePlayers()) { - bossBar.addViewer(p); - } - - if (!Config.getBoolean("event.teams")) { - for (Player p : Bukkit.getOnlinePlayers()) { - plugin.getScoreManager().join(new ChallengePlayer(p.getUniqueId())); - } - } else { - for (ChallengeTeam team : TeamUtils.getTeams()) { - if (team != null && !TeamUtils.getPlayersInTeam(team).isEmpty()) { - plugin.getScoreManager().join(team); - } - } - } - setRunning(true); - } else { - setRunning(false); - } - } - } - - @EventHandler - public void onJoin(PlayerJoinEvent e) { - if (isRunning()) { - bossBar.addViewer(e.getPlayer()); - - if (Config.getBoolean("event.teams")) { - ChallengeTeam team = TeamUtils.getPlayerTeam(e.getPlayer()); - if (team != null) { - playerMaterials.remove(e.getPlayer().getUniqueId()); - playerMaterials.put(e.getPlayer().getUniqueId(), teamMaterials.get(team)); - plugin.getScoreManager().join(team); - } - } else { - plugin.getScoreManager().join(new ChallengePlayer(e.getPlayer().getUniqueId())); - } - } - } - - public void addDiscoveredItem(Player player, ItemStack itemStack) { - UUID uuid = player.getUniqueId(); - Material material = itemStack.getType(); - if (materials.contains(material)) { - if (!Config.getBoolean("event.teams")) { - List items = new ArrayList<>(); - if (playerMaterials.get(uuid) != null) { - items = playerMaterials.get(uuid); - } - if (!items.contains(material)) { - items.add(material); - - playerMaterials.put(uuid, items); - plugin.getScoreManager().updateScore(new ChallengePlayer(player.getUniqueId()), 1); - ChatUtil.sendMessage(player, Component.text("Item: ", ChatUtil.GREEN).append(ChatUtil.getTrasnlateItemComponent(itemStack.getType()).color(ChatUtil.BLUE)).append(Component.text(" wurde Registriert", ChatUtil.GREEN))); - player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 2.0F); - CubesideModUtils.sendFlashScreenToCubesideMod(plugin, player, 50, ChatUtil.GREEN); - - if (plugin.getScoreManager().getScore(new ChallengePlayer(player.getUniqueId())) == materials.size()) { - plugin.getTimer().stopTimer(); - ChatUtil.sendTitleToAll(Component.text("Event"), player.name().color(ChatUtil.GREEN).append(Component.text(" hat alle Items gefunden!", ChatUtil.BLUE))); - Component[] lines = {Component.empty(), Component.empty(), Component.empty(), Component.text(" " + player.getName(), ChatUtil.BLUE), Component.text(" hat alle Items gefunden!", ChatUtil.GREEN), Component.empty(), Component.empty(), Component.empty()}; - ChatSkull.sendAll(player, lines); - for (Player pp : Bukkit.getOnlinePlayers()) { - pp.setGameMode(GameMode.SPECTATOR); - } - } - } - } else { - ChallengeTeam team = TeamUtils.getPlayerTeam(player); - boolean scoreset = false; - for (OfflinePlayer pp : TeamUtils.getPlayersInTeam(team)) { - if (pp instanceof Player onlinePlayer) { - List items = new ArrayList<>(); - if (playerMaterials.get(onlinePlayer.getUniqueId()) != null) { - items = playerMaterials.get(onlinePlayer.getUniqueId()); - } - if (!items.contains(material)) { - items.add(material); - playerMaterials.put(onlinePlayer.getUniqueId(), items); - teamMaterials.put(team, items); - if (!scoreset) { - plugin.getScoreManager().updateScore(TeamUtils.getPlayerTeam(onlinePlayer), 1); - scoreset = true; - } - ChatUtil.sendMessage(onlinePlayer, Component.text("Item: ", ChatUtil.GREEN).append(ChatUtil.getTrasnlateItemComponent(itemStack.getType()).color(ChatUtil.BLUE)).append(Component.text(" wurde Registriert", ChatUtil.GREEN))); - onlinePlayer.playSound(onlinePlayer.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 2.0F); - CubesideModUtils.sendFlashScreenToCubesideMod(plugin, onlinePlayer, 50, ChatUtil.GREEN); - - if (plugin.getScoreManager().getScore(TeamUtils.getPlayerTeam(onlinePlayer)) == materials.size()) { - if (eventend) { - return; - } - eventend = true; - plugin.getTimer().stopTimer(); - ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Team ", ChatUtil.GREEN).append(Component.text(team.getName(), team.getChatColor()).append(Component.text(" hat alle Items gefunden!", ChatUtil.GREEN)))); - for (OfflinePlayer offlinePlayer : TeamUtils.getPlayersInTeam(team)) { - if (offlinePlayer instanceof Player onPlayer) { - Component[] lines = {Component.empty(), Component.empty(), Component.empty(), Component.text(" " + onPlayer.getName(), ChatUtil.BLUE), Component.text(" hat alle Items gefunden!", ChatUtil.GREEN), Component.empty(), Component.empty(), Component.empty()}; - ChatSkull.sendAll(onPlayer, lines); - } - } - for (Player allplayers : Bukkit.getOnlinePlayers()) { - allplayers.setGameMode(GameMode.SPECTATOR); - } - return; - } - } - } - } - } - } - } -} - - diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/BridgeRaceChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/BridgeRaceChallengeEvent.java deleted file mode 100644 index 4daedfc..0000000 --- a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/BridgeRaceChallengeEvent.java +++ /dev/null @@ -1,354 +0,0 @@ -package de.fanta.challenges.challenges.ChallengeEvents; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.events.TimerChangedEvent; -import de.fanta.challenges.schedular.CancellableTask; -import de.fanta.challenges.scoreboard.ChallengePlayer; -import de.fanta.challenges.scoreboard.Scorable; -import de.fanta.challenges.scoreboard.ScoreManager; -import de.fanta.challenges.utils.ChatSkullAPI.ChatSkull; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.world.EmptyChunkGenerator; -import net.kyori.adventure.bossbar.BossBar; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.OfflinePlayer; -import org.bukkit.World; -import org.bukkit.WorldCreator; -import org.bukkit.WorldType; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.block.data.BlockData; -import org.bukkit.block.data.Directional; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.event.entity.EntityPickupItemEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerMoveEvent; -import org.bukkit.event.player.PlayerPortalEvent; -import org.bukkit.event.player.PlayerRespawnEvent; -import org.bukkit.inventory.ItemStack; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Random; -import java.util.UUID; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; - -public class BridgeRaceChallengeEvent implements Listener { - - private static final Challenges plugin = Challenges.getPlugin(); - private static boolean running; - private static final HashMap playerSpawnLocations = new HashMap<>(); - private static final Map bossBarMap = new HashMap<>(); - private CancellableTask spawnItemTask; - private static final ArrayList materials = new ArrayList<>(); - private static Location lastSpawnLocation = null; - private static boolean load = false; - private static World voidWorld; - private final Map> currentBarrier = new HashMap<>(); - private static final Material barrierBlock = Material.GLASS; - - @EventHandler - public void onActivation(TimerChangedEvent event) { - if (Objects.equals(Config.getString("event.type"), "bridgerace")) { - if (event.isRunning()) { - for (Material material : Material.values()) { - if (material.isItem() && !material.isAir() && !plugin.getNotAvailableMaterials().contains(material)) { - materials.add(material); - } - } - materials.remove(Material.ELYTRA); - materials.remove(Material.LAVA_BUCKET); - materials.remove(Material.WIND_CHARGE); - materials.remove(Material.BREEZE_ROD); - - for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { - plugin.getScoreManager().join(new ChallengePlayer(pp.getUniqueId())); - plugin.getScoreManager().setScore(new ChallengePlayer(pp.getUniqueId()), 1); - } - updateBossBar(); - startItemSpawnTask(); - - setRunning(true); - } else { - stopItemSpawnTask(); - for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { - pp.setGameMode(GameMode.SPECTATOR); - } - - for (Scorable scorable : plugin.getScoreManager().getByPositon(1)) { - OfflinePlayer p = (Bukkit.getServer().getOfflinePlayer(scorable.getName())); - if (p.isOnline()) { - Component[] lines = {Component.empty(), Component.empty(), Component.empty(), Component.text(" " + p.getName() + "'s", ChatUtil.BLUE), Component.text(" Brücke ist " + plugin.getScoreManager().getScore(scorable) + " Blöcke lang", ChatUtil.GREEN), Component.text(" und hat damit gewonnen!", ChatUtil.GREEN), Component.empty(), Component.empty()}; - ChatSkull.sendAll((Player) p, lines); - } else { - ChatUtil.sendBrodCastMessage(Component.text(scorable.getName() + "'s", ChatUtil.BLUE).append(Component.text(" Brücke ist " + plugin.getScoreManager().getScore(scorable) + " Blöcke lang und hat damit gewonnen!", ChatUtil.GREEN))); - } - } - - setRunning(false); - } - } - } - - @EventHandler - public void onPlayerRespawn(PlayerRespawnEvent e) { - if (isRunning()) { - Location respawnLocation = getPlayerLocation(e.getPlayer()).clone().add(0.5, 2, 0.5); - respawnLocation.setYaw(-90); - e.setRespawnLocation(respawnLocation); - } - } - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent e) { - if (isRunning()) { - if (plugin.getVanish().isVanish(e.getPlayer())) { - return; - } - ChallengePlayer challengePlayer = new ChallengePlayer(e.getPlayer().getUniqueId()); - plugin.getScoreManager().join(challengePlayer); - if (plugin.getScoreManager().getScore(challengePlayer) >= 1) { - return; - } - plugin.getScoreManager().setScore(challengePlayer, 1); - updateBossBar(); - } - - if (isLoaded()) { - createPlayerLocation(e.getPlayer()); - teleportPlayer(e.getPlayer()); - } - } - - @EventHandler - public void onMove(PlayerMoveEvent e) { - Player p = e.getPlayer(); - World world = p.getWorld(); - if (isRunning() && plugin.getTimer().isRunning() && !plugin.getVanish().isVanish(p) && p.getGameMode() == GameMode.SURVIVAL) { - Location playerLoc = p.getLocation(); - Location spawnLocation = getPlayerLocation(p).clone(); - double posRelatedToCenter = playerLoc.getZ() - spawnLocation.getZ(); - double distanceToCenter = Math.abs(posRelatedToCenter); - - List barrierLocations = currentBarrier.computeIfAbsent(p.getUniqueId(), uuid -> new ArrayList<>()); - - int BARRIER_POS = 20; - int BARRIER_SIZE = 6; - if (distanceToCenter >= BARRIER_POS) { //Outside border - p.teleport(getPlayerLocation(p).clone().add(0.5, 2, 0.5)); - } else if (distanceToCenter >= BARRIER_POS - 6) { //Inside border - //Send barrier - double barrierZ = spawnLocation.getZ() + BARRIER_POS * (posRelatedToCenter > 0 ? 1 : -1); - Location loc = new Location(p.getWorld(), playerLoc.getX() - BARRIER_SIZE / 2d, playerLoc.getY() - BARRIER_SIZE / 2d, barrierZ); - - resetBarrier(p, world, barrierLocations); - for (int y = 0; y < BARRIER_SIZE; y++) { - for (int x = 0; x < BARRIER_SIZE; x++) { - Location blockLoc = loc.clone().add(x, y, 0); - if (!world.getBlockAt(blockLoc).isSolid()) { - barrierLocations.add(blockLoc); - p.sendBlockChange(blockLoc, Bukkit.createBlockData(barrierBlock)); - } - } - } - } else if (!barrierLocations.isEmpty()) { //Away from border - resetBarrier(p, world, barrierLocations); - } - } - - if (isLoaded() && !isRunning()) { - if (p.getLocation().getY() <= 0) { - teleportPlayer(p); - } - } - } - - @EventHandler - public void onPortal(PlayerPortalEvent e) { - if (isRunning()) { - e.setCancelled(true); - } - } - - @EventHandler - public void onPickupItem(EntityPickupItemEvent e) { - if (isRunning()) { - if (e.getEntity() instanceof Player player) { - double posRelatedToCenter = player.getLocation().getZ() - getPlayerLocation(player).clone().getZ(); - double distanceToCenter = Math.abs(posRelatedToCenter); - if (distanceToCenter >= 20) { - e.setCancelled(true); - } - } - } - } - - @EventHandler - public void onBlockPlace(BlockPlaceEvent e) { - if (isRunning()) { - Player placer = e.getPlayer(); - - double posRelatedToCenter = placer.getLocation().getZ() - getPlayerLocation(placer).clone().getZ(); - double distanceToCenter = Math.abs(posRelatedToCenter); - if (distanceToCenter >= 20) { - e.setCancelled(true); - return; - } - - ScoreManager scoreManager = plugin.getScoreManager(); - int score = scoreManager.getScore(new ChallengePlayer(placer.getUniqueId())); - if (e.getBlock().getX() >= score) { - scoreManager.setScore(new ChallengePlayer(placer.getUniqueId()), e.getBlock().getX()); - } - - updateBossBar(); - } - } - - public static boolean load(Player player) { - if (!load) { - ArrayList> allTasks = new ArrayList<>(); - CompletableFuture future = new CompletableFuture<>(); - allTasks.add(future); - plugin.getScheduler().run(() -> { - try { - voidWorld = Bukkit.getWorld("VOID"); - if (voidWorld == null) { - WorldCreator wc = new WorldCreator("VOID"); - wc.environment(World.Environment.NORMAL); - wc.type(WorldType.FLAT); - wc.generateStructures(false); - wc.generator(new EmptyChunkGenerator()); - voidWorld = Bukkit.getServer().createWorld(wc); - voidWorld.setPVP(false); - } - } finally { - future.complete(null); - } - }); - CompletableFuture waitForAll = CompletableFuture.allOf(allTasks.toArray(new CompletableFuture[0])); - plugin.getScheduler().runAsync(() -> { - try { - waitForAll.get(); - for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { - createPlayerLocation(pp); - plugin.getScheduler().runLocalDelayed(playerSpawnLocations.get(pp.getUniqueId()), () -> teleportPlayer(pp), 1L); - } - load = true; - } catch (InterruptedException | ExecutionException e) { - throw new RuntimeException(e); - } - }); - - return true; - } else { - ChatUtil.sendErrorMessage(player, "Die Void Challenge läuft bereits!"); - return false; - } - } - - private static void createPlayerLocation(Player player) { - if (!playerSpawnLocations.containsKey(player.getUniqueId())) { - if (lastSpawnLocation != null) { - Location tempLocation = lastSpawnLocation.clone(); - lastSpawnLocation = tempLocation.add(0, 0, 50); - } else { - lastSpawnLocation = new Location(voidWorld, 0, 60, 0); - } - playerSpawnLocations.put(player.getUniqueId(), lastSpawnLocation.clone()); - } - } - - private static void teleportPlayer(Player player) { - setBedrock(getPlayerLocation(player).clone()); - Location teleportLocation = getPlayerLocation(player).clone().add(0.5, 2, 0.5); - teleportLocation.setYaw(-90); - plugin.getScheduler().runDelayedOnEntity(player, () -> player.teleport(teleportLocation), 1L); - } - - private static Location getPlayerLocation(Player player) { - if (!playerSpawnLocations.containsKey(player.getUniqueId())) { - createPlayerLocation(player); - } - return playerSpawnLocations.get(player.getUniqueId()); - } - - private static void setBedrock(Location location) { - location.getWorld().getBlockAt(location).setType(Material.BEDROCK); - Block block = location.getWorld().getBlockAt(location.add(1, 0, 0)); - if (block.getType() == Material.AIR) { - block.setType(Material.MAGENTA_GLAZED_TERRACOTTA); - BlockData blockData = block.getBlockData(); - if (blockData instanceof Directional directional) { - directional.setFacing(BlockFace.WEST); - block.setBlockData(blockData); - } - } - } - - private void startItemSpawnTask() { - spawnItemTask = plugin.getScheduler().runGlobalAtFixedRate(this::itemSpawn, 6 * 20L, 6 * 20L); - } - - private void stopItemSpawnTask() { - if (spawnItemTask != null) { - spawnItemTask.cancel(); - spawnItemTask = null; - } - } - - private void itemSpawn() { - Random random = new Random(); - for (Player player : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { - ItemStack randomItem = new ItemStack(materials.get(random.nextInt(materials.size()))); - Location loc = getPlayerLocation(player).clone().add(0.5, 1, 0.5); - plugin.getScheduler().runLocalDelayed(loc, () -> loc.getWorld().dropItem(loc, randomItem), 1L); - } - } - - private void updateBossBar() { - ScoreManager scoreManager = plugin.getScoreManager(); - for (Player p : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { - if (!plugin.getVanish().isVanish(p)) { - Component component = Component.text("Position: ", ChatUtil.GREEN).append(Component.text(scoreManager.getPosition(new ChallengePlayer(p.getUniqueId())), ChatUtil.BLUE).append(Component.text(" | ", ChatUtil.RED).append(Component.text("Länge deiner Brücke: ", ChatUtil.GREEN).append(Component.text(scoreManager.getScore(new ChallengePlayer(p.getUniqueId())) + " Blöcke", ChatUtil.BLUE))))); - BossBar bossBar = bossBarMap.computeIfAbsent(p, player -> { - BossBar newBossBar = BossBar.bossBar(component, 1.0f, BossBar.Color.GREEN, BossBar.Overlay.PROGRESS); - newBossBar.addViewer(p); - return newBossBar; - }); - bossBar.name(component); - } - } - } - - private void resetBarrier(Player p, World world, List locations) { - for (Location location : locations) { - p.sendBlockChange(location, world.getBlockAt(location).getBlockData()); - } - locations.clear(); - } - - private static boolean isRunning() { - return running; - } - - private static void setRunning(boolean run) { - running = run; - } - - public static boolean isLoaded() { - return load; - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DeathrunChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DeathrunChallengeEvent.java deleted file mode 100644 index 3270801..0000000 --- a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DeathrunChallengeEvent.java +++ /dev/null @@ -1,357 +0,0 @@ -package de.fanta.challenges.challenges.ChallengeEvents; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.events.TimerChangedEvent; -import de.fanta.challenges.schedular.CancellableTask; -import de.fanta.challenges.scoreboard.ChallengePlayer; -import de.fanta.challenges.scoreboard.Scorable; -import de.fanta.challenges.scoreboard.ScoreManager; -import de.fanta.challenges.utils.ChatSkullAPI.ChatSkull; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.CoordsTargeter; -import net.kyori.adventure.bossbar.BossBar; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.Style; -import net.kyori.adventure.text.format.TextDecoration; -import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.GameRule; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.NamespacedKey; -import org.bukkit.OfflinePlayer; -import org.bukkit.World; -import org.bukkit.block.Block; -import org.bukkit.entity.Boat; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.event.entity.EntityMountEvent; -import org.bukkit.event.entity.EntityPlaceEvent; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerMoveEvent; -import org.bukkit.event.player.PlayerPortalEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.event.player.PlayerRespawnEvent; -import org.bukkit.event.vehicle.VehicleDamageEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.persistence.PersistentDataContainer; -import org.bukkit.persistence.PersistentDataType; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Random; -import java.util.UUID; - -public class DeathrunChallengeEvent implements Listener { - - private static final Challenges plugin = Challenges.getPlugin(); - - private static final List deadPlayer = new ArrayList<>(); - private final Map bossBarMap = new HashMap<>(); - - public static Location spawnLocation; - private final Map> currentBarrier = new HashMap<>(); - private static final Material barrierBlock = Material.GLASS; - - private CancellableTask task; - - private static final NamespacedKey UUIDKey = new NamespacedKey(Challenges.getPlugin(), "uuid_deathrun"); - - private final Random random = new Random(); - private static World world; - - @EventHandler - public void onMove(PlayerMoveEvent e) { - Player p = e.getPlayer(); - World world = p.getWorld(); - if (Objects.equals(Config.getString("event.type"), "deathrun") && plugin.getTimer().isRunning() && !plugin.getVanish().isVanish(p) && p.getGameMode() != GameMode.SPECTATOR) { - if (!deadPlayer.contains(p.getUniqueId())) { - Location playerLoc = p.getLocation(); - double posRelatedToCenter = playerLoc.getZ() - spawnLocation.getZ(); - double distanceToCenter = Math.abs(posRelatedToCenter); - - List barrierLocations = currentBarrier.computeIfAbsent(p.getUniqueId(), uuid -> new ArrayList<>()); - - int BARRIER_POS = 15; - int BARRIER_SIZE = 6; - if (distanceToCenter >= BARRIER_POS) { //Outside border - ChatUtil.sendTitleToPlayer(p, Component.text("⟲ ⟲ ⟲ ⟲", Style.style(ChatUtil.RED, TextDecoration.BOLD)), Component.text("Kehre zurück auf die Strecke!", ChatUtil.RED), 0, 20, 0, true); - resetBarrier(p, world, barrierLocations); - CoordsTargeter.addLocation(p.getUniqueId(), new Location(p.getWorld(), p.getLocation().getX(), p.getLocation().getY(), spawnLocation.getZ())); - if (distanceToCenter >= BARRIER_POS + 3) { - p.damage(0.5); - } - } else if (distanceToCenter >= BARRIER_POS - 6) { //Inside border - //Send barrier - double barrierZ = spawnLocation.getZ() + BARRIER_POS * (posRelatedToCenter > 0 ? 1 : -1); - Location loc = new Location(p.getWorld(), playerLoc.getX() - BARRIER_SIZE / 2d, playerLoc.getY() - BARRIER_SIZE / 2d, barrierZ); - - resetBarrier(p, world, barrierLocations); - - if (CoordsTargeter.containsLocation(p.getUniqueId())) { - CoordsTargeter.removeLocation(p.getUniqueId()); - } - for (int y = 0; y < BARRIER_SIZE; y++) { - for (int x = 0; x < BARRIER_SIZE; x++) { - Location blockLoc = loc.clone().add(x, y, 0); - if (!world.getBlockAt(blockLoc).isSolid()) { - barrierLocations.add(blockLoc); - p.sendBlockChange(blockLoc, Bukkit.createBlockData(barrierBlock)); - } - } - } - } else if (!barrierLocations.isEmpty()) { //Away from border - resetBarrier(p, world, barrierLocations); - } - - if (playerLoc.getY() > world.getMaxHeight() - 1) { - p.damage(1); - } - } - } - } - - @EventHandler - public void onDamage(EntityDamageEvent e) { - if (e.getEntity() instanceof Player p) { - if (Objects.equals(Config.getString("event.type"), "deathrun") && plugin.getTimer().isRunning()) { - plugin.getScheduler().runDelayedOnEntity(p, () -> p.setWalkSpeed((float) (p.getHealth() / 100f)), 1L); - } - } - } - - @EventHandler - public void onDeath(PlayerDeathEvent e) { - Player p = e.getEntity(); - if (Objects.equals(Config.getString("event.type"), "deathrun") && plugin.getTimer().isRunning()) { - deadPlayer.add(p.getUniqueId()); - CoordsTargeter.removeLocation(e.getPlayer().getUniqueId()); - plugin.getSBManager().removeScoreboard(p); - if (plugin.getSBManager().countScoreboardPlayers() == 0) { - plugin.getTimer().stopTimer(); - ChatUtil.sendBrodCastMessage(Component.text("Das Event wurde beendet, da alle Spieler gestorben sind!", ChatUtil.GREEN)); - } - } - } - - @EventHandler - public void onPlayerRespawn(PlayerRespawnEvent e) { - if (Objects.equals(Config.getString("event.type"), "deathrun")) { - Location spawnlocation = world.getSpawnLocation(); - e.setRespawnLocation(spawnlocation); - } - } - - @EventHandler - public void onPortalUse(PlayerPortalEvent e) { - if (Objects.equals(Config.getString("event.type"), "deathrun")) { - e.setCancelled(true); - } - } - - @EventHandler - public void onTimerChange(TimerChangedEvent e) { - if (Objects.equals(Config.getString("event.type"), "deathrun")) { - if (!e.isRunning()) { - for (Player player : Bukkit.getOnlinePlayers()) { - CoordsTargeter.removeLocation(player.getUniqueId()); - } - stopUpdateTask(); - for (Scorable scorable : plugin.getScoreManager().getByPositon(1)) { - OfflinePlayer p = (Bukkit.getServer().getOfflinePlayer(scorable.getName())); - if (p.isOnline()) { - Component[] lines = {Component.empty(), Component.empty(), Component.empty(), Component.text(" " + p.getName(), ChatUtil.BLUE), Component.text(" ist " + plugin.getScoreManager().getScore(scorable) + " Blöcke gelaufen und", ChatUtil.GREEN), Component.text(" hat damit gewonnen!", ChatUtil.GREEN), Component.empty(), Component.empty()}; - ChatSkull.sendAll((Player) p, lines); - } else { - ChatUtil.sendBrodCastMessage(Component.text(scorable.getName(), ChatUtil.BLUE).append(Component.text(" ist " + plugin.getScoreManager().getScore(scorable) + " Blöcke gelaufen und hat damit gewonnen!", ChatUtil.GREEN))); - } - } - } else { - plugin.getScheduler().run(() -> world.setGameRule(GameRule.MAX_ENTITY_CRAMMING, Bukkit.getServer().getMaxPlayers())); - plugin.getScheduler().runGlobalDelayed(() -> { - for (Player pp : Bukkit.getOnlinePlayers()) { - plugin.getScoreManager().join(new ChallengePlayer(pp.getUniqueId())); - Location spawn = world.getSpawnLocation(); - spawn.setYaw(-90f); - pp.teleportAsync(spawn); - } - }, 1L); - startUpdateTask(); - } - } - } - - @EventHandler - public void onBarrierBreak(BlockBreakEvent e) { - if (Objects.equals(Config.getString("event.type"), "deathrun")) { - Block block = e.getBlock(); - Location loc = block.getLocation(); - int x = loc.getBlockX(); - int z = loc.getBlockZ(); - int spawnX = spawnLocation.getBlockX(); - int spawnZ = spawnLocation.getBlockZ(); - - int distanceX = spawnX - x; - - if (distanceX > -15 && (Math.abs(distanceX) >= 15 || Math.abs(spawnZ - z) >= 15)) { - ChatUtil.sendWarningMessage(e.getPlayer(), "Niemand hat die Absicht, eine Mauer zu errichten!"); - e.setCancelled(true); - } - } - } - - @EventHandler - public void onBoatMount(EntityMountEvent e) { - if (Objects.equals(Config.getString("event.type"), "deathrun")) { - if (e.getMount() instanceof Boat boat && e.getEntity() instanceof Player player) { - PersistentDataContainer container = boat.getPersistentDataContainer(); - if (container.get(UUIDKey, PersistentDataType.STRING) != null && !container.get(UUIDKey, PersistentDataType.STRING).equals(player.getUniqueId().toString())) { - ChatUtil.sendWarningMessage(player, "Du kannst nur in deine eigenen Boote einsteigen."); - e.setCancelled(true); - } - } - } - } - - @EventHandler - public void onVehiclePlace(EntityPlaceEvent e) { - if (Objects.equals(Config.getString("event.type"), "deathrun")) { - if (e.getEntity() instanceof Boat boat) { - if (e.getPlayer() != null) { - PersistentDataContainer container = boat.getPersistentDataContainer(); - container.set(UUIDKey, PersistentDataType.STRING, e.getPlayer().getUniqueId().toString()); - } - } - } - } - - @EventHandler - public void onBoatBreak(VehicleDamageEvent e) { - if (Objects.equals(Config.getString("event.type"), "deathrun")) { - if (e.getVehicle() instanceof Boat boat && e.getAttacker() instanceof Player player) { - PersistentDataContainer container = boat.getPersistentDataContainer(); - if (container.get(UUIDKey, PersistentDataType.STRING) != null && !container.get(UUIDKey, PersistentDataType.STRING).equals(player.getUniqueId().toString())) { - ChatUtil.sendWarningMessage(player, "Du kannst nur deine eignen Boote zerstören."); - e.setCancelled(true); - } - } - } - } - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent e) { - if (Objects.equals(Config.getString("event.type"), "deathrun")) { - if (deadPlayer.contains(e.getPlayer().getUniqueId())) { - plugin.getSBManager().setScoreboardtoPlayer(e.getPlayer()); - } - } - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent e) { - if (Objects.equals(Config.getString("event.type"), "deathrun")) { - CoordsTargeter.removeLocation(e.getPlayer().getUniqueId()); - } - } - - @EventHandler - public void onPlantBreak(BlockBreakEvent e) { - if (Objects.equals(Config.getString("event.type"), "deathrun") && plugin.getTimer().isRunning()) { - if (e.getBlock().getType() != Material.SHORT_GRASS) { - return; - } - if (random.nextInt(10) == 0) { - e.getBlock().getWorld().dropItem(e.getBlock().getLocation(), new ItemStack(Material.MELON_SLICE)); - } - } - - } - - public static void load(Player player) { - world = player.getWorld(); - spawnLocation = world.getSpawnLocation(); - - int height = world.getMaxHeight() - world.getMinHeight(); - int width = 30; - - Location loc = spawnLocation.clone().subtract(15, 0, 15); - loc.setY(world.getMinHeight()); - for (int y = 0; y < height; y++) { - for (int z = 0; z < width; z++) { - Block block = loc.clone().add(0, y, z).getBlock(); - if (!block.isSolid()) { - block.setType(barrierBlock); - } - } - } - mexico(15, world); - mexico(-15, world); - } - - private void resetBarrier(Player p, World world, List locations) { - for (Location location : locations) { - p.sendBlockChange(location, world.getBlockAt(location).getBlockData()); - } - locations.clear(); - } - - private static void mexico(int startPos, World world) { - int height = world.getMaxHeight() - world.getMinHeight(); - int width = 30; - Location loc = spawnLocation.clone().add(-15, 0, startPos); - loc.setY(world.getMinHeight()); - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) { - Block block = loc.clone().add(x, y, 0).getBlock(); - if (!block.isSolid()) { - block.setType(barrierBlock); - } - } - } - } - - public static List getDeadPlayer() { - return deadPlayer; - } - - public void startUpdateTask() { - task = plugin.getScheduler().runGlobalAtFixedRate(this::updateScoreAndBossBar, 1L, 1L); - } - - public void stopUpdateTask() { - if (task != null) { - task.cancel(); - task = null; - } - } - - private void updateScoreAndBossBar() { - if (Objects.equals(Config.getString("event.type"), "deathrun") && plugin.getTimer().isRunning()) { - ScoreManager scoreManager = plugin.getScoreManager(); - for (Player p : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { - if (!plugin.getVanish().isVanish(p)) { - if (!deadPlayer.contains(p.getUniqueId()) && p.getGameMode() != GameMode.SPECTATOR) { - int distance = (int) p.getLocation().toVector().subtract(p.getWorld().getSpawnLocation().toVector()).length(); - scoreManager.setScore(new ChallengePlayer(p.getUniqueId()), distance); - } - - Component component = Component.text("Position: ", ChatUtil.GREEN).append(Component.text(scoreManager.getPosition(new ChallengePlayer(p.getUniqueId())), ChatUtil.BLUE).append(Component.text(" | ", ChatUtil.RED).append(deadPlayer.contains(p.getUniqueId()) ? Component.text("† ", Style.style(ChatUtil.RED, TextDecoration.BOLD)) : Component.empty())).append(Component.text("Distanz zum Spawn: ", ChatUtil.GREEN).append(Component.text(scoreManager.getScore(new ChallengePlayer(p.getUniqueId())) + " Blöcke", ChatUtil.BLUE)))); - BossBar bossBar = bossBarMap.computeIfAbsent(p, player -> { - BossBar newBossBar = BossBar.bossBar(component, 1.0f, BossBar.Color.GREEN, BossBar.Overlay.PROGRESS); - newBossBar.addViewer(p); - return newBossBar; - }); - bossBar.name(component); - } - } - } - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DifferentItemsChallenge.java b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DifferentItemsChallenge.java deleted file mode 100644 index 1d414ef..0000000 --- a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DifferentItemsChallenge.java +++ /dev/null @@ -1,190 +0,0 @@ -package de.fanta.challenges.challenges.ChallengeEvents; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.events.ChallengeEventStatusChangedEvent; -import de.fanta.challenges.guis.eventgui.BingoItemsGui; -import de.fanta.challenges.scoreboard.ChallengePlayer; -import de.fanta.challenges.scoreboard.ScoreManager; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.CubesideModUtils; -import net.kyori.adventure.bossbar.BossBar; -import net.kyori.adventure.text.Component; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.Statistic; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityPickupItemEvent; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.player.PlayerBucketEmptyEvent; -import org.bukkit.event.player.PlayerBucketEntityEvent; -import org.bukkit.event.player.PlayerBucketFillEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerStatisticIncrementEvent; -import org.bukkit.inventory.CraftingInventory; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.UUID; - -public class DifferentItemsChallenge implements Listener { - private static boolean running; - private static final Challenges plugin = Challenges.getPlugin(); - private final HashMap> playerMaterials = new HashMap<>(); - private static final Map bossBarMap = new HashMap<>(); - - @EventHandler - public void onActivation(ChallengeEventStatusChangedEvent event) { - if (Objects.equals(Config.getString("event.type"), "differentitems")) { - if (event.isRunning()) { - for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { - plugin.getScoreManager().join(new ChallengePlayer(pp.getUniqueId())); - } - updateBossBar(); - setRunning(true); - } else { - setRunning(false); - } - } - } - - @EventHandler - public void onInventoryClick(InventoryClickEvent e) { - Player player = (Player) e.getWhoClicked(); - Inventory playerInv = BingoItemsGui.getPlayerInvs().get(player.getUniqueId()); - if (e.getClickedInventory() == null) { - return; - } - if (!isRunning()) { - return; - } - if (playerInv != null && playerInv.equals(e.getClickedInventory())) { - return; - } - if (e.getClickedInventory() instanceof CraftingInventory) { - return; - } - - ItemStack itemStack = e.getCurrentItem(); - if (itemStack != null && itemStack.getType() != Material.AIR) { - addDiscoveredItem(player, itemStack); - } - } - - @EventHandler - public void onItemCraft(PlayerStatisticIncrementEvent e) { - Player player = e.getPlayer(); - if (!isRunning()) { - return; - } - - if (e.getStatistic() != Statistic.CRAFT_ITEM) { - return; - } - - Material material = e.getMaterial(); - if (material == null) { - return; - } - - ItemStack itemStack = new ItemStack(material); - if (itemStack.getType() != Material.AIR) { - addDiscoveredItem(player, itemStack); - } - } - - @EventHandler - public void onPickUpItem(EntityPickupItemEvent e) { - ItemStack itemStack = e.getItem().getItemStack(); - if (e.getEntity() instanceof Player player) { - if (isRunning()) { - addDiscoveredItem(player, itemStack); - } - } - } - - @EventHandler - public void onBucketFill(PlayerBucketFillEvent e) { - ItemStack itemStack = e.getItemStack(); - Player player = e.getPlayer(); - if (isRunning()) { - if (itemStack != null) { - addDiscoveredItem(player, itemStack); - } - } - } - - @EventHandler - public void onBucketChatchFish(PlayerBucketEntityEvent e) { - ItemStack itemStack = e.getEntityBucket(); - if (isRunning()) { - addDiscoveredItem(e.getPlayer(), itemStack); - } - } - - @EventHandler - public void onBucketEmpty(PlayerBucketEmptyEvent e) { - ItemStack itemStack = e.getItemStack(); - Player player = e.getPlayer(); - if (isRunning()) { - if (itemStack != null) { - addDiscoveredItem(player, itemStack); - } - } - } - - @EventHandler - public void onJoin(PlayerJoinEvent e) { - if (isRunning()) { - plugin.getScoreManager().join(new ChallengePlayer(e.getPlayer().getUniqueId())); - updateBossBar(); - } - } - - private void addDiscoveredItem(Player player, ItemStack itemStack) { - List playerMaterialList; - if (playerMaterials.containsKey(player.getUniqueId())) { - playerMaterialList = playerMaterials.get(player.getUniqueId()); - } else { - playerMaterialList = new ArrayList<>(); - } - - if (!playerMaterialList.contains(itemStack.getType())) { - playerMaterialList.add(itemStack.getType()); - playerMaterials.put(player.getUniqueId(), playerMaterialList); - plugin.getScoreManager().updateScore(new ChallengePlayer(player.getUniqueId()), 1); - ChatUtil.sendMessage(player, Component.text("Item: ", ChatUtil.GREEN).append(ChatUtil.getTrasnlateItemComponent(itemStack.getType()).color(ChatUtil.BLUE)).append(Component.text(" wurde Registriert", ChatUtil.GREEN))); - player.playSound(player, Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 2.0F); - CubesideModUtils.sendFlashScreenToCubesideMod(plugin, player, 50, ChatUtil.GREEN); - updateBossBar(); - } - } - - private void updateBossBar() { - ScoreManager scoreManager = plugin.getScoreManager(); - for (Player p : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { - Component component = Component.text("Position: ", ChatUtil.GREEN).append(Component.text(scoreManager.getPosition(new ChallengePlayer(p.getUniqueId())), ChatUtil.BLUE).append(Component.text(" | ", ChatUtil.RED).append(Component.text("Score: ", ChatUtil.GREEN).append(Component.text(scoreManager.getScore(new ChallengePlayer(p.getUniqueId())) + " Items", ChatUtil.BLUE))))); - BossBar bossBar = bossBarMap.computeIfAbsent(p, player -> { - BossBar newBossBar = BossBar.bossBar(component, 1.0f, BossBar.Color.GREEN, BossBar.Overlay.PROGRESS); - newBossBar.addViewer(p); - return newBossBar; - }); - bossBar.name(component); - } - } - - private static void setRunning(boolean run) { - running = run; - } - - public static boolean isRunning() { - return running; - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/OreBattleChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/OreBattleChallengeEvent.java deleted file mode 100644 index 9a7bc56..0000000 --- a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/OreBattleChallengeEvent.java +++ /dev/null @@ -1,145 +0,0 @@ -package de.fanta.challenges.challenges.ChallengeEvents; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.events.TimerChangedEvent; -import de.fanta.challenges.scoreboard.ChallengePlayer; -import de.fanta.challenges.scoreboard.Scorable; -import de.fanta.challenges.teams.ChallengeTeam; -import de.fanta.challenges.teams.TeamUtils; -import de.fanta.challenges.utils.ChatSkullAPI.ChatSkull; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.OfflinePlayer; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.event.player.PlayerJoinEvent; - -import java.util.HashMap; -import java.util.Objects; - -public class OreBattleChallengeEvent implements Listener { - private static final HashMap blocklist = new HashMap<>(); - private static boolean running; - private final Challenges plugin = Challenges.getPlugin(); - - public static boolean isRunning() { - return running; - } - - public void setRunning(boolean run) { - running = run; - } - - @EventHandler - public void onActivation(TimerChangedEvent event) { - if (Objects.equals(Config.getString("event.type"), "orebattle")) { - if (event.isRunning()) { - blocklist.put(Material.EMERALD_ORE, 80); - blocklist.put(Material.DEEPSLATE_EMERALD_ORE, 1500); - blocklist.put(Material.DIAMOND_ORE, 300); - blocklist.put(Material.DEEPSLATE_DIAMOND_ORE, 80); - blocklist.put(Material.GOLD_ORE, 60); - blocklist.put(Material.DEEPSLATE_GOLD_ORE, 60); - blocklist.put(Material.IRON_ORE, 12); - blocklist.put(Material.DEEPSLATE_IRON_ORE, 30); - blocklist.put(Material.COPPER_ORE, 7); - blocklist.put(Material.DEEPSLATE_COPPER_ORE, 45); - blocklist.put(Material.REDSTONE_ORE, 70); - blocklist.put(Material.DEEPSLATE_REDSTONE_ORE, 20); - blocklist.put(Material.COAL_ORE, 7); - blocklist.put(Material.DEEPSLATE_COAL_ORE, 300); - blocklist.put(Material.LAPIS_ORE, 70); - blocklist.put(Material.DEEPSLATE_LAPIS_ORE, 70); - - for (Player pp : Bukkit.getOnlinePlayers()) { - if (!Config.getBoolean("event.teams")) { - plugin.getScoreManager().join(new ChallengePlayer(pp.getUniqueId())); - } else { - for (ChallengeTeam team : TeamUtils.getTeams()) { - if (team != null && !TeamUtils.getPlayersInTeam(team).isEmpty()) { - plugin.getScoreManager().join(team); - } - } - } - } - - setRunning(true); - } else { - setRunning(false); - if (!Config.getBoolean("event.teams")) { - for (Scorable scorable : plugin.getScoreManager().getByPositon(1)) { - OfflinePlayer p = (Bukkit.getServer().getOfflinePlayer(scorable.getName())); - if (p.isOnline()) { - Component[] lines = {Component.empty(), Component.empty(), Component.empty(), Component.text(" " + p.getName(), ChatUtil.BLUE), Component.text(" hat " + plugin.getScoreManager().getScore(scorable) + " Punkte und", ChatUtil.GREEN), Component.text(" hat damit gewonnen!", ChatUtil.GREEN), Component.empty(), Component.empty()}; - ChatSkull.sendAll((Player) p, lines); - } else { - ChatUtil.sendBrodCastMessage(Component.text(scorable.getName(), ChatUtil.BLUE).append(Component.text(" hat " + plugin.getScoreManager().getScore(scorable) + " Punkte und hat damit gewonnen!", ChatUtil.GREEN))); - } - ChatUtil.sendTitleToAll(Component.text("Event"), Component.text(ChatUtil.BLUE + p.getName() + ChatUtil.GREEN + " gewinnt mit " + ChatUtil.BLUE + plugin.getScoreManager().getScore(scorable) + ChatUtil.GREEN + " Punkten", ChatUtil.GREEN)); - } - - } else { - for (Scorable scorable : plugin.getScoreManager().getByPositon(1)) { - ChallengeTeam team = TeamUtils.getTeam(scorable.getName()); - if (team != null) { - ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Team ", ChatUtil.GREEN).append(Component.text(team.getName(), team.getChatColor()).append(Component.text(" gewinnt mit ", ChatUtil.GREEN).append(Component.text(plugin.getScoreManager().getScore(scorable), ChatUtil.BLUE).append(Component.text(" Punkten", ChatUtil.GREEN)))))); - Component[] lines = {Component.empty(), Component.empty(), Component.empty(), Component.text(" " + "Team ", ChatUtil.BLUE).append(Component.text(team.getName(), team.getChatColor())), Component.text(" hat " + plugin.getScoreManager().getScore(scorable) + " Punkte und", ChatUtil.GREEN), Component.text(" hat damit gewonnen!", ChatUtil.GREEN), Component.empty(), Component.empty()}; - for (OfflinePlayer pp : TeamUtils.getPlayersInTeam(team)) - if (pp.isOnline()) { - ChatSkull.sendAll((Player) pp, lines); - } - } - } - } - } - } - } - - @EventHandler - public void onBreakBlock(BlockBreakEvent e) { - if (isRunning()) { - if (blocklist.containsKey(e.getBlock().getType())) { - if (!Config.getBoolean("event.teams")) { - plugin.getScoreManager().updateScore(new ChallengePlayer(e.getPlayer().getUniqueId()), blocklist.get(e.getBlock().getType())); - } else { - plugin.getScoreManager().updateScore(TeamUtils.getPlayerTeam(e.getPlayer()), blocklist.get(e.getBlock().getType())); - } - ChatUtil.sendTitleToPlayer(e.getPlayer(), Component.empty(), ChatUtil.getTrasnlateItemComponent(e.getBlock().getType()).color(ChatUtil.BLUE).append(Component.text(" +" + blocklist.get(e.getBlock().getType()), ChatUtil.GREEN)), 3, 20, 3, false); - } - } - } - - @EventHandler - public void onPlaceBlock(BlockPlaceEvent e) { - if (isRunning()) { - if (blocklist.containsKey(e.getBlock().getType())) { - if (!Config.getBoolean("event.teams")) { - plugin.getScoreManager().updateScore(new ChallengePlayer(e.getPlayer().getUniqueId()), -blocklist.get(e.getBlock().getType())); - } else { - plugin.getScoreManager().updateScore(TeamUtils.getPlayerTeam(e.getPlayer()), -blocklist.get(e.getBlock().getType())); - } - ChatUtil.sendTitleToPlayer(e.getPlayer(), Component.empty(), ChatUtil.getTrasnlateItemComponent(e.getBlock().getType()).color(ChatUtil.BLUE).append(Component.text(" -" + blocklist.get(e.getBlock().getType()), ChatUtil.RED)), 3, 20, 3, false); - } - } - } - - @EventHandler - public void onJoin(PlayerJoinEvent e) { - if (isRunning()) { - if (Config.getBoolean("event.teams")) { - ChallengeTeam team = TeamUtils.getPlayerTeam(e.getPlayer()); - if (team != null) { - plugin.getScoreManager().join(team); - } - } else { - plugin.getScoreManager().join(new ChallengePlayer(e.getPlayer().getUniqueId())); - } - } - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/SammelFieberChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/SammelFieberChallengeEvent.java deleted file mode 100644 index ba71e4e..0000000 --- a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/SammelFieberChallengeEvent.java +++ /dev/null @@ -1,335 +0,0 @@ -package de.fanta.challenges.challenges.ChallengeEvents; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.events.TimerChangedEvent; -import de.fanta.challenges.guis.eventgui.SammelFieberSettingsGui; -import de.fanta.challenges.scoreboard.ChallengePlayer; -import de.fanta.challenges.teams.ChallengeTeam; -import de.fanta.challenges.teams.TeamUtils; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import net.kyori.adventure.bossbar.BossBar; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.OfflinePlayer; -import org.bukkit.Sound; -import org.bukkit.block.Block; -import org.bukkit.entity.Player; -import org.bukkit.entity.Villager; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.entity.EntityPickupItemEvent; -import org.bukkit.event.inventory.InventoryMoveItemEvent; -import org.bukkit.event.inventory.InventoryPickupItemEvent; -import org.bukkit.event.player.PlayerDropItemEvent; -import org.bukkit.event.player.PlayerInteractEntityEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.MerchantRecipe; -import org.bukkit.inventory.meta.ItemMeta; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Objects; -import java.util.UUID; - -public class SammelFieberChallengeEvent implements Listener { - - public static BossBar bossBar; - - public static final HashMap bossBarList = new HashMap<>(); - public static final HashMap bossBarPlayerList = new HashMap<>(); - public static Location hopperloc; - private static Material material; - private static boolean running; - private static int count; - private final Challenges plugin = Challenges.getPlugin(); - - public static Location getHopperLocation() { - return hopperloc; - } - - public static void setHopperLocation(Location loc) { - SammelFieberChallengeEvent.hopperloc = loc; - } - - public static Material getMaterial() { - return material; - } - - public void setMaterial(Material mat) { - material = mat; - } - - public static boolean isRunning() { - return running; - } - - public void setRunning(boolean run) { - running = run; - } - - public static int getCount() { - return count; - } - - private boolean isSinglePlayer() { - return SammelFieberSettingsGui.singlePlayer; - } - - @EventHandler - public void onActivation(TimerChangedEvent event) { - if (Objects.equals(Config.getString("event.type"), "sammelfieber")) { - if (event.isRunning()) { - ItemStack stack = SammelFieberSettingsGui.getEventItem(); - if (stack != null && getHopperLocation() != null) { - setMaterial(stack.getType()); - if (!Config.getBoolean("event.teams")) { - if (isSinglePlayer()) { - updatePlayerBossBar(); - } else { - bossBar = BossBar.bossBar(Component.text("Es wurden ", ChatUtil.GREEN).append(Component.text(count + " ", ChatUtil.BLUE)).append(ChatUtil.getTrasnlateItemComponent(getMaterial()).color(ChatUtil.BLUE).append(Component.text(" abgegeben. Das sind ", ChatUtil.GREEN).append(Component.text(count * SammelFieberSettingsGui.MONEY + " Cubes", ChatUtil.BLUE)))), 1.0f, BossBar.Color.GREEN, BossBar.Overlay.PROGRESS); - for (Player pp : Bukkit.getOnlinePlayers()) { - plugin.getScoreManager().join(new ChallengePlayer(pp.getUniqueId())); - bossBar.addViewer(pp); - } - } - } else { - for (ChallengeTeam team : TeamUtils.getTeams()) { - plugin.getScoreManager().join(team); - BossBar teamBar = BossBar.bossBar(Component.text("Dein Team hat ", ChatUtil.GREEN).append(Component.text(plugin.getScoreManager().getScore(team) + " ", ChatUtil.BLUE)).append(ChatUtil.getTrasnlateItemComponent(getMaterial()).color(ChatUtil.BLUE).append(Component.text(" abgegeben. ", ChatUtil.GREEN).append(Component.text(" | ", ChatUtil.RED)).append(Component.text("Platz: " + plugin.getScoreManager().getPosition(team), ChatUtil.GREEN)))), 1.0f, BossBar.Color.GREEN, BossBar.Overlay.PROGRESS); - bossBarList.put(team, teamBar); - for (OfflinePlayer offlinePlayer : TeamUtils.getPlayersInTeam(team)) - if (offlinePlayer instanceof Player player) { - teamBar.addViewer(player); - } - } - } - - } else { - ChatUtil.sendErrorMessage(plugin.getCurrentEditor(), "Du musst erst ein Item und Hopper festlegen."); - plugin.getTimer().stopTimer(); - return; - } - setRunning(true); - } else { - setRunning(false); - } - } - } - - @EventHandler - public void onHoppergetItem(InventoryPickupItemEvent e) { - if (!isRunning()) { - return; - } - - Location loc = e.getInventory().getLocation(); - Location blockloc = new Location(loc.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); - if (!getHopperLocation().equals(blockloc)) { - return; - } - - ItemStack stack = e.getItem().getItemStack(); - - if (stack.getType() != getMaterial()) { - e.setCancelled(true); - return; - } - - ItemMeta meta = stack.getItemMeta(); - if (meta != null && meta.hasDisplayName()) { - if (!Config.getBoolean("event.teams")) { - Player player = Bukkit.getPlayer(meta.getDisplayName()); - count = count + stack.getAmount(); - plugin.getScoreManager().updateScore(new ChallengePlayer(player.getUniqueId()), stack.getAmount()); - player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 2.0F); - if (isSinglePlayer()) { - updatePlayerBossBar(); - } else { - bossBar.name(Component.text("Es wurden ", ChatUtil.GREEN).append(Component.text(count + " ", ChatUtil.BLUE)).append(ChatUtil.getTrasnlateItemComponent(getMaterial()).color(ChatUtil.BLUE)).append(Component.text(" abgegeben. Das sind ", ChatUtil.GREEN).append(Component.text(count * SammelFieberSettingsGui.MONEY + " Cubes", ChatUtil.BLUE)))); - } - } else { - ChallengeTeam team = TeamUtils.getTeam(meta.getDisplayName()); - if (team != null) { - plugin.getScoreManager().updateScore(team, stack.getAmount()); - - for (OfflinePlayer offlinePlayer : TeamUtils.getPlayersInTeam(team)) { - if (offlinePlayer instanceof Player pp) { - pp.playSound(pp.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 2.0F); - } - } - - for (ChallengeTeam tempTema : TeamUtils.getTeams()) { - BossBar teamBar = bossBarList.get(tempTema); - teamBar.name(Component.text("Dein Team hat ", ChatUtil.GREEN).append(Component.text(plugin.getScoreManager().getScore(tempTema) + " ", ChatUtil.BLUE)).append(ChatUtil.getTrasnlateItemComponent(getMaterial()).color(ChatUtil.BLUE)).append(Component.text(" abgegeben. ", ChatUtil.GREEN).append(Component.text(" | ", ChatUtil.RED)).append(Component.text("Platz: " + plugin.getScoreManager().getPosition(tempTema), ChatUtil.GREEN)))); - } - } - } - } - plugin.getScheduler().runLocalDelayed(e.getInventory().getLocation(), () -> e.getInventory().clear(), 1); - } - - private void updatePlayerBossBar() { - for (Player pp : Bukkit.getOnlinePlayers()) { - ChallengePlayer challengePlayer = new ChallengePlayer(pp.getUniqueId()); - plugin.getScoreManager().join(challengePlayer); - - Component component = Component.text("Du hast ", ChatUtil.GREEN).append(Component.text(plugin.getScoreManager().getScore(challengePlayer) + " ", ChatUtil.BLUE).append(ChatUtil.getTrasnlateItemComponent(getMaterial()).color(ChatUtil.BLUE)).append(Component.text(" abgegeben.", ChatUtil.GREEN).append(Component.text(" | ", ChatUtil.RED).append(Component.text("Platzierung: " + plugin.getScoreManager().getPosition(challengePlayer), ChatUtil.GREEN))))); - if (bossBarPlayerList.containsKey(pp.getUniqueId())) { - BossBar playerBar = bossBarPlayerList.get(pp.getUniqueId()); - playerBar.name(component); - playerBar.addViewer(pp); - } else { - BossBar playerBar = BossBar.bossBar(component, 1.0f, BossBar.Color.GREEN, BossBar.Overlay.PROGRESS); - playerBar.addViewer(pp); - bossBarPlayerList.put(pp.getUniqueId(), playerBar); - } - } - } - - @EventHandler - public void onHopperMoveItem(InventoryMoveItemEvent e) { - if (!isRunning()) { - return; - } - - Location loc = e.getSource().getLocation(); - if (loc == null) { - return; - } - Location blockLoc = new Location(loc.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); - if (getHopperLocation().equals(blockLoc)) { - e.setCancelled(true); - } - } - - @EventHandler - public void onInteract(PlayerInteractEvent e) { - if (!isRunning()) { - return; - } - if (e.getAction() == Action.RIGHT_CLICK_BLOCK) { - Block clickedBlock = e.getClickedBlock(); - if (clickedBlock == null) { - return; - } - Location loc = clickedBlock.getLocation(); - Location blockLoc = new Location(loc.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); - if (getHopperLocation().equals(blockLoc)) { - e.setCancelled(true); - } - } - - } - - @EventHandler - public void onBlockBreak(BlockBreakEvent e) { - if (!isRunning()) { - return; - } - - Location loc = e.getBlock().getLocation(); - Location blockloc = new Location(loc.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); - if (getHopperLocation().equals(blockloc)) { - e.setCancelled(true); - } - } - - @EventHandler - public void onPlayerDropItem(PlayerDropItemEvent e) { - if (!isRunning()) { - return; - } - - ItemStack stack = e.getItemDrop().getItemStack(); - - if (stack.getType() != getMaterial()) { - return; - } - - ItemMeta meta = stack.getItemMeta(); - if (!Config.getBoolean("event.teams")) { - meta.displayName(e.getPlayer().name()); - } else { - meta.displayName(Component.text(TeamUtils.getPlayerTeam(e.getPlayer()).getName())); - } - - stack.setItemMeta(meta); - } - - @EventHandler - public void onPlayerPickUpItem(EntityPickupItemEvent e) { - if (!isRunning()) { - return; - } - - if (!(e.getEntity() instanceof Player)) { - return; - } - - ItemStack stack = e.getItem().getItemStack(); - - if (stack.getType() != getMaterial()) { - return; - } - - ItemMeta meta = stack.getItemMeta(); - if (meta != null && meta.hasDisplayName()) { - meta.displayName(null); - stack.setItemMeta(meta); - } - } - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent e) { - if (!isRunning()) { - return; - } - if (!Config.getBoolean("event.teams")) { - if (isSinglePlayer()) { - updatePlayerBossBar(); - } else { - plugin.getScoreManager().join(new ChallengePlayer(e.getPlayer().getUniqueId())); - bossBar.addViewer(e.getPlayer()); - } - } else { - ChallengeTeam team = TeamUtils.getPlayerTeam(e.getPlayer()); - if (team != null) { - plugin.getScoreManager().join(team); - if (bossBarList.containsKey(team)) { - bossBarList.get(team).addViewer(e.getPlayer()); - } else { - Component component = Component.text("Dein Team hat ", ChatUtil.GREEN).append(Component.text(plugin.getScoreManager().getScore(team) + " ", ChatUtil.BLUE)).append(ChatUtil.getTrasnlateItemComponent(getMaterial()).color(ChatUtil.BLUE)).append(Component.text(" abgegeben. ", ChatUtil.GREEN).append(Component.text(" | ", ChatUtil.RED)).append(Component.text("Platz: " + plugin.getScoreManager().getPosition(team), ChatUtil.GREEN))); - BossBar teamBar = BossBar.bossBar(component, 1.0f, BossBar.Color.GREEN, BossBar.Overlay.PROGRESS); - bossBarList.put(team, teamBar); - teamBar.addViewer(e.getPlayer()); - } - } - } - } - - @EventHandler - public void onEntityClick(PlayerInteractEntityEvent e) { - if (!isRunning()) { - return; - } - if (e.getRightClicked() instanceof Villager villager) { - List trades = new ArrayList<>(); - for (MerchantRecipe trade : villager.getRecipes()) { - ItemStack stack = trade.getResult(); - if (stack.getType() != material) { - trades.add(trade); - } - } - villager.setRecipes(trades); - } - } - -} diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/TimeChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/TimeChallengeEvent.java deleted file mode 100644 index f922810..0000000 --- a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/TimeChallengeEvent.java +++ /dev/null @@ -1,85 +0,0 @@ -package de.fanta.challenges.challenges.ChallengeEvents; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.events.TimerChangedEvent; -import de.fanta.challenges.schedular.CancellableTask; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.plugin.api.OnlinePlayerData; -import de.iani.cubesideutils.bukkit.plugin.api.UtilsApiBukkit; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import java.util.HashMap; -import java.util.Objects; -import java.util.UUID; - -public class TimeChallengeEvent implements Listener { - - private final Challenges plugin = Challenges.getPlugin(); - private static final HashMap playerPlayTimes = new HashMap<>(); - private static final HashMap playerStartTimes = new HashMap<>(); - private CancellableTask updateTimesTask; - - @EventHandler - public void onActivation(TimerChangedEvent event) { - if (Objects.equals(Config.getString("event.type"), "time")) { - if (event.isRunning()) { - startUpdateTask(); - for (Player player : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { - updatePlayTime(player); - } - } else { - stopUpdateTask(); - } - } - } - - private void startUpdateTask() { - updateTimesTask = plugin.getScheduler().runGlobalAtFixedRate(() -> { - System.out.println("Update Times"); - for (Player player : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { - updatePlayTime(player); - } - }, 5 * 20L, 5 * 20L); - } - - private void stopUpdateTask() { - if (updateTimesTask != null) { - updateTimesTask.cancel(); - updateTimesTask = null; - } - } - - @EventHandler - public void onPlayerQuit(PlayerQuitEvent e) { - if (Objects.equals(Config.getString("event.type"), "time")) { - playerStartTimes.remove(e.getPlayer().getUniqueId()); - } - } - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent e) { - if (Objects.equals(Config.getString("event.type"), "time")) { - updatePlayTime(e.getPlayer()); - } - } - - private void updatePlayTime(Player player) { - OnlinePlayerData data = UtilsApiBukkit.getInstance().getPlayerData(player); - long currentTime = System.currentTimeMillis(); - if (plugin.getTimer().isRunning() && !data.isGloballyAfk() && data.getLastAction() >= currentTime - (2 * 60 * 1000)) { - long playTime = currentTime - playerStartTimes.getOrDefault(player.getUniqueId(), currentTime); - playerPlayTimes.put(player.getUniqueId(), playTime + playerPlayTimes.getOrDefault(player.getUniqueId(), 0L)); - playerStartTimes.put(player.getUniqueId(), currentTime); - } else { - playerStartTimes.remove(player.getUniqueId()); - } - } - - public static HashMap getPlayerPlayTimes() { - return playerPlayTimes; - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/forcequest/ForceQuestChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/forcequest/ForceQuestChallengeEvent.java deleted file mode 100644 index 67a342b..0000000 --- a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/forcequest/ForceQuestChallengeEvent.java +++ /dev/null @@ -1,1109 +0,0 @@ -package de.fanta.challenges.challenges.ChallengeEvents.forcequest; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.events.TimerChangedEvent; -import de.fanta.challenges.schedular.CancellableTask; -import de.fanta.challenges.scoreboard.ChallengePlayer; -import de.fanta.challenges.scoreboard.Scorable; -import de.fanta.challenges.scoreboard.ScoreManager; -import de.fanta.challenges.utils.ChatSkullAPI.ChatSkull; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.CoordsTargeter; -import de.fanta.challenges.utils.CubesideModUtils; -import de.fanta.challenges.utils.ItemUtils; -import de.iani.cubesideutils.StringUtil; -import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; -import de.iani.cubesideutils.bukkit.items.ItemGroups; -import net.kyori.adventure.bossbar.BossBar; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.TextComponent; -import net.kyori.adventure.text.format.TextDecoration; -import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.NamespacedKey; -import org.bukkit.OfflinePlayer; -import org.bukkit.Registry; -import org.bukkit.Sound; -import org.bukkit.block.Biome; -import org.bukkit.block.Block; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.entity.ArmorStand; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.event.entity.EntityDeathEvent; -import org.bukkit.event.entity.EntityDismountEvent; -import org.bukkit.event.entity.EntityPickupItemEvent; -import org.bukkit.event.entity.EntityPotionEffectEvent; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryDragEvent; -import org.bukkit.event.inventory.InventoryMoveItemEvent; -import org.bukkit.event.inventory.InventoryType; -import org.bukkit.event.player.PlayerArmorStandManipulateEvent; -import org.bukkit.event.player.PlayerBucketEntityEvent; -import org.bukkit.event.player.PlayerBucketFillEvent; -import org.bukkit.event.player.PlayerChangedWorldEvent; -import org.bukkit.event.player.PlayerDropItemEvent; -import org.bukkit.event.player.PlayerGameModeChangeEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerMoveEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.event.player.PlayerRespawnEvent; -import org.bukkit.event.player.PlayerSwapHandItemsEvent; -import org.bukkit.inventory.CraftingInventory; -import org.bukkit.inventory.ItemFlag; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.PlayerInventory; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.persistence.PersistentDataType; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; -import org.kitteh.vanish.event.VanishStatusChangeEvent; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Random; -import java.util.TreeMap; -import java.util.UUID; - -public class ForceQuestChallengeEvent implements Listener { - private static final Challenges plugin = Challenges.getPlugin(); - private static final Random random = new Random(); - - private static boolean running; - public static ItemStack skipItem; - public static int skipQuestCount = 3; - private final NamespacedKey skipKey = new NamespacedKey(plugin, "SkipQuest"); - - private static final ArrayList materials = new ArrayList<>(); - private static final ArrayList biomes = new ArrayList<>(); - private static final ArrayList entityTypes = new ArrayList<>(); - private static final ArrayList damageCauses = new ArrayList<>(); - private static final ArrayList potionEffectTypes = new ArrayList<>(); - - private static final HashMap itemByPlayerList = new HashMap<>(); - private static final HashMap biomeByPlayerList = new HashMap<>(); - private static final HashMap entityTypeByPlayerList = new HashMap<>(); - private static final HashMap damageCauseByPlayerList = new HashMap<>(); - private static final HashMap potionEffectTypeByPlayerList = new HashMap<>(); - private static final HashMap locationByPlayerList = new HashMap<>(); - private static final HashMap lastPlayerDamageCauseList = new HashMap<>(); - - private static final HashMap> playerMaterials = new HashMap<>(); - private static final HashMap> playerBiomes = new HashMap<>(); - private static final HashMap> playerEntityTypes = new HashMap<>(); - private static final HashMap> playerDamageCauses = new HashMap<>(); - private static final HashMap> playerPotionEffectTypes = new HashMap<>(); - - private static final ArrayList dismountAllowList = new ArrayList<>(); - - private static final HashMap bossBarMap = new HashMap<>(); - private final HashMap playerTasks = new HashMap<>(); - private static final HashMap playerQuest = new HashMap<>(); - - private final Collection initPlayers = new ArrayList<>(); - public static final Collection activeQuestTypes = new ArrayList<>(); - - @EventHandler - public void onActivation(TimerChangedEvent event) { - if (Objects.equals(Config.getString("event.type"), "forcequest")) { - if (event.isRunning()) { - if (activeQuestTypes.isEmpty()) { - plugin.getTimer().stopTimer(); - ChatUtil.sendErrorMessage(plugin.getCurrentEditor(), "Es sind keine Quests ausgewählt"); - return; - } - - skipItem = createSkipItem(); - - for (Material material : Material.values()) { - if (material.isItem() && !material.isAir() && !plugin.getNotAvailableMaterials().contains(material) && !material.name().contains("smithing_template".toUpperCase()) && !material.name().contains("sherd".toUpperCase())) { - materials.add(material); - } - } - - for (Biome biome : Biome.values()) { - if (biome != Biome.CUSTOM) { - biomes.add(biome); - } - } - - for (EntityType entityType : EntityType.values()) { - if (entityType.isAlive() && entityType != EntityType.ZOMBIE_HORSE && entityType != EntityType.GIANT && entityType != EntityType.ILLUSIONER && entityType != EntityType.PLAYER && entityType != EntityType.ARMOR_STAND) { - entityTypes.add(entityType); - } - } - - for (EntityDamageEvent.DamageCause damageCause : EntityDamageEvent.DamageCause.values()) { - if (damageCause != EntityDamageEvent.DamageCause.KILL && damageCause != EntityDamageEvent.DamageCause.WORLD_BORDER && damageCause != EntityDamageEvent.DamageCause.CUSTOM && damageCause != EntityDamageEvent.DamageCause.DRYOUT && damageCause != EntityDamageEvent.DamageCause.ENTITY_SWEEP_ATTACK && damageCause != EntityDamageEvent.DamageCause.MELTING && damageCause != EntityDamageEvent.DamageCause.SUICIDE) { - damageCauses.add(damageCause); - } - } - - for (PotionEffectType potionEffectType : Registry.EFFECT) { - if (!potionEffectType.isInstant() && potionEffectType != PotionEffectType.LUCK && potionEffectType != PotionEffectType.UNLUCK && potionEffectType != PotionEffectType.HEALTH_BOOST) { - potionEffectTypes.add(potionEffectType); - } - } - - for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { - initPlayer(pp); - } - - setRunning(true); - } else { - stopUpdateTask(); - - for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { - removeArmorStand(pp); - pp.setGameMode(GameMode.SPECTATOR); - } - - for (Scorable scorable : plugin.getScoreManager().getByPositon(1)) { - OfflinePlayer p = (Bukkit.getServer().getOfflinePlayer(scorable.getName())); - if (p.isOnline()) { - Component[] lines = {Component.empty(), Component.empty(), Component.empty(), Component.text(" " + p.getName(), ChatUtil.BLUE), Component.text(" hat " + plugin.getScoreManager().getScore(scorable) + " Aufgaben erledigt", ChatUtil.GREEN), Component.text(" und hat damit gewonnen!", ChatUtil.GREEN), Component.empty(), Component.empty()}; - ChatSkull.sendAll((Player) p, lines); - } else { - ChatUtil.sendBrodCastMessage(Component.text(scorable.getName(), ChatUtil.BLUE).append(Component.text(" hat ", ChatUtil.GREEN).append(Component.text(plugin.getScoreManager().getScore(scorable), ChatUtil.BLUE).append(Component.text(" Aufgaben erledigt und hat damit gewonnen!", ChatUtil.GREEN))))); - } - } - - setRunning(false); - } - } - } - - private void initPlayer(Player player) { - ChallengePlayer cp = new ChallengePlayer(player.getUniqueId()); - if (!initPlayers.contains(player.getUniqueId())) { - plugin.getScoreManager().join(cp); - playerMaterials.put(player.getUniqueId(), new ArrayList<>(materials)); - playerBiomes.put(player.getUniqueId(), new ArrayList<>(biomes)); - playerEntityTypes.put(player.getUniqueId(), new ArrayList<>(entityTypes)); - playerDamageCauses.put(player.getUniqueId(), new ArrayList<>(damageCauses)); - playerPotionEffectTypes.put(player.getUniqueId(), new ArrayList<>(potionEffectTypes)); - - player.getInventory().setItem(8, skipItem); - initPlayers.add(player.getUniqueId()); - } - - if (!playerQuest.containsKey(player.getUniqueId())) { - createNewQuest(player); - } - - addArmorStand(player); - updateArmorStand(player); - startUpdateTask(player); - } - - private static void createNewQuest(Player player) { - QuestType questType = getRandomQuest(player); - playerQuest.put(player.getUniqueId(), questType); - - switch (questType) { - case ForceItem -> { - ArrayList itemList = playerMaterials.get(player.getUniqueId()); - Material item = itemList.get(random.nextInt((itemList.size() - 1) + 1)); - itemByPlayerList.put(player.getUniqueId(), item); - - for (ItemStack stack : player.getInventory().getContents()) { - if (stack != null) { - if (selectItem(player, stack.getType())) { - return; - } - } - } - } - case ForceBiome -> { - ArrayList itemList = playerBiomes.get(player.getUniqueId()); - Biome biome = itemList.get(random.nextInt((itemList.size() - 1) + 1)); - biomeByPlayerList.put(player.getUniqueId(), biome); - - selectBiome(player, player.getWorld().getBiome(player.getLocation())); - } - case ForceMob -> { - ArrayList itemList = playerEntityTypes.get(player.getUniqueId()); - EntityType entityType = itemList.get(random.nextInt((itemList.size() - 1) + 1)); - entityTypeByPlayerList.put(player.getUniqueId(), entityType); - } - case ForceEffect -> { - ArrayList itemList = playerPotionEffectTypes.get(player.getUniqueId()); - PotionEffectType potionEffectType = itemList.get(random.nextInt((itemList.size() - 1) + 1)); - potionEffectTypeByPlayerList.put(player.getUniqueId(), potionEffectType); - - player.getActivePotionEffects().forEach(potionEffect -> selectEffect(player, potionEffect.getType())); - } - case ForceDeath -> { - ArrayList itemList = playerDamageCauses.get(player.getUniqueId()); - EntityDamageEvent.DamageCause damageCause = itemList.get(random.nextInt((itemList.size() - 1) + 1)); - damageCauseByPlayerList.put(player.getUniqueId(), damageCause); - } - case ForceLocation -> { - Location location = getRandomLocationAroundPlayer(player, 350); - locationByPlayerList.put(player.getUniqueId(), location); - CoordsTargeter.addLocation(player.getUniqueId(), location, false); - } - - } - } - - private static QuestType getRandomQuest(Player player) { - TreeMap PROBABILITY_MAP; - int MAX_PROBABILITY; - - PROBABILITY_MAP = new TreeMap<>(Comparator.reverseOrder()); - MAX_PROBABILITY = 0; - - for (QuestType questType : activeQuestTypes) { - PROBABILITY_MAP.put(MAX_PROBABILITY, questType); - MAX_PROBABILITY += questType.getProbability(); - } - - int result = random.nextInt(MAX_PROBABILITY); - - for (Map.Entry entry : PROBABILITY_MAP.entrySet()) { - if (entry.getKey() <= result) { - QuestType questType = entry.getValue(); - switch (questType) { - case ForceItem -> { - if (playerMaterials.get(player.getUniqueId()).isEmpty()) { - return getRandomQuest(player); - } - return entry.getValue(); - } - case ForceBiome -> { - if (playerBiomes.get(player.getUniqueId()).isEmpty()) { - return getRandomQuest(player); - } - return entry.getValue(); - } - case ForceMob -> { - if (playerEntityTypes.get(player.getUniqueId()).isEmpty()) { - return getRandomQuest(player); - } - return entry.getValue(); - } - case ForceEffect -> { - if (playerPotionEffectTypes.get(player.getUniqueId()).isEmpty()) { - return getRandomQuest(player); - } - return entry.getValue(); - } - case ForceDeath -> { - if (playerDamageCauses.get(player.getUniqueId()).isEmpty()) { - return getRandomQuest(player); - } - return entry.getValue(); - } - case ForceLocation -> { - return entry.getValue(); - } - } - } - } - - throw new IllegalStateException("Fehler bei Ermittlung eines zufälligen Quest Typs. Ermittelter wert: " + result + " | Maximaler Wert: " + MAX_PROBABILITY); - } - - public static Location getRandomLocationAroundPlayer(Player player, double radius) { - double angle = random.nextDouble() * 2 * Math.PI; - double distance = random.nextDouble() * radius; - - double xOffset = Math.cos(angle) * distance; - double zOffset = Math.sin(angle) * distance; - - Location playerLocation = player.getLocation(); - double newX = playerLocation.getX() + xOffset; - double newZ = playerLocation.getZ() + zOffset; - double newY = random.nextDouble(player.getWorld().getMinHeight() + 5, player.getWorld().getMaxHeight()); - - return new Location(player.getWorld(), newX, newY, newZ); - } - - @EventHandler - public void onGameModeSwitch(PlayerGameModeChangeEvent e) { - if (isRunning()) { - Player player = e.getPlayer(); - if (e.getNewGameMode() == GameMode.SPECTATOR) { - removeArmorStand(player); - } else if (!plugin.getVanish().isVanish(player)) { - addArmorStand(player); - } - } - } - - @EventHandler - public void onToggleVanish(VanishStatusChangeEvent e) { - if (isRunning()) { - Player player = e.getPlayer(); - if (e.isVanishing()) { - removeArmorStand(player); - } else if (player.getGameMode() != GameMode.SPECTATOR) { - if (plugin.getScoreManager().getScores().containsKey(new ChallengePlayer(player.getUniqueId()))) { - plugin.getScoreManager().join(new ChallengePlayer(player.getUniqueId())); - } - - addArmorStand(player); - - if (itemByPlayerList.get(player.getUniqueId()) == null) { - plugin.getScoreManager().join(new ChallengePlayer(player.getUniqueId())); - updateBossBar(); - player.getInventory().setItem(8, skipItem); - } - } - } - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent e) { - if (isRunning()) { - Player player = e.getPlayer(); - removeArmorStand(player); - stopUpdateTask(e.getPlayer()); - } - } - - @EventHandler(priority = EventPriority.MONITOR) - public void onPlayerJoin(PlayerJoinEvent e) { - if (isRunning()) { - Player player = e.getPlayer(); - if (plugin.getVanish().isVanish(player)) { - return; - } - - initPlayer(player); - - if (locationByPlayerList.containsKey(player.getUniqueId())) { - CoordsTargeter.addLocation(player.getUniqueId(), locationByPlayerList.get(player.getUniqueId()), false); - } - } - } - - @EventHandler - public void onChangeWorld(PlayerChangedWorldEvent e) { - if (isRunning()) { - Player player = e.getPlayer(); - - if (locationByPlayerList.containsKey(player.getUniqueId())) { - Location location = locationByPlayerList.get(player.getUniqueId()); - if (player.getLocation().getWorld() == location.getWorld()) { - CoordsTargeter.addLocation(player.getUniqueId(), location, false); - } else { - CoordsTargeter.removeLocation(player.getUniqueId()); - } - - } - } - } - - @EventHandler - public void onPickUpItem(EntityPickupItemEvent e) { - ItemStack itemStack = e.getItem().getItemStack(); - if (e.getEntity() instanceof Player player) { - if (isRunning()) { - selectItem(player, itemStack.getType()); - } - } - } - - @EventHandler - public void onBucketFill(PlayerBucketFillEvent e) { - ItemStack itemStack = e.getItemStack(); - Player player = e.getPlayer(); - if (isRunning()) { - if (itemStack != null) { - selectItem(player, itemStack.getType()); - } - } - } - - @EventHandler - public void onBucketChatchFish(PlayerBucketEntityEvent e) { - ItemStack itemStack = e.getEntityBucket(); - if (isRunning()) { - selectItem(e.getPlayer(), itemStack.getType()); - } - } - - @EventHandler - public void onBlockPlace(BlockPlaceEvent e) { - if (isRunning()) { - ItemStack stack = e.getItemInHand(); - ItemMeta meta = stack.getItemMeta(); - - if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { - e.setCancelled(true); - } - } - } - - @EventHandler - public void onDropItem(PlayerDropItemEvent e) { - if (isRunning()) { - ItemStack stack = e.getItemDrop().getItemStack(); - ItemMeta meta = stack.getItemMeta(); - - if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { - e.setCancelled(true); - } - } - } - - @EventHandler - public void onSwapItem(PlayerSwapHandItemsEvent e) { - if (!isRunning()) { - return; - } - Player p = e.getPlayer(); - ItemStack stack = p.getInventory().getItemInMainHand(); - ItemMeta meta = stack.getItemMeta(); - if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { - e.setCancelled(true); - } - } - - @EventHandler - public void onItemMove(InventoryMoveItemEvent e) { - if (!isRunning()) { - return; - } - ItemStack stack = e.getItem(); - ItemMeta meta = stack.getItemMeta(); - if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { - e.setCancelled(true); - } - } - - @EventHandler - public void onInventoryClick(InventoryClickEvent e) { - if (!isRunning()) { - return; - } - ItemStack stack = e.getCurrentItem(); - ItemStack stackInHand = e.getCursor(); - Player player = (Player) e.getWhoClicked(); - ItemMeta meta = null; - ItemMeta metaInHand; - - if (stack != null) { - meta = stack.getItemMeta(); - } - - metaInHand = stackInHand.getItemMeta(); - - if (e.getClick() == ClickType.NUMBER_KEY) { - int slot = e.getHotbarButton(); - if (slot >= 0 && slot < 9) { - if (!e.getWhoClicked().getInventory().equals(e.getInventory())) { - ItemStack swap = e.getWhoClicked().getInventory().getItem(slot); - if (swap != null) { - ItemMeta swapItemMeta = swap.getItemMeta(); - if (swapItemMeta != null && swapItemMeta.getPersistentDataContainer().has(skipKey)) { - e.setCancelled(true); - } - } - } - } - } - - if (meta != null && meta.getPersistentDataContainer().has(skipKey) || metaInHand != null && metaInHand.getPersistentDataContainer().has(skipKey)) { - switch (e.getAction()) { - case NOTHING, PICKUP_ALL, PICKUP_HALF, PICKUP_ONE, PICKUP_SOME, PLACE_ALL, PLACE_ONE, PLACE_SOME, - SWAP_WITH_CURSOR, COLLECT_TO_CURSOR, HOTBAR_SWAP -> { - if (e.getClickedInventory() != player.getInventory()) { - e.setCancelled(true); - } - } - case MOVE_TO_OTHER_INVENTORY -> { - if (!(e.getInventory() instanceof CraftingInventory)) { - e.setCancelled(true); - } - } - default -> { - e.setCancelled(true); - return; - } - } - } - - ItemStack itemStack = e.getCurrentItem(); - if (itemStack != null && itemStack.getType() != Material.AIR) { - selectItem((Player) e.getWhoClicked(), itemStack.getType()); - } - } - - @EventHandler - public void onItemDrag(InventoryDragEvent e) { - if (!isRunning()) { - return; - } - ItemStack stack = e.getCursor(); - ItemMeta stackMeta = null; - ItemStack oldStack = e.getOldCursor(); - ItemMeta oldStackMeta = null; - if (stack != null) { - if (stack.getItemMeta() != null) { - stackMeta = stack.getItemMeta(); - } - } - - if (oldStack.getItemMeta() != null) { - oldStackMeta = oldStack.getItemMeta(); - } - - if (stackMeta != null && stackMeta.getPersistentDataContainer().has(skipKey) || oldStackMeta != null && oldStackMeta.getPersistentDataContainer().has(skipKey)) { - if (!(e.getInventory() instanceof CraftingInventory)) { - e.setCancelled(true); - } - } - } - - @EventHandler(priority = EventPriority.LOWEST) - public void onPlayerInteractEntity(PlayerArmorStandManipulateEvent e) { - Player p = e.getPlayer(); - ItemStack stack = p.getInventory().getItemInMainHand(); - ItemMeta meta = stack.getItemMeta(); - if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { - e.setCancelled(true); - } - } - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent e) { - if (isRunning()) { - ItemStack[] inv = e.getEntity().getInventory().getContents(); - for (ItemStack stack : inv) { - if (stack != null) { - ItemMeta meta = stack.getItemMeta(); - if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { - e.getItemsToKeep().add(stack); - e.getDrops().remove(stack); - } - } - } - removeArmorStand(e.getEntity()); - - - Player player = e.getPlayer(); - QuestType questType = playerQuest.get(player.getUniqueId()); - if (questType == QuestType.ForceDeath) { - EntityDamageEvent.DamageCause damageCause = lastPlayerDamageCauseList.get(player.getUniqueId()); - if (damageCause != null) { - selectDeath(player, damageCause); - } - } - } - } - - @EventHandler - public void onRespawn(PlayerRespawnEvent e) { - if (isRunning()) { - Player player = e.getPlayer(); - plugin.getScheduler().runDelayedOnEntity(player, () -> addArmorStand(player), 1L); - - PlayerInventory inventory = e.getPlayer().getInventory(); - int countSkipper = 0; - if (!inventory.isEmpty()) { - for (ItemStack stack : inventory) { - if (stack != null && stack.getItemMeta() != null && stack.getItemMeta().getPersistentDataContainer().has(skipKey)) { - countSkipper = countSkipper + stack.getAmount(); - } - - if (countSkipper >= 64) { - break; - } - } - - if (countSkipper > 0) { - ItemStack copySkipper = skipItem.clone(); - copySkipper.setAmount(countSkipper); - inventory.removeItem(copySkipper); - inventory.setItem(8, copySkipper); - } - } - } - } - - @EventHandler - public void onClick(PlayerInteractEvent e) { - if (isRunning()) { - if (e.getAction() == Action.RIGHT_CLICK_BLOCK || e.getAction() == Action.RIGHT_CLICK_AIR) { - Player p = e.getPlayer(); - ItemStack stack = p.getInventory().getItemInMainHand(); - ItemMeta meta = stack.getItemMeta(); - if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { - if (e.getClickedBlock() != null && e.getClickedBlock().getType() == Material.DECORATED_POT) { - e.setCancelled(true); - } - new AcceptGUI(e.getPlayer()).open(); - } - } - } - - } - - @EventHandler - public void onDismountEntity(EntityDismountEvent e) { - if (isRunning()) { - if (e.getDismounted() instanceof Player player) { - if (!dismountAllowList.contains(player)) { - e.setCancelled(true); - } - } - } - } - - @EventHandler - public void onMove(PlayerMoveEvent e) { - if (!isRunning()) { - return; - } - - Player player = e.getPlayer(); - QuestType questType = playerQuest.get(player.getUniqueId()); - if (questType == QuestType.ForceLocation) { - selectLocation(player, player.getLocation()); - } - - if (questType == QuestType.ForceBiome) { - if (!e.getTo().equals(e.getFrom())) { - selectBiome(player, player.getWorld().getBiome(player.getLocation())); - } - } - } - - @EventHandler - public void onEntityDeath(EntityDeathEvent e) { - if (!isRunning()) { - return; - } - - Player player = e.getEntity().getKiller(); - if (player == null) { - return; - } - QuestType questType = playerQuest.get(player.getUniqueId()); - if (questType == QuestType.ForceMob) { - selectMob(player, e.getEntity().getType()); - } - } - - @EventHandler - public void onEffect(EntityPotionEffectEvent e) { - if (!isRunning()) { - return; - } - - if (!(e.getEntity() instanceof Player player)) { - return; - } - - QuestType questType = playerQuest.get(player.getUniqueId()); - if (questType == QuestType.ForceEffect) { - PotionEffect effect = e.getNewEffect(); - if (effect != null) { - selectEffect(player, effect.getType()); - } - } - } - - @EventHandler - public void onPlayerDamage(EntityDamageEvent e) { - if (!isRunning()) { - return; - } - - if (!(e.getEntity() instanceof Player player)) { - return; - } - - QuestType questType = playerQuest.get(player.getUniqueId()); - if (questType == QuestType.ForceDeath) { - lastPlayerDamageCauseList.put(player.getUniqueId(), e.getCause()); - } - } - - public void startUpdateTask(Player player) { - playerTasks.put(player.getUniqueId(), plugin.getScheduler().runOnEntityAtFixedRate(player, () -> tick(player), 1L, 1L)); - } - - public void stopUpdateTask() { - for (CancellableTask cancellableTask : playerTasks.values()) { - if (cancellableTask != null) { - cancellableTask.cancel(); - } - } - playerTasks.clear(); - } - - public void stopUpdateTask(Player player) { - CancellableTask cancellableTask = playerTasks.get(player.getUniqueId()); - cancellableTask.cancel(); - playerTasks.remove(player.getUniqueId()); - } - - private void tick(Player player) { - if (player.getGameMode() == GameMode.SPECTATOR || plugin.getVanish().isVanish(player)) { - return; - } - - Location location = player.getLocation(); - Block block = location.getBlock(); - if (block.getType() == Material.NETHER_PORTAL || block.getType() == Material.END_PORTAL || block.getType() == Material.END_GATEWAY) { - removeArmorStand(player); - } else { - if (player.getPassengers().isEmpty()) { - addArmorStand(player); - } - } - - if (!player.getPassengers().isEmpty()) { - for (Entity entity : player.getPassengers()) { - entity.setRotation(location.getYaw(), location.getPitch()); - } - if (location.getPitch() < -50) { - for (Entity entity : player.getPassengers()) { - player.hideEntity(plugin, entity); - } - } else { - for (Entity entity : player.getPassengers()) { - player.showEntity(plugin, entity); - } - } - } - } - - public static void mountArmorStand(Player player) { - if (player.getPassengers().isEmpty()) { - ArmorStand stand = (ArmorStand) player.getWorld().spawnEntity(player.getLocation(), EntityType.ARMOR_STAND); - stand.setMarker(true); - stand.setInvisible(true); - stand.setInvulnerable(true); - stand.setCollidable(false); - stand.setPersistent(false); - stand.setRemoveWhenFarAway(true); - player.addPassenger(stand); - } - } - - private static void updateArmorStand(Player player) { - QuestType questType = playerQuest.get(player.getUniqueId()); - ItemStack stack = new ItemStack(Material.BARRIER); - switch (questType) { - case ForceItem -> stack = new ItemStack(itemByPlayerList.get(player.getUniqueId())); - case ForceBiome -> stack = new ItemStack(Material.GRASS_BLOCK); - case ForceMob -> { - Material material = ItemGroups.getSpawnEggForEntity(entityTypeByPlayerList.get(player.getUniqueId())); - stack = material != null ? new ItemStack(material) : new ItemStack(Material.PIG_SPAWN_EGG); - } - case ForceEffect -> stack = new ItemStack(Material.LINGERING_POTION); - case ForceDeath -> stack = new ItemStack(Material.NETHERITE_AXE); - case ForceLocation -> stack = new ItemStack(Material.COMPASS); - } - - - if (!player.getPassengers().isEmpty()) { - for (Entity entity : player.getPassengers()) { - if (entity instanceof ArmorStand stand) { - stand.getEquipment().setHelmet(stack); - } - } - updateBossBar(); - } - } - - private static boolean selectItem(Player player, Material pickupItem) { - Material playerItem = itemByPlayerList.get(player.getUniqueId()); - if (pickupItem.equals(playerItem)) { - itemByPlayerList.remove(player.getUniqueId()); - ArrayList itemList = playerMaterials.get(player.getUniqueId()); - itemList.remove(pickupItem); - playerMaterials.put(player.getUniqueId(), itemList); - TextComponent textComponent = Component.text("Item: ").color(ChatUtil.GREEN).append(ChatUtil.getTrasnlateItemComponent(pickupItem).color(ChatUtil.BLUE)).append(Component.text(" wurde Registriert").color(ChatUtil.GREEN)); - ChatUtil.sendMessage(player, textComponent); - finishQuest(player); - return true; - } - return false; - } - - private static void selectBiome(Player player, Biome biome) { - Biome playerBiome = biomeByPlayerList.get(player.getUniqueId()); - if (biome.equals(playerBiome)) { - biomeByPlayerList.remove(player.getUniqueId()); - ArrayList biomeList = playerBiomes.get(player.getUniqueId()); - biomeList.remove(biome); - playerBiomes.put(player.getUniqueId(), biomeList); - TextComponent textComponent = Component.text("Biom: ").color(ChatUtil.GREEN).append(Component.translatable(biome.translationKey()).color(ChatUtil.BLUE)).append(Component.text(" wurde Registriert").color(ChatUtil.GREEN)); - ChatUtil.sendMessage(player, textComponent); - finishQuest(player); - } - } - - private static void selectMob(Player player, EntityType entityType) { - EntityType playerEntityType = entityTypeByPlayerList.get(player.getUniqueId()); - if (entityType.equals(playerEntityType)) { - entityTypeByPlayerList.remove(player.getUniqueId()); - ArrayList entityTypeList = playerEntityTypes.get(player.getUniqueId()); - entityTypeList.remove(entityType); - playerEntityTypes.put(player.getUniqueId(), entityTypeList); - TextComponent textComponent = Component.text("Mob: ").color(ChatUtil.GREEN).append(Component.translatable(entityType.translationKey()).color(ChatUtil.BLUE)).append(Component.text(" wurde Registriert").color(ChatUtil.GREEN)); - ChatUtil.sendMessage(player, textComponent); - finishQuest(player); - } - } - - private static void selectEffect(Player player, PotionEffectType potionEffectType) { - PotionEffectType playerPotionEffectType = potionEffectTypeByPlayerList.get(player.getUniqueId()); - if (potionEffectType.equals(playerPotionEffectType)) { - potionEffectTypeByPlayerList.remove(player.getUniqueId()); - ArrayList potionEffectTypeList = playerPotionEffectTypes.get(player.getUniqueId()); - potionEffectTypeList.remove(potionEffectType); - playerPotionEffectTypes.put(player.getUniqueId(), potionEffectTypeList); - TextComponent textComponent = Component.text("Effect: ").color(ChatUtil.GREEN).append(Component.translatable(potionEffectType.translationKey()).color(ChatUtil.BLUE)).append(Component.text(" wurde Registriert").color(ChatUtil.GREEN)); - ChatUtil.sendMessage(player, textComponent); - finishQuest(player); - } - } - - private static void selectDeath(Player player, EntityDamageEvent.DamageCause damageCause) { - EntityDamageEvent.DamageCause playerDamageCause = damageCauseByPlayerList.get(player.getUniqueId()); - if (damageCause.equals(playerDamageCause)) { - damageCauseByPlayerList.remove(player.getUniqueId()); - ArrayList damageCauseList = playerDamageCauses.get(player.getUniqueId()); - damageCauseList.remove(damageCause); - playerDamageCauses.put(player.getUniqueId(), damageCauseList); - ChatUtil.sendMessage(player, Component.text("Death: ", ChatUtil.GREEN).append(Component.text(StringUtil.capitalizeFirstLetter(damageCause.name(), true), ChatUtil.BLUE).append(Component.text(" wurde Registriert", ChatUtil.GREEN)))); - finishQuest(player); - } - } - - private static void selectLocation(Player player, Location location) { - Location playerLocation = locationByPlayerList.get(player.getUniqueId()); - if (location.clone().toCenterLocation().distance(playerLocation.clone().toCenterLocation()) <= 1) { - Block block = location.getBlock(); - String locationString = "X: " + block.getX() + ", Y: " + block.getY() + ", Z: " + block.getZ(); - ChatUtil.sendMessage(player, Component.text("Location: ", ChatUtil.GREEN).append(Component.text(locationString, ChatUtil.BLUE).append(Component.text(" wurde Registriert", ChatUtil.GREEN)))); - CoordsTargeter.removeLocation(player.getUniqueId()); - finishQuest(player); - } - } - - private static void finishQuest(Player player) { - plugin.getScoreManager().updateScore(new ChallengePlayer(player.getUniqueId()), 1); - CubesideModUtils.sendFlashScreenToCubesideMod(plugin, player, 50, ChatUtil.GREEN); - player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 1.0F); - createNewQuest(player); - addArmorStand(player); - updateArmorStand(player); - updateBossBar(); - } - - private static void updateBossBar() { - ScoreManager scoreManager = plugin.getScoreManager(); - for (Player player : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { - TextComponent bossBarTitle = Component.text("Es ist ein Fehler aufgetreten :(").color(ChatUtil.RED).decoration(TextDecoration.ITALIC, false); - QuestType questType = playerQuest.get(player.getUniqueId()); - switch (questType) { - case ForceItem -> { - Material material = itemByPlayerList.get(player.getUniqueId()); - if (material != null) { - Component component = Component.empty().append(ChatUtil.getTrasnlateItemComponent(material)); - - bossBarTitle = getBossBarTitle(">> ForceItem: ", component, scoreManager.getPosition(new ChallengePlayer(player.getUniqueId()))); - } - } - case ForceBiome -> { - Biome biome = biomeByPlayerList.get(player.getUniqueId()); - if (biome != null) { - bossBarTitle = getBossBarTitle(">> ForceBiome: ", Component.translatable(biome.translationKey()), scoreManager.getPosition(new ChallengePlayer(player.getUniqueId()))); - } - } - case ForceMob -> { - EntityType entityType = entityTypeByPlayerList.get(player.getUniqueId()); - if (entityType != null) { - bossBarTitle = getBossBarTitle(">> ForceMob: ", Component.translatable(entityType.translationKey()), scoreManager.getPosition(new ChallengePlayer(player.getUniqueId()))); - } - } - case ForceEffect -> { - PotionEffectType potionEffectType = potionEffectTypeByPlayerList.get(player.getUniqueId()); - if (potionEffectType != null) { - bossBarTitle = getBossBarTitle(">> ForceEffect: ", Component.translatable(potionEffectType.translationKey()), scoreManager.getPosition(new ChallengePlayer(player.getUniqueId()))); - } - } - case ForceDeath -> { - EntityDamageEvent.DamageCause damageCause = damageCauseByPlayerList.get(player.getUniqueId()); - if (damageCause != null) { - bossBarTitle = getBossBarTitle(">> ForceDeath: ", Component.translatable(StringUtil.capitalizeFirstLetter(damageCause.name(), true)), scoreManager.getPosition(new ChallengePlayer(player.getUniqueId()))); - } - } - case ForceLocation -> { - Location location = locationByPlayerList.get(player.getUniqueId()); - if (location != null) { - Block block = location.getBlock(); - String locationString = "Welt: " + StringUtil.capitalizeFirstLetter(location.getWorld().getName(), true) + " X: " + block.getX() + ", Y: " + block.getY() + ", Z: " + block.getZ(); - bossBarTitle = getBossBarTitle(">> ForceLocation: ", Component.translatable(locationString), scoreManager.getPosition(new ChallengePlayer(player.getUniqueId()))); - } - } - } - - BossBar bossBar = bossBarMap.computeIfAbsent(player.getUniqueId(), bossPlayer -> { - BossBar newBossBar = BossBar.bossBar(Component.newline(), 1.0f, BossBar.Color.GREEN, BossBar.Overlay.PROGRESS); - newBossBar.addViewer(player); - return newBossBar; - }); - - bossBar.addViewer(player); - bossBar.name(bossBarTitle); - } - } - - private static TextComponent getBossBarTitle(String title, Component name, int pos) { - return Component.text(title).color(ChatUtil.GREEN).append(name.color(ChatUtil.BLUE).append(Component.text(" << | Position: ").color(ChatUtil.GREEN)).append(Component.text(pos).color(ChatUtil.BLUE))); - } - - public void removeArmorStand(Player player) { - if (!player.getPassengers().isEmpty()) { - dismountAllowList.add(player); - for (Entity entity : player.getPassengers()) { - entity.remove(); - } - dismountAllowList.remove(player); - } - } - - public static void addArmorStand(Player player) { - plugin.getScheduler().runDelayedOnEntity(player, () -> { - if (!player.isDead()) { - mountArmorStand(player); - updateArmorStand(player); - } - }, 1L); - } - - public ItemStack createSkipItem() { - ItemStack stack = new ItemStack(Material.STRUCTURE_VOID, skipQuestCount); - ItemMeta meta = stack.getItemMeta(); - List lorelist = new ArrayList<>(); - meta.displayName(Component.text("Skip Quest", ChatUtil.GREEN)); - meta.getPersistentDataContainer().set(skipKey, PersistentDataType.STRING, "SkipQuest"); - lorelist.add(Component.text("Rechtsklick um die Aktuelle Quest zu Skippen.", ChatUtil.GREEN)); - meta.lore(lorelist); - meta.addEnchant(Enchantment.VANISHING_CURSE, 1, true); - meta.addItemFlags(ItemFlag.HIDE_ENCHANTS); - stack.setItemMeta(meta); - - return stack; - } - - private static boolean isRunning() { - return running; - } - - private static void setRunning(boolean run) { - running = run; - } - - public static class AcceptGUI extends AbstractWindow { - private static final int YES_INDEX = 1; - private static final int NO_INDEX = 3; - - public AcceptGUI(Player player) { - super(player, Bukkit.createInventory(player, InventoryType.HOPPER, plugin.getGuiPrefix().append(Component.text(" >> Skip Quest?")))); - } - - @Override - public void onItemClicked(InventoryClickEvent event) { - Player player = getPlayer(); - if (!mayAffectThisInventory(event)) { - return; - } - - event.setCancelled(true); - if (!getInventory().equals(event.getClickedInventory())) { - return; - } - - int slot = event.getSlot(); - if (slot == YES_INDEX) { - - QuestType questType = playerQuest.get(player.getUniqueId()); - switch (questType) { - case ForceItem -> { - Material playerItem = itemByPlayerList.get(player.getUniqueId()); - List stackList = new ArrayList<>(); - stackList.add(new ItemStack(playerItem)); - Collection dropList = player.getInventory().addItem(stackList.toArray(new ItemStack[0])).values(); - for (ItemStack itemStack : dropList) { - player.getLocation().getWorld().dropItem(player.getLocation(), itemStack); - } - selectItem(player, playerItem); - } - case ForceBiome -> { - Biome playerBiome = biomeByPlayerList.get(player.getUniqueId()); - selectBiome(player, playerBiome); - } - case ForceMob -> { - EntityType entityType = entityTypeByPlayerList.get(player.getUniqueId()); - selectMob(player, entityType); - } - case ForceEffect -> { - PotionEffectType effectType = potionEffectTypeByPlayerList.get(player.getUniqueId()); - selectEffect(player, effectType); - } - case ForceDeath -> { - EntityDamageEvent.DamageCause damageCause = damageCauseByPlayerList.get(player.getUniqueId()); - selectDeath(player, damageCause); - } - case ForceLocation -> { - Location location = locationByPlayerList.get(player.getUniqueId()); - selectLocation(player, location); - } - } - - - ItemStack skipStack = skipItem.clone(); - skipStack.setAmount(1); - player.getInventory().removeItem(skipStack); - player.closeInventory(); - } - if (slot == NO_INDEX) { - player.closeInventory(); - } - } - - @Override - protected void rebuildInventory() { - for (int i = 0; i < getInventory().getSize(); i++) { - ItemStack item; - switch (i) { - case YES_INDEX -> - item = ItemUtils.createGuiItem(Material.LIME_CONCRETE, Component.text("Ja", ChatUtil.GREEN), true); - case NO_INDEX -> - item = ItemUtils.createGuiItem(Material.RED_CONCRETE, Component.text("Nein", ChatUtil.RED), true); - - default -> item = ItemUtils.EMPTY_ICON; - } - this.getInventory().setItem(i, item); - } - } - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/forcequest/QuestType.java b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/forcequest/QuestType.java deleted file mode 100644 index e4e54d6..0000000 --- a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/forcequest/QuestType.java +++ /dev/null @@ -1,20 +0,0 @@ -package de.fanta.challenges.challenges.ChallengeEvents.forcequest; - -public enum QuestType { - ForceItem(45), - ForceBiome(25), - ForceMob(30), - ForceEffect(25), - ForceDeath(15), - ForceLocation(35); - - private final int probability; - - QuestType(int probability) { - this.probability = probability; - } - - public int getProbability() { - return probability; - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeGoals.java b/src/main/java/de/fanta/challenges/challenges/ChallengeGoals.java deleted file mode 100644 index 97e418c..0000000 --- a/src/main/java/de/fanta/challenges/challenges/ChallengeGoals.java +++ /dev/null @@ -1,60 +0,0 @@ -package de.fanta.challenges.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.ServerType; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.event.ClickEvent; -import net.kyori.adventure.text.event.HoverEvent; -import net.kyori.adventure.text.format.Style; -import net.kyori.adventure.text.format.TextDecoration; -import org.bukkit.Bukkit; -import org.bukkit.entity.EntityType; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDeathEvent; - -import java.util.Objects; - -public class ChallengeGoals implements Listener { - - private final Challenges plugin = Challenges.getPlugin(); - - @EventHandler - public void GoalDeath(EntityDeathEvent e) { - if (Objects.equals(Config.getString("event.type"), "nix") && plugin.getServerType() != ServerType.ADVENTURE) { - EntityType entityType = EntityType.valueOf(Config.getString("goal").toUpperCase()); - if (e.getEntity().getType() == entityType) { - plugin.getTimer().stopTimer(); - ChatUtil.sendBrodCastMessage(Component.text("ABCDEFGHIJKLMNOPQRSTUVWXYZ", Style.style(ChatUtil.GREEN, TextDecoration.BOLD, TextDecoration.OBFUSCATED))); - ChatUtil.sendBrodCastMessage(Component.empty()); - ChatUtil.sendBrodCastMessage(Component.empty()); - ChatUtil.sendBrodCastMessage(Component.empty()); - if (e.getEntity().customName() != null) { - ChatUtil.sendBrodCastMessage(Component.text(" >> ", ChatUtil.ORANGE).append(e.getEntity().name().style(Style.style(ChatUtil.BLUE, TextDecoration.BOLD)).append(Component.text(" wurde besiegt.", ChatUtil.GREEN)))); - } else { - ChatUtil.sendBrodCastMessage(Component.text(" >> ", ChatUtil.ORANGE).append(Component.text("Der ", ChatUtil.GREEN).append(Component.translatable(e.getEntityType().translationKey(), Style.style(ChatUtil.BLUE, TextDecoration.BOLD)).append(Component.text(" wurde besiegt.", ChatUtil.GREEN))))); - } - ChatUtil.sendBrodCastMessage(Component.text(" >> ", ChatUtil.ORANGE).append(Component.text("Benötigte Zeit: ", ChatUtil.GREEN).append(plugin.getTimer().formatTime(ChatUtil.BLUE).append(Component.text("!", ChatUtil.GREEN))))); - ChatUtil.sendBrodCastMessage(Component.text(" >> ", ChatUtil.ORANGE).append(Component.text("Seed: ", ChatUtil.GREEN).append(Component.text(Bukkit.getWorlds().getFirst().getSeed(), Style.style(ChatUtil.BLUE, TextDecoration.BOLD)).hoverEvent(HoverEvent.showText(Component.text("Klicken zum Kopieren"))).clickEvent(ClickEvent.copyToClipboard(String.valueOf(Bukkit.getWorlds().getFirst().getSeed())))))); - if (e.getEntity().getType() == EntityType.ENDER_DRAGON) { - if (!Config.getBoolean("editsettings")) { - if (!Config.getBoolean("editsettings")) { - if (!plugin.isCubesideStatisticsInstalled()) { - return; - } - plugin.getStatistics().saveSpeedRun(); - ChatUtil.sendBrodCastMessage(Component.text(" >> ", ChatUtil.ORANGE).append(Component.text("SpeedRun wurde gespeichert. Deine Zeit: ", ChatUtil.GREEN).append(plugin.getTimer().formatTime(ChatUtil.BLUE)))); - } - - } - } - ChatUtil.sendBrodCastMessage(Component.empty()); - ChatUtil.sendBrodCastMessage(Component.empty()); - ChatUtil.sendBrodCastMessage(Component.empty()); - ChatUtil.sendBrodCastMessage(Component.text("ABCDEFGHIJKLMNOPQRSTUVWXYZ", Style.style(ChatUtil.GREEN, TextDecoration.BOLD, TextDecoration.OBFUSCATED))); - } - } - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/ClearInventoryByDamageChallenge.java b/src/main/java/de/fanta/challenges/challenges/ClearInventoryByDamageChallenge.java deleted file mode 100644 index e7954c5..0000000 --- a/src/main/java/de/fanta/challenges/challenges/ClearInventoryByDamageChallenge.java +++ /dev/null @@ -1,33 +0,0 @@ -package de.fanta.challenges.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.CubesideModUtils; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDamageEvent; - -public class ClearInventoryByDamageChallenge implements Listener { - - private final Challenges plugin = Challenges.getPlugin(); - - @EventHandler - public void onDamageclear(EntityDamageEvent e) { - if (e.getEntity() instanceof Player p) { - if (Config.getBoolean("clinvdmg")) { - if (plugin.getTimer().isRunning() && p.getGameMode() == GameMode.SURVIVAL && !plugin.getVanish().isVanish(p)) { - for (Player pp : Bukkit.getOnlinePlayers()) { - pp.getInventory().clear(); - CubesideModUtils.sendFlashScreenToCubesideMod(plugin, pp, 50, ChatUtil.RED); - ChatUtil.sendMessage(pp, p.name().color(ChatUtil.BLUE).append(Component.text(" hat Schaden bekommen! Alle Inventare wurden geleert!", ChatUtil.ORANGE))); - } - } - } - } - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/CraftingTableChallenge.java b/src/main/java/de/fanta/challenges/challenges/CraftingTableChallenge.java deleted file mode 100644 index 23aa5b0..0000000 --- a/src/main/java/de/fanta/challenges/challenges/CraftingTableChallenge.java +++ /dev/null @@ -1,29 +0,0 @@ -package de.fanta.challenges.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.Config; -import org.bukkit.Material; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.player.PlayerInteractEvent; - -public class CraftingTableChallenge implements Listener { - - private final Challenges plugin = Challenges.getPlugin(); - - @EventHandler - public void onInteractWorlkbench(PlayerInteractEvent e) { - if (e.getAction() == Action.RIGHT_CLICK_BLOCK) { - if (plugin.getTimer().isRunning()) { - if (e.getClickedBlock() != null) { - if (e.getClickedBlock().getType() == Material.CRAFTING_TABLE) { - if (!Config.getBoolean("craftingtable")) { - e.setCancelled(true); - } - } - } - } - } - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/FloorIsLavaChallenge.java b/src/main/java/de/fanta/challenges/challenges/FloorIsLavaChallenge.java deleted file mode 100644 index f33d8b4..0000000 --- a/src/main/java/de/fanta/challenges/challenges/FloorIsLavaChallenge.java +++ /dev/null @@ -1,68 +0,0 @@ -package de.fanta.challenges.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.Config; -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.player.PlayerMoveEvent; - -import java.util.ArrayList; - -public class FloorIsLavaChallenge implements Listener { - private static final Challenges plugin = Challenges.getPlugin(); - public static final ArrayList LAVA_BLOCKS = new ArrayList<>(); - - @EventHandler - public void onPlayerMove(PlayerMoveEvent e) { - Player p = e.getPlayer(); - if (plugin.getTimer().isRunning() && p.getGameMode() == GameMode.SURVIVAL && !plugin.getVanish().isVanish(p)) { - if (Config.getBoolean("lavafloor")) { - Location oldLoc = e.getFrom(); - Location newLoc = e.getTo(); - int oldx = oldLoc.getBlockX(); - int oldy = oldLoc.getBlockY(); - int oldz = oldLoc.getBlockZ(); - int newx = newLoc.getBlockX(); - int newy = newLoc.getBlockY(); - int newz = newLoc.getBlockZ(); - if (newx != oldx || newy != oldy || newz != oldz) { - Block b = p.getLocation().subtract(0, 1, 0).getBlock(); - plugin.getScheduler().runLocalDelayed(b.getLocation(), () -> { - if (!b.isPassable() && !LAVA_BLOCKS.contains(b)) { - LAVA_BLOCKS.add(b); - setMagma(b, b.getType()); - } - }, 1L); - } - } - } - } - - public static void setMagma(Block b, Material old) { - plugin.getScheduler().runLocalDelayed(b.getLocation(), () -> { - b.setType(Material.MAGMA_BLOCK); - setLava(b, old); - }, 60L); - } - - public static void setLava(Block b, Material old) { - plugin.getScheduler().runLocalDelayed(b.getLocation(), () -> { - b.setType(Material.LAVA); - setOld(b, old); - }, 100L); - } - - public static void setOld(Block b, Material old) { - plugin.getScheduler().runLocalDelayed(b.getLocation(), () -> { - if (b.getType() == Material.LAVA || b.getType() == Material.OBSIDIAN || b.getType() == Material.COBBLESTONE || b.getType() == Material.STONE) { - b.setType(old); - } - LAVA_BLOCKS.remove(b); - }, 200L); - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/IceRunnerChallenge.java b/src/main/java/de/fanta/challenges/challenges/IceRunnerChallenge.java deleted file mode 100644 index 8f306de..0000000 --- a/src/main/java/de/fanta/challenges/challenges/IceRunnerChallenge.java +++ /dev/null @@ -1,59 +0,0 @@ -package de.fanta.challenges.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.Config; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerMoveEvent; -import org.bukkit.event.player.PlayerToggleSneakEvent; - -import java.util.HashMap; - -public class IceRunnerChallenge implements Listener { - - public final Challenges plugin = Challenges.getPlugin(); - - private final HashMap iceRunnerEnable = new HashMap<>(); - - @EventHandler - public void onMove(PlayerMoveEvent e) { - Player p = e.getPlayer(); - if (Config.getBoolean("icerunner") && plugin.getTimer().isRunning() && !plugin.getVanish().isVanish(p)) { - if (iceRunnerEnable.get(p) != null) { - if (iceRunnerEnable.get(p)) { - Location playerloc = p.getLocation(); - World world = playerloc.getWorld(); - for (int x = playerloc.getBlockX() - 2; x <= playerloc.getBlockX() + 2; x++) { - for (int z = playerloc.getBlockZ() - 2; z <= playerloc.getBlockZ() + 2; z++) { - world.getBlockAt(x, playerloc.getBlockY() - 1, z).setType(Material.BLUE_ICE); - } - } - } - } else { - iceRunnerEnable.put(p, true); - } - } - } - - @EventHandler - public void onSneak(PlayerToggleSneakEvent e) { - Player p = e.getPlayer(); - if (e.isSneaking()) { - if (iceRunnerEnable.get(p) != null) { - if (Config.getBoolean("icerunner") && plugin.getTimer().isRunning() && !plugin.getVanish().isVanish(p)) { - if (iceRunnerEnable.get(p)) { - iceRunnerEnable.put(p, false); - } else { - iceRunnerEnable.put(p, true); - } - } - } else { - iceRunnerEnable.put(p, true); - } - } - } -} \ No newline at end of file diff --git a/src/main/java/de/fanta/challenges/challenges/MLGChallenge.java b/src/main/java/de/fanta/challenges/challenges/MLGChallenge.java deleted file mode 100644 index 43539e5..0000000 --- a/src/main/java/de/fanta/challenges/challenges/MLGChallenge.java +++ /dev/null @@ -1,276 +0,0 @@ -package de.fanta.challenges.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.events.TimerChangedEvent; -import de.fanta.challenges.gravestones.GravestoneUtils; -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.GameRule; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.WorldCreator; -import org.bukkit.WorldType; -import org.bukkit.entity.Player; -import org.bukkit.entity.SpawnCategory; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.event.entity.EntityMountEvent; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.PlayerBucketEmptyEvent; -import org.bukkit.event.player.PlayerGameModeChangeEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.event.player.PlayerTeleportEvent; -import org.bukkit.inventory.ItemStack; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Random; -import java.util.UUID; - -public class MLGChallenge implements Listener { - - private static final Challenges plugin = Challenges.getPlugin(); - - private static final Random random = new Random(); - private static boolean MLGinProgress; - private static boolean running; - private static CancellableTask task; - private static final HashMap mlgPlayerMap = new HashMap<>(); - private static int timeSinceMLG; // seconds+ - private static Location mlgLocation; - private static final ArrayList mlgBlocks = new ArrayList<>(); - - @EventHandler - public void onTimerChange(TimerChangedEvent e) { - if (Config.getBoolean("mlg.enabled")) { - if (e.isRunning()) { - setRunning(true); - startTask(); - } else { - setRunning(false); - stopTask(); - } - } - } - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent e) { - if (isMLGinProgress() && e.getPlayer().getWorld().getName().equals("mlg_challenge")) { - if (mlgPlayerMap.containsKey(e.getPlayer().getUniqueId())) { - mlgResult(e.getPlayer(), true); - plugin.getScheduler().runDelayedOnEntity(e.getPlayer(), () -> e.getPlayer().spigot().respawn(), 1L); - } - } - } - - @EventHandler - public void onTeleport(PlayerTeleportEvent e) { - if (isMLGinProgress() && e.getFrom().getWorld().getName().equals("mlg_challenge")) { - if (mlgPlayerMap.containsKey(e.getPlayer().getUniqueId())) { - mlgResult(e.getPlayer(), true); - } - } - } - - @EventHandler - public void onGameModeChange(PlayerGameModeChangeEvent e) { - if (isMLGinProgress() && e.getPlayer().getWorld().getName().equals("mlg_challenge")) { - if (mlgPlayerMap.containsKey(e.getPlayer().getUniqueId())) { - mlgResult(e.getPlayer(), true); - } - } - } - - @EventHandler - public void onDisconnect(PlayerQuitEvent e) { - if (isMLGinProgress() && e.getPlayer().getWorld().getName().equals("mlg_challenge")) { - if (mlgPlayerMap.containsKey(e.getPlayer().getUniqueId())) { - mlgResult(e.getPlayer(), true); - } - } - } - - @EventHandler - public void onBucketEmpty(PlayerBucketEmptyEvent e) { - if (isMLGinProgress() && e.getPlayer().getWorld().getName().equals("mlg_challenge")) { - plugin.getScheduler().runLocalDelayed(e.getBlock().getLocation(), () -> { - if (mlgPlayerMap.containsKey(e.getPlayer().getUniqueId()) && !e.getPlayer().isDead()) { - mlgResult(e.getPlayer(), false); - } - }, 40L); - } - } - - @EventHandler - public void onBlockPlace(BlockPlaceEvent e) { - if (isMLGinProgress() && e.getPlayer().getWorld().getName().equals("mlg_challenge")) { - plugin.getScheduler().runLocalDelayed(e.getBlock().getLocation(), () -> { - if (mlgPlayerMap.containsKey(e.getPlayer().getUniqueId()) && !e.getPlayer().isDead()) { - mlgResult(e.getPlayer(), false); - } - }, 40L); - } - } - - @EventHandler - public void onEntityMount(EntityMountEvent e) { - if (isMLGinProgress() && e.getMount().getWorld().getName().equals("mlg_challenge")) { - if (e.getEntity() instanceof Player player) { - plugin.getScheduler().runDelayedOnEntity(e.getMount(), () -> { - if (mlgPlayerMap.containsKey(player.getUniqueId()) && !player.isDead()) { - mlgResult(player, false); - } - }, 40L); - } - } - } - - public static void checkMLGWorld() { - World mlgWorld = Bukkit.getWorld("mlg_challenge"); - if (mlgWorld == null) { - mlgWorld = Bukkit.createWorld((new WorldCreator("mlg_challenge")).type(WorldType.FLAT).generateStructures(false)); - mlgWorld.setSpawnLimit(SpawnCategory.ANIMAL, 0); - mlgWorld.setGameRule(GameRule.DO_MOB_SPAWNING, false); - mlgWorld.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false); - mlgWorld.setGameRule(GameRule.DO_WEATHER_CYCLE, false); - mlgWorld.setGameRule(GameRule.KEEP_INVENTORY, true); - mlgWorld.setTime(6000L); - } - } - - public static boolean triggerMLG() { - if (isRunning() && !MLGinProgress && !plugin.getVanish().getPlayerListWithoutVanishPlayers().isEmpty()) { - timeSinceMLG = 0; - mlgPlayerMap.clear(); - for (Player p : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { - if (p.getGameMode() == GameMode.SURVIVAL && !p.isDead()) { - MLGInfo mlgInfo = new MLGInfo(p.getInventory().getContents(), p.getLocation()); - mlgPlayerMap.put(p.getUniqueId(), mlgInfo); - ChatUtil.sendNormalMessage(p, "Zeit für einen MLG! Viel Glück!"); - p.getInventory().clear(); - tpMLG(p); - } - } - if (!mlgPlayerMap.isEmpty()) { - setMLGinProgress(true); - } - - return true; - } - return false; - } - - private static void tpMLG(Player p) { - p.closeInventory(); - if (Config.getBoolean("mlg.randommlgblock")) { - if (mlgBlocks.isEmpty()) { - mlgBlocks.add(Material.WATER_BUCKET); - mlgBlocks.add(Material.SLIME_BLOCK); - mlgBlocks.add(Material.OAK_BOAT); - mlgBlocks.add(Material.SCAFFOLDING); - mlgBlocks.add(Material.SWEET_BERRIES); - mlgBlocks.add(Material.POWDER_SNOW_BUCKET); - mlgBlocks.add(Material.COBWEB); - mlgBlocks.add(Material.TWISTING_VINES); - } - Material mlgItem = mlgBlocks.get(random.nextInt(mlgBlocks.size())); - plugin.getScheduler().runDelayedOnEntity(p, () -> p.getInventory().setItemInMainHand(new ItemStack(mlgItem)), 1L); - } else { - plugin.getScheduler().runDelayedOnEntity(p, () -> p.getInventory().setItemInMainHand(new ItemStack(Material.WATER_BUCKET)), 1L); - } - - if (mlgLocation == null) { - mlgLocation = new Location(Bukkit.getWorld("mlg_challenge"), 0, 0, 0); - } - - mlgLocation.add(100, 0, 0); - Location newloc = mlgLocation.clone(); - newloc.add(0.5, 0, 0.5); - newloc.setY(100 + random.nextInt(40)); - p.teleportAsync(newloc); - } - - private static void mlgResult(Player p, boolean dead) { - MLGInfo mlgInfo = mlgPlayerMap.get(p.getUniqueId()); - mlgPlayerMap.remove(p.getUniqueId()); - Location loc = mlgInfo.location(); - ItemStack[] content = mlgInfo.content(); - if (!dead) { - p.setInvulnerable(true); - mlgBack(p, loc, content); - ChatUtil.sendNormalMessage(p, "Du hast den MLG erfolgreich absolviert! Weitere folgen..."); - } else { - p.getInventory().clear(); - if (Bukkit.getWorlds().getFirst().getGameRuleValue(GameRule.KEEP_INVENTORY)) { - p.getInventory().setContents(content); - } else if (Config.getBoolean("gravestone")) { - String inventoryString = GravestoneUtils.createInventoryString(content); - GravestoneUtils.spawnAtBlock(loc.getBlock(), p, GravestoneUtils.compressString(inventoryString)); - } else { - for (ItemStack stack : content) { - if (stack != null) { - loc.getWorld().dropItemNaturally(loc, stack); - } - } - } - } - - if (mlgPlayerMap.isEmpty()) { - plugin.getScheduler().runGlobalDelayed(() -> setMLGinProgress(false), 60L); - } - } - - private static void mlgBack(final Player p, Location loc, ItemStack[] content) { - p.teleportAsync(loc); - p.getInventory().setContents(content); - plugin.getScheduler().runDelayedOnEntity(p, () -> p.setInvulnerable(false), 60L); - } - - private static void tick() { - if (!mlgPlayerMap.isEmpty()) { - return; - } - int randomInt = random.nextInt(Config.getInt("mlg.maxtime")); - timeSinceMLG++; - if (randomInt == 0 || timeSinceMLG >= Config.getInt("mlg.maxtime")) { - triggerMLG(); - } - } - - public static boolean isRunning() { - return running; - } - - public static void setRunning(boolean running) { - MLGChallenge.running = running; - } - - private static boolean isMLGinProgress() { - return MLGinProgress; - } - - public static void setMLGinProgress(boolean MLGinProgress) { - MLGChallenge.MLGinProgress = MLGinProgress; - } - - public static void startTask() { - if (task == null && plugin.getTimer().isRunning()) { - task = plugin.getScheduler().runGlobalAtFixedRate(MLGChallenge::tick, 20L, 20L); - } - } - - public static void stopTask() { - if (task != null) { - task.cancel(); - task = null; - } - } - - record MLGInfo(ItemStack[] content, Location location) { - } -} \ No newline at end of file diff --git a/src/main/java/de/fanta/challenges/challenges/ManHunt.java b/src/main/java/de/fanta/challenges/challenges/ManHunt.java deleted file mode 100644 index 4b5c086..0000000 --- a/src/main/java/de/fanta/challenges/challenges/ManHunt.java +++ /dev/null @@ -1,276 +0,0 @@ -package de.fanta.challenges.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.events.TimerChangedEvent; -import de.fanta.challenges.schedular.CancellableTask; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.ItemUtils; -import net.kyori.adventure.text.Component; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.NamespacedKey; -import org.bukkit.World; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryDragEvent; -import org.bukkit.event.inventory.InventoryMoveItemEvent; -import org.bukkit.event.player.PlayerArmorStandManipulateEvent; -import org.bukkit.event.player.PlayerDropItemEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerSwapHandItemsEvent; -import org.bukkit.inventory.CraftingInventory; -import org.bukkit.inventory.ItemFlag; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.CompassMeta; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.persistence.PersistentDataType; - -import java.util.HashMap; - -public class ManHunt implements Listener { - private static final Challenges plugin = Challenges.getPlugin(); - private CancellableTask task; - private final HashMap locationList = new HashMap<>(); - private static final NamespacedKey hunterItemKey = new NamespacedKey(plugin, "HunterItem"); - private static ItemStack hunterItem; - - @EventHandler - public void onActivation(TimerChangedEvent event) { - if (isRunning()) { - if (event.isRunning()) { - startUpdateTask(); - } else { - stopUpdateTask(); - } - } - } - - @EventHandler - public void onDropItem(PlayerDropItemEvent e) { - if (isRunning()) { - ItemStack stack = e.getItemDrop().getItemStack(); - ItemMeta meta = stack.getItemMeta(); - - if (meta != null && meta.getPersistentDataContainer().has(hunterItemKey)) { - e.setCancelled(true); - } - } - } - - private boolean isRunning() { - return Config.getBoolean("manhunt") && plugin.getTimer().isRunning(); - } - - @EventHandler - public void onSwapItem(PlayerSwapHandItemsEvent e) { - if (!isRunning()) { - return; - } - Player p = e.getPlayer(); - ItemStack stack = p.getInventory().getItemInMainHand(); - ItemMeta meta = stack.getItemMeta(); - if (meta != null && meta.getPersistentDataContainer().has(hunterItemKey)) { - e.setCancelled(true); - } - } - - @EventHandler - public void onItemMove(InventoryMoveItemEvent e) { - if (!isRunning()) { - return; - } - ItemStack stack = e.getItem(); - ItemMeta meta = stack.getItemMeta(); - if (meta != null && meta.getPersistentDataContainer().has(hunterItemKey)) { - e.setCancelled(true); - } - } - - @EventHandler - public void onInventoryClick(InventoryClickEvent e) { - if (!isRunning()) { - return; - } - ItemStack stack = e.getCurrentItem(); - ItemStack stackInHand = e.getCursor(); - Player player = (Player) e.getWhoClicked(); - ItemMeta meta = null; - ItemMeta metaInHand = null; - - if (stack != null) { - meta = stack.getItemMeta(); - } - - metaInHand = stackInHand.getItemMeta(); - - if (e.getClick() == ClickType.NUMBER_KEY) { - int slot = e.getHotbarButton(); - if (slot >= 0 && slot < 9) { - if (!e.getWhoClicked().getInventory().equals(e.getInventory())) { - ItemStack swap = e.getWhoClicked().getInventory().getItem(slot); - if (swap != null) { - ItemMeta swapItemMeta = swap.getItemMeta(); - if (swapItemMeta != null && swapItemMeta.getPersistentDataContainer().has(hunterItemKey)) { - e.setCancelled(true); - } - } - } - } - } - - if (meta != null && meta.getPersistentDataContainer().has(hunterItemKey) || metaInHand != null && metaInHand.getPersistentDataContainer().has(hunterItemKey)) { - switch (e.getAction()) { - case NOTHING, PICKUP_ALL, PICKUP_HALF, PICKUP_ONE, PICKUP_SOME, PLACE_ALL, PLACE_ONE, PLACE_SOME, SWAP_WITH_CURSOR, COLLECT_TO_CURSOR, HOTBAR_SWAP -> { - if (e.getClickedInventory() != player.getInventory()) { - e.setCancelled(true); - } - } - case MOVE_TO_OTHER_INVENTORY -> { - if (!(e.getInventory() instanceof CraftingInventory)) { - e.setCancelled(true); - } - } - default -> e.setCancelled(true); - } - } - } - - @EventHandler - public void onItemDrag(InventoryDragEvent e) { - if (!isRunning()) { - return; - } - ItemStack stack = e.getCursor(); - ItemMeta stackMeta = null; - ItemStack oldStack = e.getOldCursor(); - ItemMeta oldStackMeta = null; - if (stack != null) { - if (stack.getItemMeta() != null) { - stackMeta = stack.getItemMeta(); - } - } - - if (oldStack.getItemMeta() != null) { - oldStackMeta = oldStack.getItemMeta(); - } - - if (stackMeta != null && stackMeta.getPersistentDataContainer().has(hunterItemKey) || oldStackMeta != null && oldStackMeta.getPersistentDataContainer().has(hunterItemKey)) { - if (!(e.getInventory() instanceof CraftingInventory)) { - e.setCancelled(true); - } - } - } - - @EventHandler(priority = EventPriority.LOWEST) - public void onPlayerInteractEntity(PlayerArmorStandManipulateEvent e) { - if (!isRunning()) { - return; - } - Player p = e.getPlayer(); - ItemStack stack = p.getInventory().getItemInMainHand(); - ItemMeta meta = stack.getItemMeta(); - if (meta != null && meta.getPersistentDataContainer().has(hunterItemKey)) { - e.setCancelled(true); - } - } - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent e) { - if (!isRunning()) { - return; - } - ItemStack[] inv = e.getEntity().getInventory().getContents(); - for (ItemStack stack : inv) { - if (stack != null) { - ItemMeta meta = stack.getItemMeta(); - if (meta != null && meta.getPersistentDataContainer().has(hunterItemKey)) { - e.getItemsToKeep().add(stack); - e.getDrops().remove(stack); - } - } - } - } - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent e) { - if (!Config.getBoolean("manhunt")) { - return; - } - Player player = e.getPlayer(); - int count = 0; - - for (ItemStack stack : player.getInventory().getContents()) { - if (stack != null && stack.getItemMeta() instanceof CompassMeta compassMeta && compassMeta.getPersistentDataContainer().has(hunterItemKey)) { - count++; - } - } - - if (count == 0) { - player.getInventory().setItem(8, hunterItem); - } - } - public void startUpdateTask() { - task = plugin.getScheduler().runGlobalAtFixedRate(this::tick, 1L, 1L); - } - - public void stopUpdateTask() { - task.cancel(); - task = null; - } - - private void tick() { - Player editor = plugin.getCurrentEditor(); - if (editor == null) { - return; - } - locationList.put(editor.getWorld(), editor.getLocation()); - for (Player player : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { - if (locationList.get(player.getWorld()) != null) { - for (ItemStack stack : player.getInventory().getContents()) { - if (stack != null && stack.getItemMeta() instanceof CompassMeta compassMeta && compassMeta.getPersistentDataContainer().has(hunterItemKey)) { - compassMeta.setLodestone(locationList.get(player.getWorld())); - compassMeta.setLodestoneTracked(false); - stack.setItemMeta(compassMeta); - } - } - } - } - } - - public static ItemStack createHunterItem() { - ItemStack stack = ItemUtils.createGuiItem(Material.COMPASS, Component.text("Hunter Kompass", ChatUtil.GREEN), Component.text("Zeigt die Richtung zum gejagten Spieler", ChatUtil.GREEN)); - CompassMeta meta = (CompassMeta) stack.getItemMeta(); - meta.addEnchant(Enchantment.VANISHING_CURSE, 1, true); - meta.addItemFlags(ItemFlag.HIDE_ENCHANTS); - meta.getPersistentDataContainer().set(hunterItemKey, PersistentDataType.STRING, "HunterItem"); - stack.setItemMeta(meta); - - return stack; - } - - public static void start() { - hunterItem = createHunterItem(); - for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { - if (plugin.getCurrentEditor() != null && plugin.getCurrentEditor() != pp) { - pp.getInventory().setItem(8, hunterItem); - } - } - } - - public static void stop() { - for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { - for (ItemStack stack : pp.getInventory().getContents()) { - if (stack != null && stack.getItemMeta() instanceof CompassMeta compassMeta && compassMeta.getPersistentDataContainer().has(hunterItemKey)) { - stack.setAmount(0); - } - } - } - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/MobRemoveWorldChallenge.java b/src/main/java/de/fanta/challenges/challenges/MobRemoveWorldChallenge.java deleted file mode 100644 index 0f4a0d8..0000000 --- a/src/main/java/de/fanta/challenges/challenges/MobRemoveWorldChallenge.java +++ /dev/null @@ -1,105 +0,0 @@ -package de.fanta.challenges.challenges; - -import com.destroystokyo.paper.event.entity.EntityAddToWorldEvent; -import de.fanta.challenges.Challenges; -import de.fanta.challenges.events.TimerChangedEvent; -import de.fanta.challenges.utils.Config; -import io.papermc.paper.event.entity.EntityMoveEvent; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.block.Block; -import org.bukkit.entity.EnderDragon; -import org.bukkit.entity.EntityType; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.util.BoundingBox; - -import java.util.ArrayList; - -public class MobRemoveWorldChallenge implements Listener { - - private static final Challenges plugin = Challenges.getPlugin(); - - private static final ArrayList dragonList = new ArrayList<>(); - - private int taskId = -1; - - @EventHandler - public void onMobMove(EntityMoveEvent e) { - if (Config.getBoolean("mobremoveworld") && plugin.getTimer().isRunning()) { - if (!e.getTo().equals(e.getFrom())) { - if (e.getEntity().getType() != EntityType.ENDER_DRAGON) { - BoundingBox box = e.getEntity().getBoundingBox(); - removeWorld(e.getEntity().getLocation().getWorld(), box, true); - } - } - } - } - - @EventHandler - public void onTImerChange(TimerChangedEvent e) { - if (Config.getBoolean("mobremoveworld")) { - if (plugin.getTimer().isRunning()) { - startUpdateTask(); - } else { - stopUpdateTask(); - } - } - } - - @EventHandler - public void addEntity(EntityAddToWorldEvent e) { - if (e.getEntity() instanceof EnderDragon enderDragon) { - dragonList.add(enderDragon); - } - } - - private void removeWorld(World world, BoundingBox box, boolean replaceBedrock) { - if (!Config.getBoolean("mobremoveworld")) { - return; - } - Location loc = new Location(world, box.getCenterX(), box.getCenterY(), box.getCenterZ()); - plugin.getScheduler().runLocalDelayed(loc, () -> { - double boundingwithX = box.getWidthX() / 2; - double boundingwithZ = box.getWidthZ() / 2; - int worldMinHeight = world.getMinHeight(); - int worldMaxHeight = world.getMaxHeight(); - for (double x = loc.getX() - boundingwithX; x <= loc.getX() + boundingwithX; x++) { - for (double z = loc.getZ() - boundingwithZ; z <= loc.getZ() + boundingwithZ; z++) { - for (int y = worldMinHeight; y < worldMaxHeight; y++) { - Block block = world.getBlockAt((int) Math.round(x), y, (int) Math.round(z)); - if (replaceBedrock) { - if (block.getType() != Material.AIR && block.getType() != Material.END_PORTAL_FRAME) { - block.setType(Material.AIR, false); - } - } else { - if (block.getType() != Material.AIR && block.getType() != Material.BEDROCK && block.getType() != Material.END_PORTAL_FRAME) { - block.setType(Material.AIR, false); - } - } - - } - } - } - }, 20 * 2L); - } - - public void startUpdateTask() { - taskId = plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, this::tick, 1L, 1L); - } - - public void stopUpdateTask() { - plugin.getServer().getScheduler().cancelTask(taskId); - } - - private void tick() { - for (EnderDragon enderDragon : dragonList) { - if (!enderDragon.isDead() && enderDragon.isValid()) { - Location loc = enderDragon.getLocation(); - BoundingBox box = enderDragon.getBoundingBox(); - removeWorld(loc.getWorld(), box, false); - } - } - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/NoFallDamageChallenge.java b/src/main/java/de/fanta/challenges/challenges/NoFallDamageChallenge.java deleted file mode 100644 index d18b9aa..0000000 --- a/src/main/java/de/fanta/challenges/challenges/NoFallDamageChallenge.java +++ /dev/null @@ -1,24 +0,0 @@ -package de.fanta.challenges.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.Config; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDamageEvent; - -public class NoFallDamageChallenge implements Listener { - - private final Challenges plugin = Challenges.getPlugin(); - - @EventHandler - public void onDamage(EntityDamageEvent e) { - if (e.getEntity() instanceof Player p) { - if (e.getCause() == EntityDamageEvent.DamageCause.FALL) { - if (Config.getBoolean("deathonfall") && plugin.getTimer().isRunning()) { - p.setHealth(0); - } - } - } - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/NoJumpChallenge.java b/src/main/java/de/fanta/challenges/challenges/NoJumpChallenge.java deleted file mode 100644 index 22e32ea..0000000 --- a/src/main/java/de/fanta/challenges/challenges/NoJumpChallenge.java +++ /dev/null @@ -1,25 +0,0 @@ -package de.fanta.challenges.challenges; - -import com.destroystokyo.paper.event.player.PlayerJumpEvent; -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.Config; -import org.bukkit.GameMode; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; - -public class NoJumpChallenge implements Listener { - - private final Challenges plugin = Challenges.getPlugin(); - - @EventHandler - public void onPlayerJump(PlayerJumpEvent e) { - Player p = e.getPlayer(); - if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL && !plugin.getVanish().isVanish(p)) { - if (Config.getBoolean("deathonjump")) { - p.setHealth(0); - } - } - } -} - diff --git a/src/main/java/de/fanta/challenges/challenges/NoSneakChallenge.java b/src/main/java/de/fanta/challenges/challenges/NoSneakChallenge.java deleted file mode 100644 index d48b596..0000000 --- a/src/main/java/de/fanta/challenges/challenges/NoSneakChallenge.java +++ /dev/null @@ -1,26 +0,0 @@ -package de.fanta.challenges.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.Config; -import org.bukkit.GameMode; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerToggleSneakEvent; - -public class NoSneakChallenge implements Listener { - - private final Challenges plugin = Challenges.getPlugin(); - - @EventHandler - public void onPlayerSneak(PlayerToggleSneakEvent e) { - Player p = e.getPlayer(); - if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL && !plugin.getVanish().isVanish(p)) { - if (!p.isSneaking()) { - if (Config.getBoolean("damageonsneak")) { - p.damage(Config.getDouble("sneakdmg")); - } - } - } - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/NoSprintChallenge.java b/src/main/java/de/fanta/challenges/challenges/NoSprintChallenge.java deleted file mode 100644 index c5f95c1..0000000 --- a/src/main/java/de/fanta/challenges/challenges/NoSprintChallenge.java +++ /dev/null @@ -1,26 +0,0 @@ -package de.fanta.challenges.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.Config; -import org.bukkit.GameMode; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerToggleSprintEvent; - -public class NoSprintChallenge implements Listener { - - private final Challenges plugin = Challenges.getPlugin(); - - @EventHandler - public void onPlayerSprint(PlayerToggleSprintEvent e) { - Player p = e.getPlayer(); - if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL && !plugin.getVanish().isVanish(p)) { - if (!p.isSprinting()) { - if (Config.getBoolean("deathonsprint")) { - p.setHealth(0); - } - } - } - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/NoTradingChallenge.java b/src/main/java/de/fanta/challenges/challenges/NoTradingChallenge.java deleted file mode 100644 index 1dbe149..0000000 --- a/src/main/java/de/fanta/challenges/challenges/NoTradingChallenge.java +++ /dev/null @@ -1,22 +0,0 @@ -package de.fanta.challenges.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.Config; -import org.bukkit.entity.EntityType; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerInteractEntityEvent; - -public class NoTradingChallenge implements Listener { - - private final Challenges plugin = Challenges.getPlugin(); - - @EventHandler - public void onEntityClick(PlayerInteractEntityEvent e) { - if (e.getRightClicked().getType() == EntityType.VILLAGER) { - if (!Config.getBoolean("allowtrading") && plugin.getTimer().isRunning()) { - e.setCancelled(true); - } - } - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/RandomDropsChallenge.java b/src/main/java/de/fanta/challenges/challenges/RandomDropsChallenge.java deleted file mode 100644 index beab75f..0000000 --- a/src/main/java/de/fanta/challenges/challenges/RandomDropsChallenge.java +++ /dev/null @@ -1,118 +0,0 @@ -package de.fanta.challenges.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.Config; -import io.papermc.paper.event.block.BlockBreakBlockEvent; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.block.BlockExplodeEvent; -import org.bukkit.event.entity.EntityExplodeEvent; -import org.bukkit.inventory.ItemStack; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.Random; -import java.util.logging.Level; -import java.util.stream.Collectors; - -public class RandomDropsChallenge implements Listener { - private final ArrayList BLOCKS; - - private final ArrayList ITEM_DROPS; - - private final HashMap drops = new HashMap<>(); - - private final Challenges plugin = Challenges.getPlugin(); - - public RandomDropsChallenge() { - this.BLOCKS = (ArrayList) Arrays.stream(Material.values()).filter(mat -> (mat.isBlock() && mat != Material.AIR && mat != Material.CAVE_AIR && mat != Material.VOID_AIR)).collect(Collectors.toList()); - this.ITEM_DROPS = (ArrayList) Arrays.stream(Material.values()).filter(mat -> (mat.isItem() && mat != Material.FILLED_MAP)).collect(Collectors.toList()); - } - - @EventHandler - public void onBlockBreak(BlockBreakEvent e) { - if (Config.getBoolean("rnddrops") && plugin.getTimer().isRunning()) { - e.setDropItems(false); - e.getBlock().getWorld().dropItem(e.getBlock().getLocation().add(0.5D, 0.5D, 0.5D), new ItemStack(this.plugin.getRandomDropsManager().getMaterialFromBlock(e.getBlock()))); - } - } - - @EventHandler - public void onBlockBreakBlock(BlockBreakBlockEvent e) { - if (Config.getBoolean("rnddrops") && plugin.getTimer().isRunning()) { - e.getBlock().getWorld().dropItem(e.getBlock().getLocation().add(0.5D, 0.5D, 0.5D), new ItemStack(this.plugin.getRandomDropsManager().getMaterialFromBlock(e.getBlock()))); - e.getDrops().clear(); - } - } - - @EventHandler - public void onBlockExplode(BlockExplodeEvent e) { - if (Config.getBoolean("rnddrops") && plugin.getTimer().isRunning()) { - e.blockList().forEach(block -> { - if (!block.getType().isAir()) { - block.getWorld().dropItem(block.getLocation().add(0.5D, 0.5D, 0.5D), new ItemStack(this.plugin.getRandomDropsManager().getMaterialFromBlock(block))); - block.setType(Material.AIR); - } - }); - e.blockList().clear(); - } - } - - @EventHandler - public void onEntityExplode(EntityExplodeEvent e) { - if (Config.getBoolean("rnddrops") && plugin.getTimer().isRunning()) { - e.blockList().forEach(block -> { - if (!block.getType().isAir()) { - block.getWorld().dropItem(block.getLocation().add(0.5D, 0.5D, 0.5D), new ItemStack(this.plugin.getRandomDropsManager().getMaterialFromBlock(block))); - block.setType(Material.AIR); - } - }); - e.blockList().clear(); - } - } - - public void shuffleItems() { - Collections.shuffle(this.ITEM_DROPS); - ArrayList itemDropsCopy = new ArrayList<>(this.ITEM_DROPS); - this.BLOCKS.forEach(mat -> { - int r = (new Random()).nextInt(itemDropsCopy.size() - 1); - this.drops.put(mat, itemDropsCopy.get(r)); - itemDropsCopy.remove(r); - }); - saveItems(); - } - - public void saveItems() { - FileConfiguration config = Challenges.getPlugin().getRndDropsConfig(); - config.set("drops", this.drops.entrySet().stream().map(entry -> entry.getKey() + ":" + entry.getValue()).collect(Collectors.toList())); - try { - Challenges.getPlugin().RndDropsConfig.save(Challenges.getPlugin().RndDropsConfigFile); - } catch (IOException e) { - plugin.getLogger().log(Level.SEVERE, "Error while saving randomDrop Config", e); - } - } - - public void loadItems() { - this.drops.clear(); - FileConfiguration config = Challenges.getPlugin().getRndDropsConfig(); - if (config.isList("drops")) { - config.getStringList("drops").forEach(str -> { - String[] materialSplitted = str.split(":"); - this.drops.put(Material.getMaterial(materialSplitted[0]), Material.getMaterial(materialSplitted[1])); - }); - } else { - shuffleItems(); - } - } - - public Material getMaterialFromBlock(Block block) { - return this.drops.get(block.getType()); - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/RandomEffectChallenge.java b/src/main/java/de/fanta/challenges/challenges/RandomEffectChallenge.java deleted file mode 100644 index ce4ea41..0000000 --- a/src/main/java/de/fanta/challenges/challenges/RandomEffectChallenge.java +++ /dev/null @@ -1,50 +0,0 @@ -package de.fanta.challenges.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.Config; -import org.bukkit.Registry; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerMoveEvent; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.Random; - -public class RandomEffectChallenge implements Listener { - - private final Challenges plugin = Challenges.getPlugin(); - private final Random random = new Random(); - - private final HashMap chunkPotionEffectMap = new HashMap<>(); - private final HashMap playerPotionEffectMap = new HashMap<>(); - - @EventHandler - public void onPlayerMove(PlayerMoveEvent e) { - Player p = e.getPlayer(); - if (Config.getBoolean("randomeffect") && plugin.getTimer().isRunning() && !plugin.getVanish().isVanish(p)) { - long chunkKey = p.getLocation().getChunk().getChunkKey(); - - if (!chunkPotionEffectMap.containsKey(chunkKey)) { - chunkPotionEffectMap.put(chunkKey, randomEffect()); - } - if (chunkPotionEffectMap.get(chunkKey) != playerPotionEffectMap.get(p)) { - if (playerPotionEffectMap.get(p) != null) { - p.removePotionEffect(playerPotionEffectMap.get(p).getType()); - } - PotionEffect potionEffect = chunkPotionEffectMap.get(chunkKey); - p.addPotionEffect(potionEffect); - playerPotionEffectMap.put(p, potionEffect); - } - } - } - - - private PotionEffect randomEffect() { - PotionEffectType[] values = Registry.EFFECT.stream().filter(effect -> (!effect.equals(PotionEffectType.INSTANT_DAMAGE))).toArray(PotionEffectType[]::new); - return new PotionEffect(values[random.nextInt((int) Arrays.stream(values).count())], PotionEffect.INFINITE_DURATION, random.nextInt(5)); - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/RandomMobChallenge.java b/src/main/java/de/fanta/challenges/challenges/RandomMobChallenge.java deleted file mode 100644 index 5ae4679..0000000 --- a/src/main/java/de/fanta/challenges/challenges/RandomMobChallenge.java +++ /dev/null @@ -1,40 +0,0 @@ -package de.fanta.challenges.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.Config; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.entity.Animals; -import org.bukkit.entity.Boss; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Mob; -import org.bukkit.entity.WaterMob; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDeathEvent; - -import java.util.Arrays; -import java.util.Random; - -public class RandomMobChallenge implements Listener { - - private final Challenges plugin = Challenges.getPlugin(); - - @EventHandler - public void onEntityDeath(EntityDeathEvent e) { - if (Config.getBoolean("randommobs") && plugin.getTimer().isRunning()) { - Entity entity = e.getEntity(); - Location entityloc = entity.getLocation(); - World entityworld = entityloc.getWorld(); - if (entity instanceof Animals || entity instanceof WaterMob) { - Random random = new Random(); - EntityType[] entityValues = Arrays.stream(EntityType.values()).filter(entityType -> (entityType.getEntityClass() != null && Mob.class.isAssignableFrom(entityType.getEntityClass()) && !Boss.class.isAssignableFrom(entityType.getEntityClass()))).toArray(EntityType[]::new); - int randomid = random.nextInt(entityValues.length); - EntityType randomEntity = entityValues[randomid]; - entityworld.spawnEntity(entityloc, randomEntity); - } - } - - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/ShareDamageChallenge.java b/src/main/java/de/fanta/challenges/challenges/ShareDamageChallenge.java deleted file mode 100644 index 159c5b0..0000000 --- a/src/main/java/de/fanta/challenges/challenges/ShareDamageChallenge.java +++ /dev/null @@ -1,37 +0,0 @@ -package de.fanta.challenges.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.Config; -import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.Sound; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDamageEvent; - -public class ShareDamageChallenge implements Listener { - - private final Challenges plugin = Challenges.getPlugin(); - - @EventHandler - public void onDamage(EntityDamageEvent e) { - if (e.getEntity() instanceof Player p) { - if (Config.getBoolean("sharedmg") && plugin.getTimer().isRunning()) { - for (Player pp : Bukkit.getOnlinePlayers()) { - if (pp != p) { - if (!plugin.getVanish().isVanish(pp) && pp.getGameMode() == GameMode.SURVIVAL) { - double health = pp.getHealth() - e.getFinalDamage(); - if (health < 0) { - pp.setHealth(0); - } else { - pp.setHealth(health); - } - pp.getWorld().playSound(pp.getLocation(), Sound.ENTITY_PLAYER_HURT, 1, 1); - } - } - } - } - } - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/TiedTogetherChallenge.java b/src/main/java/de/fanta/challenges/challenges/TiedTogetherChallenge.java deleted file mode 100644 index 8b45aa2..0000000 --- a/src/main/java/de/fanta/challenges/challenges/TiedTogetherChallenge.java +++ /dev/null @@ -1,69 +0,0 @@ -package de.fanta.challenges.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.Config; -import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.Location; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerMoveEvent; - -public class TiedTogetherChallenge implements Listener { - - private static final Challenges plugin = Challenges.getPlugin(); - - @EventHandler - public void onMove(PlayerMoveEvent e) { - if (Config.getBoolean("tiedtogether") && plugin.getTimer().isRunning()) { - calculateDistances(); - } - } - - private void calculateDistances() { - Player minXPlayer = plugin.getCurrentEditor(); - Player maxXPlayer = plugin.getCurrentEditor(); - - Player minYPlayer = plugin.getCurrentEditor(); - Player maxYPlayer = plugin.getCurrentEditor(); - - Player minZPlayer = plugin.getCurrentEditor(); - Player maxZPlayer = plugin.getCurrentEditor(); - - for (Player p : Bukkit.getOnlinePlayers()) { - if (plugin.getVanish().isVanish(p) || p.getGameMode() != GameMode.SURVIVAL) { - continue; - } - if (p.getLocation().getX() < minXPlayer.getLocation().getX()) { - minXPlayer = p; - } - if (p.getLocation().getX() > maxXPlayer.getLocation().getX()) { - maxXPlayer = p; - } - if (p.getLocation().getY() < minYPlayer.getLocation().getY()) { - minYPlayer = p; - } - if (p.getLocation().getY() > maxYPlayer.getLocation().getY()) { - maxYPlayer = p; - } - if (p.getLocation().getZ() < minZPlayer.getLocation().getZ()) { - minZPlayer = p; - } - if (p.getLocation().getZ() > maxZPlayer.getLocation().getZ()) { - maxZPlayer = p; - } - double xCenter = (maxXPlayer.getLocation().getX() + minXPlayer.getLocation().getX()) / 2; - double yCenter = (maxYPlayer.getLocation().getY() + minYPlayer.getLocation().getY()) / 2; - double zCenter = (maxZPlayer.getLocation().getZ() + minZPlayer.getLocation().getZ()) / 2; - Location center = new Location(plugin.getCurrentEditor().getWorld(), xCenter, yCenter, zCenter); - - if (p.getLocation().distanceSquared(center) > (Config.getDouble("playerrange") / 2) * (Config.getDouble("playerrange") / 2)) { - for (Player pp : Bukkit.getOnlinePlayers()) { - pp.damage(4); - } - } - } - } -} - diff --git a/src/main/java/de/fanta/challenges/challenges/WorldBorderLevelChallenge.java b/src/main/java/de/fanta/challenges/challenges/WorldBorderLevelChallenge.java deleted file mode 100644 index 7c72b59..0000000 --- a/src/main/java/de/fanta/challenges/challenges/WorldBorderLevelChallenge.java +++ /dev/null @@ -1,219 +0,0 @@ -package de.fanta.challenges.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.CubesideModUtils; -import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.Location; -import org.bukkit.Sound; -import org.bukkit.World; -import org.bukkit.WorldBorder; -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.PlayerChangedWorldEvent; -import org.bukkit.event.player.PlayerExpChangeEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerLevelChangeEvent; -import org.bukkit.event.player.PlayerPortalEvent; -import org.bukkit.event.player.PlayerRespawnEvent; -import org.bukkit.event.world.PortalCreateEvent; -import org.bukkit.event.world.SpawnChangeEvent; -import org.bukkit.generator.structure.Structure; -import org.spigotmc.event.player.PlayerSpawnLocationEvent; - -import java.util.Objects; - -public class WorldBorderLevelChallenge implements Listener { - - private static final Challenges plugin = Challenges.getPlugin(); - - private static WorldBorder worldBorder; - private static WorldBorder netherBorder; - private static WorldBorder endBorder; - - public WorldBorderLevelChallenge() { - worldBorder = Bukkit.createWorldBorder(); - netherBorder = Bukkit.createWorldBorder(); - endBorder = Bukkit.createWorldBorder(); - } - - @EventHandler - public void onExpChange(PlayerExpChangeEvent e) { - Player p = e.getPlayer(); - if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL && !plugin.getVanish().isVanish(p)) { - if (Config.getBoolean("worldborderlevel")) { - Config.setValue("worldborderlevelxp", e.getPlayer().getExp()); - plugin.saveConfig(); - xpSync(e.getPlayer(), false); - } - } - } - - @EventHandler - public void onLevelChange(PlayerLevelChangeEvent e) { - Player p = e.getPlayer(); - if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL && !plugin.getVanish().isVanish(p)) { - if (Config.getBoolean("worldborderlevel")) { - Config.setValue("worldborderlevellevel", e.getPlayer().getLevel()); - plugin.saveConfig(); - xpSync(e.getPlayer(), true); - - if (e.getOldLevel() < e.getNewLevel()) { - for (Player pp : Bukkit.getOnlinePlayers()) { - pp.playSound(pp.getLocation(), Sound.UI_TOAST_CHALLENGE_COMPLETE, 0.03f, 1); - CubesideModUtils.sendFlashScreenToCubesideMod(plugin, pp, 200, ChatUtil.GREEN); - } - } - } - } - } - - @EventHandler - public void whenPlayerDeath(PlayerDeathEvent e) { - if (Config.getBoolean("worldborderlevel")) { - e.setKeepLevel(true); - e.setDroppedExp(0); - } - } - - @EventHandler - public void onRespawn(PlayerRespawnEvent e) { - if (Config.getBoolean("worldborderlevel")) { - borderSync(); - } - } - - @EventHandler - public void onWorldSpawnChange(SpawnChangeEvent e) { - if (Config.getBoolean("worldborderlevel")) { - borderSync(); - } - } - - @EventHandler - public void onJoin(PlayerJoinEvent e) { - Player p = e.getPlayer(); - if (Config.getBoolean("worldborderlevel")) { - if (e.getPlayer().getLevel() > 0 && Config.getInt("worldborderlevellevel") == 0) { - Config.setValue("worldborderlevellevel", e.getPlayer().getLevel()); - Config.setValue("worldborderlevelxp", e.getPlayer().getExp()); - plugin.saveConfig(); - } - - p.setLevel(Config.getInt("worldborderlevellevel")); - p.setExp((float) Config.getDouble("worldborderlevelxp")); - borderSync(); - } - } - - @EventHandler - public void onPlayerSpawn(PlayerSpawnLocationEvent e) { - Player p = e.getPlayer(); - if (Config.getBoolean("worldborderlevel")) { - if (!p.hasPlayedBefore()) { - e.setSpawnLocation(p.getWorld().getSpawnLocation()); - } - } - } - - @EventHandler - public void onWorldChange(PlayerChangedWorldEvent e) { - if (Config.getBoolean("worldborderlevel")) { - borderSync(); - } - } - - @EventHandler - public void onPortal(PlayerPortalEvent e) { - if (Config.getBoolean("worldborderlevel") && plugin.getTimer().isRunning()) { - World nether = Bukkit.getWorld("world_nether"); - if (nether != null) { - if (e.getTo().getWorld() == nether) { - Location spawnLocation = nether.getSpawnLocation(); - if (!Config.getBoolean("worldborderlevelnether")) { - spawnLocation = Objects.requireNonNull(nether.locateNearestStructure(nether.getSpawnLocation().set(e.getFrom().getX(), e.getFrom().getY(), e.getFrom().getZ()), Structure.FORTRESS, 10000, false).getLocation()); - } - e.setTo(spawnLocation); - } - } - World world = Bukkit.getWorld("world"); - if (world != null) { - if (e.getTo().getWorld() == world) { - Location spawnLocation = world.getSpawnLocation(); - e.setTo(spawnLocation); - } - } - borderSync(); - } - } - - @EventHandler - public void onPortalCreate(PortalCreateEvent e) { - if (Config.getBoolean("worldborderlevel") && plugin.getTimer().isRunning()) { - if (!Config.getBoolean("worldborderlevelnether")) { - World nether = Bukkit.getWorld("world_nether"); - if (e.getWorld() == nether) { - Location spawnLocation = e.getBlocks().get(1).getLocation(); - nether.setSpawnLocation(spawnLocation); - if (Config.getString("worldborderlevelnetherspawnlocation.world") == null) { - Config.setValue("worldborderlevelnetherspawnlocation.world", spawnLocation.getWorld().getName()); - Config.setValue("worldborderlevelnetherspawnlocation.X", spawnLocation.getBlockX()); - Config.setValue("worldborderlevelnetherspawnlocation.Z", spawnLocation.getBlockZ()); - } - Config.setValue("worldborderlevelnether", true); - - borderSync(); - } - - } - } - - } - - private void xpSync(Player p, Boolean borderupdate) { - for (Player player : Bukkit.getOnlinePlayers()) { - if (player != p) { - player.setLevel(Config.getInt("worldborderlevellevel")); - player.setExp((float) Config.getDouble("worldborderlevelxp")); - } - } - if (borderupdate) { - borderSync(); - } - } - - public static void borderSync() { - int level = Config.getInt("worldborderlevellevel"); - plugin.getScheduler().runGlobalDelayed(() -> { - for (Player player : Bukkit.getOnlinePlayers()) { - if (level > 0) { - int borderMultiplayer = Config.getInt("worldborderlevelbordermultiplier"); - worldBorder.setSize(level * borderMultiplayer); - netherBorder.setSize(level * borderMultiplayer); - endBorder.setSize(level * borderMultiplayer); - } else { - worldBorder.setSize(1); - netherBorder.setSize(1); - endBorder.setSize(1); - } - if (player.getWorld().getName().equals("world")) { - player.setWorldBorder(worldBorder); - } else if (player.getWorld().getName().equals("world_nether")) { - player.setWorldBorder(netherBorder); - } else { - player.setWorldBorder(endBorder); - } - } - - World world = Bukkit.getWorld("world"); - world.getWorldBorder().setCenter(world.getSpawnLocation()); - - World nether = Bukkit.getWorld("world_nether"); - nether.getWorldBorder().setCenter(nether.getSpawnLocation()); - }, 1); - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/XPChallenge.java b/src/main/java/de/fanta/challenges/challenges/XPChallenge.java deleted file mode 100644 index e82175f..0000000 --- a/src/main/java/de/fanta/challenges/challenges/XPChallenge.java +++ /dev/null @@ -1,27 +0,0 @@ -package de.fanta.challenges.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import net.kyori.adventure.text.Component; -import org.bukkit.GameMode; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerExpChangeEvent; - -public class XPChallenge implements Listener { - - private final Challenges plugin = Challenges.getPlugin(); - - @EventHandler - public void onPlayerGetXP(PlayerExpChangeEvent e) { - Player p = e.getPlayer(); - if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL && !plugin.getVanish().isVanish(p)) { - if (Config.getBoolean("xpdeath")) { - p.setHealth(0); - ChatUtil.sendBrodCastMessage(p.name().color(ChatUtil.BLUE).append(Component.text(" hat XP eingesammelt!", ChatUtil.RED))); - } - } - } -} diff --git a/src/main/java/de/fanta/challenges/commands/BackpackCommand.java b/src/main/java/de/fanta/challenges/commands/BackpackCommand.java deleted file mode 100644 index 9052e76..0000000 --- a/src/main/java/de/fanta/challenges/commands/BackpackCommand.java +++ /dev/null @@ -1,39 +0,0 @@ -package de.fanta.challenges.commands; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.teams.ChallengeTeam; -import de.fanta.challenges.teams.TeamUtils; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class BackpackCommand extends SubCommand { - private final Challenges plugin; - - public BackpackCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player p)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - if (!Config.getBoolean("event.enabled")) { - plugin.getBackpack().open(p); - } else { - ChallengeTeam challengeTeam = TeamUtils.getPlayerTeam(p); - if (challengeTeam != null) { - challengeTeam.getBackpack().open(p); - } else { - ChatUtil.sendErrorMessage(p, "Du bist in keinem Team!"); - } - } - return true; - } -} diff --git a/src/main/java/de/fanta/challenges/commands/BingoCommand.java b/src/main/java/de/fanta/challenges/commands/BingoCommand.java deleted file mode 100644 index 96b9aa0..0000000 --- a/src/main/java/de/fanta/challenges/commands/BingoCommand.java +++ /dev/null @@ -1,49 +0,0 @@ -package de.fanta.challenges.commands; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.guis.eventgui.BingoItemsGui; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import java.util.Objects; - -public class BingoCommand extends SubCommand { - private final Challenges plugin; - - public BingoCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - if (Config.getBoolean("event.enabled") && Objects.equals(Config.getString("event.type"), "bingo") && plugin.getTimer().isRunning()) { - if (args.hasNext()) { - String playerName = args.getNext(); - Player player = Bukkit.getPlayer(playerName); - - if (player == null) { - ChatUtil.sendErrorMessage(sender, "Dieser Spieler ist nicht online!"); - return true; - } - BingoItemsGui.openPlayerInv(player, (Player) sender); - - } else { - BingoItemsGui.openPlayerInv((Player) sender, (Player) sender); - } - return true; - } else { - ChatUtil.sendErrorMessage(sender, "Aktuell läuft kein Bingo Event"); - } - return true; - } -} diff --git a/src/main/java/de/fanta/challenges/commands/ChestUnlockCommand.java b/src/main/java/de/fanta/challenges/commands/ChestUnlockCommand.java deleted file mode 100644 index a445844..0000000 --- a/src/main/java/de/fanta/challenges/commands/ChestUnlockCommand.java +++ /dev/null @@ -1,36 +0,0 @@ -package de.fanta.challenges.commands; - -import de.fanta.challenges.listeners.ContainerListener; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class ChestUnlockCommand extends SubCommand { - - @Override - public boolean onCommand(CommandSender sender, Command command, String s, String s1, ArgsParser args) { - if (!(sender instanceof Player player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - - if (!Config.getBoolean("event.minilwc")) { - ChatUtil.sendWarningMessage(player, "Aktuell kann es keine Sicherungen geben."); - return true; - } - if (ContainerListener.unlockList.contains(player.getUniqueId())) { - ContainerListener.unlockList.remove(player.getUniqueId()); - ChatUtil.sendNormalMessage(player, "Du entsicherst jetzt keine Sicherung mehr."); - } else { - ContainerListener.unlockList.add(player.getUniqueId()); - ChatUtil.sendNormalMessage(player, "Berühre eine Sicherung, um sie zu entfernen."); - } - - - return true; - } -} diff --git a/src/main/java/de/fanta/challenges/commands/CommandRegistration.java b/src/main/java/de/fanta/challenges/commands/CommandRegistration.java deleted file mode 100644 index 6cd9f8b..0000000 --- a/src/main/java/de/fanta/challenges/commands/CommandRegistration.java +++ /dev/null @@ -1,150 +0,0 @@ -package de.fanta.challenges.commands; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.commands.challenges.ChallengeMaxPlayersCommand; -import de.fanta.challenges.commands.challenges.ChallengesBanCommand; -import de.fanta.challenges.commands.challenges.ChallengesCommand; -import de.fanta.challenges.commands.challenges.ChallengesEnderSeeCommand; -import de.fanta.challenges.commands.challenges.ChallengesHelpCommand; -import de.fanta.challenges.commands.challenges.ChallengesInvSeeCommand; -import de.fanta.challenges.commands.challenges.ChallengesKickCommand; -import de.fanta.challenges.commands.challenges.ChallengesMemoryCommand; -import de.fanta.challenges.commands.challenges.ChallengesPingCommand; -import de.fanta.challenges.commands.challenges.ChallengesSaveCommand; -import de.fanta.challenges.commands.event.EventSaveScoresCommand; -import de.fanta.challenges.commands.challenges.ChallengesUnBanCommand; -import de.fanta.challenges.commands.challenges.TeleportCommand; -import de.fanta.challenges.commands.challenges.CheckItemsCommand; -import de.fanta.challenges.commands.coords.CoordsCommand; -import de.fanta.challenges.commands.coords.CoordsDeleteCommand; -import de.fanta.challenges.commands.coords.CoordsGetCommand; -import de.fanta.challenges.commands.coords.CoordsSaveCommand; -import de.fanta.challenges.commands.coords.CoordsShareCommand; -import de.fanta.challenges.commands.coords.CoordsTargetCommand; -import de.fanta.challenges.commands.editor.EditorCommand; -import de.fanta.challenges.commands.editor.EditorSetCommand; -import de.fanta.challenges.commands.event.CreateTeamsCommand; -import de.fanta.challenges.commands.event.EventCommand; -import de.fanta.challenges.commands.event.EventForceTeamCommand; -import de.fanta.challenges.commands.event.EventGetScoreCommand; -import de.fanta.challenges.commands.event.EventSettingsCommand; -import de.fanta.challenges.commands.event.EventStartCommand; -import de.fanta.challenges.commands.event.EventTeamsSetTeamSpawnCommand; -import de.fanta.challenges.commands.event.EventToggleCommand; -import de.fanta.challenges.commands.hp.HPAddCommand; -import de.fanta.challenges.commands.hp.HPGetCommand; -import de.fanta.challenges.commands.hp.HPMaxCommand; -import de.fanta.challenges.commands.hp.HPRemoveCommand; -import de.fanta.challenges.commands.hp.HPSetCommand; -import de.fanta.challenges.commands.reset.ResetCommand; -import de.fanta.challenges.commands.reset.ResetConfirmCommand; -import de.fanta.challenges.commands.settings.SettingsCommand; -import de.fanta.challenges.commands.timer.TimerCommand; -import de.fanta.challenges.commands.timer.TimerGetCommand; -import de.fanta.challenges.commands.timer.TimerPauseCommand; -import de.fanta.challenges.commands.timer.TimerResetCommand; -import de.fanta.challenges.commands.timer.TimerReverseCommand; -import de.fanta.challenges.commands.timer.TimerSetCommand; -import de.fanta.challenges.commands.timer.TimerStartCommand; -import de.iani.cubesideutils.bukkit.MinecraftVersion; -import de.iani.cubesideutils.bukkit.commands.CommandRouter; - -public record CommandRegistration(Challenges plugin) { - - public void registerCommands() { - - CommandRouter challengesRouter = new CommandRouter(plugin.getCommand("challenges")); - challengesRouter.addPluginCommand(plugin.getCommand("adventure")); - challengesRouter.addCommandMapping(new ChallengesCommand(plugin)); - challengesRouter.addCommandMapping(new ChallengesHelpCommand(plugin), "help"); - challengesRouter.addCommandMapping(new ChallengesKickCommand(plugin), "kick"); - challengesRouter.addCommandMapping(new ChallengesBanCommand(plugin), "ban"); - challengesRouter.addCommandMapping(new ChallengesUnBanCommand(plugin), "unban"); - challengesRouter.addCommandMapping(new ChallengesSaveCommand(plugin), "save"); - challengesRouter.addCommandMapping(new ChallengesPingCommand(), "ping"); - challengesRouter.addCommandMapping(new ChallengesMemoryCommand(), "mem"); - challengesRouter.addCommandMapping(new TeleportCommand(), "tp"); - challengesRouter.addCommandMapping(new ChallengeMaxPlayersCommand(), "maxplayer"); - challengesRouter.addCommandMapping(new CheckItemsCommand(plugin), "checkitems"); - challengesRouter.addCommandMapping(new ChallengesInvSeeCommand(), "invsee"); - challengesRouter.addCommandMapping(new ChallengesEnderSeeCommand(), "endersee"); - - CommandRouter resetRouter = new CommandRouter(plugin.getCommand("reset")); - resetRouter.addCommandMapping(new ResetCommand(plugin)); - resetRouter.addCommandMapping(new ResetConfirmCommand(plugin), "confirm"); - - CommandRouter backpackRouter = new CommandRouter(plugin.getCommand("backpack")); - backpackRouter.addCommandMapping(new BackpackCommand(plugin)); - - CommandRouter coordsRouter = new CommandRouter(plugin.getCommand("coords")); - coordsRouter.addCommandMapping(new CoordsCommand()); - coordsRouter.addCommandMapping(new CoordsShareCommand(), "share"); - coordsRouter.addCommandMapping(new CoordsGetCommand(), "get"); - coordsRouter.addCommandMapping(new CoordsSaveCommand(plugin), "save"); - coordsRouter.addCommandMapping(new CoordsDeleteCommand(), "delete"); - if (MinecraftVersion.isAboveOrEqual(1,19,0)) { - coordsRouter.addCommandMapping(new CoordsTargetCommand(plugin), "target"); - } - CommandRouter hpRouter = new CommandRouter(plugin.getCommand("hp")); - hpRouter.addCommandMapping(new HPAddCommand(plugin), "add"); - hpRouter.addCommandMapping(new HPGetCommand(plugin), "get"); - hpRouter.addCommandMapping(new HPMaxCommand(plugin), "max"); - hpRouter.addCommandMapping(new HPRemoveCommand(plugin), "remove"); - hpRouter.addCommandMapping(new HPSetCommand(plugin), "set"); - - CommandRouter timerRouter = new CommandRouter(plugin.getCommand("timer")); - timerRouter.addCommandMapping(new TimerCommand(plugin)); - timerRouter.addCommandMapping(new TimerPauseCommand(plugin), "pause"); - timerRouter.addCommandMapping(new TimerResetCommand(plugin), "reset"); - timerRouter.addCommandMapping(new TimerReverseCommand(plugin), "reverse"); - timerRouter.addCommandMapping(new TimerSetCommand(plugin), "set"); - timerRouter.addCommandMapping(new TimerStartCommand(plugin), "start"); - timerRouter.addCommandMapping(new TimerGetCommand(plugin), "get"); - - CommandRouter forcemlgRouter = new CommandRouter(plugin.getCommand("forcemlg")); - forcemlgRouter.addCommandMapping(new ForceMLGCommand(plugin)); - - CommandRouter editorRouter = new CommandRouter(plugin.getCommand("editor")); - editorRouter.addCommandMapping(new EditorCommand(plugin)); - editorRouter.addCommandMapping(new EditorSetCommand(plugin), "set"); - - CommandRouter leaveRouter = new CommandRouter(plugin.getCommand("leave")); - leaveRouter.addCommandMapping(new LeaveCommand(plugin)); - - CommandRouter eventRouter = new CommandRouter(plugin.getCommand("event")); - eventRouter.addCommandMapping(new EventCommand()); - eventRouter.addCommandMapping(new EventToggleCommand(plugin, true), "enable"); - eventRouter.addCommandMapping(new EventToggleCommand(plugin, false), "disable"); - eventRouter.addCommandMapping(new EventSettingsCommand(), "settings"); - eventRouter.addCommandMapping(new EventGetScoreCommand(plugin), "getscore"); - eventRouter.addCommandMapping(new EventStartCommand(plugin), "start"); - eventRouter.addCommandMapping(new CreateTeamsCommand(), "createteams"); - eventRouter.addCommandMapping(new EventTeamsSetTeamSpawnCommand(), "setteamspawn"); - eventRouter.addCommandMapping(new EventForceTeamCommand(), "forceteam"); - eventRouter.addCommandMapping(new EventSaveScoresCommand(plugin), "savescores"); - - - CommandRouter bingoRouter = new CommandRouter(plugin.getCommand("bingo")); - bingoRouter.addCommandMapping(new BingoCommand(plugin)); - - CommandRouter villageRouter = new CommandRouter(plugin.getCommand("village")); - villageRouter.addCommandMapping(new VillageCommand(plugin)); - - CommandRouter netherRouter = new CommandRouter(plugin.getCommand("nether")); - netherRouter.addCommandMapping(new NetherToggleCommand(plugin, true), "enable"); - netherRouter.addCommandMapping(new NetherToggleCommand(plugin, false), "disable"); - - CommandRouter settingsRouter = new CommandRouter(plugin.getCommand("settings")); - settingsRouter.addCommandMapping(new SettingsCommand(plugin)); - - CommandRouter reviveRouter = new CommandRouter(plugin.getCommand("revive")); - reviveRouter.addCommandMapping(new ReviveCommand(plugin)); - - CommandRouter skipItemRouter = new CommandRouter(plugin.getCommand("skipitem")); - skipItemRouter.addCommandMapping(new SkipItemCommand(plugin)); - - CommandRouter unlockRouter = new CommandRouter(plugin.getCommand("unlock")); - unlockRouter.addPluginCommand(plugin.getCommand("cremove")); - unlockRouter.addCommandMapping(new ChestUnlockCommand()); - } -} diff --git a/src/main/java/de/fanta/challenges/commands/ForceMLGCommand.java b/src/main/java/de/fanta/challenges/commands/ForceMLGCommand.java deleted file mode 100644 index 8033068..0000000 --- a/src/main/java/de/fanta/challenges/commands/ForceMLGCommand.java +++ /dev/null @@ -1,41 +0,0 @@ -package de.fanta.challenges.commands; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.challenges.MLGChallenge; -import de.fanta.challenges.utils.ChatUtil; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class ForceMLGCommand extends SubCommand { - - private final Challenges plugin; - - public ForceMLGCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { - if (!MLGChallenge.triggerMLG()) { - ChatUtil.sendWarningMessage(sender, "Ein MLG findet bereits statt! Oder MLGs sind nicht aktiv."); - } - } else if (plugin.getCurrentEditor() != null) { - ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); - return true; - } else { - ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); - ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); - return true; - } - return true; - } - -} diff --git a/src/main/java/de/fanta/challenges/commands/LeaveCommand.java b/src/main/java/de/fanta/challenges/commands/LeaveCommand.java deleted file mode 100644 index a393c1d..0000000 --- a/src/main/java/de/fanta/challenges/commands/LeaveCommand.java +++ /dev/null @@ -1,31 +0,0 @@ -package de.fanta.challenges.commands; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class LeaveCommand extends SubCommand { - - private final Challenges plugin; - - public LeaveCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player p)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } else { - plugin.portPlayerToLobby(p); - } - return true; - } - -} - diff --git a/src/main/java/de/fanta/challenges/commands/NetherToggleCommand.java b/src/main/java/de/fanta/challenges/commands/NetherToggleCommand.java deleted file mode 100644 index 861af40..0000000 --- a/src/main/java/de/fanta/challenges/commands/NetherToggleCommand.java +++ /dev/null @@ -1,86 +0,0 @@ -package de.fanta.challenges.commands; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class NetherToggleCommand extends SubCommand { - - private final Challenges plugin; - private final boolean enable; - - public NetherToggleCommand(Challenges plugin, boolean enable) { - this.plugin = plugin; - this.enable = enable; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player p)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - if (plugin.isEditor(p) || p.hasPermission("Challenges.editor.override")) { - if (enable) { - if (!Config.getBoolean("nether.enabled")) { - Config.setValue("nether.enabled", true); - - Location spawn = Bukkit.getWorlds().get(1).getSpawnLocation(); - World world = spawn.getWorld(); - plugin.getScheduler().runLocalDelayed(spawn, () -> { - for (int x = spawn.getBlockX() - 2; x <= spawn.getBlockX() + 2; x++) { - for (int z = spawn.getBlockZ() - 2; z <= spawn.getBlockZ() + 2; z++) { - for (int y = spawn.getBlockY(); y <= spawn.getBlockY() + 3; y++) { - world.getBlockAt(x, y, z).setType(Material.AIR); - world.getBlockAt(x, y, spawn.getBlockZ() + 3).setType(Material.SLIME_BLOCK); - world.getBlockAt(x, y, spawn.getBlockZ() - 3).setType(Material.SLIME_BLOCK); - world.getBlockAt(spawn.getBlockX() + 3, y, z).setType(Material.SLIME_BLOCK); - world.getBlockAt(spawn.getBlockX() - 3, y, z).setType(Material.SLIME_BLOCK); - } - world.getBlockAt(x, spawn.getBlockY(), z).setType(Material.SLIME_BLOCK); - world.getBlockAt(x, spawn.getBlockY() - 1, z).setType(Material.BEDROCK); - world.getBlockAt(x, spawn.getBlockY() + 4, z).setType(Material.SLIME_BLOCK); - } - } - - for (Player pp : Bukkit.getOnlinePlayers()) { - pp.teleportAsync(spawn.clone().add(0, 1, 0)); - } - }, 1L); - - ChatUtil.sendTitleToAll(Component.text("Nether Challenge"), Component.text("Nether-Modus aktiviert", ChatUtil.GREEN)); - } else { - ChatUtil.sendErrorMessage(p, "Die Nether Challenge läuft bereits!"); - return true; - } - } else { - if (Config.getBoolean("nether.enabled")) { - Config.setValue("nether.enabled", false); - ChatUtil.sendTitleToAll(Component.text("Nether Challenge"), Component.text("Nether-Modus deaktiviert", ChatUtil.RED)); - } else { - ChatUtil.sendErrorMessage(p, "Aktuell läuft keine Nether Challenge!"); - return true; - } - } - } else if (plugin.getCurrentEditor() != null) { - ChatUtil.sendErrorMessage(p, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); - return true; - } else { - ChatUtil.sendErrorMessage(p, "Aktuell gibt es keinen Editor!"); - ChatUtil.sendErrorMessage(p, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); - return true; - } - return true; - } -} - diff --git a/src/main/java/de/fanta/challenges/commands/ReviveCommand.java b/src/main/java/de/fanta/challenges/commands/ReviveCommand.java deleted file mode 100644 index e71957a..0000000 --- a/src/main/java/de/fanta/challenges/commands/ReviveCommand.java +++ /dev/null @@ -1,64 +0,0 @@ -package de.fanta.challenges.commands; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.challenges.MLGChallenge; -import de.fanta.challenges.utils.ChatUtil; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.OfflinePlayer; -import org.bukkit.attribute.Attribute; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class ReviveCommand extends SubCommand { - - private final Challenges plugin; - - public ReviveCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command cmd, String lable, String s1, ArgsParser args) { - if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { - if (!args.hasNext()) { - ChatUtil.sendWarningMessage(sender, "Benutze: /revive "); - return true; - } - - String next = args.next(); - if (next.equalsIgnoreCase("all")) { - MLGChallenge.setMLGinProgress(false); - for (Player p : Bukkit.getOnlinePlayers()) { - p.setHealth(p.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()); - p.setGameMode(GameMode.SURVIVAL); - } - ChatUtil.sendBrodCastMessage(Component.text("Alle Spieler wurden wiederbelebt! Es kann weiter gehen!", ChatUtil.GREEN)); - } else { - OfflinePlayer other = (Bukkit.getServer().getOfflinePlayer(next)); - if (other.isOnline()) { - Player p = (Player) other; - p.setHealth(p.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()); - p.setGameMode(GameMode.SURVIVAL); - ChatUtil.sendBrodCastMessage(p.name().append(Component.text(" wurde von ").append(sender.name()).append(Component.text(" wiederbelebt!"))).color(ChatUtil.GREEN)); - } else { - ChatUtil.sendErrorMessage(sender, "Dieser Spieler ist nicht online!"); - } - } - } else { - if (plugin.getCurrentEditor() != null) { - if (plugin.getCurrentEditor() != sender) { - ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! Nur " + plugin.getCurrentEditor().getName() + " kann Spieler wiederbeleben!"); - } - } else { - ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); - ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden, musst du dir im Freebuild VIP kaufen!"); - } - } - return true; - } -} \ No newline at end of file diff --git a/src/main/java/de/fanta/challenges/commands/SkipItemCommand.java b/src/main/java/de/fanta/challenges/commands/SkipItemCommand.java deleted file mode 100644 index ca1f2f4..0000000 --- a/src/main/java/de/fanta/challenges/commands/SkipItemCommand.java +++ /dev/null @@ -1,44 +0,0 @@ -package de.fanta.challenges.commands; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.challenges.AllItemsChallenge; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class SkipItemCommand extends SubCommand { - - private final Challenges plugin; - - public SkipItemCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player p)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - if (plugin.getCurrentEditor() != null) { - if (!plugin.isEditor(p) || !p.hasPermission("Challenges.editor.override")) { - ChatUtil.sendErrorMessage(p, "Das kann nur der Editor!"); - return true; - } - } else { - ChatUtil.sendErrorMessage(p, "Aktuell gibt es keinen Editor!"); - } - - if (Config.getBoolean("allitems")) { - AllItemsChallenge.next(p, true); - } else { - ChatUtil.sendErrorMessage(p, "Dies geht nur wenn All Items Aktiv ist!"); - } - - return true; - } -} diff --git a/src/main/java/de/fanta/challenges/commands/VillageCommand.java b/src/main/java/de/fanta/challenges/commands/VillageCommand.java deleted file mode 100644 index 2c25841..0000000 --- a/src/main/java/de/fanta/challenges/commands/VillageCommand.java +++ /dev/null @@ -1,115 +0,0 @@ -package de.fanta.challenges.commands; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.ServerType; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.HeightMap; -import org.bukkit.Location; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.generator.structure.Structure; -import org.bukkit.util.StructureSearchResult; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; - -public class VillageCommand extends SubCommand { - - private final Challenges plugin; - - public VillageCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - - if (plugin.isEditor(player) || player.hasPermission("Challenges.editor.override")) { - if (args.hasNext()) { - String structureString = args.getNext(); - Structure structure; - - try { - structure = VillageTypes.valueOf(structureString.toUpperCase()).getStructure(); - } catch (IllegalArgumentException ex) { - ChatUtil.sendErrorMessage(player, "Das von dir gesuchte Villager Dorf (" + structureString + ") gibt es nicht."); - return true; - } - - ChatUtil.sendWarningMessage(player, "Die suche kann etwas länger dauern und der Server wird laggen."); - StructureSearchResult villageResult = player.getWorld().locateNearestStructure(player.getLocation(), structure, 10000, true); - - if (villageResult == null) { - ChatUtil.sendErrorMessage(player, "Kein Villager Dorf gefunden."); - return true; - } - - Location village = villageResult.getLocation(); - int x = village.getBlockX(); - int z = village.getBlockZ(); - Location villagetop = village.getWorld().getHighestBlockAt(x, z, HeightMap.MOTION_BLOCKING).getLocation().add(0, 1, 0); - int y = villagetop.getBlockY(); - Bukkit.getWorlds().getFirst().setSpawnLocation(villagetop); - ChatUtil.sendMessage(player, Component.text("Dorf: ", ChatUtil.GREEN).append(Component.text(x + " " + y + " " + z, ChatUtil.BLUE))); - for (Player pp : Bukkit.getOnlinePlayers()) { - pp.teleportAsync(villagetop); - ChatUtil.sendNormalMessage(pp, "Dorfspawn gesetzt!"); - } - if (plugin.getServerType() == ServerType.CHALLENGE) { - if (!Config.getBoolean("editsettings")) { - Config.setValue("editsettings", true, false); - plugin.getLogger().info("Diese Challenge ist kein SpeedRun mehr da ein Village Spawn gesetzt wurde."); - if (plugin.getCurrentEditor() != null) { - ChatUtil.sendWarningMessage(plugin.getCurrentEditor(), "Diese Challenge wird nicht mehr als Speed Run gezählt, da ein Village Spawn gesetzt wurde."); - } - } - } - } else { - ChatUtil.sendWarningMessage(player, "/village "); - } - return true; - } else if (plugin.getCurrentEditor() != null) { - ChatUtil.sendErrorMessage(player, "Du bist kein Editor! nur" + plugin.getCurrentEditor().getName() + " kann nach Dörfern suchen"); - return true; - } else { - ChatUtil.sendErrorMessage(player, "Aktuell gibt es keinen Editor!"); - ChatUtil.sendErrorMessage(player, "Um selbst Editor zu werden musst du dir im Freebuild VIP Kaufen!"); - return true; - } - } - - @Override - public Collection onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) { - String[] villages = new String[]{"Plains", "Desert", "Savanna", "Snowy", "Taiga"}; - return new ArrayList<>(Arrays.asList(villages)); - } - - public enum VillageTypes { - PLAINS(Structure.VILLAGE_PLAINS), - DESERT(Structure.VILLAGE_DESERT), - SAVANNA(Structure.VILLAGE_SAVANNA), - SNOWY(Structure.VILLAGE_SNOWY), - TAIGA(Structure.VILLAGE_TAIGA); - - private final Structure structure; - - VillageTypes(Structure structure) { - this.structure = structure; - } - - public Structure getStructure() { - return structure; - } - } -} \ No newline at end of file diff --git a/src/main/java/de/fanta/challenges/commands/challenges/ChallengeMaxPlayersCommand.java b/src/main/java/de/fanta/challenges/commands/challenges/ChallengeMaxPlayersCommand.java deleted file mode 100644 index c088183..0000000 --- a/src/main/java/de/fanta/challenges/commands/challenges/ChallengeMaxPlayersCommand.java +++ /dev/null @@ -1,45 +0,0 @@ -package de.fanta.challenges.commands.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.events.PlayerCountChangedEvent; -import de.fanta.challenges.utils.ChatUtil; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class ChallengeMaxPlayersCommand extends SubCommand { - @Override - public boolean onCommand(CommandSender sender, Command command, String s, String s1, ArgsParser args) { - - if (!(sender instanceof Player player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - - if (args.hasNext()) { - try { - int playeCount = Integer.parseInt(args.getNext()); - Bukkit.getServer().setMaxPlayers(playeCount); - Bukkit.getPluginManager().callEvent(new PlayerCountChangedEvent(Challenges.getPlugin().getVanish().getPlayerListWithoutVanishPlayers().size())); - ChatUtil.sendMessage(player, Component.text("Du hast die maximale Spieleranzahl vom server auf ", ChatUtil.GREEN).append(Component.text(playeCount, ChatUtil.BLUE).append(Component.text(" gesetzt!", ChatUtil.GREEN)))); - } catch (NumberFormatException ex) { - ChatUtil.sendErrorMessage(player, "Du musst eine Zahl angeben!"); - } - } else { - ChatUtil.sendErrorMessage(player, "Du musst eine Zahl angeben!"); - } - - - return true; - } - - - @Override - public String getRequiredPermission() { - return "Challenges.editor.override"; - } -} diff --git a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesBanCommand.java b/src/main/java/de/fanta/challenges/commands/challenges/ChallengesBanCommand.java deleted file mode 100644 index a1fe357..0000000 --- a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesBanCommand.java +++ /dev/null @@ -1,64 +0,0 @@ -package de.fanta.challenges.commands.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class ChallengesBanCommand extends SubCommand { - private final Challenges plugin; - - public ChallengesBanCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - if (plugin.isEditor(player) || player.hasPermission("Challenges.editor.override")) { - if (args.hasNext()) { - String playerName = args.getNext(); - Player punishedPlayer = Bukkit.getPlayer(playerName); - - if (punishedPlayer == null) { - ChatUtil.sendErrorMessage(player, "Dieser Spieler ist nicht online!"); - return true; - } - - if (punishedPlayer == player) { - ChatUtil.sendErrorMessage(player, "Du kannst dich nicht selbst bannen."); - return true; - } - - if (punishedPlayer.hasPermission("Challenges.editor.override")) { - ChatUtil.sendErrorMessage(player, "Diese Person kannst du nicht bannen."); - return true; - } - - ChatUtil.sendErrorMessage(punishedPlayer, "Du wurdest vom Editor gebannt!"); - plugin.addBannedPlayer(punishedPlayer.getUniqueId(), true); - plugin.portPlayerToLobby(punishedPlayer); - ChatUtil.sendMessage(player, Component.text("Du hast ", ChatUtil.GREEN).append(punishedPlayer.name().color(ChatUtil.BLUE)).append(Component.text(" gebannt.", ChatUtil.GREEN))); - return true; - } else { - ChatUtil.sendWarningMessage(player, "/challenge ban [Player]"); - } - return true; - } else if (plugin.getCurrentEditor() != null) { - ChatUtil.sendErrorMessage(player, "Du bist kein Editor! Nur " + plugin.getCurrentEditor().getName() + " kann Spieler bannen."); - return true; - } else { - ChatUtil.sendErrorMessage(player, "Aktuell gibt es keinen Editor!"); - ChatUtil.sendErrorMessage(player, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); - return true; - } - } -} diff --git a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesCommand.java b/src/main/java/de/fanta/challenges/commands/challenges/ChallengesCommand.java deleted file mode 100644 index 1711ccc..0000000 --- a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesCommand.java +++ /dev/null @@ -1,25 +0,0 @@ -package de.fanta.challenges.commands.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; - -public class ChallengesCommand extends SubCommand { - - private final Challenges plugin; - - public ChallengesCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - 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"); - return true; - } - -} diff --git a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesEnderSeeCommand.java b/src/main/java/de/fanta/challenges/commands/challenges/ChallengesEnderSeeCommand.java deleted file mode 100644 index 2348a81..0000000 --- a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesEnderSeeCommand.java +++ /dev/null @@ -1,40 +0,0 @@ -package de.fanta.challenges.commands.challenges; - -import de.fanta.challenges.utils.ChatUtil; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class ChallengesEnderSeeCommand extends SubCommand { - @Override - public boolean onCommand(CommandSender sender, Command command, String s, String s1, ArgsParser args) { - if (!(sender instanceof Player player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - - if (!player.hasPermission("challenges.endersee")) { - ChatUtil.sendErrorMessage(player, "Keine Rechte!"); - return true; - } - - if (args.hasNext()) { - Player enderSeePlayer = Bukkit.getPlayer(args.getNext()); - - if (enderSeePlayer == null) { - ChatUtil.sendErrorMessage(sender, "Dieser Spieler ist nicht online!"); - return true; - } - - player.openInventory(enderSeePlayer.getEnderChest()); - - } else { - ChatUtil.sendErrorMessage(player, "/challenges endersee "); - return true; - } - return true; - } -} diff --git a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesHelpCommand.java b/src/main/java/de/fanta/challenges/commands/challenges/ChallengesHelpCommand.java deleted file mode 100644 index a6eee1d..0000000 --- a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesHelpCommand.java +++ /dev/null @@ -1,40 +0,0 @@ -package de.fanta.challenges.commands.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import net.kyori.adventure.text.Component; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class ChallengesHelpCommand extends SubCommand { - - private final Challenges plugin; - - public ChallengesHelpCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - - if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { - ChatUtil.sendNormalMessage(sender, "Alle Befehle und Funktionen vom Challenge Plugin findest du in unserem Wiki."); - ChatUtil.sendNormalMessage(sender, "Hier Klicken --> https://wiki.cubeside.de/Challenge"); - return true; - } else if (plugin.getCurrentEditor() != null) { - ChatUtil.sendMessage(sender, Component.text("Du bist kein Editor! ", ChatUtil.RED).append(plugin.getCurrentEditor().name().color(ChatUtil.BLUE).append(Component.text(" muss die Map bearbeiten!", ChatUtil.RED)))); - return true; - } else { - ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); - ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP Kaufen!"); - return true; - } - } -} diff --git a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesInvSeeCommand.java b/src/main/java/de/fanta/challenges/commands/challenges/ChallengesInvSeeCommand.java deleted file mode 100644 index abdbb52..0000000 --- a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesInvSeeCommand.java +++ /dev/null @@ -1,40 +0,0 @@ -package de.fanta.challenges.commands.challenges; - -import de.fanta.challenges.utils.ChatUtil; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class ChallengesInvSeeCommand extends SubCommand { - @Override - public boolean onCommand(CommandSender sender, Command command, String s, String s1, ArgsParser args) { - if (!(sender instanceof Player player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - - if (!player.hasPermission("challenges.invsee")) { - ChatUtil.sendErrorMessage(player, "Keine Rechte!"); - return true; - } - - if (args.hasNext()) { - Player invseePlayer = Bukkit.getPlayer(args.getNext()); - - if (invseePlayer == null) { - ChatUtil.sendErrorMessage(sender, "Dieser Spieler ist nicht online!"); - return true; - } - - player.openInventory(invseePlayer.getInventory()); - - } else { - ChatUtil.sendWarningMessage(player, "/challenges invsee "); - return true; - } - return true; - } -} diff --git a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesKickCommand.java b/src/main/java/de/fanta/challenges/commands/challenges/ChallengesKickCommand.java deleted file mode 100644 index 0c13c24..0000000 --- a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesKickCommand.java +++ /dev/null @@ -1,70 +0,0 @@ -package de.fanta.challenges.commands.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class ChallengesKickCommand extends SubCommand { - private final Challenges plugin; - - public ChallengesKickCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - if (plugin.isEditor(player) || player.hasPermission("Challenges.editor.override")) { - if (args.hasNext()) { - String playerName = args.getNext(); - Player punishedPlayer = Bukkit.getPlayer(playerName); - - if (punishedPlayer == null) { - ChatUtil.sendErrorMessage(player, "Dieser Spieler ist nicht online!"); - return true; - } - - if (punishedPlayer == player) { - ChatUtil.sendErrorMessage(player, "Du kannst dich nicht selbst kicken."); - return true; - } - - if (punishedPlayer.hasPermission("Challenges.editor.override")) { - ChatUtil.sendErrorMessage(player, "Diese Person kannst du nicht kicken."); - return true; - } - - ChatUtil.sendWarningMessage(punishedPlayer, "Du wurdest vom Editor gekickt!"); - ChatUtil.sendWarningMessage(punishedPlayer, "Du kannst in einer Minute wieder joinen"); - plugin.addBannedPlayer(punishedPlayer.getUniqueId(), false); - plugin.portPlayerToLobby(punishedPlayer); - ChatUtil.sendMessage(player, Component.text("Du hast ", ChatUtil.GREEN).append(punishedPlayer.name().color(ChatUtil.BLUE).append(Component.text(" gekickt. Der Spieler kann in einer Minute wieder Joinen", ChatUtil.GREEN)))); - plugin.getScheduler().runGlobalDelayed(() -> { - if (plugin.isPlayerBanned(punishedPlayer.getUniqueId())) { - plugin.removeBannedPlayer(punishedPlayer.getUniqueId(), false); - } - }, 20 * 60); - return true; - } else { - ChatUtil.sendWarningMessage(player, "/challenge kick [Player]"); - } - return true; - } else if (plugin.getCurrentEditor() != null) { - ChatUtil.sendErrorMessage(player, "Du bist kein Editor! Nur " + plugin.getCurrentEditor().getName() + " kann Spieler kicken."); - return true; - } else { - ChatUtil.sendErrorMessage(player, "Aktuell gibt es keinen Editor!"); - ChatUtil.sendErrorMessage(player, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); - return true; - } - } -} diff --git a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesMemoryCommand.java b/src/main/java/de/fanta/challenges/commands/challenges/ChallengesMemoryCommand.java deleted file mode 100644 index 8f7b6a8..0000000 --- a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesMemoryCommand.java +++ /dev/null @@ -1,26 +0,0 @@ -package de.fanta.challenges.commands.challenges; - -import de.fanta.challenges.utils.ChatUtil; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; - -public class ChallengesMemoryCommand extends SubCommand { - - private static final long MB = 1024L * 1024L; - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (sender.hasPermission("Challenges.editor.override")) { - ChatUtil.sendNormalMessage(sender, "Speichernutzung: " + KBToMB(Runtime.getRuntime().totalMemory()) + " MB / " + KBToMB(Runtime.getRuntime().maxMemory()) + " MB (Freier Speicher: " + KBToMB(Runtime.getRuntime().freeMemory()) + "MB)"); - } else { - ChatUtil.sendErrorMessage(sender, "Keine Rechte!"); - } - return true; - } - - public static long KBToMB(long KB) { - return KB / MB; - } -} diff --git a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesPingCommand.java b/src/main/java/de/fanta/challenges/commands/challenges/ChallengesPingCommand.java deleted file mode 100644 index 0228146..0000000 --- a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesPingCommand.java +++ /dev/null @@ -1,37 +0,0 @@ -package de.fanta.challenges.commands.challenges; - -import de.fanta.challenges.utils.ChatUtil; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class ChallengesPingCommand extends SubCommand { - - public ChallengesPingCommand() { - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - - if (args.hasNext()) { - String playerName = args.getNext(); - Player player = Bukkit.getPlayer(playerName); - - if (player == null) { - ChatUtil.sendErrorMessage(sender, "Dieser Spieler ist nicht online!"); - return true; - } - ChatUtil.sendNormalMessage(sender, "Ping von " + player.getName() + ": " + player.getPing()); - } else { - ChatUtil.sendNormalMessage(sender, "Ping: " + ((Player) sender).getPing()); - } - return true; - } -} diff --git a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesSaveCommand.java b/src/main/java/de/fanta/challenges/commands/challenges/ChallengesSaveCommand.java deleted file mode 100644 index ddaab1b..0000000 --- a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesSaveCommand.java +++ /dev/null @@ -1,51 +0,0 @@ -package de.fanta.challenges.commands.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.guis.savegui.ChallengeSaveGui; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import de.iani.playerUUIDCache.CachedPlayer; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class ChallengesSaveCommand extends SubCommand { - - private final Challenges plugin; - - public ChallengesSaveCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - if (!Config.getBoolean("firsttimerstart")) { - ChatUtil.sendWarningMessage(player, "Du kannst nur gestartete Maps Speicher."); - return true; - } - CachedPlayer savePlayer; - if (args.hasNext()) { - if (!player.hasPermission("challenge.save.other")) { - ChatUtil.sendErrorMessage(player, "Keine Rechte! (Du kannst nur eigene maps Speichern)"); - return true; - } - String savePlayerName = args.getNext(); - savePlayer = plugin.getPlayerUUIDCache().getPlayer(savePlayerName); - } else { - savePlayer = plugin.getPlayerUUIDCache().getPlayer(player.getUniqueId()); - } - - if (savePlayer != null) { - new ChallengeSaveGui(player, savePlayer).open(); - } else { - ChatUtil.sendErrorMessage(player, "Spieler nicht gefunden!"); - } - return true; - } -} diff --git a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesUnBanCommand.java b/src/main/java/de/fanta/challenges/commands/challenges/ChallengesUnBanCommand.java deleted file mode 100644 index 5f0ea08..0000000 --- a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesUnBanCommand.java +++ /dev/null @@ -1,74 +0,0 @@ -package de.fanta.challenges.commands.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import de.iani.playerUUIDCache.CachedPlayer; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.UUID; - -public class ChallengesUnBanCommand extends SubCommand { - private final Challenges plugin; - - public ChallengesUnBanCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - if (plugin.isEditor(player) || player.hasPermission("Challenges.editor.override")) { - if (args.hasNext()) { - String playerName = args.getNext(); - CachedPlayer punishedPlayer = plugin.playerUUIDCache.getPlayer(playerName); - - if (punishedPlayer == null) { - ChatUtil.sendErrorMessage(player, "Player " + playerName + " nicht gefunden"); - return true; - } - - if (!plugin.isPlayerBanned(punishedPlayer.getUniqueId())) { - ChatUtil.sendMessage(player, Component.text(punishedPlayer.getName(), ChatUtil.BLUE).append(Component.text(" ist nicht gebannt.", ChatUtil.GREEN))); - return true; - } - - plugin.removeBannedPlayer(punishedPlayer.getUniqueId(), true); - ChatUtil.sendMessage(player, Component.text("Du hast ", ChatUtil.GREEN).append(Component.text(punishedPlayer.getName(), ChatUtil.BLUE).append(Component.text(" entbannt.", ChatUtil.GREEN)))); - return true; - } else { - ChatUtil.sendWarningMessage(player, "/challenge unban [Player]"); - } - return true; - } else if (plugin.getCurrentEditor() != null) { - ChatUtil.sendErrorMessage(player, "Du bist kein Editor! Nur " + plugin.getCurrentEditor().getName() + " kann Spieler entbannen."); - return true; - } else { - ChatUtil.sendErrorMessage(player, "Aktuell gibt es keinen Editor!"); - ChatUtil.sendErrorMessage(player, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); - return true; - } - } - - @Override - public Collection onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) { - ArrayList tablist = new ArrayList<>(); - for (String UUIDString : Config.getStringList("bannedPlayers")) { - OfflinePlayer tempOfflinePlayer = Bukkit.getOfflinePlayer(UUID.fromString(UUIDString)); - tablist.add(tempOfflinePlayer.getName()); - } - return tablist; - } -} diff --git a/src/main/java/de/fanta/challenges/commands/challenges/CheckItemsCommand.java b/src/main/java/de/fanta/challenges/commands/challenges/CheckItemsCommand.java deleted file mode 100644 index a0b676c..0000000 --- a/src/main/java/de/fanta/challenges/commands/challenges/CheckItemsCommand.java +++ /dev/null @@ -1,72 +0,0 @@ -package de.fanta.challenges.commands.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.guis.CheckItemsGUI; -import de.fanta.challenges.utils.ChatUtil; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import net.kyori.adventure.text.Component; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; - -import java.io.IOException; -import java.util.Collection; -import java.util.Collections; -import java.util.logging.Level; - -public class CheckItemsCommand extends SubCommand { - - private final Challenges plugin; - private boolean reset = false; - - public CheckItemsCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player player)) { - return true; - } - if (!args.hasNext()) { - if (!reset) { - FileConfiguration config = Challenges.getPlugin().getItemConfig(); - config.set("items", null); - try { - Challenges.getPlugin().ItemConfig.save(Challenges.getPlugin().ItemConfigFile); - } catch (IOException e) { - plugin.getLogger().log(Level.SEVERE, "Error while saving item Config", e); - } - reset = true; - } - new CheckItemsGUI(player).open(); - return true; - } - - if (args.getNext().equals("additemtoblacklist")) { - ItemStack stack = player.getInventory().getItemInMainHand(); - CheckItemsGUI.addItem(stack.getType()); - ChatUtil.sendMessage(player, Component.text("Item ", ChatUtil.GREEN).append(Component.text(stack.getType().translationKey(), ChatUtil.BLUE).append(Component.text(" hinzugefügt", ChatUtil.GREEN)))); - } else { - ChatUtil.sendErrorMessage(player, "/checkitems "); - } - - return true; - } - - @Override - public String getRequiredPermission() { - return "challenges.temp"; - } - - @Override - public Collection onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) { - if (args.remaining() == 1) { - return Collections.singleton("additemtoblacklist"); - } - return Collections.emptyList(); - } -} diff --git a/src/main/java/de/fanta/challenges/commands/challenges/TeleportCommand.java b/src/main/java/de/fanta/challenges/commands/challenges/TeleportCommand.java deleted file mode 100644 index 630e239..0000000 --- a/src/main/java/de/fanta/challenges/commands/challenges/TeleportCommand.java +++ /dev/null @@ -1,29 +0,0 @@ -package de.fanta.challenges.commands.challenges; - -import de.fanta.challenges.guis.TeleportGUI; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class TeleportCommand extends SubCommand { - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - - if (Config.getBoolean("teleportcommand") || player.hasPermission("Challenges.editor.override")) { - new TeleportGUI(player).open(); - } else { - ChatUtil.sendWarningMessage(player, "Teleport deaktiviert!"); - } - - return true; - } -} diff --git a/src/main/java/de/fanta/challenges/commands/coords/CoordsCommand.java b/src/main/java/de/fanta/challenges/commands/coords/CoordsCommand.java deleted file mode 100644 index 0637698..0000000 --- a/src/main/java/de/fanta/challenges/commands/coords/CoordsCommand.java +++ /dev/null @@ -1,22 +0,0 @@ -package de.fanta.challenges.commands.coords; - -import de.fanta.challenges.guis.coordsgui.CoordsGUI; -import de.fanta.challenges.utils.ChatUtil; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class CoordsCommand extends SubCommand { - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - CoordsGUI.buildCoordsInventory(player); - return true; - } -} \ No newline at end of file diff --git a/src/main/java/de/fanta/challenges/commands/coords/CoordsDeleteCommand.java b/src/main/java/de/fanta/challenges/commands/coords/CoordsDeleteCommand.java deleted file mode 100644 index c71d20c..0000000 --- a/src/main/java/de/fanta/challenges/commands/coords/CoordsDeleteCommand.java +++ /dev/null @@ -1,45 +0,0 @@ -package de.fanta.challenges.commands.coords; - -import de.fanta.challenges.guis.coordsgui.CoordsDeleteGUI; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import java.util.Collection; - -public class CoordsDeleteCommand extends SubCommand { - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - - if (args.hasNext()) { - String next = args.getAll(null); - - if (next == null) { - ChatUtil.sendErrorMessage(player, "Du musst einen Namen angeben."); - return true; - } - - if (Config.contains("Saved_Locations." + next)) { - CoordsDeleteGUI.createCoordsDeleteGUI(player, next, null); - } else { - ChatUtil.sendWarningMessage(player, "Diese Position existiert nicht!"); - } - return true; - } - return false; - } - - @Override - public Collection onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) { - return Config.getConfigurationSection("Saved_Locations").getKeys(false); - } -} diff --git a/src/main/java/de/fanta/challenges/commands/coords/CoordsGetCommand.java b/src/main/java/de/fanta/challenges/commands/coords/CoordsGetCommand.java deleted file mode 100644 index b1e4c45..0000000 --- a/src/main/java/de/fanta/challenges/commands/coords/CoordsGetCommand.java +++ /dev/null @@ -1,53 +0,0 @@ -package de.fanta.challenges.commands.coords; - -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import net.kyori.adventure.text.Component; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import java.util.Collection; - -public class CoordsGetCommand extends SubCommand { - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - - if (!args.hasNext()) { - ChatUtil.sendNormalMessage(player, "Verfügbare Positionen:"); - for (String key : Config.getConfigurationSection("Saved_Locations").getKeys(false)) { - ChatUtil.sendNormalMessage(player, key); - } - } else { - String next = args.getAll(null); - - if (next == null) { - ChatUtil.sendErrorMessage(player, "Du musst einen Namen angeben."); - return true; - } - - if (Config.contains("Saved_Locations." + next)) { - String w = Config.getString("Saved_Locations." + next + ".World"); - String x = Config.getString("Saved_Locations." + next + ".BlockX"); - String y = Config.getString("Saved_Locations." + next + ".BlockY"); - String z = Config.getString("Saved_Locations." + next + ".BlockZ"); - ChatUtil.sendMessage(player, Component.text("Position ", ChatUtil.GREEN).append(Component.text(next, ChatUtil.ORANGE).append(Component.text(": ", ChatUtil.GREEN).append(Component.text("[" + x + "/" + y + "/" + z + " " + w + "]", ChatUtil.ORANGE))))); - } else { - ChatUtil.sendWarningMessage(player, "§cDiese Position existiert nicht!"); - } - } - return true; - } - - @Override - public Collection onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) { - return Config.getConfigurationSection("Saved_Locations").getKeys(false); - } -} diff --git a/src/main/java/de/fanta/challenges/commands/coords/CoordsSaveCommand.java b/src/main/java/de/fanta/challenges/commands/coords/CoordsSaveCommand.java deleted file mode 100644 index ec7cc3a..0000000 --- a/src/main/java/de/fanta/challenges/commands/coords/CoordsSaveCommand.java +++ /dev/null @@ -1,56 +0,0 @@ -package de.fanta.challenges.commands.coords; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import net.kyori.adventure.text.Component; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class CoordsSaveCommand extends SubCommand { - - private final Challenges plugin; - - public CoordsSaveCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - - if (args.hasNext()) { - String next = args.getAll(null); - - if (next == null) { - ChatUtil.sendErrorMessage(player, "Du musst einen Namen angeben."); - return true; - } - - if (!plugin.getConfig().contains("Saved_Locations." + next)) { - String w = player.getLocation().getWorld().getName().toLowerCase(); - int x = player.getLocation().getBlockX(); - int y = player.getLocation().getBlockY(); - int z = player.getLocation().getBlockZ(); - ChatUtil.sendMessage(player, Component.text("Position ", ChatUtil.GREEN).append(Component.text(next, ChatUtil.ORANGE).append(Component.text(": ", ChatUtil.GREEN).append(Component.text("[" + x + "/" + y + "/" + z + " " + w + "]", ChatUtil.ORANGE))))); - Config.setValue("Saved_Locations." + next + ".World", w, false); - Config.setValue("Saved_Locations." + next + ".BlockX", x, false); - Config.setValue("Saved_Locations." + next + ".BlockY", y, false); - Config.setValue("Saved_Locations." + next + ".BlockZ", z, false); - plugin.saveConfig(); - } else { - ChatUtil.sendWarningMessage(player, "Diese Position existiert bereits! Benutze einen anderen Namen oder lösche die alte zuerst mit /coords delete " + next); - } - return true; - } - return false; - } - - -} diff --git a/src/main/java/de/fanta/challenges/commands/coords/CoordsShareCommand.java b/src/main/java/de/fanta/challenges/commands/coords/CoordsShareCommand.java deleted file mode 100644 index cce5726..0000000 --- a/src/main/java/de/fanta/challenges/commands/coords/CoordsShareCommand.java +++ /dev/null @@ -1,26 +0,0 @@ -package de.fanta.challenges.commands.coords; - -import de.fanta.challenges.utils.ChatUtil; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import net.kyori.adventure.text.Component; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class CoordsShareCommand extends SubCommand { - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - String w = player.getLocation().getWorld().getName().toLowerCase(); - int x = player.getLocation().getBlockX(); - int y = player.getLocation().getBlockY(); - int z = player.getLocation().getBlockZ(); - ChatUtil.sendBrodCastMessage(player.name().color(ChatUtil.BLUE).append(Component.text(" ist bei ", ChatUtil.GREEN).append(Component.text(x + "/" + y + "/" + z + " " + w, ChatUtil.ORANGE)))); - return true; - } -} diff --git a/src/main/java/de/fanta/challenges/commands/coords/CoordsTargetCommand.java b/src/main/java/de/fanta/challenges/commands/coords/CoordsTargetCommand.java deleted file mode 100644 index ca5b8a7..0000000 --- a/src/main/java/de/fanta/challenges/commands/coords/CoordsTargetCommand.java +++ /dev/null @@ -1,77 +0,0 @@ -package de.fanta.challenges.commands.coords; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.CoordsTargeter; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import java.util.Collection; - -public class CoordsTargetCommand extends SubCommand { - - private final Challenges plugin; - - public CoordsTargetCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String s, String s1, ArgsParser args) { - if (!(sender instanceof Player player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - - if (!plugin.getTimer().isRunning()) { - ChatUtil.sendErrorMessage(player, "Das kannst du nur machen wenn der Timer aktiv ist."); - return true; - } - - if (args.hasNext()) { - String next = args.getAll(null); - if (plugin.getConfig().contains("Saved_Locations." + next)) { - World world = Bukkit.getWorld(Config.getString("Saved_Locations." + next + ".World")); - int x = Config.getInt("Saved_Locations." + next + ".BlockX"); - int y = Config.getInt("Saved_Locations." + next + ".BlockY"); - int z = Config.getInt("Saved_Locations." + next + ".BlockZ"); - if (world != null) { - if (world == player.getWorld()) { - Location location = new Location(world, x, y, z); - CoordsTargeter.addLocation(player.getUniqueId(), location); - ChatUtil.sendNormalMessage(player, "Der Weg zu " + next + " wird dir nun angezeigt!"); - ChatUtil.sendNormalMessage(player, "Du kannst dies mit '/coords target' wieder ausschalten."); - } else { - ChatUtil.sendErrorMessage(player, "Du befindest dich nicht in der gleichen Welt wie der Waypoint!"); - } - } else { - ChatUtil.sendWarningMessage(player, "Diese Position existiert nicht!"); - } - } else { - ChatUtil.sendWarningMessage(player, "Diese Position existiert nicht!"); - } - } else { - if (CoordsTargeter.containsLocation(player.getUniqueId())) { - CoordsTargeter.removeLocation(player.getUniqueId()); - ChatUtil.sendWarningMessage(player, "Der Weg wird nun nicht mehr angezeigt!"); - } else { - ChatUtil.sendWarningMessage(player, "Du hast keine Position gewählt. -> /coords target [Location]"); - } - } - - - return true; - } - - @Override - public Collection onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) { - return plugin.getConfig().getConfigurationSection("Saved_Locations").getKeys(false); - } -} diff --git a/src/main/java/de/fanta/challenges/commands/editor/EditorCommand.java b/src/main/java/de/fanta/challenges/commands/editor/EditorCommand.java deleted file mode 100644 index 13bbfd8..0000000 --- a/src/main/java/de/fanta/challenges/commands/editor/EditorCommand.java +++ /dev/null @@ -1,39 +0,0 @@ -package de.fanta.challenges.commands.editor; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatSkullAPI.ChatSkull; -import de.fanta.challenges.utils.ChatUtil; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import net.kyori.adventure.text.Component; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class EditorCommand extends SubCommand { - - private final Challenges plugin; - - public EditorCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player)) { - ChatUtil.sendWarningMessage(sender, "You are not a Player :>"); - return true; - } - if (plugin.getCurrentEditor() != null) { - Component[] lines = {Component.empty(), Component.empty(), Component.empty(), Component.text(" " + plugin.getCurrentEditor().getName(), ChatUtil.BLUE), Component.text(" ist der aktuelle Editor", ChatUtil.GREEN), Component.empty(), Component.empty(), Component.empty()}; - ChatUtil.sendNormalMessage(sender, "-------- Editor --------"); - ChatSkull.sendPlayer(plugin.getCurrentEditor(), (Player) sender, lines); - ChatUtil.sendNormalMessage(sender, "-------- Editor --------"); - } else { - ChatUtil.sendWarningMessage(sender, "Aktuell gibt es keinen Editor!"); - ChatUtil.sendWarningMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); - } - return true; - } - -} diff --git a/src/main/java/de/fanta/challenges/commands/editor/EditorSetCommand.java b/src/main/java/de/fanta/challenges/commands/editor/EditorSetCommand.java deleted file mode 100644 index 3553d6c..0000000 --- a/src/main/java/de/fanta/challenges/commands/editor/EditorSetCommand.java +++ /dev/null @@ -1,56 +0,0 @@ -package de.fanta.challenges.commands.editor; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class EditorSetCommand extends SubCommand { - - private final Challenges plugin; - - public EditorSetCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player)) { - ChatUtil.sendWarningMessage(sender, "You are not a Player :>"); - return true; - } - if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { - if (args.hasNext()) { - String playerName = args.getNext(); - Player player = Bukkit.getPlayer(playerName); - - if (player == null) { - ChatUtil.sendWarningMessage(sender, "Dieser Spieler ist nicht online!"); - return true; - } else if (!plugin.isEditor(player)) { - plugin.setCurrentEditor(player); - ChatUtil.sendBrodCastMessage(player.name().color(ChatUtil.BLUE).append(Component.text(" wurde von ", ChatUtil.GREEN).append(sender.name().color(ChatUtil.BLUE).append(Component.text(" zum Editor ernannt", ChatUtil.GREEN))))); - ChatUtil.sendNormalMessage(player, "Du bist jetzt Editor und kannst diese Lobby bearbeiten. (/challenges)"); - return true; - } else { - ChatUtil.sendWarningMessage(sender, "Du bist bereits Editor!"); - return true; - } - } - return true; - } else if (plugin.getCurrentEditor() != null) { - ChatUtil.sendMessage(sender, Component.text("Du bist kein Editor! Nur ", ChatUtil.RED).append(plugin.getCurrentEditor().name().color(ChatUtil.BLUE).append(Component.text(" kann einen neuen Editor bestimmen!", ChatUtil.RED)))); - return true; - } else { - ChatUtil.sendWarningMessage(sender, "Aktuell gibt es keinen Editor!"); - ChatUtil.sendWarningMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); - return true; - } - } - -} diff --git a/src/main/java/de/fanta/challenges/commands/event/CreateTeamsCommand.java b/src/main/java/de/fanta/challenges/commands/event/CreateTeamsCommand.java deleted file mode 100644 index 31441cd..0000000 --- a/src/main/java/de/fanta/challenges/commands/event/CreateTeamsCommand.java +++ /dev/null @@ -1,51 +0,0 @@ -package de.fanta.challenges.commands.event; - -import de.fanta.challenges.teams.TeamUtils; -import de.fanta.challenges.utils.ChatUtil; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class CreateTeamsCommand extends SubCommand { - - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - if (sender.hasPermission("challenges.event")) { - int teams; - int playerperteam; - if (args.hasNext()) { - teams = Integer.parseInt(args.getNext()); - } else { - ChatUtil.sendErrorMessage(sender, "/event createteams "); - return true; - } - - if (teams > 28) { - ChatUtil.sendErrorMessage(sender, "Du kannst nicht mehr als 28 Teams anlegen."); - return true; - } - - if (args.hasNext()) { - playerperteam = Integer.parseInt(args.getNext()); - } else { - ChatUtil.sendErrorMessage(sender, "/event createteams "); - return true; - } - - TeamUtils.setTeamCount(teams); - TeamUtils.setTeamSize(playerperteam); - ChatUtil.sendNormalMessage(sender, "Es wurden " + teams + " Teams erstellt."); - return true; - } else { - ChatUtil.sendErrorMessage(sender, "Keine Berechtigung!"); - } - return true; - } -} diff --git a/src/main/java/de/fanta/challenges/commands/event/EventCommand.java b/src/main/java/de/fanta/challenges/commands/event/EventCommand.java deleted file mode 100644 index 77bb917..0000000 --- a/src/main/java/de/fanta/challenges/commands/event/EventCommand.java +++ /dev/null @@ -1,31 +0,0 @@ -package de.fanta.challenges.commands.event; - -import de.fanta.challenges.utils.ChatUtil; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class EventCommand extends SubCommand { - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - if (sender.hasPermission("challenges.event")) { - ChatUtil.sendNormalMessage(sender, "--- Event Commands ---"); - ChatUtil.sendNormalMessage(sender, "/event enable - aktiviert die Event-Funktion"); - ChatUtil.sendNormalMessage(sender, "/event disable - deaktiviert die Event-Funktion"); - ChatUtil.sendNormalMessage(sender, "/event settings - öffnet die Event-Einstellungen"); - ChatUtil.sendNormalMessage(sender, "/event getscore [player] - zeigt den Score der Spieler"); - ChatUtil.sendNormalMessage(sender, "--- ************** ---"); - return true; - } else { - ChatUtil.sendErrorMessage(sender, "Keine Berechtigung!"); - } - return false; - } -} diff --git a/src/main/java/de/fanta/challenges/commands/event/EventForceTeamCommand.java b/src/main/java/de/fanta/challenges/commands/event/EventForceTeamCommand.java deleted file mode 100644 index aee89c3..0000000 --- a/src/main/java/de/fanta/challenges/commands/event/EventForceTeamCommand.java +++ /dev/null @@ -1,91 +0,0 @@ -package de.fanta.challenges.commands.event; - -import de.fanta.challenges.teams.ChallengeTeam; -import de.fanta.challenges.teams.TeamUtils; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; - -public class EventForceTeamCommand extends SubCommand { - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - if (sender.hasPermission("challenges.event")) { - - if (!Config.getBoolean("event.teams")) { - ChatUtil.sendErrorMessage(player, "Teams sind nicht Aktiv!"); - return true; - } - - if (TeamUtils.getTeams().length == 0) { - ChatUtil.sendErrorMessage(player, "Aktuell gibt es keine Teams!"); - return true; - } - - String teamname; - ChallengeTeam team = null; - String forceplayername; - Player forceplayer = null; - - if (args.hasNext()) { - forceplayername = args.getNext(); - forceplayer = Bukkit.getPlayer(forceplayername); - if (forceplayer == null) { - ChatUtil.sendMessage(player, Component.text("Spieler ", ChatUtil.RED).append(Component.text(forceplayername, ChatUtil.BLUE).append(Component.text(" nicht gefunden.", ChatUtil.RED)))); - return true; - } - } - - if (args.hasNext()) { - teamname = args.getNext(); - team = TeamUtils.getTeam(teamname); - if (team == null) { - ChatUtil.sendMessage(player, Component.text("Team ", ChatUtil.RED).append(Component.text(teamname, ChatUtil.BLUE).append(Component.text(" nicht gefunden.", ChatUtil.RED)))); - return true; - } - } - - TeamUtils.selectTeam(forceplayer, team); - ChatUtil.sendMessage(player, forceplayer.name().color(ChatUtil.BLUE).append(Component.text(" ist nun in Team ", ChatUtil.GREEN).append(Component.text(team.getName(), team.getChatColor())))); - - } else { - ChatUtil.sendErrorMessage(sender, "Keine Berechtigung!"); - } - return true; - } - - @Override - public Collection onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) { - args.getNext(null); - if (args.hasNext()) { - Collection teamNames = new ArrayList<>(); - if (TeamUtils.getTeams() != null) { - for (ChallengeTeam team : TeamUtils.getTeams()) { - teamNames.add(team.getName()); - } - } - - if (!teamNames.isEmpty()) { - return teamNames; - } else { - return Collections.emptyList(); - } - - } - return Bukkit.getOnlinePlayers().stream().map(Player::getName).toList(); - } -} diff --git a/src/main/java/de/fanta/challenges/commands/event/EventGetScoreCommand.java b/src/main/java/de/fanta/challenges/commands/event/EventGetScoreCommand.java deleted file mode 100644 index 1d14aa9..0000000 --- a/src/main/java/de/fanta/challenges/commands/event/EventGetScoreCommand.java +++ /dev/null @@ -1,55 +0,0 @@ -package de.fanta.challenges.commands.event; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.scoreboard.ChallengePlayer; -import de.fanta.challenges.scoreboard.Scorable; -import de.fanta.challenges.utils.ChatUtil; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class EventGetScoreCommand extends SubCommand { - private final Challenges plugin; - - public EventGetScoreCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - if (sender.hasPermission("challenges.event")) { - if (args.hasNext()) { - String playerName = args.getNext(); - Player player = Bukkit.getPlayer(playerName); - - if (player == null) { - ChatUtil.sendErrorMessage(sender, "Dieser Spieler ist nicht online!"); - return true; - } - - ChatUtil.sendNormalMessage(sender, player.getName() + ": " + plugin.getScoreManager().getScore(new ChallengePlayer(player.getUniqueId()))); - return true; - } else { - if (plugin.getScoreManager().getScores().isEmpty()) { - ChatUtil.sendWarningMessage(sender, "Aktuell gibt es keine Scores"); - return true; - } - for (Scorable scorable : plugin.getScoreManager().getScores().keySet()) { - int position = plugin.getScoreManager().getPosition(scorable); - int score = plugin.getScoreManager().getScore(scorable); - ChatUtil.sendNormalMessage(sender, position + ". " + scorable.getIdentifier() + ": " + score); - } - } - } else { - ChatUtil.sendErrorMessage(sender, "Keine Berechtigung!"); - } - return true; - } -} diff --git a/src/main/java/de/fanta/challenges/commands/event/EventSaveScoresCommand.java b/src/main/java/de/fanta/challenges/commands/event/EventSaveScoresCommand.java deleted file mode 100644 index 625505d..0000000 --- a/src/main/java/de/fanta/challenges/commands/event/EventSaveScoresCommand.java +++ /dev/null @@ -1,61 +0,0 @@ -package de.fanta.challenges.commands.event; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.scoreboard.Scorable; -import de.fanta.challenges.utils.ChatUtil; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import de.iani.playerUUIDCache.CachedPlayer; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; - -public class EventSaveScoresCommand extends SubCommand { - - private final Challenges plugin; - - public EventSaveScoresCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (sender.hasPermission("Challenges.editor.override")) { - if (args.hasNext()) { - boolean publishToPlayerStats = Boolean.parseBoolean(args.getNext()); - int minScore = args.getNext(0); - if (publishToPlayerStats) { - HashMap scoreList = plugin.getScoreManager().getTournamentScores(plugin.getScoreManager().getPositions(), minScore); - - for (Scorable scorable : scoreList.keySet()) { - CachedPlayer cp = plugin.getPlayerUUIDCache().getPlayerFromNameOrUUID(scorable.getName()); - plugin.getStatistics().increaseChallengeWeekStats(cp.getUUID(), scoreList.get(scorable)); - } - } - - if (sender instanceof Player player) { - plugin.getScoreManager().saveScores(player, minScore); - } else { - plugin.getScoreManager().saveScores(null, minScore); - } - } else { - ChatUtil.sendErrorMessage(sender, "/challenge saveeventscores [Score]"); - } - - } else { - ChatUtil.sendErrorMessage(sender, "Keine Rechte!"); - } - return true; - } - - @Override - public Collection onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) { - String[] values = new String[]{"true", "false"}; - return new ArrayList<>(Arrays.asList(values)); - } -} diff --git a/src/main/java/de/fanta/challenges/commands/event/EventSettingsCommand.java b/src/main/java/de/fanta/challenges/commands/event/EventSettingsCommand.java deleted file mode 100644 index 28c931b..0000000 --- a/src/main/java/de/fanta/challenges/commands/event/EventSettingsCommand.java +++ /dev/null @@ -1,31 +0,0 @@ -package de.fanta.challenges.commands.event; - -import de.fanta.challenges.guis.eventgui.EventGui; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class EventSettingsCommand extends SubCommand { - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - if (player.hasPermission("challenges.event")) { - if (Config.getBoolean("event.enabled")) { - new EventGui(player).open(); - } else { - ChatUtil.sendErrorMessage(player, "Dafür musst du das Event erst Starten"); - } - } else { - ChatUtil.sendErrorMessage(player, "Keine Berechtigung!"); - } - return true; - } -} diff --git a/src/main/java/de/fanta/challenges/commands/event/EventStartCommand.java b/src/main/java/de/fanta/challenges/commands/event/EventStartCommand.java deleted file mode 100644 index 7f02a9a..0000000 --- a/src/main/java/de/fanta/challenges/commands/event/EventStartCommand.java +++ /dev/null @@ -1,80 +0,0 @@ -package de.fanta.challenges.commands.event; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.events.ChallengeEventStatusChangedEvent; -import de.fanta.challenges.scoreboard.ChallengePlayer; -import de.fanta.challenges.teams.ChallengeTeam; -import de.fanta.challenges.teams.TeamUtils; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import java.util.concurrent.atomic.AtomicInteger; - -public class EventStartCommand extends SubCommand { - private final Challenges plugin; - - public EventStartCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - if (sender.hasPermission("challenges.event")) { - - AtomicInteger i = new AtomicInteger(4); - plugin.getScheduler().runGlobalAtFixedRate(task -> { - int j = i.decrementAndGet(); - - ChatUtil.sendTitleToAll(Component.text("Event"), Component.text(j > 0 ? "" + j : "Go", ChatUtil.BLUE)); - - if (j <= 0) { - task.cancel(); - plugin.setDayLightCircle(true); - - for (Player pp : Bukkit.getOnlinePlayers()) { - pp.getInventory().removeItem(TeamUtils.selctItem()); - } - plugin.getTimer().startTimer(); - - if (!Config.getBoolean("event.teams")) { - Bukkit.getOnlinePlayers().forEach(p -> plugin.getScoreManager().updateScore(new ChallengePlayer(p.getUniqueId()), 0)); - } else { - TeamUtils.setAllPlayerWithoutTeamToTeam(); - Bukkit.getOnlinePlayers().forEach(p -> plugin.getScoreManager().updateScore(TeamUtils.getPlayerTeam(p), 0)); - - - for (ChallengeTeam team : TeamUtils.getTeams()) { - if (team.getSpawn() != null) { - for (OfflinePlayer teamofflineplayer : TeamUtils.getPlayersInTeam(team)) { - if (teamofflineplayer instanceof Player teamplayer) { - teamplayer.teleportAsync(team.getSpawn()); - } - } - } - } - } - Bukkit.getPluginManager().callEvent(new ChallengeEventStatusChangedEvent(true)); - } - }, 10, 20); - - - return true; - } else { - ChatUtil.sendErrorMessage(sender, "Keine Berechtigung!"); - } - return false; - } -} - diff --git a/src/main/java/de/fanta/challenges/commands/event/EventTeamsSetTeamSpawnCommand.java b/src/main/java/de/fanta/challenges/commands/event/EventTeamsSetTeamSpawnCommand.java deleted file mode 100644 index 89403dd..0000000 --- a/src/main/java/de/fanta/challenges/commands/event/EventTeamsSetTeamSpawnCommand.java +++ /dev/null @@ -1,57 +0,0 @@ -package de.fanta.challenges.commands.event; - -import de.fanta.challenges.teams.ChallengeTeam; -import de.fanta.challenges.teams.TeamUtils; -import de.fanta.challenges.utils.ChatUtil; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import net.kyori.adventure.text.Component; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; - -public class EventTeamsSetTeamSpawnCommand extends SubCommand { - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - if (sender.hasPermission("challenges.event")) { - if (args.hasNext()) { - String teamname = args.getNext(); - ChallengeTeam team = TeamUtils.getTeam(teamname); - if (team != null) { - team.setSpawn(player.getLocation()); - ChatUtil.sendMessage(player, Component.text("Spawn für Team ", ChatUtil.GREEN).append(Component.text(team.getName(), team.getChatColor()).append(Component.text(" wurde gesetzt.", ChatUtil.GREEN)))); - } else { - ChatUtil.sendMessage(player, Component.text("Team ", ChatUtil.RED).append(Component.text(teamname, ChatUtil.BLUE).append(Component.text(" nicht gefunden.", ChatUtil.RED)))); - } - } else { - ChatUtil.sendErrorMessage(sender, "/event setTeamSpawn "); - return true; - } - return true; - } else { - ChatUtil.sendErrorMessage(sender, "Keine Berechtigung!"); - } - return true; - } - - @Override - public Collection onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) { - if (TeamUtils.getTeams() != null) { - Collection teamNames = new ArrayList<>(); - for (ChallengeTeam team : TeamUtils.getTeams()) { - teamNames.add(team.getName()); - } - return teamNames; - } - return Collections.emptyList(); - } -} diff --git a/src/main/java/de/fanta/challenges/commands/event/EventToggleCommand.java b/src/main/java/de/fanta/challenges/commands/event/EventToggleCommand.java deleted file mode 100644 index 90e0b1c..0000000 --- a/src/main/java/de/fanta/challenges/commands/event/EventToggleCommand.java +++ /dev/null @@ -1,57 +0,0 @@ -package de.fanta.challenges.commands.event; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.events.ChallengeEventStatusChangedEvent; -import de.fanta.challenges.events.EventStatusChangedEvent; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class EventToggleCommand extends SubCommand { - - private final Challenges plugin; - private final boolean enable; - - public EventToggleCommand(Challenges plugin, boolean enable) { - this.plugin = plugin; - this.enable = enable; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - Player p = (Player) sender; - if (!p.hasPermission("challenges.event")) { - ChatUtil.sendErrorMessage(p, "Keine Berechtigung"); - return true; - } - if (enable) { - if (!Config.getBoolean("event.enabled")) { - Config.setValue("event.enabled", true); - Bukkit.getPluginManager().callEvent(new EventStatusChangedEvent(true)); - ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Event-Modus aktiviert", ChatUtil.GREEN)); - } else { - ChatUtil.sendErrorMessage(p, "Das Event läuft bereits!"); - return true; - } - } else { - if (Config.getBoolean("event.enabled")) { - Config.setValue("event.enabled", false); - Bukkit.getPluginManager().callEvent(new EventStatusChangedEvent(false)); - Bukkit.getPluginManager().callEvent(new ChallengeEventStatusChangedEvent(false)); - plugin.getTimer().stopTimer(); - ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Event-Modus deaktiviert", ChatUtil.RED)); - } else { - ChatUtil.sendErrorMessage(p, "Aktuell läuft kein Event!"); - return true; - } - } - plugin.getSBManager().updateEventScoreboard(); - return true; - } -} diff --git a/src/main/java/de/fanta/challenges/commands/hp/HPAddCommand.java b/src/main/java/de/fanta/challenges/commands/hp/HPAddCommand.java deleted file mode 100644 index 209e679..0000000 --- a/src/main/java/de/fanta/challenges/commands/hp/HPAddCommand.java +++ /dev/null @@ -1,76 +0,0 @@ -package de.fanta.challenges.commands.hp; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.Bukkit; -import org.bukkit.attribute.Attribute; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class HPAddCommand extends SubCommand { - - private final Challenges plugin; - - public HPAddCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { - if (args.hasNext()) { - String playerName = args.getNext(); - Player player = Bukkit.getPlayer(playerName); - - if (player == null) { - ChatUtil.sendErrorMessage(sender, "Dieser Spieler ist nicht online!"); - return true; - } - - if (args.hasNext()) { - double input = args.getNext(0.0); - double finalAddHP = player.getHealth() + input; - - if (finalAddHP <= player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue() && finalAddHP >= 0) { - player.setHealth(finalAddHP); - ChatUtil.sendNormalMessage(player, "Du wurdest von " + sender.getName() + " um " + input + "HP geheilt!"); - ChatUtil.sendNormalMessage(sender, "Du hast " + player.getName() + " " + input + "HP hinzugefügt!"); - - if (!Config.getBoolean("editsettings")) { - Config.setValue("editsettings", true, false); - plugin.getLogger().info("Diese Challenge ist kein SpeedRun mehr da die HP von " + player.getName() + " auf " + input + " geändert wurden."); - if (plugin.getCurrentEditor() != null) { - ChatUtil.sendWarningMessage(plugin.getCurrentEditor(), "Diese Challenge wird nicht mehr als Speed Run gezählt, da die HP von einem Spieler bearbeitet wurden."); - } - } - } else { - ChatUtil.sendErrorMessage(sender, "Operation nicht möglich!"); - } - return true; - } - } - } else if (plugin.getCurrentEditor() != null) { - ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); - return true; - } else { - ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); - ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); - return true; - } - return false; - } - - @Override - public boolean requiresPlayer() { - return true; - } - - @Override - public String getUsage() { - return " - Füge einem Spieler die angegebene Zahl an Herzen hinzu"; - } -} diff --git a/src/main/java/de/fanta/challenges/commands/hp/HPGetCommand.java b/src/main/java/de/fanta/challenges/commands/hp/HPGetCommand.java deleted file mode 100644 index ea83474..0000000 --- a/src/main/java/de/fanta/challenges/commands/hp/HPGetCommand.java +++ /dev/null @@ -1,54 +0,0 @@ -package de.fanta.challenges.commands.hp; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class HPGetCommand extends SubCommand { - - private final Challenges plugin; - - public HPGetCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { - if (args.hasNext()) { - String playerName = args.getNext(); - Player player = Bukkit.getPlayer(playerName); - - if (player != null) { - ChatUtil.sendNormalMessage(sender, player.getName() + " besitzt derzeit " + player.getHealth() + "HP!"); - } else { - ChatUtil.sendErrorMessage(sender, "Dieser Spieler ist nicht online!"); - } - return true; - } - } else if (plugin.getCurrentEditor() != null) { - ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); - return true; - } else { - ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); - ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); - return true; - } - return false; - } - - @Override - public boolean requiresPlayer() { - return true; - } - - @Override - public String getUsage() { - return " - Erhalte die aktuellen HP eines Spielers"; - } -} diff --git a/src/main/java/de/fanta/challenges/commands/hp/HPMaxCommand.java b/src/main/java/de/fanta/challenges/commands/hp/HPMaxCommand.java deleted file mode 100644 index 9594f09..0000000 --- a/src/main/java/de/fanta/challenges/commands/hp/HPMaxCommand.java +++ /dev/null @@ -1,64 +0,0 @@ -package de.fanta.challenges.commands.hp; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.Bukkit; -import org.bukkit.attribute.Attribute; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class HPMaxCommand extends SubCommand { - - private final Challenges plugin; - - public HPMaxCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { - if (args.hasNext()) { - double next = args.getNext(-1.0); - if (next > 0) { - for (Player pp : Bukkit.getOnlinePlayers()) { - pp.getAttribute(Attribute.GENERIC_MAX_HEALTH).setBaseValue(next); - pp.setHealth(pp.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()); - } - ChatUtil.sendNormalMessage(sender, "Du hast die maximalen HP auf " + next + " gesetzt!"); - - if (!Config.getBoolean("editsettings")) { - Config.setValue("editsettings", true, false); - plugin.getLogger().info("Diese Challenge ist kein SpeedRun mehr da die Max HP von auf " + next + " geändert wurden."); - if (plugin.getCurrentEditor() != null) { - ChatUtil.sendWarningMessage(plugin.getCurrentEditor(), "Diese Challenge wird nicht mehr als Speed Run gezählt, da die Max HP geändert wurden."); - } - } - return true; - } - } - } else if (plugin.getCurrentEditor() != null) { - ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); - return true; - } else { - ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); - ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); - return true; - } - return false; - } - - @Override - public boolean requiresPlayer() { - return true; - } - - @Override - public String getUsage() { - return " - Setze die maximalen HP aller Spieler"; - } -} \ No newline at end of file diff --git a/src/main/java/de/fanta/challenges/commands/hp/HPRemoveCommand.java b/src/main/java/de/fanta/challenges/commands/hp/HPRemoveCommand.java deleted file mode 100644 index c17a92b..0000000 --- a/src/main/java/de/fanta/challenges/commands/hp/HPRemoveCommand.java +++ /dev/null @@ -1,75 +0,0 @@ -package de.fanta.challenges.commands.hp; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.Bukkit; -import org.bukkit.attribute.Attribute; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class HPRemoveCommand extends SubCommand { - - private final Challenges plugin; - - public HPRemoveCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { - if (args.hasNext()) { - String playerName = args.getNext(); - Player player = Bukkit.getPlayer(playerName); - - if (player == null) { - ChatUtil.sendErrorMessage(sender, "Dieser Spieler ist nicht online!"); - return true; - } - - if (args.hasNext()) { - double input = args.getNext(0.0); - double finalRemoveHP = player.getHealth() - input; - if (finalRemoveHP <= player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue() && finalRemoveHP >= 0) { - player.setHealth(finalRemoveHP); - ChatUtil.sendNormalMessage(player, sender.getName() + " hat dir " + input + " HP entfernt!"); - ChatUtil.sendNormalMessage(sender, "Du hast " + player.getName() + " " + input + " HP entfernt!"); - - if (!Config.getBoolean("editsettings")) { - Config.setValue("editsettings", true, false); - plugin.getLogger().info("Diese Challenge ist kein SpeedRun mehr da " + input + " HP von " + player.getName() + " abgezogen wurden"); - if (plugin.getCurrentEditor() != null) { - ChatUtil.sendWarningMessage(plugin.getCurrentEditor(), "Diese Challenge wird nicht mehr als Speed Run gezählt, da die HP von einem Spieler bearbeitet wurden."); - } - } - } else { - ChatUtil.sendErrorMessage(sender, "Operation nicht möglich!"); - } - return true; - } - } - } else if (plugin.getCurrentEditor() != null) { - ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); - return true; - } else { - ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); - ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); - return true; - } - return false; - } - - @Override - public boolean requiresPlayer() { - return true; - } - - @Override - public String getUsage() { - return " - Entferne einem Spieler die angegebene Zahl an Herzen"; - } -} diff --git a/src/main/java/de/fanta/challenges/commands/hp/HPSetCommand.java b/src/main/java/de/fanta/challenges/commands/hp/HPSetCommand.java deleted file mode 100644 index 40506d1..0000000 --- a/src/main/java/de/fanta/challenges/commands/hp/HPSetCommand.java +++ /dev/null @@ -1,74 +0,0 @@ -package de.fanta.challenges.commands.hp; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.Bukkit; -import org.bukkit.attribute.Attribute; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class HPSetCommand extends SubCommand { - - private final Challenges plugin; - - public HPSetCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { - if (args.hasNext()) { - String playerName = args.getNext(); - Player player = Bukkit.getPlayer(playerName); - - if (player == null) { - ChatUtil.sendErrorMessage(sender, "Dieser Spieler ist nicht online!"); - return true; - } - - if (args.hasNext()) { - double input = args.getNext(0.0); - if (input <= player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue() && input >= 0) { - player.setHealth(input); - ChatUtil.sendNormalMessage(player, sender.getName() + " hat deine HP auf " + input + " gesetzt!"); - ChatUtil.sendNormalMessage(sender, "Du hast die HP von " + player.getName() + " auf " + input + " gesetzt!"); - - if (!Config.getBoolean("editsettings")) { - Config.setValue("editsettings", true, false); - plugin.getLogger().info("Diese Challenge ist kein SpeedRun mehr da die HP von " + player.getName() + " auf " + input + " geändert wurden."); - if (plugin.getCurrentEditor() != null) { - ChatUtil.sendWarningMessage(plugin.getCurrentEditor(), "Diese Challenge wird nicht mehr als Speed Run gezählt, da die HP von einem Spieler bearbeitet wurden."); - } - } - } else { - ChatUtil.sendErrorMessage(sender, "Operation nicht möglich!"); - } - return true; - } - } - } else if (plugin.getCurrentEditor() != null) { - ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); - return true; - } else { - ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); - ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); - return true; - } - return false; - } - - @Override - public boolean requiresPlayer() { - return true; - } - - @Override - public String getUsage() { - return " - Setze die Herzen eines Spieler auf die angegebene Zahl"; - } -} \ No newline at end of file diff --git a/src/main/java/de/fanta/challenges/commands/reset/ResetCommand.java b/src/main/java/de/fanta/challenges/commands/reset/ResetCommand.java deleted file mode 100644 index b5f1a5a..0000000 --- a/src/main/java/de/fanta/challenges/commands/reset/ResetCommand.java +++ /dev/null @@ -1,40 +0,0 @@ -package de.fanta.challenges.commands.reset; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.guis.ResetGui; -import de.fanta.challenges.utils.ChatUtil; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class ResetCommand extends SubCommand { - - private final Challenges plugin; - - public ResetCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player player)) { - return true; - } - - if (plugin.isEditor(player) || player.hasPermission("Challenges.editor.override")) { - new ResetGui(player).open(); - } else if (plugin.getCurrentEditor() != null) { - ChatUtil.sendErrorMessage(player, "Du bist kein Editor! Nur" + plugin.getCurrentEditor().getName() + " kann die Map zurücksetzen!"); - return true; - } else { - ChatUtil.sendErrorMessage(player, "Aktuell gibt es keinen Editor!"); - ChatUtil.sendErrorMessage(player, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); - return true; - } - return true; - } -} - - diff --git a/src/main/java/de/fanta/challenges/commands/reset/ResetConfirmCommand.java b/src/main/java/de/fanta/challenges/commands/reset/ResetConfirmCommand.java deleted file mode 100644 index 9be69cb..0000000 --- a/src/main/java/de/fanta/challenges/commands/reset/ResetConfirmCommand.java +++ /dev/null @@ -1,34 +0,0 @@ -package de.fanta.challenges.commands.reset; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.SaveWorldUtils; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class ResetConfirmCommand extends SubCommand { - - private final Challenges plugin; - - public ResetConfirmCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if ((sender instanceof Player && plugin.isEditor((Player) sender)) || sender.hasPermission("Challenges.editor.override")) { - SaveWorldUtils.restartServer(args.getNext(null)); - } else if (plugin.getCurrentEditor() != null) { - ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! Nur " + plugin.getCurrentEditor().getName() + " kann die Map zurücksetzen!"); - return true; - } else { - ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); - ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); - return true; - } - return true; - } -} diff --git a/src/main/java/de/fanta/challenges/commands/settings/SettingsCommand.java b/src/main/java/de/fanta/challenges/commands/settings/SettingsCommand.java deleted file mode 100644 index 190acca..0000000 --- a/src/main/java/de/fanta/challenges/commands/settings/SettingsCommand.java +++ /dev/null @@ -1,36 +0,0 @@ -package de.fanta.challenges.commands.settings; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.guis.settingsgui.MainGui; -import de.fanta.challenges.utils.ChatUtil; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class SettingsCommand extends SubCommand { - - private final Challenges plugin; - - public SettingsCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String s1, ArgsParser args) { - if (sender instanceof Player p) { - if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { - new MainGui(p).open(); - } else { - ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); - } - } else if (plugin.getCurrentEditor() != null) { - ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); - } else { - ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); - ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP Kaufen!"); - } - return true; - } -} diff --git a/src/main/java/de/fanta/challenges/commands/timer/TimerCommand.java b/src/main/java/de/fanta/challenges/commands/timer/TimerCommand.java deleted file mode 100644 index b8d8ba4..0000000 --- a/src/main/java/de/fanta/challenges/commands/timer/TimerCommand.java +++ /dev/null @@ -1,40 +0,0 @@ -package de.fanta.challenges.commands.timer; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.guis.TimerGui; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class TimerCommand extends SubCommand { - - private final Challenges plugin; - - public TimerCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { - Player p = (Player) sender; - new TimerGui(p).open(); - } else if (plugin.getCurrentEditor() != null) { - ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); - return true; - } else { - ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); - ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); - return true; - } - return true; - } - -} \ No newline at end of file diff --git a/src/main/java/de/fanta/challenges/commands/timer/TimerGetCommand.java b/src/main/java/de/fanta/challenges/commands/timer/TimerGetCommand.java deleted file mode 100644 index 51a2113..0000000 --- a/src/main/java/de/fanta/challenges/commands/timer/TimerGetCommand.java +++ /dev/null @@ -1,26 +0,0 @@ -package de.fanta.challenges.commands.timer; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import net.kyori.adventure.text.Component; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; - -public class TimerGetCommand extends SubCommand { - - private final Challenges plugin; - - public TimerGetCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - ChatUtil.sendMessage(sender, Component.text("Timer: ", ChatUtil.GREEN).append(plugin.getTimer().formatTime(ChatUtil.BLUE).append(Component.text(" Speedrun: " + (Config.getBoolean("editsettings") ? "Nein" : "Ja"), ChatUtil.ORANGE)))); - return true; - } -} - diff --git a/src/main/java/de/fanta/challenges/commands/timer/TimerPauseCommand.java b/src/main/java/de/fanta/challenges/commands/timer/TimerPauseCommand.java deleted file mode 100644 index 5a72bab..0000000 --- a/src/main/java/de/fanta/challenges/commands/timer/TimerPauseCommand.java +++ /dev/null @@ -1,56 +0,0 @@ -package de.fanta.challenges.commands.timer; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.ServerType; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import net.kyori.adventure.text.Component; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class TimerPauseCommand extends SubCommand { - - private final Challenges plugin; - - public TimerPauseCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { - if (plugin.getTimer().isRunning()) { - plugin.setDayLightCircle(false); - plugin.getTimer().stopTimer(); - ChatUtil.sendBrodCastMessage(Component.text("Der Timer wurde angehalten", ChatUtil.RED)); - if (plugin.getServerType() == ServerType.CHALLENGE) { - if (!Config.getBoolean("editsettings")) { - Config.setValue("editsettings", true, false); - plugin.getLogger().info("Diese Challenge ist kein SpeedRun mehr da der Timer bearbeitet wurde."); - if (plugin.getCurrentEditor() != null) { - ChatUtil.sendWarningMessage(plugin.getCurrentEditor(), "Diese Challenge wird nicht mehr als Speed Run gezählt, da du etwas am Timer geändert hast."); - } - } - } - } else { - ChatUtil.sendWarningMessage(sender, "Der Timer ist bereits pausiert!"); - } - } else if (plugin.getCurrentEditor() != null) { - ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); - return true; - } else { - ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); - ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); - return true; - } - return true; - } - -} \ No newline at end of file diff --git a/src/main/java/de/fanta/challenges/commands/timer/TimerResetCommand.java b/src/main/java/de/fanta/challenges/commands/timer/TimerResetCommand.java deleted file mode 100644 index 9578134..0000000 --- a/src/main/java/de/fanta/challenges/commands/timer/TimerResetCommand.java +++ /dev/null @@ -1,51 +0,0 @@ -package de.fanta.challenges.commands.timer; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.ServerType; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import net.kyori.adventure.text.Component; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class TimerResetCommand extends SubCommand { - - private final Challenges plugin; - - public TimerResetCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { - plugin.getTimer().setTime(0); - ChatUtil.sendBrodCastMessage(Component.text("Der Timer wurde zurückgesetzt!", ChatUtil.GREEN)); - if (plugin.getServerType() == ServerType.CHALLENGE) { - if (!Config.getBoolean("editsettings")) { - Config.setValue("editsettings", true, false); - plugin.getLogger().info("Diese Challenge ist kein SpeedRun mehr da der Timer bearbeitet wurde."); - if (plugin.getCurrentEditor() != null) { - ChatUtil.sendWarningMessage(plugin.getCurrentEditor(), "Diese Challenge wird nicht mehr als Speed Run gezählt, da du etwas am Timer geändert hast."); - } - } - } - } else if (plugin.getCurrentEditor() != null) { - ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); - return true; - } else { - ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); - ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); - return true; - } - return true; - } - -} diff --git a/src/main/java/de/fanta/challenges/commands/timer/TimerReverseCommand.java b/src/main/java/de/fanta/challenges/commands/timer/TimerReverseCommand.java deleted file mode 100644 index 69fe902..0000000 --- a/src/main/java/de/fanta/challenges/commands/timer/TimerReverseCommand.java +++ /dev/null @@ -1,55 +0,0 @@ -package de.fanta.challenges.commands.timer; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.ServerType; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import net.kyori.adventure.text.Component; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class TimerReverseCommand extends SubCommand { - - private final Challenges plugin; - - public TimerReverseCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { - plugin.getTimer().reverseTimer(); - if (plugin.getTimer().isReverse()) { - ChatUtil.sendBrodCastMessage(Component.text("Der Timer läuft nun rückwärts!", ChatUtil.BLUE)); - } else { - ChatUtil.sendBrodCastMessage(Component.text("Der Timer läuft nun vorwärts!", ChatUtil.GREEN)); - } - if (plugin.getServerType() == ServerType.CHALLENGE) { - if (!Config.getBoolean("editsettings")) { - Config.setValue("editsettings", true, false); - plugin.getLogger().info("Diese Challenge ist kein SpeedRun mehr da der Timer bearbeitet wurde."); - if (plugin.getCurrentEditor() != null) { - ChatUtil.sendWarningMessage(plugin.getCurrentEditor(), "Diese Challenge wird nicht mehr als Speed Run gezählt, da du etwas am Timer geändert hast."); - } - } - } - } else if (plugin.getCurrentEditor() != null) { - ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); - return true; - } else { - ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); - ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); - return true; - } - return true; - } - -} diff --git a/src/main/java/de/fanta/challenges/commands/timer/TimerSetCommand.java b/src/main/java/de/fanta/challenges/commands/timer/TimerSetCommand.java deleted file mode 100644 index b12cc6b..0000000 --- a/src/main/java/de/fanta/challenges/commands/timer/TimerSetCommand.java +++ /dev/null @@ -1,58 +0,0 @@ -package de.fanta.challenges.commands.timer; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.ServerType; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import net.kyori.adventure.text.Component; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class TimerSetCommand extends SubCommand { - - private final Challenges plugin; - - public TimerSetCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - if (args.hasNext()) { - int time = args.getNext(-1); - if (time >= 0) { - if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { - plugin.getTimer().setTime(time); - ChatUtil.sendBrodCastMessage(Component.text("Der Timer wurde auf ", ChatUtil.GREEN).append(plugin.getTimer().formatTime(ChatUtil.GREEN)).append(Component.text(" gesetzt!", ChatUtil.GREEN))); - if (plugin.getServerType() == ServerType.CHALLENGE) { - if (!Config.getBoolean("editsettings")) { - Config.setValue("editsettings", true, false); - plugin.getLogger().info("Diese Challenge ist kein SpeedRun mehr da der Timer bearbeitet wurde."); - if (plugin.getCurrentEditor() != null) { - ChatUtil.sendWarningMessage(plugin.getCurrentEditor(), "Diese Challenge wird nicht mehr als Speed Run gezählt, da du etwas am Timer geändert hast."); - } - } - } - } else if (plugin.getCurrentEditor() != null) { - ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); - return true; - } else { - ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); - ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); - return true; - } - } else { - ChatUtil.sendErrorMessage(sender, "Zeit muss eine Zahl größer als 0 sein!"); - } - return true; - } - return false; - } -} diff --git a/src/main/java/de/fanta/challenges/commands/timer/TimerStartCommand.java b/src/main/java/de/fanta/challenges/commands/timer/TimerStartCommand.java deleted file mode 100644 index 09db8a9..0000000 --- a/src/main/java/de/fanta/challenges/commands/timer/TimerStartCommand.java +++ /dev/null @@ -1,52 +0,0 @@ -package de.fanta.challenges.commands.timer; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import net.kyori.adventure.text.Component; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class TimerStartCommand extends SubCommand { - - private final Challenges plugin; - - public TimerStartCommand(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player)) { - ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); - return true; - } - if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { - if (!plugin.getTimer().isRunning()) { - plugin.setDayLightCircle(true); - plugin.getTimer().startTimer(); - if (!Config.getBoolean("editsettings")) { - if (!plugin.isCubesideStatisticsInstalled()) { - return true; - } - plugin.getStatistics().addSpeedRunPlayed(); - } - ChatUtil.sendBrodCastMessage(Component.text("Der Timer wird fortgesetzt!", ChatUtil.GREEN)); - } else { - ChatUtil.sendWarningMessage(sender, "Der Timer läuft bereits!"); - } - } else if (plugin.getCurrentEditor() != null) { - ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); - return true; - } else { - ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); - ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); - return true; - } - return true; - } - -} diff --git a/src/main/java/de/fanta/challenges/events/ChallengeEventStatusChangedEvent.java b/src/main/java/de/fanta/challenges/events/ChallengeEventStatusChangedEvent.java deleted file mode 100644 index 800b24d..0000000 --- a/src/main/java/de/fanta/challenges/events/ChallengeEventStatusChangedEvent.java +++ /dev/null @@ -1,27 +0,0 @@ -package de.fanta.challenges.events; - -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; - -public class ChallengeEventStatusChangedEvent extends Event { - - private static final HandlerList handlers = new HandlerList(); - private final boolean running; - - public ChallengeEventStatusChangedEvent(boolean event) { - this.running = event; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - public boolean isRunning() { - return running; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } -} diff --git a/src/main/java/de/fanta/challenges/events/EventStatusChangedEvent.java b/src/main/java/de/fanta/challenges/events/EventStatusChangedEvent.java deleted file mode 100644 index b1e543b..0000000 --- a/src/main/java/de/fanta/challenges/events/EventStatusChangedEvent.java +++ /dev/null @@ -1,27 +0,0 @@ -package de.fanta.challenges.events; - -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; - -public class EventStatusChangedEvent extends Event { - - private static final HandlerList handlers = new HandlerList(); - private final boolean event; - - public EventStatusChangedEvent(boolean event) { - this.event = event; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - public boolean isEvent() { - return event; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } -} diff --git a/src/main/java/de/fanta/challenges/events/PlayerCountChangedEvent.java b/src/main/java/de/fanta/challenges/events/PlayerCountChangedEvent.java deleted file mode 100644 index d008a3d..0000000 --- a/src/main/java/de/fanta/challenges/events/PlayerCountChangedEvent.java +++ /dev/null @@ -1,28 +0,0 @@ -package de.fanta.challenges.events; - -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; - -public class PlayerCountChangedEvent extends Event { - - private static final HandlerList handlers = new HandlerList(); - - private final int count; - - public PlayerCountChangedEvent(int count) { - this.count = count; - } - - public int getCount() { - return count; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } -} diff --git a/src/main/java/de/fanta/challenges/events/ServerStatusChangedEvent.java b/src/main/java/de/fanta/challenges/events/ServerStatusChangedEvent.java deleted file mode 100644 index a44cdaf..0000000 --- a/src/main/java/de/fanta/challenges/events/ServerStatusChangedEvent.java +++ /dev/null @@ -1,28 +0,0 @@ -package de.fanta.challenges.events; - -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; - -public class ServerStatusChangedEvent extends Event { - - private static final HandlerList handlers = new HandlerList(); - - private final boolean online; - - public ServerStatusChangedEvent(boolean online) { - this.online = online; - } - - public boolean isOnline() { - return online; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } -} diff --git a/src/main/java/de/fanta/challenges/events/TimerChangedEvent.java b/src/main/java/de/fanta/challenges/events/TimerChangedEvent.java deleted file mode 100644 index 1a69f06..0000000 --- a/src/main/java/de/fanta/challenges/events/TimerChangedEvent.java +++ /dev/null @@ -1,27 +0,0 @@ -package de.fanta.challenges.events; - -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; - -public class TimerChangedEvent extends Event { - - private static final HandlerList handlers = new HandlerList(); - private final boolean running; - - public TimerChangedEvent(boolean running) { - this.running = running; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - public boolean isRunning() { - return running; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } -} diff --git a/src/main/java/de/fanta/challenges/gravestones/GravestoneListener.java b/src/main/java/de/fanta/challenges/gravestones/GravestoneListener.java deleted file mode 100644 index 8450872..0000000 --- a/src/main/java/de/fanta/challenges/gravestones/GravestoneListener.java +++ /dev/null @@ -1,134 +0,0 @@ -package de.fanta.challenges.gravestones; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import org.bukkit.GameRule; -import org.bukkit.NamespacedKey; -import org.bukkit.World; -import org.bukkit.block.Block; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.ArmorStand; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.PlayerArmorStandManipulateEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.persistence.PersistentDataContainer; -import org.bukkit.persistence.PersistentDataType; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.logging.Level; - -public class GravestoneListener implements Listener { - - private static final Challenges plugin = Challenges.getPlugin(); - - @EventHandler - public void onDeath(PlayerDeathEvent e) { - if (!Config.getBoolean("gravestone")) { - return; - } - - Player p = e.getEntity(); - World world = p.getLocation().getWorld(); - - if (world != null && world.getGameRuleValue(GameRule.KEEP_INVENTORY) == true) { - return; - } - - if (p.getLocation().getBlockY() > p.getLocation().getWorld().getMinHeight() - 3) { - if (!e.getDrops().isEmpty()) { - e.getDrops().clear(); - Block block = p.getLocation().subtract(0, 1, 0).getBlock(); - String inventoryString = GravestoneUtils.createInventoryString(p.getInventory().getContents()); - byte[] inventoryByte = GravestoneUtils.compressString(inventoryString); - GravestoneUtils.spawnAtBlock(block, p, inventoryByte); - } - } - } - - @EventHandler - public void onEquip(PlayerArmorStandManipulateEvent e) { - ArmorStand stand = e.getRightClicked(); - PersistentDataContainer container = stand.getPersistentDataContainer(); - if (container.get(GravestoneUtils.getUUIDKey(), PersistentDataType.STRING) != null) { - e.setCancelled(true); - } - } - - @EventHandler - public void onEntityDamage(EntityDamageEvent e) { - if (e.getEntity() instanceof ArmorStand stand) { - PersistentDataContainer container = stand.getPersistentDataContainer(); - if (container.get(GravestoneUtils.getUUIDKey(), PersistentDataType.STRING) != null) { - e.setCancelled(true); - } - } - } - - @EventHandler - public void onGravestoneAttack(EntityDamageByEntityEvent e) { - if (!(e.getDamager() instanceof Player player)) { - return; - } - - if (!(e.getEntity() instanceof ArmorStand armorStand)) { - return; - } - - PersistentDataContainer container = armorStand.getPersistentDataContainer(); - NamespacedKey UUIDKey = GravestoneUtils.getUUIDKey(); - if (container.get(GravestoneUtils.getUUIDKey(), PersistentDataType.STRING) != null) { - if (!Config.getBoolean("gravestone")) { - ChatUtil.sendWarningMessage(player, "Grabschsteine können nur gegrabscht werden wenn sie Aktiv sind."); - return; - } - String playerUUID = container.get(UUIDKey, PersistentDataType.STRING); - if (playerUUID.equals(player.getUniqueId().toString())) { - ItemStack[] stacks = new ItemStack[0]; - if (container.get(GravestoneUtils.getInventoryBase64Key(), PersistentDataType.BYTE_ARRAY) != null) { - byte[] inventorybyte = container.get(GravestoneUtils.getInventoryBase64Key(), PersistentDataType.BYTE_ARRAY); - String yamlstring = GravestoneUtils.decompressString(inventorybyte); - stacks = GravestoneUtils.createItemArrayFromString(yamlstring); - } else if (container.get(GravestoneUtils.getInventoryKey(), PersistentDataType.BYTE_ARRAY) != null) { - try { - byte[] inventorybyte = container.get(GravestoneUtils.getInventoryKey(), PersistentDataType.BYTE_ARRAY); - String yamlstring = GravestoneUtils.decompressString(inventorybyte); - YamlConfiguration conf = new YamlConfiguration(); - conf.loadFromString(yamlstring); - stacks = conf.getList("inv").toArray(new ItemStack[0]); - } catch (InvalidConfigurationException ex) { - plugin.getLogger().log(Level.SEVERE, "Error while loading yaml Config", e); - } - } - - List fullinvstacklist = new ArrayList<>(); - for (int i = 0; i < stacks.length; i++) { - ItemStack stack = stacks[i]; - if (stack != null) { - if (player.getInventory().getItem(i) == null) { - player.getInventory().setItem(i, stack); - } else { - fullinvstacklist.add(stack); - } - } - } - Collection droplist = player.getInventory().addItem(fullinvstacklist.toArray(new ItemStack[0])).values(); - for (ItemStack stack : droplist) { - armorStand.getLocation().getWorld().dropItem(armorStand.getLocation().add(0, 1, 0), stack); - } - armorStand.remove(); - } else { - ChatUtil.sendWarningMessage(player, "Du kannst nur deine eigenen Grabschsteine grabschen."); - } - } - - } -} diff --git a/src/main/java/de/fanta/challenges/gravestones/GravestoneUtils.java b/src/main/java/de/fanta/challenges/gravestones/GravestoneUtils.java deleted file mode 100644 index 5ecc265..0000000 --- a/src/main/java/de/fanta/challenges/gravestones/GravestoneUtils.java +++ /dev/null @@ -1,170 +0,0 @@ -package de.fanta.challenges.gravestones; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.ItemStackUtil; -import de.iani.cubesideutils.bukkit.items.ItemGroups; -import net.kyori.adventure.text.Component; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.NamespacedKey; -import org.bukkit.World; -import org.bukkit.block.Block; -import org.bukkit.block.data.type.Slab; -import org.bukkit.block.data.type.Snow; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.entity.ArmorStand; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.persistence.PersistentDataContainer; -import org.bukkit.persistence.PersistentDataType; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.nio.charset.StandardCharsets; -import java.util.List; -import java.util.logging.Level; -import java.util.zip.Deflater; -import java.util.zip.DeflaterOutputStream; -import java.util.zip.InflaterInputStream; - -public class GravestoneUtils { - private static final NamespacedKey UUIDKey = new NamespacedKey(Challenges.getPlugin(), "uuid_gravestone"); - private static final NamespacedKey inventoryKey = new NamespacedKey(Challenges.getPlugin(), "inventory_gravestone"); - private static final NamespacedKey inventoryBase64Key = new NamespacedKey(Challenges.getPlugin(), "inventory_base64_gravestone"); - - public static byte[] compressString(String s) { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - try { - OutputStreamWriter osw = new OutputStreamWriter(new DeflaterOutputStream(baos, new Deflater(Deflater.BEST_COMPRESSION)), StandardCharsets.UTF_8); - osw.write(s); - osw.flush(); - osw.close(); - } catch (IOException e) { - throw new RuntimeException("Could not compress data", e); - } - return baos.toByteArray(); - } - - public static String decompressString(byte[] data) { - try { - InputStreamReader reader = new InputStreamReader(new InflaterInputStream(new ByteArrayInputStream(data)), StandardCharsets.UTF_8); - StringBuilder sb = new StringBuilder(); - char[] temp = new char[1024]; - while (true) { - int readBytes; - readBytes = reader.read(temp); - if (readBytes < 0) { - break; - } - sb.append(temp, 0, readBytes); - } - return sb.toString(); - } catch (IOException e) { - throw new RuntimeException("Error while decompressing inventory string", e); - } - } - - public static String createInventoryString(ItemStack[] inventory) { - YamlConfiguration conf = new YamlConfiguration(); - String[] base64Items = new String[inventory.length]; - for (int i = 0; i < inventory.length; i++) { - ItemStack stack = inventory[i]; - if (stack != null && stack.getItemMeta() != null) { - if (stack.getItemMeta().hasEnchant(Enchantment.VANISHING_CURSE)) { - base64Items[i] = null; - } else { - base64Items[i] = ItemStackUtil.getBase64StringFromItemStack(stack); - } - } - } - conf.set("inv", base64Items); - return conf.saveToString(); - } - - public static ItemStack[] createItemArrayFromString(String yamlstring) { - ItemStack[] inventory = new ItemStack[0]; - - try { - YamlConfiguration conf = new YamlConfiguration(); - conf.loadFromString(yamlstring); - List stacks = conf.getList("inv"); - if (stacks == null) { - return inventory; - } - inventory = new ItemStack[stacks.size()]; - for (int i = 0; i < stacks.size(); i++) { - String base64Item = (String) stacks.get(i); - if (base64Item != null) { - inventory[i] = ItemStackUtil.getItemStackFromBase64(base64Item); - } else { - inventory[i] = null; - } - } - } catch (InvalidConfigurationException ex) { - Challenges.getPlugin().getLogger().log(Level.SEVERE, "Error while loading yaml Config", ex); - } - return inventory; - } - - - public static void spawnAtBlock(Block block, Player player, byte[] inventoryBytes) { - World world = block.getWorld(); - double y = block.getY(); - Material type = block.getType(); - String typeName = type.name(); - double placeableY; - if (typeName.endsWith("_SLAB")) { - Slab slab = (Slab) block.getBlockData(); - placeableY = y - 0.44; - if (slab.getType() == Slab.Type.BOTTOM) { - placeableY -= 0.5; - } - } else if (typeName.endsWith("_STAIRS") || type.isOccluding() || type == Material.GLASS || ItemGroups.isStainedGlass(type) || type == Material.ICE || type == Material.PACKED_ICE || type == Material.BLUE_ICE || ItemGroups.isLeaves(type)) { - placeableY = y - 0.44; - } else if (ItemGroups.isCarpet(type)) { - placeableY = y - 1.44 + (1 / 16.0); - } else if (type == Material.SNOW) { - Snow snow = (Snow) block.getBlockData(); - int layers = snow.getLayers(); - placeableY = y - 1.44 + (layers / 8.0); - } else { - placeableY = y - 0.44; - } - if (!Double.isNaN(placeableY)) { - world.spawn(new Location(world, block.getX() + 0.5, placeableY, block.getZ() + 0.5, player.getLocation().getYaw(), 0), ArmorStand.class, t -> { - t.setVisible(false); - t.setGravity(false); - t.customName(Component.text("R.I.P. ", ChatUtil.RED).append(player.name().color(ChatUtil.BLUE))); - t.setCustomNameVisible(true); - ItemStack itemStack = new ItemStack(Material.PLAYER_HEAD, 1); - SkullMeta meta = (SkullMeta) itemStack.getItemMeta(); - meta.setPlayerProfile(player.getPlayerProfile()); - itemStack.setItemMeta(meta); - t.getEquipment().setHelmet(itemStack); - PersistentDataContainer container = t.getPersistentDataContainer(); - container.set(UUIDKey, PersistentDataType.STRING, player.getUniqueId().toString()); - container.set(inventoryBase64Key, PersistentDataType.BYTE_ARRAY, inventoryBytes); - }); - ChatUtil.sendMessage(player, Component.text("Dein Grabschstein steht bei:", ChatUtil.GREEN).append(Component.text(" (" + player.getLocation().getBlockX() + "/" + player.getLocation().getBlockY() + "/" + player.getLocation().getBlockZ() + ")", ChatUtil.ORANGE))); - } - } - - public static NamespacedKey getUUIDKey() { - return UUIDKey; - } - - public static NamespacedKey getInventoryKey() { - return inventoryKey; - } - - public static NamespacedKey getInventoryBase64Key() { - return inventoryBase64Key; - } -} diff --git a/src/main/java/de/fanta/challenges/guis/BackpackGui.java b/src/main/java/de/fanta/challenges/guis/BackpackGui.java deleted file mode 100644 index 95b786a..0000000 --- a/src/main/java/de/fanta/challenges/guis/BackpackGui.java +++ /dev/null @@ -1,116 +0,0 @@ -package de.fanta.challenges.guis; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.configuration.MemorySection; -import org.bukkit.entity.HumanEntity; -import org.bukkit.entity.Player; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; - -import java.io.IOException; -import java.util.Map; -import java.util.logging.Level; - -public class BackpackGui { - - public static final Component TITLE = Challenges.getPlugin().getGuiPrefix().append(Component.text(" >> Backpack")); - private Inventory backpack; - - public BackpackGui(int size) { - this.backpack = Bukkit.createInventory(null, size, TITLE); - } - - public BackpackGui(int size, Component title) { - this.backpack = Bukkit.createInventory(null, size, title); - } - - public void resize(int newSize) { - if (newSize == backpack.getSize()) { - return; - } - - Inventory newBackpack = Bukkit.createInventory(backpack.getHolder(), newSize, TITLE); - if (newSize > backpack.getSize()) { - for (int i = 0; i < backpack.getSize(); i++) { - newBackpack.setItem(i, backpack.getItem(i)); - } - } else if (newSize < backpack.getSize()) { - for (int i = 0; i < newSize; i++) { - newBackpack.setItem(i, backpack.getItem(i)); - } - - for (int i = newSize; i < backpack.getSize(); i++) { - ItemStack item = backpack.getItem(i); - if (item != null && item.getType() != Material.AIR) { - if (!newBackpack.addItem(item).isEmpty()) { - ChatUtil.sendBrodCastMessage(Component.text("Backpack kann nicht verkleinert werden. Zu wenig Platz!", ChatUtil.RED)); - return; - } - } - } - } - for (HumanEntity player : backpack.getViewers()) { - player.closeInventory(); - } - this.backpack = newBackpack; - } - - public void open(Player player) { - player.openInventory(this.backpack); - } - - public int getSize() { - return this.backpack.getSize(); - } - - public void clearConfig() { - for (String section : Challenges.getPlugin().getBackpackConfig().getKeys(false)) { - if (section != null) { - Challenges.getPlugin().getBackpackConfig().set(section, null); - } - try { - Challenges.getPlugin().getBackpackConfig().save(Challenges.getPlugin().getBackpackConfigFile()); - } catch (IOException e) { - Challenges.getPlugin().getLogger().log(Level.SEVERE, "Could not save backpack config", e); - } - } - } - - public void saveInventoryToConfig() { - clearConfig(); - for (int slot = 0; slot < backpack.getSize(); slot++) { - ItemStack stack = backpack.getItem(slot); - if (stack != null && stack.getType() != Material.AIR) { - Challenges.getPlugin().getBackpackConfig().set(String.valueOf(slot), stack.serialize()); - } - } - try { - Challenges.getPlugin().getBackpackConfig().save(Challenges.getPlugin().getBackpackConfigFile()); - } catch (IOException e) { - Challenges.getPlugin().getLogger().log(Level.SEVERE, "Could not save backpack config", e); - } - } - - public void loadInventoryFromConfig() { - for (Map.Entry stringObjectEntry : Challenges.getPlugin().getBackpackConfig().getValues(false).entrySet()) { - int slot; - try { - slot = Integer.parseInt(stringObjectEntry.getKey()); - } catch (NumberFormatException e) { - Challenges.getPlugin().getLogger().log(Level.SEVERE, "Fehler! Slot: " + stringObjectEntry.getKey(), e); - continue; - } - if (slot >= backpack.getSize()) { - Challenges.getPlugin().getLogger().log(Level.SEVERE, "Slot " + slot + " befindet sich außerhalb des Inventars!"); - continue; - } - MemorySection memorySection = (MemorySection) stringObjectEntry.getValue(); - ItemStack deserialized = ItemStack.deserialize(memorySection.getValues(false)); - backpack.setItem(slot, deserialized); - } - } -} diff --git a/src/main/java/de/fanta/challenges/guis/CheckItemsGUI.java b/src/main/java/de/fanta/challenges/guis/CheckItemsGUI.java deleted file mode 100644 index 81fd864..0000000 --- a/src/main/java/de/fanta/challenges/guis/CheckItemsGUI.java +++ /dev/null @@ -1,98 +0,0 @@ -package de.fanta.challenges.guis; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.ItemUtils; -import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryType; -import org.bukkit.inventory.ItemStack; - -import java.io.IOException; -import java.util.List; -import java.util.logging.Level; - -public class CheckItemsGUI extends AbstractWindow { - private static final Challenges plugin = Challenges.getPlugin(); - - private static final int JA_INDEX = 0; - private static final int ITEM_INDEX = 2; - private static final int NEIN_INDEX = 4; - - public static final int INVENTORY_SIZE = 5; - - public CheckItemsGUI(Player player) { - super(player, Bukkit.createInventory(player, InventoryType.HOPPER, plugin.getGuiPrefix().append(Component.text(" >> geht das?? (" + plugin.getMaterials().size() + ")")))); - } - - - @Override - protected void rebuildInventory() { - if (plugin.getMaterials().isEmpty()) { - getPlayer().closeInventory(); - ChatUtil.sendNormalMessage(getPlayer(), "Lol fertig :>"); - return; - } - for (int i = 0; i < INVENTORY_SIZE; i++) { - ItemStack item; - ItemStack stack = new ItemStack(plugin.getMaterials().getFirst()); - switch (i) { - case JA_INDEX -> - item = ItemUtils.createGuiItem(Material.LIME_CONCRETE, Component.text("Ja", ChatUtil.GREEN), true); - case ITEM_INDEX -> item = stack; - case NEIN_INDEX -> - item = ItemUtils.createGuiItem(Material.RED_CONCRETE, Component.text("Nein", ChatUtil.RED), true); - default -> item = ItemUtils.EMPTY_ICON; - } - this.getInventory().setItem(i, item); - } - } - - @Override - public void onItemClicked(InventoryClickEvent event) { - Player player = getPlayer(); - if (!mayAffectThisInventory(event)) { - return; - } - - event.setCancelled(true); - if (!getInventory().equals(event.getClickedInventory())) { - return; - } - - int slot = event.getSlot(); - switch (slot) { - case JA_INDEX -> { - plugin.getMaterials().remove(getInventory().getItem(ITEM_INDEX).getType()); - player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 2.0F); - } - case NEIN_INDEX -> { - Material material = getInventory().getItem(ITEM_INDEX).getType(); - addItem(material); - plugin.getMaterials().remove(material); - player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_BASS, 1.0F, 2.0F); - } - default -> { - } - } - rebuildInventory(); - } - - public static void addItem(Material material) { - FileConfiguration config = Challenges.getPlugin().getItemConfig(); - List list = config.getStringList("items"); - list.add(material.name()); - config.set("items", list); - try { - Challenges.getPlugin().ItemConfig.save(Challenges.getPlugin().ItemConfigFile); - } catch (IOException e) { - plugin.getLogger().log(Level.SEVERE, "Error while saving item Config", e); - } - } -} diff --git a/src/main/java/de/fanta/challenges/guis/ResetGui.java b/src/main/java/de/fanta/challenges/guis/ResetGui.java deleted file mode 100644 index a3631bb..0000000 --- a/src/main/java/de/fanta/challenges/guis/ResetGui.java +++ /dev/null @@ -1,64 +0,0 @@ -package de.fanta.challenges.guis; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.ServerType; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.ItemUtils; -import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryType; -import org.bukkit.inventory.ItemStack; - -public class ResetGui extends AbstractWindow { - - private static final Challenges plugin = Challenges.getPlugin(); - - private static final int RESET_INDEX = 2; - - public static final int INVENTORY_SIZE = 5; - - public ResetGui(Player player) { - super(player, Bukkit.createInventory(player, InventoryType.HOPPER, plugin.getGuiPrefix().append(Component.text(" >> Reset")))); - } - - @Override - public void onItemClicked(InventoryClickEvent event) { - if (!mayAffectThisInventory(event)) { - return; - } - - event.setCancelled(true); - if (!getInventory().equals(event.getClickedInventory())) { - return; - } - - int slot = event.getSlot(); - if (slot == RESET_INDEX) { - plugin.getScheduler().run(() -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "reset confirm")); - } - } - - @Override - protected void rebuildInventory() { - for (int i = 0; i < INVENTORY_SIZE; i++) { - ItemStack item; - if (i == RESET_INDEX) { - if (plugin.getServerType() == ServerType.CHALLENGE && !Config.getBoolean("editsettings")) { - item = ItemUtils.createGuiItem(Material.REPEATING_COMMAND_BLOCK, Component.text("Server resetten", ChatUtil.RED), Component.text("Wenn du denn Server resettest,", ChatUtil.RED), Component.text("wird der Server komplett zurückgesetzt.", ChatUtil.RED), Component.empty(), Component.text("Die Map wird als AutoSave gespeichert.", ChatUtil.GREEN), Component.text("und kann in der Lobby wieder geladen werden.", ChatUtil.GREEN), Component.empty(), Component.text("Die Challenge zählt nicht mehr als SpeedRun", ChatUtil.ORANGE)); - } else { - item = ItemUtils.createGuiItem(Material.REPEATING_COMMAND_BLOCK, Component.text("Server resetten", ChatUtil.RED), Component.text("Wenn du denn Server resettest,", ChatUtil.RED), Component.text("wird der Server komplett zurückgesetzt.", ChatUtil.RED), Component.empty(), Component.text("Die Map wird als AutoSave gespeichert.", ChatUtil.GREEN), Component.text("und kann in der Lobby wieder geladen werden.", ChatUtil.GREEN)); - } - - } else { - item = ItemUtils.EMPTY_ICON; - } - this.getInventory().setItem(i, item); - } - } -} - diff --git a/src/main/java/de/fanta/challenges/guis/TeleportGUI.java b/src/main/java/de/fanta/challenges/guis/TeleportGUI.java deleted file mode 100644 index 389771e..0000000 --- a/src/main/java/de/fanta/challenges/guis/TeleportGUI.java +++ /dev/null @@ -1,101 +0,0 @@ -package de.fanta.challenges.guis; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.ItemUtils; -import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; -import de.iani.cubesideutils.bukkit.items.CustomHeads; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; - -public class TeleportGUI extends AbstractWindow { - private static final Challenges plugin = Challenges.getPlugin(); - private static final Map playerPerSlot = new HashMap<>(); - private static final int INVENTORY_SIZE = 9 * (plugin.getVanish().getPlayerListWithoutVanishPlayers().size() / 7 + ((plugin.getVanish().getPlayerListWithoutVanishPlayers().size() % 7 > 0) ? 1 : 0)) + 18; - private static final int CLOSE_IDEX = INVENTORY_SIZE - 9; - - public TeleportGUI(Player player) { - super(player, Bukkit.createInventory(player, INVENTORY_SIZE, plugin.getGuiPrefix().append(Component.text(" >> Event Settings")))); - } - - @Override - protected void rebuildInventory() { - int row = 0; - int cat = 0; - - if (plugin.getVanish().getPlayerListWithoutVanishPlayers().isEmpty()) { - ChatUtil.sendErrorMessage(getPlayer(), "Keine Spieler Online"); - return; - } - for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { - int slot = row * 9 + cat + 10; - - ArrayList metalore = new ArrayList<>(); - - ItemStack stack = new ItemStack(Material.PLAYER_HEAD); - SkullMeta skullMeta = (SkullMeta) stack.getItemMeta(); - skullMeta.setPlayerProfile(pp.getPlayerProfile()); - skullMeta.displayName(pp.name().color(ChatUtil.BLUE)); - metalore.add(Component.text("Linksklick: " + getPlayer().getName() + " -> " + pp.getName(), ChatUtil.GREEN)); - metalore.add(Component.text("Rechtsklick: " + pp.getName() + " -> " + getPlayer().getName(), ChatUtil.GREEN)); - skullMeta.lore(metalore); - stack.setItemMeta(skullMeta); - getInventory().setItem(slot, stack); - playerPerSlot.put(slot, pp); - if (cat < 6) { - cat++; - continue; - } - row++; - cat = 0; - } - - getInventory().setItem(CLOSE_IDEX, CustomHeads.RAINBOW_X.getHead(Component.text("Menü verlassen", ChatUtil.RED))); - - for (int i = 0; i < getInventory().getSize(); i++) { - if (getInventory().getItem(i) == null || getInventory().getItem(i).getType() == Material.AIR) { - getInventory().setItem(i, ItemUtils.EMPTY_ICON); - } - } - } - - @Override - public void onItemClicked(InventoryClickEvent event) { - Player player = getPlayer(); - if (!mayAffectThisInventory(event)) { - return; - } - - event.setCancelled(true); - if (!getInventory().equals(event.getClickedInventory())) { - return; - } - int slot = event.getSlot(); - Player pp = playerPerSlot.get(slot); - if (pp != null && pp.isOnline()) { - if (event.isLeftClick()) { - player.teleportAsync(pp.getLocation()); - ChatUtil.sendNormalMessage(player, "Du wurdest zu " + pp.getName() + " teleportiert!"); - } else if (event.isRightClick()) { - pp.teleportAsync(player.getLocation()); - ChatUtil.sendNormalMessage(player, pp.getName() + " wurde zu dir teleportiert!"); - } - player.closeInventory(); - } - - - if (slot == CLOSE_IDEX) { - getPlayer().closeInventory(); - } - } -} - diff --git a/src/main/java/de/fanta/challenges/guis/TimerGui.java b/src/main/java/de/fanta/challenges/guis/TimerGui.java deleted file mode 100644 index a502933..0000000 --- a/src/main/java/de/fanta/challenges/guis/TimerGui.java +++ /dev/null @@ -1,212 +0,0 @@ -package de.fanta.challenges.guis; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.ServerType; -import de.fanta.challenges.Timer; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.ItemUtils; -import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; -import de.iani.cubesideutils.bukkit.items.CustomHeads; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.Style; -import net.kyori.adventure.text.format.TextDecoration; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.ItemStack; - -public class TimerGui extends AbstractWindow { - - private static final Challenges plugin = Challenges.getPlugin(); - - public static final int INVENTORY_SIZE = 27; - - private static final int TIMER_TOGGLE_INDEX = 0; - private static final int CLOSE_INDEX = 8; - - private static final int TIME_DAYS_INDEX = 10; - private static final int TIME_HOURS_INDEX = 11; - private static final int TIME_MINUTES_INDEX = 12; - private static final int TIME_SECONDS_INDEX = 13; - - - private static final int DIRECTION_INDEX = 15; - private static final int SHOW_TIMER_INDEX = 16; - - public TimerGui(Player player) { - super(player, Bukkit.createInventory(player, INVENTORY_SIZE, plugin.getGuiPrefix().append(Component.text(" >> Timer")))); - } - - @Override - public void onItemClicked(InventoryClickEvent event) { - Player player = getPlayer(); - if (!mayAffectThisInventory(event)) { - return; - } - - event.setCancelled(true); - if (!getInventory().equals(event.getClickedInventory())) { - return; - } - - int slot = event.getSlot(); - switch (slot) { - case DIRECTION_INDEX -> { - if (plugin.getTimer().isReverse()) { - plugin.getTimer().reverseTimer(); - ChatUtil.sendTitleToAll(Component.text("Timer"), Component.text("Der Timer läuft jetzt vorwärts.", ChatUtil.GREEN)); - } else { - plugin.getTimer().reverseTimer(); - ChatUtil.sendTitleToAll(Component.text("Timer"), Component.text("Der Timer läuft jetzt rückwärts.", ChatUtil.BLUE)); - } - if (plugin.getServerType() == ServerType.CHALLENGE) { - if (!Config.getBoolean("editsettings")) { - Config.setValue("editsettings", true, false); - plugin.getLogger().info("Diese Challenge ist kein SpeedRun mehr da der Timer bearbeitet wurde."); - if (plugin.getCurrentEditor() != null) { - ChatUtil.sendWarningMessage(plugin.getCurrentEditor(), "Diese Challenge wird nicht mehr als Speed Run gezählt, da du etwas am Timer geändert hast."); - } - } - } - rebuildInventory(); - } - case SHOW_TIMER_INDEX -> { - if (Config.getBoolean("showtimer")) { - Config.setValue("showtimer", false, false); - ChatUtil.sendTitleToAll(Component.text("Timer"), Component.text("Der Timer wird jetzt nicht mehr angezeigt!", ChatUtil.RED)); - } else { - Config.setValue("showtimer", true, false); - ChatUtil.sendTitleToAll(Component.text("Timer"), Component.text("Der Timer wird jetzt wieder angezeigt!", ChatUtil.GREEN)); - } - rebuildInventory(); - } - case TIMER_TOGGLE_INDEX -> { - if (plugin.getTimer().isRunning()) { - plugin.getTimer().stopTimer(); - plugin.setDayLightCircle(false); - - if (!Config.getBoolean("editsettings")) { - Config.setValue("editsettings", true, false); - plugin.getLogger().info("Diese Challenge ist kein SpeedRun mehr da der Timer bearbeitet wurde."); - if (plugin.getCurrentEditor() != null) { - ChatUtil.sendWarningMessage(plugin.getCurrentEditor(), "Diese Challenge wird nicht mehr als Speed Run gezählt, da du etwas am Timer geändert hast."); - } - } - ChatUtil.sendTitleToAll(Component.text("Timer"), Component.text("Der Timer wurde pausiert.", ChatUtil.RED), 10, 60, 10, true); - } else { - plugin.getTimer().startTimer(); - if (!Config.getBoolean("editsettings")) { - if (!plugin.isCubesideStatisticsInstalled()) { - return; - } - plugin.getStatistics().addSpeedRunPlayed(); - } - plugin.setDayLightCircle(true); - ChatUtil.sendTitleToAll(Component.text("Timer"), Component.text("Der Timer wurde gestartet.", ChatUtil.GREEN), 10, 60, 10, true); - } - player.closeInventory(); - } - case TIME_DAYS_INDEX -> { - Timer timer = plugin.getTimer(); - if (event.isLeftClick()) { - timer.addTime(!event.isShiftClick() ? 60 * 60 * 24 : 60 * 60 * 24 * 10); - } - - if (event.isRightClick()) { - timer.removeTime(!event.isShiftClick() ? 60 * 60 * 24 : 60 * 60 * 24 * 10); - } - rebuildInventory(); - } - - case TIME_HOURS_INDEX -> { - Timer timer = plugin.getTimer(); - if (event.isLeftClick()) { - timer.addTime(!event.isShiftClick() ? 60 * 60 : 60 * 60 * 10); - } - - if (event.isRightClick()) { - timer.removeTime(!event.isShiftClick() ? 60 * 60 : 60 * 60 * 10); - } - rebuildInventory(); - } - - case TIME_MINUTES_INDEX -> { - Timer timer = plugin.getTimer(); - if (event.isLeftClick()) { - timer.addTime(!event.isShiftClick() ? 60 : 60 * 10); - } - - if (event.isRightClick()) { - timer.removeTime(!event.isShiftClick() ? 60 : 60 * 10); - } - rebuildInventory(); - } - - case TIME_SECONDS_INDEX -> { - Timer timer = plugin.getTimer(); - if (event.isLeftClick()) { - timer.addTime(!event.isShiftClick() ? 1 : 10); - } - - if (event.isRightClick()) { - timer.removeTime(!event.isShiftClick() ? 1 : 10); - } - rebuildInventory(); - } - default -> { - } - } - - if (slot == CLOSE_INDEX) { - player.closeInventory(); - } - } - - @Override - protected void rebuildInventory() { - for (int i = 0; i < INVENTORY_SIZE; i++) { - ItemStack item; - switch (i) { - case DIRECTION_INDEX -> { - if (plugin.getTimer().isReverse()) { - item = ItemUtils.createGuiItem(Material.MAGENTA_GLAZED_TERRACOTTA, Component.text("Timer Richtung - rückwärts", ChatUtil.BLUE)); - } else { - item = ItemUtils.createGuiItem(Material.MAGENTA_GLAZED_TERRACOTTA, Component.text("Timer Richtung - vorwärts", ChatUtil.GREEN)); - } - } - case SHOW_TIMER_INDEX -> { - if (Config.getBoolean("showtimer")) { - item = ItemUtils.createGuiItem(Material.OBSERVER, Component.text("Timer wird angezeigt!", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.OBSERVER, Component.text("Timer wird nicht angezeigt!", ChatUtil.RED), false); - } - } - case TIMER_TOGGLE_INDEX -> { - if (plugin.getTimer().isRunning()) { - item = ItemUtils.createGuiItem(Material.CLOCK, Component.text("Timer gestartet", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.CLOCK, Component.text("Timer pausiert", ChatUtil.RED)); - } - } - case TIME_DAYS_INDEX -> - item = ItemUtils.createGuiItem(Material.GOLD_BLOCK, Component.text("Tage", ChatUtil.GREEN), Component.text(">> ", ChatUtil.ORANGE).append(plugin.getTimer().formatTime(ChatUtil.BLUE)), Component.empty(), Component.text("+1 Tag", ChatUtil.GREEN).append(Component.text(" ‣ Links-Klick", ChatUtil.BLUE)), Component.text("+10 Tage", ChatUtil.GREEN).append(Component.text(" ‣ Shift-Links-Klick", ChatUtil.BLUE)), Component.text(" ", Style.style(ChatUtil.BLUE, TextDecoration.STRIKETHROUGH)), Component.text("-1 Tag", ChatUtil.GREEN).append(Component.text(" ‣ Links-Klick", ChatUtil.BLUE)), Component.text("-10 Tage", ChatUtil.GREEN).append(Component.text(" ‣ Shift-Links-Klick", ChatUtil.BLUE))); - case TIME_HOURS_INDEX -> - item = ItemUtils.createGuiItem(Material.GOLD_INGOT, Component.text("Stunden", ChatUtil.GREEN), Component.text(">> ", ChatUtil.ORANGE).append(plugin.getTimer().formatTime(ChatUtil.BLUE)), Component.empty(), Component.text("+1 Stunde", ChatUtil.GREEN).append(Component.text(" ‣ Links-Klick", ChatUtil.BLUE)), Component.text("+10 Stunden", ChatUtil.GREEN).append(Component.text(" ‣ Shift-Links-Klick", ChatUtil.BLUE)), Component.text(" ", Style.style(ChatUtil.BLUE, TextDecoration.STRIKETHROUGH)), Component.text("-1 Stunde", ChatUtil.GREEN).append(Component.text(" ‣ Links-Klick", ChatUtil.BLUE)), Component.text("-10 Stunden", ChatUtil.GREEN).append(Component.text(" ‣ Shift-Links-Klick", ChatUtil.BLUE))); - case TIME_MINUTES_INDEX -> { - try { - item = ItemUtils.createGuiItem(Material.RAW_GOLD, Component.text("Minuten", ChatUtil.GREEN), Component.text(">> ", ChatUtil.ORANGE).append(plugin.getTimer().formatTime(ChatUtil.BLUE)), Component.empty(), Component.text("+1 Minute", ChatUtil.GREEN).append(Component.text(" ‣ Links-Klick", ChatUtil.BLUE)), Component.text("+10 Minuten", ChatUtil.GREEN).append(Component.text(" ‣ Shift-Links-Klick", ChatUtil.BLUE)), Component.text(" ", Style.style(ChatUtil.BLUE, TextDecoration.STRIKETHROUGH)), Component.text("-1 Minute", ChatUtil.GREEN).append(Component.text(" ‣ Links-Klick", ChatUtil.BLUE)), Component.text("-10 Minuten", ChatUtil.GREEN).append(Component.text(" ‣ Shift-Links-Klick", ChatUtil.BLUE))); - } catch (NoSuchFieldError ex) { - item = ItemUtils.createGuiItem(Material.DANDELION, Component.text("Minuten", ChatUtil.GREEN), Component.text(">> ", ChatUtil.ORANGE).append(plugin.getTimer().formatTime(ChatUtil.BLUE)), Component.empty(), Component.text("+1 Minute", ChatUtil.GREEN).append(Component.text(" ‣ Links-Klick", ChatUtil.BLUE)), Component.text("+10 Minuten", ChatUtil.GREEN).append(Component.text(" ‣ Shift-Links-Klick", ChatUtil.BLUE)), Component.text(" ", Style.style(ChatUtil.BLUE, TextDecoration.STRIKETHROUGH)), Component.text("-1 Minute", ChatUtil.GREEN).append(Component.text(" ‣ Links-Klick", ChatUtil.BLUE)), Component.text("-10 Minuten", ChatUtil.GREEN).append(Component.text(" ‣ Shift-Links-Klick", ChatUtil.BLUE))); - } - } - case TIME_SECONDS_INDEX -> - item = ItemUtils.createGuiItem(Material.GOLD_NUGGET, Component.text("Sekunden", ChatUtil.GREEN), Component.text(">> ", ChatUtil.ORANGE).append(plugin.getTimer().formatTime(ChatUtil.BLUE)), Component.empty(), Component.text("+1 Sekunde", ChatUtil.GREEN).append(Component.text(" ‣ Links-Klick", ChatUtil.BLUE)), Component.text("+10 Sekunden", ChatUtil.GREEN).append(Component.text(" ‣ Shift-Links-Klick", ChatUtil.BLUE)), Component.text(" ", Style.style(ChatUtil.BLUE, TextDecoration.STRIKETHROUGH)), Component.text("-1 Sekunde", ChatUtil.GREEN).append(Component.text(" ‣ Links-Klick", ChatUtil.BLUE)), Component.text("-10 Sekunden", ChatUtil.GREEN).append(Component.text(" ‣ Shift-Links-Klick", ChatUtil.BLUE))); - case CLOSE_INDEX -> item = CustomHeads.RAINBOW_X.getHead(Component.text("Menü verlassen", ChatUtil.RED)); - default -> item = ItemUtils.EMPTY_ICON; - } - this.getInventory().setItem(i, item); - } - } -} diff --git a/src/main/java/de/fanta/challenges/guis/challengesettingsguis/BackPackSettingsGui.java b/src/main/java/de/fanta/challenges/guis/challengesettingsguis/BackPackSettingsGui.java deleted file mode 100644 index b53bce2..0000000 --- a/src/main/java/de/fanta/challenges/guis/challengesettingsguis/BackPackSettingsGui.java +++ /dev/null @@ -1,102 +0,0 @@ -package de.fanta.challenges.guis.challengesettingsguis; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.guis.settingsgui.OtherSettingsGui; -import de.fanta.challenges.teams.ChallengeTeam; -import de.fanta.challenges.teams.TeamUtils; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.ItemUtils; -import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; -import de.iani.cubesideutils.bukkit.items.CustomHeads; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryType; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -public class BackPackSettingsGui extends AbstractWindow { - private static final Challenges plugin = Challenges.getPlugin(); - - private static final int ADD_SIZE_INDEX = 2; - private static final int SIZE_INDEX = 5; - private static final int REMOVE_SIZE_INDEX = 8; - - private static final int BACK_INDEX = 6; - - public BackPackSettingsGui(Player player) { - super(player, Bukkit.createInventory(player, InventoryType.DISPENSER, plugin.getGuiPrefix().append(Component.text(" >> Backpack Settings")))); - } - - @Override - public void onItemClicked(InventoryClickEvent event) { - if (!mayAffectThisInventory(event)) { - return; - } - - event.setCancelled(true); - if (!getInventory().equals(event.getClickedInventory())) { - return; - } - - int slot = event.getSlot(); - int size = plugin.getBackpack().getSize() / 9; - switch (slot) { - case ADD_SIZE_INDEX -> { - if (size <= 5) { - size++; - Config.setValue("backpack_size", size); - plugin.getBackpack().resize(size * 9); - - if (TeamUtils.getTeams() != null) { - for (ChallengeTeam team : TeamUtils.getTeams()) { - team.getBackpack().resize(size * 9); - } - } - - rebuildInventory(); - } - } - case REMOVE_SIZE_INDEX -> { - if (size > 1) { - size--; - Config.setValue("backpack_size", size); - plugin.getBackpack().resize(size * 9); - rebuildInventory(); - } - } - case BACK_INDEX -> new OtherSettingsGui(getPlayer()).open(); - default -> { - } - } - } - - @Override - protected void rebuildInventory() { - for (int i = 0; i < 9; i++) { - ItemStack item; - int size = plugin.getBackpack().getSize() / 9; - switch (i) { - case ADD_SIZE_INDEX -> - item = CustomHeads.RAINBOW_ARROW_UP.getHead(Component.text("Größe +1", ChatUtil.GREEN)); - case REMOVE_SIZE_INDEX -> - item = CustomHeads.RAINBOW_ARROW_DOWN.getHead(Component.text("Größe -1", ChatUtil.RED)); - - case SIZE_INDEX -> { - ItemStack stack = new ItemStack(Material.STRUCTURE_VOID, size); - ItemMeta meta = stack.getItemMeta(); - meta.displayName(Component.text("Rucksack größe: " + size + "/6", ChatUtil.GREEN)); - stack.setItemMeta(meta); - item = stack; - } - case BACK_INDEX -> - item = CustomHeads.RAINBOW_ARROW_BACKWARD_II.getHead(Component.text("Zurück", ChatUtil.GREEN)); - default -> item = ItemUtils.EMPTY_ICON; - } - this.getInventory().setItem(i, item); - } - } -} diff --git a/src/main/java/de/fanta/challenges/guis/challengesettingsguis/BedrockWallSettingsGui.java b/src/main/java/de/fanta/challenges/guis/challengesettingsguis/BedrockWallSettingsGui.java deleted file mode 100644 index bb2f1d0..0000000 --- a/src/main/java/de/fanta/challenges/guis/challengesettingsguis/BedrockWallSettingsGui.java +++ /dev/null @@ -1,91 +0,0 @@ -package de.fanta.challenges.guis.challengesettingsguis; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.guis.settingsgui.ChallengesGui; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.ItemUtils; -import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; -import de.iani.cubesideutils.bukkit.items.CustomHeads; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryType; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -public class BedrockWallSettingsGui extends AbstractWindow { - private static final Challenges plugin = Challenges.getPlugin(); - - private static final int ADD_TIME_INDEX = 2; - private static final int TIME_INDEX = 5; - private static final int REMOVE_TIME_INDEX = 8; - - private static final int BACK_INDEX = 6; - - public BedrockWallSettingsGui(Player player) { - super(player, Bukkit.createInventory(player, InventoryType.DISPENSER, plugin.getGuiPrefix().append(Component.text(" >> Bedrock Wand Settings")))); - } - - @Override - public void onItemClicked(InventoryClickEvent event) { - if (!mayAffectThisInventory(event)) { - return; - } - - event.setCancelled(true); - if (!getInventory().equals(event.getClickedInventory())) { - return; - } - - int slot = event.getSlot(); - int time = Config.getInt("bedrockwalltime"); - switch (slot) { - case ADD_TIME_INDEX -> { - if (time <= 63) { - time++; - Config.setValue("bedrockwalltime", time); - rebuildInventory(); - } - } - case REMOVE_TIME_INDEX -> { - if (time > 1) { - time--; - Config.setValue("bedrockwalltime", time); - rebuildInventory(); - } - } - case BACK_INDEX -> new ChallengesGui(getPlayer()).open(); - default -> { - } - } - } - - @Override - protected void rebuildInventory() { - for (int i = 0; i < 9; i++) { - ItemStack item; - int time = Config.getInt("bedrockwalltime"); - switch (i) { - case ADD_TIME_INDEX -> - item = CustomHeads.RAINBOW_ARROW_UP.getHead(Component.text("+1 Sekunde", ChatUtil.GREEN)); - case REMOVE_TIME_INDEX -> - item = CustomHeads.RAINBOW_ARROW_DOWN.getHead(Component.text("-1 Sekunde", ChatUtil.RED)); - - case TIME_INDEX -> { - ItemStack stack = new ItemStack(Material.CLOCK, time); - ItemMeta meta = stack.getItemMeta(); - meta.displayName(Component.text(time + " Sekunden", ChatUtil.BLUE)); - stack.setItemMeta(meta); - item = stack; - } - case BACK_INDEX -> - item = CustomHeads.RAINBOW_ARROW_BACKWARD_II.getHead(Component.text("Zurück", ChatUtil.GREEN)); - default -> item = ItemUtils.EMPTY_ICON; - } - this.getInventory().setItem(i, item); - } - } -} diff --git a/src/main/java/de/fanta/challenges/guis/challengesettingsguis/LevelBorderSettingsGui.java b/src/main/java/de/fanta/challenges/guis/challengesettingsguis/LevelBorderSettingsGui.java deleted file mode 100644 index 2cbbfd2..0000000 --- a/src/main/java/de/fanta/challenges/guis/challengesettingsguis/LevelBorderSettingsGui.java +++ /dev/null @@ -1,98 +0,0 @@ -package de.fanta.challenges.guis.challengesettingsguis; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.challenges.WorldBorderLevelChallenge; -import de.fanta.challenges.guis.settingsgui.ChallengesGui; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.ItemUtils; -import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; -import de.iani.cubesideutils.bukkit.items.CustomHeads; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryType; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -public class LevelBorderSettingsGui extends AbstractWindow { - private static final Challenges plugin = Challenges.getPlugin(); - - private static final int ADD_MULTIPLAYER_INDEX = 2; - private static final int MULTIPLAYER_INDEX = 5; - private static final int REMOVE_MULTIPLAYER_INDEX = 8; - - private static final int BACK_INDEX = 6; - - public LevelBorderSettingsGui(Player player) { - super(player, Bukkit.createInventory(player, InventoryType.DISPENSER, plugin.getGuiPrefix().append(Component.text(" >> World Border Level Settings")))); - } - - @Override - public void onItemClicked(InventoryClickEvent event) { - if (!mayAffectThisInventory(event)) { - return; - } - - event.setCancelled(true); - if (!getInventory().equals(event.getClickedInventory())) { - return; - } - - int slot = event.getSlot(); - int multiplier = Config.getInt("worldborderlevelbordermultiplier"); - switch (slot) { - case ADD_MULTIPLAYER_INDEX -> { - if (multiplier <= 9) { - multiplier++; - Config.setValue("worldborderlevelbordermultiplier", multiplier); - if (Config.getBoolean("worldborderlevel")) { - WorldBorderLevelChallenge.borderSync(); - } - rebuildInventory(); - } - } - case REMOVE_MULTIPLAYER_INDEX -> { - if (multiplier > 1) { - multiplier--; - Config.setValue("worldborderlevelbordermultiplier", multiplier); - if (Config.getBoolean("worldborderlevel")) { - WorldBorderLevelChallenge.borderSync(); - } - rebuildInventory(); - } - } - case BACK_INDEX -> new ChallengesGui(getPlayer()).open(); - default -> { - } - } - } - - @Override - protected void rebuildInventory() { - for (int i = 0; i < 9; i++) { - ItemStack item; - int multiplayer = Config.getInt("worldborderlevelbordermultiplier"); - switch (i) { - case ADD_MULTIPLAYER_INDEX -> - item = CustomHeads.RAINBOW_ARROW_UP.getHead(Component.text("Multiplier +1", ChatUtil.GREEN)); - case REMOVE_MULTIPLAYER_INDEX -> - item = CustomHeads.RAINBOW_ARROW_DOWN.getHead(Component.text("Multiplier -1", ChatUtil.RED)); - - case MULTIPLAYER_INDEX -> { - ItemStack stack = new ItemStack(Material.STRUCTURE_VOID, multiplayer); - ItemMeta meta = stack.getItemMeta(); - meta.displayName(Component.text("World Boarder Multiplier: ", ChatUtil.GREEN).append(Component.text(multiplayer, ChatUtil.BLUE))); - stack.setItemMeta(meta); - item = stack; - } - case BACK_INDEX -> - item = CustomHeads.RAINBOW_ARROW_BACKWARD_II.getHead(Component.text("Zurück", ChatUtil.GREEN)); - default -> item = ItemUtils.EMPTY_ICON; - } - this.getInventory().setItem(i, item); - } - } -} diff --git a/src/main/java/de/fanta/challenges/guis/challengesettingsguis/MLGSettingsGui.java b/src/main/java/de/fanta/challenges/guis/challengesettingsguis/MLGSettingsGui.java deleted file mode 100644 index 1c02cea..0000000 --- a/src/main/java/de/fanta/challenges/guis/challengesettingsguis/MLGSettingsGui.java +++ /dev/null @@ -1,114 +0,0 @@ -package de.fanta.challenges.guis.challengesettingsguis; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.guis.settingsgui.ChallengesGui; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.ItemUtils; -import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; -import de.iani.cubesideutils.bukkit.items.CustomHeads; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryType; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -public class MLGSettingsGui extends AbstractWindow { - private static final Challenges plugin = Challenges.getPlugin(); - private static final int RANDOM_BLOCK_INDEX = 1; - private static final int ADD_TIME_INDEX = 2; - private static final int TIME_INDEX = 5; - private static final int REMOVE_TIME_INDEX = 8; - - private static final int BACK_INDEX = 6; - - public MLGSettingsGui(Player player) { - super(player, Bukkit.createInventory(player, InventoryType.DISPENSER, plugin.getGuiPrefix().append(Component.text(" >> MLG Settings")))); - } - - @Override - public void onItemClicked(InventoryClickEvent event) { - if (!mayAffectThisInventory(event)) { - return; - } - - event.setCancelled(true); - if (!getInventory().equals(event.getClickedInventory())) { - return; - } - - int slot = event.getSlot(); - int time = Config.getInt("mlg.maxtime"); - switch (slot) { - case RANDOM_BLOCK_INDEX -> { - if (Config.getBoolean("mlg.randommlgblock")) { - Config.setValue("mlg.randommlgblock", false); - ChatUtil.sendTitleToAll(Component.text("MLG Challenge"), Component.text("Wassereimer MLG", ChatUtil.GREEN)); - } else { - Config.setValue("mlg.randommlgblock", true); - ChatUtil.sendTitleToAll(Component.text("MLG Challenge"), Component.text("Zufälliger MLG Block", ChatUtil.GREEN)); - } - rebuildInventory(); - } - case ADD_TIME_INDEX -> { - if (event.isShiftClick()) { - time = time + 10; - } else { - time = time + 100; - } - Config.setValue("mlg.maxtime", time); - rebuildInventory(); - } - case REMOVE_TIME_INDEX -> { - if (event.isShiftClick()) { - time = time - 10; - } else { - time = time - 100; - } - if (time > 1) { - Config.setValue("mlg.maxtime", time); - rebuildInventory(); - } - } - case BACK_INDEX -> new ChallengesGui(getPlayer()).open(); - default -> { - } - } - } - - @Override - protected void rebuildInventory() { - for (int i = 0; i < 9; i++) { - ItemStack item; - int time = Config.getInt("mlg.maxtime"); - switch (i) { - case RANDOM_BLOCK_INDEX -> { - if (Config.getBoolean("mlg.randommlgblock")) { - item = ItemUtils.createGuiItem(Material.SLIME_BLOCK, Component.text("Zufälliger MLG Block", ChatUtil.GREEN), true, Component.text("Du bekommst ein Zufälligen Block.", ChatUtil.GREEN)); - } else { - item = ItemUtils.createGuiItem(Material.WATER_BUCKET, Component.text("Wasser MLG", ChatUtil.GREEN), true, Component.text("Du bekommst einen Wassereimer.", ChatUtil.GREEN)); - } - } - case ADD_TIME_INDEX -> - item = CustomHeads.RAINBOW_ARROW_UP.getHead(Component.text("Zeit hinzufügen", ChatUtil.GREEN), Component.text("Klick = +100 Sekunden", ChatUtil.GREEN), Component.text("Shift + Klick = +10 Sekunden", ChatUtil.GREEN)); - case REMOVE_TIME_INDEX -> - item = CustomHeads.RAINBOW_ARROW_DOWN.getHead(Component.text("Zeit entfernen", ChatUtil.RED), Component.text("Klick = -100 Sekunden", ChatUtil.RED), Component.text("Shift + Klick = -10 Sekunden", ChatUtil.RED)); - - case TIME_INDEX -> { - ItemStack stack = new ItemStack(Material.CLOCK, Math.min(time, 64)); - ItemMeta meta = stack.getItemMeta(); - meta.displayName(Component.text(time + " Sekunden", ChatUtil.BLUE)); - stack.setItemMeta(meta); - item = stack; - } - case BACK_INDEX -> - item = CustomHeads.RAINBOW_ARROW_BACKWARD_II.getHead(Component.text("Zurück", ChatUtil.GREEN)); - default -> item = ItemUtils.EMPTY_ICON; - } - this.getInventory().setItem(i, item); - } - } -} diff --git a/src/main/java/de/fanta/challenges/guis/challengesettingsguis/NoSneakSettingsGui.java b/src/main/java/de/fanta/challenges/guis/challengesettingsguis/NoSneakSettingsGui.java deleted file mode 100644 index 2b87884..0000000 --- a/src/main/java/de/fanta/challenges/guis/challengesettingsguis/NoSneakSettingsGui.java +++ /dev/null @@ -1,98 +0,0 @@ -package de.fanta.challenges.guis.challengesettingsguis; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.guis.settingsgui.ChallengesGui; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.ItemUtils; -import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; -import de.iani.cubesideutils.bukkit.items.CustomHeads; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.attribute.Attribute; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryType; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -public class NoSneakSettingsGui extends AbstractWindow { - private static final Challenges plugin = Challenges.getPlugin(); - - private static final int ADD_DAMAGE_INDEX = 2; - private static final int DAMAGE_INDEX = 5; - private static final int REMOVE_DAMAGE_INDEX = 8; - - private static final int BACK_INDEX = 6; - - public NoSneakSettingsGui(Player player) { - super(player, Bukkit.createInventory(player, InventoryType.DISPENSER, plugin.getGuiPrefix().append(Component.text(" >> No Sneak Settings")))); - } - - @Override - public void onItemClicked(InventoryClickEvent event) { - if (!mayAffectThisInventory(event)) { - return; - } - - event.setCancelled(true); - if (!getInventory().equals(event.getClickedInventory())) { - return; - } - - int slot = event.getSlot(); - double damage = Config.getDouble("sneakdmg"); - double maxdamage; - if (plugin.getCurrentEditor() != null) { - maxdamage = plugin.getCurrentEditor().getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue() - 1.0; - } else { - maxdamage = 20.0; - } - switch (slot) { - case ADD_DAMAGE_INDEX -> { - if (damage <= maxdamage) { - damage++; - Config.setValue("sneakdmg", damage); - rebuildInventory(); - } - } - case REMOVE_DAMAGE_INDEX -> { - if (damage > 1) { - damage--; - Config.setValue("sneakdmg", damage); - rebuildInventory(); - } - } - case BACK_INDEX -> new ChallengesGui(getPlayer()).open(); - default -> { - } - } - } - - @Override - protected void rebuildInventory() { - for (int i = 0; i < 9; i++) { - ItemStack item; - int damage = Config.getInt("sneakdmg"); - switch (i) { - case ADD_DAMAGE_INDEX -> - item = CustomHeads.RAINBOW_ARROW_UP.getHead(Component.text("Damage +1", ChatUtil.GREEN)); - case REMOVE_DAMAGE_INDEX -> - item = CustomHeads.RAINBOW_ARROW_DOWN.getHead(Component.text("Damage -1", ChatUtil.RED)); - - case DAMAGE_INDEX -> { - ItemStack stack = new ItemStack(Material.SMOOTH_STONE_SLAB, Math.min(damage, 64)); - ItemMeta meta = stack.getItemMeta(); - meta.displayName(Component.text("Damage: ", ChatUtil.GREEN).append(Component.text(damage, ChatUtil.BLUE))); - stack.setItemMeta(meta); - item = stack; - } - case BACK_INDEX -> - item = CustomHeads.RAINBOW_ARROW_BACKWARD_II.getHead(Component.text("Zurück", ChatUtil.GREEN)); - default -> item = ItemUtils.EMPTY_ICON; - } - this.getInventory().setItem(i, item); - } - } -} diff --git a/src/main/java/de/fanta/challenges/guis/challengesettingsguis/TiedTogetherSettingsGui.java b/src/main/java/de/fanta/challenges/guis/challengesettingsguis/TiedTogetherSettingsGui.java deleted file mode 100644 index 04157ea..0000000 --- a/src/main/java/de/fanta/challenges/guis/challengesettingsguis/TiedTogetherSettingsGui.java +++ /dev/null @@ -1,97 +0,0 @@ -package de.fanta.challenges.guis.challengesettingsguis; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.guis.settingsgui.ChallengesGui; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.ItemUtils; -import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; -import de.iani.cubesideutils.bukkit.items.CustomHeads; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryType; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -public class TiedTogetherSettingsGui extends AbstractWindow { - private static final Challenges plugin = Challenges.getPlugin(); - - private static final int ADD_RANGE_INDEX = 2; - private static final int RANGE_INDEX = 5; - private static final int REMOVE_RANGE_INDEX = 8; - - private static final int BACK_INDEX = 6; - - public TiedTogetherSettingsGui(Player player) { - super(player, Bukkit.createInventory(player, InventoryType.DISPENSER, plugin.getGuiPrefix().append(Component.text(" >> Zusammengebunden Settings")))); - } - - @Override - public void onItemClicked(InventoryClickEvent event) { - if (!mayAffectThisInventory(event)) { - return; - } - - event.setCancelled(true); - if (!getInventory().equals(event.getClickedInventory())) { - return; - } - - int slot = event.getSlot(); - double range = Config.getDouble("playerrange"); - switch (slot) { - case ADD_RANGE_INDEX -> { - if (event.isShiftClick()) { - range = range + 10; - } else { - range = range + 100; - } - Config.setValue("playerrange", range); - rebuildInventory(); - } - case REMOVE_RANGE_INDEX -> { - if (event.isShiftClick()) { - range = range - 10; - } else { - range = range - 100; - } - if (range > 1) { - Config.setValue("playerrange", range); - rebuildInventory(); - } - } - case BACK_INDEX -> new ChallengesGui(getPlayer()).open(); - default -> { - } - } - } - - @Override - protected void rebuildInventory() { - for (int i = 0; i < 9; i++) { - ItemStack item; - int range = Config.getInt("playerrange"); - switch (i) { - case ADD_RANGE_INDEX -> - item = CustomHeads.RAINBOW_ARROW_UP.getHead(Component.text("Range hinzufügen", ChatUtil.GREEN), Component.text("Klick = Range +100", ChatUtil.GREEN), Component.text("Shift + Klick = Range +10", ChatUtil.GREEN)); - case REMOVE_RANGE_INDEX -> - item = CustomHeads.RAINBOW_ARROW_DOWN.getHead(Component.text("Range entfernen", ChatUtil.RED), Component.text("Klick = Range -100", ChatUtil.RED), Component.text("Shift + Klick = Range -10", ChatUtil.RED)); - - case RANGE_INDEX -> { - ItemStack stack = new ItemStack(Material.COMPASS, Math.min(range, 64)); - ItemMeta meta = stack.getItemMeta(); - meta.displayName(Component.text("Maximale Range: ", ChatUtil.GREEN).append(Component.text(range, ChatUtil.GREEN))); - stack.setItemMeta(meta); - item = stack; - } - case BACK_INDEX -> - item = CustomHeads.RAINBOW_ARROW_BACKWARD_II.getHead(Component.text("Zurück", ChatUtil.GREEN)); - default -> item = ItemUtils.EMPTY_ICON; - } - this.getInventory().setItem(i, item); - } - } -} diff --git a/src/main/java/de/fanta/challenges/guis/coordsgui/CoordsDeleteGUI.java b/src/main/java/de/fanta/challenges/guis/coordsgui/CoordsDeleteGUI.java deleted file mode 100644 index c412493..0000000 --- a/src/main/java/de/fanta/challenges/guis/coordsgui/CoordsDeleteGUI.java +++ /dev/null @@ -1,72 +0,0 @@ -package de.fanta.challenges.guis.coordsgui; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.ItemUtils; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryType; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; - -public class CoordsDeleteGUI implements Listener { - private static final Challenges plugin = Challenges.getPlugin(); - - private static final int ACCEPT_INDEX = 0; - private static final int DENY_INDEX = 4; - private static final int ITEM_INDEX = 2; - - public static final int INVENTORY_SIZE = 5; - public static final Inventory COORDS_DELETE_GUI = Bukkit.createInventory(null, InventoryType.HOPPER, plugin.getGuiPrefix().append(Component.text(" >> Waypoint Löschen"))); - - public static void createCoordsDeleteGUI(Player p, String waypointName, ItemStack stack) { - COORDS_DELETE_GUI.setItem(ACCEPT_INDEX, ItemUtils.createGuiItem(Material.LIME_CONCRETE, Component.text("Löschen bestätigen", ChatUtil.GREEN), Component.text("Wegpunkt: ", ChatUtil.GREEN).append(Component.text(waypointName, ChatUtil.BLUE)))); - - if (stack != null) { - COORDS_DELETE_GUI.setItem(ITEM_INDEX, ItemUtils.createGuiItem(stack.getType(), Component.text(waypointName, ChatUtil.BLUE))); - } else { - COORDS_DELETE_GUI.setItem(ITEM_INDEX, ItemUtils.createGuiItem(Material.GRAY_BANNER, Component.text(waypointName, ChatUtil.BLUE))); - } - - COORDS_DELETE_GUI.setItem(DENY_INDEX, ItemUtils.createGuiItem(Material.RED_CONCRETE, Component.text("Löschen abbrechen", ChatUtil.RED), Component.text("Wegpunkt: ", ChatUtil.GREEN).append(Component.text(waypointName, ChatUtil.BLUE)))); - - for (int i = 0; i < INVENTORY_SIZE; i++) { - ItemStack item = COORDS_DELETE_GUI.getItem(i); - if (item == null || item.getType() == Material.AIR) { - COORDS_DELETE_GUI.setItem(i, ItemUtils.EMPTY_ICON); - } - } - - p.openInventory(COORDS_DELETE_GUI); - } - - @EventHandler - public void onInventoryClick(InventoryClickEvent e) { - if (COORDS_DELETE_GUI.equals(e.getClickedInventory())) { - int slot = e.getRawSlot(); - Player player = (Player) e.getWhoClicked(); - ItemStack stack = e.getClickedInventory().getItem(ITEM_INDEX); - - if (stack == null) { - return; - } - - String waypointName = stack.getItemMeta().getDisplayName().substring(14); - - if (slot == ACCEPT_INDEX) { - Config.setValue("Saved_Locations." + waypointName, null, false); - ChatUtil.sendMessage(player, Component.text(waypointName, ChatUtil.BLUE).append(Component.text(" wurde gelöscht!", ChatUtil.GREEN))); - player.closeInventory(); - } else if (slot == DENY_INDEX) { - CoordsGUI.buildCoordsInventory(player); - } - e.setCancelled(true); - } - } -} diff --git a/src/main/java/de/fanta/challenges/guis/coordsgui/CoordsGUI.java b/src/main/java/de/fanta/challenges/guis/coordsgui/CoordsGUI.java deleted file mode 100644 index a563dda..0000000 --- a/src/main/java/de/fanta/challenges/guis/coordsgui/CoordsGUI.java +++ /dev/null @@ -1,126 +0,0 @@ -package de.fanta.challenges.guis.coordsgui; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.ItemUtils; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; - -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; -import java.util.Set; - -public class CoordsGUI implements Listener { - private static final Challenges plugin = Challenges.getPlugin(); - private static final Map wayPointPerSlot = new HashMap<>(); - private static final Map InventoryperPlayer = new HashMap<>(); - private static int CLOSE_IDEX = 0; - - public static void buildCoordsInventory(Player p) { - Set waypoints = Config.getConfigurationSection("Saved_Locations").getKeys(false); - - if (waypoints.isEmpty()) { - ChatUtil.sendErrorMessage(p, "Keine WayPoints vorhanden"); - return; - } - - Inventory COORDS_UI = Bukkit.createInventory(p, 9 * (waypoints.size() / 7 + ((waypoints.size() % 7 > 0) ? 1 : 0)) + 18, plugin.getGuiPrefix().append(Component.text(" >> Waypoints"))); - InventoryperPlayer.put(p, COORDS_UI); - CLOSE_IDEX = COORDS_UI.getSize() - 9; - int row = 0; - int cat = 0; - - for (String waypoint : waypoints) { - int slot = row * 9 + cat + 10; - - World world = Bukkit.getWorld(Objects.requireNonNull(Config.getString("Saved_Locations." + waypoint + ".World"))); - double x = Double.parseDouble(Objects.requireNonNull(Config.getString("Saved_Locations." + waypoint + ".BlockX"))); - double y = Double.parseDouble(Objects.requireNonNull(Config.getString("Saved_Locations." + waypoint + ".BlockY"))); - double z = Double.parseDouble(Objects.requireNonNull(Config.getString("Saved_Locations." + waypoint + ".BlockZ"))); - - Location waypointlocation = new Location(world, x, y, z); - - if (world != null) { - ItemStack stack = ItemUtils.createGuiItem(getBlock(world.getName()), Component.text(waypoint, ChatUtil.BLUE), Component.text("X: ", ChatUtil.BLUE).append(Component.text(x, ChatUtil.GREEN).append(Component.text(" Y: ", ChatUtil.BLUE).append(Component.text(y, ChatUtil.GREEN).append(Component.text(" Z: ", ChatUtil.BLUE)).append(Component.text(z, ChatUtil.GREEN))))), Component.text("Linksklick: Zeigt Coords im Chat.", ChatUtil.GREEN), Component.text("Rechtsklick: Waypoint Löschen.", ChatUtil.RED)); - COORDS_UI.setItem(slot, stack); - wayPointPerSlot.put(waypoint, waypointlocation); - if (cat < 6) { - cat++; - continue; - } - row++; - cat = 0; - } - - } - - COORDS_UI.setItem(CLOSE_IDEX, ItemUtils.createGuiItem(Material.BARRIER, Component.text("Menü verlassen!", ChatUtil.RED))); - for (int i = 0; i < COORDS_UI.getSize(); i++) { - if (COORDS_UI.getItem(i) == null || COORDS_UI.getItem(i).getType() == Material.AIR) { - COORDS_UI.setItem(i, ItemUtils.EMPTY_ICON); - } - } - p.openInventory(COORDS_UI); - } - - @EventHandler - public void onInventoryClick(InventoryClickEvent e) { - Player p = (Player) e.getWhoClicked(); - - if (e.getInventory() == InventoryperPlayer.get(p)) { - int slot = e.getRawSlot(); - if (slot == -999) { - return; - } - ItemStack stack = e.getClickedInventory().getItem(slot); - - if (stack == null) { - return; - } - - String waypointName = stack.getItemMeta().getDisplayName(); - - if (waypointName.length() > 14) { - waypointName = waypointName.substring(14); - } - - Location location = wayPointPerSlot.get(waypointName); - - if (location != null) { - if (e.isLeftClick()) { - ChatUtil.sendMessage(p, Component.text("Position ", ChatUtil.GREEN).append(Component.text(waypointName, ChatUtil.ORANGE).append(Component.text(": ", ChatUtil.GREEN).append(Component.text("[" + location.getX() + "/" + location.getY() + "/" + location.getZ() + " " + location.getWorld().getName() + "]", ChatUtil.ORANGE))))); - p.closeInventory(); - } else if (e.isRightClick()) { - CoordsDeleteGUI.createCoordsDeleteGUI(p, waypointName, stack); - } - } - - if (slot == CLOSE_IDEX) { - p.closeInventory(); - } - e.setCancelled(true); - } - } - - private static Material getBlock(String wname) { - ItemStack mat = new ItemStack(Material.GRASS_BLOCK); - if (wname.equals(Bukkit.getWorlds().get(1).getName())) { - mat = mat.withType(Material.NETHERRACK); - } else if (wname.equals(Bukkit.getWorlds().get(2).getName())) { - mat = mat.withType(Material.END_STONE); - } - return mat.getType(); - } - -} diff --git a/src/main/java/de/fanta/challenges/guis/eventgui/BingoItemsGui.java b/src/main/java/de/fanta/challenges/guis/eventgui/BingoItemsGui.java deleted file mode 100644 index 2858795..0000000 --- a/src/main/java/de/fanta/challenges/guis/eventgui/BingoItemsGui.java +++ /dev/null @@ -1,75 +0,0 @@ -package de.fanta.challenges.guis.eventgui; - -import de.fanta.challenges.challenges.ChallengeEvents.BingoChallengeEvent; -import de.fanta.challenges.Challenges; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.enchantments.Enchantment; -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.InventoryType; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemFlag; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.stream.Collectors; - -public class BingoItemsGui implements Listener { - - private static final Challenges plugin = Challenges.getPlugin(); - - public static final Component TITLE = plugin.getGuiPrefix().append(Component.text(" >> Event Items")); - private static final Inventory event_items = Bukkit.createInventory(null, InventoryType.DISPENSER, TITLE); - - private static final Map playerInvs = new HashMap<>(); - - public static void openEventGUI(Player p) { - p.openInventory(event_items); - } - - public static List getEventItems() { - return Arrays.stream(event_items.getContents()).filter(itemStack -> itemStack != null && !itemStack.getType().equals(Material.AIR)).map(ItemStack::getType).collect(Collectors.toList()); - } - - public static Map getPlayerInvs() { - return playerInvs; - } - - public static void openPlayerInv(Player player, Player sender) { - Inventory inventory = Bukkit.createInventory(player, InventoryType.DISPENSER, plugin.getGuiPrefix().append(Component.text(" >> Bingo"))); - List playerMaterials = BingoChallengeEvent.getPlayerMaterials().getOrDefault(player.getUniqueId(), new ArrayList<>()); - BingoChallengeEvent.getMaterials().forEach(material -> { - ItemStack itemStack = new ItemStack(material); - if (playerMaterials.contains(material)) { - ItemMeta itemMeta = itemStack.getItemMeta(); - itemMeta.addEnchant(Enchantment.MENDING, 1, false); - itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS); - itemStack.setItemMeta(itemMeta); - } - inventory.addItem(itemStack); - }); - playerInvs.put(player.getUniqueId(), inventory); - sender.openInventory(inventory); - } - - @EventHandler - public void onInventoryClick(InventoryClickEvent e) { - UUID uuid = e.getWhoClicked().getUniqueId(); - if (e.getInventory() == playerInvs.get(uuid)) { - e.setCancelled(true); - } - } -} - - - diff --git a/src/main/java/de/fanta/challenges/guis/eventgui/EventGui.java b/src/main/java/de/fanta/challenges/guis/eventgui/EventGui.java deleted file mode 100644 index 99562f4..0000000 --- a/src/main/java/de/fanta/challenges/guis/eventgui/EventGui.java +++ /dev/null @@ -1,280 +0,0 @@ -package de.fanta.challenges.guis.eventgui; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.challenges.ChallengeEvents.BridgeRaceChallengeEvent; -import de.fanta.challenges.challenges.ChallengeEvents.DeathrunChallengeEvent; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.ItemUtils; -import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; -import de.iani.cubesideutils.bukkit.items.CustomHeads; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.ItemStack; - -import java.util.Objects; - -public class EventGui extends AbstractWindow { - private static final Challenges plugin = Challenges.getPlugin(); - - public static final int INVENTORY_SIZE = 54; - private static final int NULL_EVENT_INDEX = 0; - private static final int TEAM_INDEX = 8; - - private static final int BINGO_EVENT_INDEX = 10; - private static final int DEATHRUN_EVENT_INDEX = 11; - private static final int FORCE_ITEM_INDEX = 12; - private static final int SAMMEL_FIEBER_INDEX = 13; - private static final int BRIDGE_RACE_INDEX = 14; - private static final int ORE_BATTLE_INDEX = 15; - private static final int DEATH_COUNTER_INDEX = 16; - - private static final int BINGO_ITEMS_INDEX = 19; - private static final int FORCE_ITEM_SETTINGS_INDEX = 21; - private static final int SAMMEL_FIEBER_SETTINGS_INDEX = 22; - - private static final int DIFFERENT_ITEMS_INDEX = 28; - private static final int TIME_EVENT_INDEX = 29; - - private static final int EVENT_SETTINGS_INDEX = 45; - private static final int CLOSE_IDEX = 54; - - public EventGui(Player player) { - super(player, Bukkit.createInventory(player, INVENTORY_SIZE, plugin.getGuiPrefix().append(Component.text(" >> Event Settings")))); - } - - @Override - protected void rebuildInventory() { - for (int i = 0; i < INVENTORY_SIZE; i++) { - ItemStack item; - switch (i) { - case NULL_EVENT_INDEX -> { - if (!Objects.equals(Config.getString("event.type"), "nix")) { - item = CustomHeads.RAINBOW_X.getHead(Component.text("Event beenden", ChatUtil.RED)); - } else { - item = ItemUtils.EMPTY_ICON; - } - } - case TEAM_INDEX -> - item = ItemUtils.createGuiItem(Material.GRAY_BED, Component.text("Team Settings", ChatUtil.BLUE)); - case BINGO_EVENT_INDEX -> { - if (Objects.equals(Config.getString("event.type"), "bingo")) { - item = ItemUtils.createGuiItem(Material.GRAY_SHULKER_BOX, Component.text("Bingo Event", ChatUtil.GREEN), true, Component.text("Sammle Vorgegebene Items", ChatUtil.GREEN), Component.text("Items kann man mit /bingo sehen", ChatUtil.GREEN)); - } else { - item = ItemUtils.createGuiItem(Material.GRAY_SHULKER_BOX, Component.text("Bingo Event", ChatUtil.RED), Component.text("Sammle Vorgegebene Items", ChatUtil.GREEN), Component.text("Items kann man mit /bingo sehen", ChatUtil.GREEN)); - } - } - case DEATHRUN_EVENT_INDEX -> { - if (Objects.equals(Config.getString("event.type"), "deathrun")) { - item = ItemUtils.createGuiItem(Material.LEATHER_BOOTS, Component.text("Deathrun Event", ChatUtil.GREEN), true, Component.text("Laufe so weit wie möglich ohne zu sterben", ChatUtil.GREEN)); - } else { - item = ItemUtils.createGuiItem(Material.LEATHER_BOOTS, Component.text("Deathrun Event", ChatUtil.RED), Component.text("Laufe so weit wie möglich ohne zu sterben", ChatUtil.GREEN)); - } - } - case FORCE_ITEM_INDEX -> { - if (Objects.equals(Config.getString("event.type"), "forcequest")) { - item = ItemUtils.createGuiItem(Material.DIAMOND_PICKAXE, Component.text("Force Quest Event", ChatUtil.GREEN), true, Component.text("Erledige so viele Aufgaben wie möglich.", ChatUtil.GREEN)); - } else { - item = ItemUtils.createGuiItem(Material.DIAMOND_PICKAXE, Component.text("Force Quest Event", ChatUtil.RED), Component.text("Erledige so viele Aufgaben wie möglich.", ChatUtil.GREEN)); - } - } - case SAMMEL_FIEBER_INDEX -> { - if (Objects.equals(Config.getString("event.type"), "sammelfieber")) { - item = ItemUtils.createGuiItem(Material.HOPPER, Component.text("Sammel Fieber Event", ChatUtil.GREEN), true, Component.text("Sammle so viel Items wie möglich!", ChatUtil.GREEN)); - } else { - item = ItemUtils.createGuiItem(Material.HOPPER, Component.text("Sammel Fieber Event", ChatUtil.RED), Component.text("Sammle so viel Items wie möglich!", ChatUtil.GREEN)); - } - } - case BRIDGE_RACE_INDEX -> { - if (Objects.equals(Config.getString("event.type"), "bridgerace")) { - item = ItemUtils.createGuiItem(Material.SCAFFOLDING, Component.text("Bridge Race Event", ChatUtil.GREEN), true, Component.text("Komme so weit wie möglich.", ChatUtil.GREEN)); - } else { - item = ItemUtils.createGuiItem(Material.SCAFFOLDING, Component.text("Bridge Race Event", ChatUtil.RED), Component.text("Komme so weit wie möglich.", ChatUtil.GREEN)); - } - } - case ORE_BATTLE_INDEX -> { - if (Objects.equals(Config.getString("event.type"), "orebattle")) { - item = ItemUtils.createGuiItem(Material.DEEPSLATE_IRON_ORE, Component.text("Ore Battle Event", ChatUtil.GREEN), true, Component.text("Baue so viele erze ab wie möglich.", ChatUtil.GREEN)); - } else { - item = ItemUtils.createGuiItem(Material.DEEPSLATE_IRON_ORE, Component.text("Ore Battle Event", ChatUtil.RED), Component.text("Baue so viele erze ab wie möglich.", ChatUtil.GREEN)); - } - } - case DEATH_COUNTER_INDEX -> { - if (Objects.equals(Config.getString("event.type"), "deathcounter")) { - item = ItemUtils.createGuiItem(Material.DAMAGED_ANVIL, Component.text("Death Counter Event", ChatUtil.GREEN), true, Component.text("Zeigt Tode bei einem Event.", ChatUtil.GREEN), Component.text("Kann nicht mit anderen Events verbunden Werden.", ChatUtil.GREEN)); - } else { - item = ItemUtils.createGuiItem(Material.DAMAGED_ANVIL, Component.text("Death Counter Event", ChatUtil.RED), Component.text("Zeigt Tode bei einem Event.", ChatUtil.GREEN), Component.text("Kann nicht mit anderen Events verbunden Werden.", ChatUtil.GREEN)); - } - } - case BINGO_ITEMS_INDEX -> { - if (Objects.equals(Config.getString("event.type"), "bingo")) { - item = ItemUtils.createGuiItem(Material.CHEST, Component.text("Items", ChatUtil.GREEN), Component.text("Anklicken um Items Hinzuzufügen", ChatUtil.GREEN)); - } else { - item = ItemUtils.EMPTY_ICON; - } - } - case FORCE_ITEM_SETTINGS_INDEX -> { - if (Objects.equals(Config.getString("event.type"), "forcequest")) { - item = ItemUtils.createGuiItem(Material.REPEATING_COMMAND_BLOCK, Component.text("Force Item Event Settings", ChatUtil.GREEN)); - } else { - item = ItemUtils.EMPTY_ICON; - } - } - case SAMMEL_FIEBER_SETTINGS_INDEX -> { - if (Objects.equals(Config.getString("event.type"), "sammelfieber")) { - item = ItemUtils.createGuiItem(Material.NETHER_STAR, Component.text("Sammel Fieber Event Settings", ChatUtil.GREEN)); - } else { - item = ItemUtils.EMPTY_ICON; - } - } - case DIFFERENT_ITEMS_INDEX -> { - if (Objects.equals(Config.getString("event.type"), "differentitems")) { - item = ItemUtils.createGuiItem(Material.CRAFTING_TABLE, Component.text("DifferentItems", ChatUtil.GREEN), true, Component.text("Sammel so viele verschiedene Items wie möglich.", ChatUtil.GREEN)); - } else { - item = ItemUtils.createGuiItem(Material.CRAFTING_TABLE, Component.text("DifferentItems", ChatUtil.RED), Component.text("Sammel so viele verschiedene Items wie möglich.", ChatUtil.GREEN)); - } - } - case TIME_EVENT_INDEX -> { - if (Objects.equals(Config.getString("event.type"), "time")) { - item = ItemUtils.createGuiItem(Material.CLOCK, Component.text("Time", ChatUtil.GREEN), true, Component.text("Zeigt wie lang ein Spieler mitgespielt hat.", ChatUtil.GREEN)); - } else { - item = ItemUtils.createGuiItem(Material.CLOCK, Component.text("Time", ChatUtil.RED), Component.text("Zeigt wie lang ein Spieler mitgespielt hat.", ChatUtil.GREEN)); - } - } - case EVENT_SETTINGS_INDEX -> - item = ItemUtils.createGuiItem(Material.CHAIN_COMMAND_BLOCK, Component.text("Event Settings", ChatUtil.BLUE)); - - case CLOSE_IDEX -> - item = CustomHeads.RAINBOW_X.getHead(Component.text("Menü verlassen!", ChatUtil.RED)); - default -> item = ItemUtils.EMPTY_ICON; - } - this.getInventory().setItem(i, item); - } - } - - @Override - public void onItemClicked(InventoryClickEvent event) { - if (!mayAffectThisInventory(event)) { - return; - } - - event.setCancelled(true); - if (!getInventory().equals(event.getClickedInventory())) { - return; - } - - Player p = getPlayer(); - int slot = event.getSlot(); - switch (slot) { - case NULL_EVENT_INDEX -> { - if (!Objects.equals(Config.getString("event.type"), "nix")) { - plugin.getScoreManager().resetScores(); - Config.setValue("event.type", "nix"); - ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Event beendet", ChatUtil.RED)); - } - } - case BINGO_EVENT_INDEX -> { - if (!Objects.equals(Config.getString("event.type"), "bingo")) { - Config.setValue("event.type", "bingo"); - ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Sammle Vorgegebene Items! (/bingo)", ChatUtil.GREEN)); - } else { - ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits"); - } - } - case DEATHRUN_EVENT_INDEX -> { - if (!Objects.equals(Config.getString("event.type"), "deathrun")) { - Config.setValue("event.type", "deathrun"); - ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Laufe so weit wie möglich ohne zu sterben!", ChatUtil.GREEN)); - DeathrunChallengeEvent.load(p); - } else { - ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits"); - } - } - case DEATH_COUNTER_INDEX -> { - if (!Objects.equals(Config.getString("event.type"), "deathcounter")) { - Config.setValue("event.type", "deathcounter"); - ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Death Counter", ChatUtil.GREEN)); - } else { - ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits"); - } - } - case SAMMEL_FIEBER_INDEX -> { - if (!Objects.equals(Config.getString("event.type"), "sammelfieber")) { - Config.setValue("event.type", "sammelfieber"); - ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("SammelFieber", ChatUtil.GREEN)); - } else { - ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits"); - } - } - case ORE_BATTLE_INDEX -> { - if (!Objects.equals(Config.getString("event.type"), "orebattle")) { - Config.setValue("event.type", "orebattle"); - ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Ore Battle", ChatUtil.GREEN)); - } else { - ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits"); - } - } - case FORCE_ITEM_INDEX -> { - if (!Objects.equals(Config.getString("event.type"), "forcequest")) { - Config.setValue("event.type", "forcequest"); - ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Force Quest", ChatUtil.GREEN)); - } else { - ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits"); - } - } - case BRIDGE_RACE_INDEX -> { - if (!Objects.equals(Config.getString("event.type"), "bridgerace")) { - if (BridgeRaceChallengeEvent.load(p)) { - Config.setValue("event.type", "bridgerace"); - ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Bridge Race", ChatUtil.GREEN)); - } - } else { - ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits"); - } - } - case DIFFERENT_ITEMS_INDEX -> { - if (!Objects.equals(Config.getString("event.type"), "differentitems")) { - Config.setValue("event.type", "differentitems"); - ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Different Items", ChatUtil.GREEN)); - } else { - ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits"); - } - } - case TIME_EVENT_INDEX -> { - if (!Objects.equals(Config.getString("event.type"), "time")) { - Config.setValue("event.type", "time"); - ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Time", ChatUtil.GREEN)); - } else { - ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits"); - } - } - } - rebuildInventory(); - - switch (slot) { - case BINGO_ITEMS_INDEX -> { - if (Objects.equals(Config.getString("event.type"), "bingo")) { - BingoItemsGui.openEventGUI(p); - } - } - case SAMMEL_FIEBER_SETTINGS_INDEX -> { - if (Objects.equals(Config.getString("event.type"), "sammelfieber")) { - new SammelFieberSettingsGui(this, p).open(); - } - } - case FORCE_ITEM_SETTINGS_INDEX -> { - if (Objects.equals(Config.getString("event.type"), "forcequest")) { - new ForceQuestSettingsGui(p).open(); - } - } - case TEAM_INDEX -> new TeamSettingsGUI(p).open(); - case EVENT_SETTINGS_INDEX -> new EventSettingsGui(p).open(); - case CLOSE_IDEX -> p.closeInventory(); - } - } -} - - diff --git a/src/main/java/de/fanta/challenges/guis/eventgui/EventSettingsGui.java b/src/main/java/de/fanta/challenges/guis/eventgui/EventSettingsGui.java deleted file mode 100644 index 3c8d109..0000000 --- a/src/main/java/de/fanta/challenges/guis/eventgui/EventSettingsGui.java +++ /dev/null @@ -1,107 +0,0 @@ -package de.fanta.challenges.guis.eventgui; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.ItemUtils; -import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.ItemStack; - -public class EventSettingsGui extends AbstractWindow { - private static final Challenges plugin = Challenges.getPlugin(); - - public static final int INVENTORY_SIZE = 27; - - private static final int MINI_LWC_INDEX = 10; - private static final int TOURNAMENT_INDEX = 11; - private static final int START_INVENTORY_INDEX = 12; - - public EventSettingsGui(Player player) { - super(player, Bukkit.createInventory(player, INVENTORY_SIZE, plugin.getGuiPrefix().append(Component.text(" >> Event Settings")))); - } - - @Override - public void onItemClicked(InventoryClickEvent event) { - Player player = getPlayer(); - if (!mayAffectThisInventory(event)) { - return; - } - - event.setCancelled(true); - if (!getInventory().equals(event.getClickedInventory())) { - return; - } - - int slot = event.getSlot(); - switch (slot) { - case MINI_LWC_INDEX -> { - if (Config.getBoolean("event.minilwc")) { - Config.setValue("event.minilwc", false); - ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Mini LWC deaktiviert.", ChatUtil.RED), true); - } else { - Config.setValue("event.minilwc", true); - ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Mini LWC aktiviert.", ChatUtil.GREEN), true); - } - rebuildInventory(); - } - case TOURNAMENT_INDEX -> { - if (Config.getBoolean("event.tournament")) { - Config.setValue("event.tournament", false); - ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Turnier Modus deaktiviert.", ChatUtil.RED), true); - } else { - Config.setValue("event.tournament", true); - ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Turnier Modus aktiviert.", ChatUtil.GREEN), true); - } - player.closeInventory(); - } - case START_INVENTORY_INDEX -> { - if (event.isLeftClick()) { - if (Config.getBoolean("event.startinv")) { - Config.setValue("event.startinv", false); - ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Start Inventar deaktiviert.", ChatUtil.RED), true); - } else { - Config.setValue("event.startinv", true); - ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Start Inventar aktiviert.", ChatUtil.GREEN), true); - } - } - - if (event.isRightClick()) { - - } - rebuildInventory(); - } - default -> { - } - } - } - - @Override - protected void rebuildInventory() { - for (int i = 0; i < INVENTORY_SIZE; i++) { - ItemStack item; - switch (i) { - case MINI_LWC_INDEX -> { - if (Config.getBoolean("event.minilwc")) { - item = ItemUtils.createGuiItem(Material.BARREL, Component.text("Mini LWC aktiviert.", ChatUtil.GREEN)); - } else { - item = ItemUtils.createGuiItem(Material.BARREL, Component.text("Mini LWC deaktiviert.", ChatUtil.RED)); - } - } - case TOURNAMENT_INDEX -> { - if (Config.getBoolean("event.tournament")) { - item = ItemUtils.createGuiItem(Material.TARGET, Component.text("Turnier Modus aktiviert.", ChatUtil.GREEN)); - } else { - item = ItemUtils.createGuiItem(Material.TARGET, Component.text("Turnier Modus deaktiviert.", ChatUtil.RED)); - } - } - default -> item = ItemUtils.EMPTY_ICON; - } - this.getInventory().setItem(i, item); - } - } -} diff --git a/src/main/java/de/fanta/challenges/guis/eventgui/ForceQuestSettingsGui.java b/src/main/java/de/fanta/challenges/guis/eventgui/ForceQuestSettingsGui.java deleted file mode 100644 index 28faf8c..0000000 --- a/src/main/java/de/fanta/challenges/guis/eventgui/ForceQuestSettingsGui.java +++ /dev/null @@ -1,182 +0,0 @@ -package de.fanta.challenges.guis.eventgui; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.challenges.ChallengeEvents.forcequest.ForceQuestChallengeEvent; -import de.fanta.challenges.challenges.ChallengeEvents.forcequest.QuestType; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.ItemUtils; -import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; -import de.iani.cubesideutils.bukkit.items.CustomHeads; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -public class ForceQuestSettingsGui extends AbstractWindow { - private static final Challenges plugin = Challenges.getPlugin(); - - private static final int ADD_SKIP_INDEX = 8; - private static final int SKIP_COUNT_INDEX = 17; - private static final int REMOVE_SKIP_INDEX = 26; - private static final int FORCE_ITEM_INDEX = 10; - private static final int FORCE_BIOME_INDEX = 11; - private static final int FORCE_MOB_INDEX = 12; - private static final int FORCE_EFFECT_INDEX = 13; - private static final int FORCE_DEATH_INDEX = 14; - private static final int FORCE_LOCATION_INDEX = 15; - - private static final int BACK_INDEX = 18; - - public ForceQuestSettingsGui(Player player) { - super(player, Bukkit.createInventory(player, 27, plugin.getGuiPrefix().append(Component.text(" >> Force Quest Settings")))); - } - - @Override - public void onItemClicked(InventoryClickEvent event) { - if (!mayAffectThisInventory(event)) { - return; - } - - event.setCancelled(true); - if (!getInventory().equals(event.getClickedInventory())) { - return; - } - - int slot = event.getSlot(); - switch (slot) { - case ADD_SKIP_INDEX -> { - if (ForceQuestChallengeEvent.skipQuestCount <= 63) { - ForceQuestChallengeEvent.skipQuestCount++; - rebuildInventory(); - } - } - case REMOVE_SKIP_INDEX -> { - if (ForceQuestChallengeEvent.skipQuestCount > 1) { - ForceQuestChallengeEvent.skipQuestCount--; - rebuildInventory(); - } - } - case FORCE_ITEM_INDEX -> { - if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceItem)) { - ForceQuestChallengeEvent.activeQuestTypes.remove(QuestType.ForceItem); - } else { - ForceQuestChallengeEvent.activeQuestTypes.add(QuestType.ForceItem); - } - rebuildInventory(); - } - case FORCE_BIOME_INDEX -> { - if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceBiome)) { - ForceQuestChallengeEvent.activeQuestTypes.remove(QuestType.ForceBiome); - } else { - ForceQuestChallengeEvent.activeQuestTypes.add(QuestType.ForceBiome); - } - rebuildInventory(); - } - case FORCE_MOB_INDEX -> { - if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceMob)) { - ForceQuestChallengeEvent.activeQuestTypes.remove(QuestType.ForceMob); - } else { - ForceQuestChallengeEvent.activeQuestTypes.add(QuestType.ForceMob); - } - rebuildInventory(); - } - case FORCE_EFFECT_INDEX -> { - if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceEffect)) { - ForceQuestChallengeEvent.activeQuestTypes.remove(QuestType.ForceEffect); - } else { - ForceQuestChallengeEvent.activeQuestTypes.add(QuestType.ForceEffect); - } - rebuildInventory(); - } - case FORCE_DEATH_INDEX -> { - if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceDeath)) { - ForceQuestChallengeEvent.activeQuestTypes.remove(QuestType.ForceDeath); - } else { - ForceQuestChallengeEvent.activeQuestTypes.add(QuestType.ForceDeath); - } - rebuildInventory(); - } - case FORCE_LOCATION_INDEX -> { - if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceLocation)) { - ForceQuestChallengeEvent.activeQuestTypes.remove(QuestType.ForceLocation); - } else { - ForceQuestChallengeEvent.activeQuestTypes.add(QuestType.ForceLocation); - } - rebuildInventory(); - } - case BACK_INDEX -> new EventGui(getPlayer()).open(); - default -> { - } - } - } - - @Override - protected void rebuildInventory() { - for (int i = 0; i < 27; i++) { - ItemStack item; - switch (i) { - case ADD_SKIP_INDEX -> - item = CustomHeads.RAINBOW_ARROW_UP.getHead(Component.text("Add Skip", ChatUtil.GREEN)); - case REMOVE_SKIP_INDEX -> - item = CustomHeads.RAINBOW_ARROW_DOWN.getHead(Component.text("Remove Skip", ChatUtil.RED)); - - case SKIP_COUNT_INDEX -> { - ItemStack stack = new ItemStack(Material.STRUCTURE_VOID, ForceQuestChallengeEvent.skipQuestCount); - ItemMeta meta = stack.getItemMeta(); - meta.displayName(Component.text(ForceQuestChallengeEvent.skipQuestCount + "x ", ChatUtil.BLUE).append(Component.text("Skip Item", ChatUtil.GREEN))); - stack.setItemMeta(meta); - item = stack; - } - case FORCE_ITEM_INDEX -> { - if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceItem)) { - item = ItemUtils.createGuiItem(Material.CHEST, Component.text("Force Item", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.CHEST, Component.text("Force Item", ChatUtil.RED), false); - } - } - case FORCE_BIOME_INDEX -> { - if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceBiome)) { - item = ItemUtils.createGuiItem(Material.GRASS_BLOCK, Component.text("Force Biome", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.GRASS_BLOCK, Component.text("Force Biome", ChatUtil.RED), false); - } - } - case FORCE_MOB_INDEX -> { - if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceMob)) { - item = ItemUtils.createGuiItem(Material.PIG_SPAWN_EGG, Component.text("Force Mob", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.PIG_SPAWN_EGG, Component.text("Force Mob", ChatUtil.RED), false); - } - } - case FORCE_EFFECT_INDEX -> { - if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceEffect)) { - item = ItemUtils.createGuiItem(Material.POTION, Component.text("Force Effect", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.POTION, Component.text("Force Effect", ChatUtil.RED), false); - } - } - case FORCE_DEATH_INDEX -> { - if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceDeath)) { - item = ItemUtils.createGuiItem(Material.NETHERITE_AXE, Component.text("Force Death", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.NETHERITE_AXE, Component.text("Force Death", ChatUtil.RED), false); - } - } - case FORCE_LOCATION_INDEX -> { - if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceLocation)) { - item = ItemUtils.createGuiItem(Material.COMPASS, Component.text("Force Location", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.COMPASS, Component.text("Force Location", ChatUtil.RED), false); - } - } - case BACK_INDEX -> - item = CustomHeads.RAINBOW_ARROW_BACKWARD_II.getHead(Component.text("Zurück", ChatUtil.GREEN)); - default -> item = ItemUtils.EMPTY_ICON; - } - this.getInventory().setItem(i, item); - } - } -} diff --git a/src/main/java/de/fanta/challenges/guis/eventgui/SammelFieberSettingsGui.java b/src/main/java/de/fanta/challenges/guis/eventgui/SammelFieberSettingsGui.java deleted file mode 100644 index 8d78d8c..0000000 --- a/src/main/java/de/fanta/challenges/guis/eventgui/SammelFieberSettingsGui.java +++ /dev/null @@ -1,189 +0,0 @@ -package de.fanta.challenges.guis.eventgui; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.challenges.ChallengeEvents.SammelFieberChallengeEvent; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.ItemUtils; -import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; -import de.iani.cubesideutils.bukkit.inventory.Window; -import de.iani.cubesideutils.bukkit.items.CustomHeads; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.FluidCollisionMode; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryDragEvent; -import org.bukkit.event.inventory.InventoryType; -import org.bukkit.inventory.ItemStack; - -import java.util.Objects; - -public class SammelFieberSettingsGui extends AbstractWindow { - - public static final int INVENTORY_SIZE = 9; - private static final Challenges plugin = Challenges.getPlugin(); - private static final int SET_HOPPER_INDEX = 0; - private static final int ADD_MONEY_INDEX = 2; - private static final int SINGLEPLAYER_INDEX = 3; - private static final int ITEM_INDEX = 4; - private static final int MONEY_INDEX = 5; - private static final int BACK_INDEX = 6; - private static final int REMOVE_MONEY_INDEX = 8; - public static int MONEY = 100; - public static boolean singlePlayer = true; - - public static ItemStack eventItem = null; - - public SammelFieberSettingsGui(Window parentWindow, Player player) { - super(parentWindow, Bukkit.createInventory(player, InventoryType.DISPENSER, plugin.getGuiPrefix().append(Component.text(" >> Sammel Fieber Settings")))); - } - - @Override - public void onItemClicked(InventoryClickEvent event) { - Player player = getPlayer(); - if (!mayAffectThisInventory(event)) { - return; - } - - if (!getInventory().equals(event.getClickedInventory())) { - return; - } - - if (!Config.getBoolean("event.enabled")) { - return; - } - - int slot = event.getSlot(); - switch (slot) { - case SET_HOPPER_INDEX -> { - Block block = player.getTargetBlockExact(5, FluidCollisionMode.NEVER); - if (block != null && block.getType() == Material.HOPPER) { - Location loc = block.getLocation(); - SammelFieberChallengeEvent.setHopperLocation(new Location(loc.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ())); - ChatUtil.sendNormalMessage(player, "Hopper wurde gesetzt."); - } else { - ChatUtil.sendErrorMessage(player, "Du musst auf einen Hopper schauen!"); - } - event.setCancelled(true); - } - case ADD_MONEY_INDEX -> { - if (!event.isShiftClick()) { - MONEY = MONEY + 10; - } else { - MONEY = MONEY + 1; - } - Config.setValue("event.sammelfieber.money", MONEY); - rebuildInventory(); - event.setCancelled(true); - } - case REMOVE_MONEY_INDEX -> { - if (MONEY > 10) { - if (!event.isShiftClick()) { - MONEY = MONEY - 10; - } else { - MONEY = MONEY - 1; - } - Config.setValue("event.sammelfieber.money", MONEY); - rebuildInventory(); - } - event.setCancelled(true); - } - case SINGLEPLAYER_INDEX -> { - singlePlayer = !singlePlayer; - rebuildInventory(); - event.setCancelled(true); - } - case ITEM_INDEX -> { - switch (event.getAction()) { - case MOVE_TO_OTHER_INVENTORY: - case NOTHING: - case PICKUP_ALL: - case PICKUP_HALF: - case PICKUP_ONE: - case PICKUP_SOME: - case PLACE_ALL: - case PLACE_ONE: - case PLACE_SOME: - case SWAP_WITH_CURSOR: - break; - default: - event.setCancelled(true); - return; - - } - plugin.getScheduler().run(() -> getPlayer().updateInventory()); - return; - } - default -> event.setCancelled(true); - } - - if (slot == BACK_INDEX) { - returnToEventSettingsSafely(); - } - } - - @Override - public void onItemDraged(InventoryDragEvent event) { - if (!this.mayAffectThisInventory(event)) { - return; - } - for (int slot : event.getRawSlots()) { - if (slot != ITEM_INDEX) { - event.setCancelled(true); - return; - } - } - - plugin.getScheduler().run(() -> getPlayer().updateInventory()); - } - - @Override - protected void rebuildInventory() { - for (int i = 0; i < INVENTORY_SIZE; i++) { - ItemStack item; - switch (i) { - case SET_HOPPER_INDEX -> - item = ItemUtils.createGuiItem(Material.HOPPER, Component.text("Set Hopper", ChatUtil.GREEN), Component.text("Du musst auf einen Hopper schauen.", ChatUtil.GREEN)); - case ADD_MONEY_INDEX -> - item = CustomHeads.RAINBOW_ARROW_UP.getHead(Component.text("Add Money", ChatUtil.GREEN), Component.text("Klick = +10", ChatUtil.GREEN), Component.text("Shift + Klick = +1", ChatUtil.GREEN)); - case MONEY_INDEX -> - item = ItemUtils.createGuiItem(Material.GOLD_INGOT, Component.text("Money: " + MONEY, ChatUtil.GREEN)); - case SINGLEPLAYER_INDEX -> - item = singlePlayer ? ItemUtils.createGuiItem(Material.EMERALD, Component.text("SiglePlayer", ChatUtil.GREEN), true) : ItemUtils.createGuiItem(Material.EMERALD, Component.text("SiglePlayer", ChatUtil.RED), false); - case BACK_INDEX -> - item = CustomHeads.RAINBOW_ARROW_BACKWARD_II.getHead(Component.text("Zurück", ChatUtil.GREEN)); - case REMOVE_MONEY_INDEX -> - item = CustomHeads.RAINBOW_ARROW_DOWN.getHead(Component.text("Remove Money", ChatUtil.RED), Component.text("Klick = -10", ChatUtil.RED), Component.text("Shift + Klick = -1", ChatUtil.RED)); - case ITEM_INDEX -> item = Objects.requireNonNullElseGet(eventItem, () -> new ItemStack(Material.AIR)); - default -> item = ItemUtils.EMPTY_ICON; - } - this.getInventory().setItem(i, item); - } - } - - @Override - public void closed() { - ItemStack stack = getInventory().getItem(ITEM_INDEX); - if (stack != null) { - eventItem = stack; - Config.setValue("event.sammelfieber.item", stack.getType().name()); - } else { - eventItem = null; - Config.setValue("event.sammelfieber.item", ""); - } - } - - public static ItemStack getEventItem() { - return eventItem; - } - - private void returnToEventSettingsSafely() { - plugin.getScheduler().run(() -> getParent().open()); - } -} - - diff --git a/src/main/java/de/fanta/challenges/guis/eventgui/TeamSelectGUI.java b/src/main/java/de/fanta/challenges/guis/eventgui/TeamSelectGUI.java deleted file mode 100644 index 32340ac..0000000 --- a/src/main/java/de/fanta/challenges/guis/eventgui/TeamSelectGUI.java +++ /dev/null @@ -1,109 +0,0 @@ -package de.fanta.challenges.guis.eventgui; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.teams.ChallengeTeam; -import de.fanta.challenges.teams.TeamUtils; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.ItemUtils; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.OfflinePlayer; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; - -public class TeamSelectGUI implements Listener { - - private static final Challenges plugin = Challenges.getPlugin(); - private static final Map teamperSlot = new HashMap<>(); - private static final Map slotbyTeam = new HashMap<>(); - private static int CLOSE_IDEX; - private static Inventory TEAM_SELECT_UI; - - public static void buildTeamSelectInventory() { - TEAM_SELECT_UI = Bukkit.createInventory(null, 9 * (TeamUtils.getTeams().length / 7 + ((TeamUtils.getTeams().length % 7 > 0) ? 1 : 0)) + 18, plugin.getGuiPrefix().append(Component.text(" >> Select Team..."))); - CLOSE_IDEX = TEAM_SELECT_UI.getSize() - 9; - int row = 0; - int cat = 0; - - if (TeamUtils.getTeams().length == 0) { - return; - } - - for (ChallengeTeam team : TeamUtils.getTeams()) { - int slot = row * 9 + cat + 10; - - TEAM_SELECT_UI.setItem(slot, team.getDisplayItem()); - teamperSlot.put(slot, team); - slotbyTeam.put(team, slot); - if (cat < 6) { - cat++; - continue; - } - row++; - cat = 0; - } - - TEAM_SELECT_UI.setItem(CLOSE_IDEX, ItemUtils.createGuiItem(Material.BARRIER, Component.text("Menü verlassen!", ChatUtil.RED))); - for (int i = 0; i < TEAM_SELECT_UI.getSize(); i++) { - if (TEAM_SELECT_UI.getItem(i) == null || TEAM_SELECT_UI.getItem(i).getType() == Material.AIR) { - TEAM_SELECT_UI.setItem(i, ItemUtils.EMPTY_ICON); - } - } - } - - public static void openTeamSelectGui(Player p) { - p.openInventory(TEAM_SELECT_UI); - } - - public static void updateTeamSelectGui() { - for (ChallengeTeam challengeTeam : TeamUtils.getTeams()) { - ArrayList lore = new ArrayList<>(); - if (challengeTeam == null) { - lore.add(Component.empty()); - } else { - int slot = slotbyTeam.get(challengeTeam); - ItemStack stack = TEAM_SELECT_UI.getItem(slot); - ItemMeta meta = stack.getItemMeta(); - for (OfflinePlayer pp : TeamUtils.getPlayersInTeam(challengeTeam)) { - lore.add(Component.text(pp.getName(), ChatUtil.BLUE)); - } - meta.lore(lore); - stack.setItemMeta(meta); - - TEAM_SELECT_UI.setItem(slot, stack); - } - } - } - - @EventHandler - public void onInventoryClick(InventoryClickEvent e) { - if (e.getInventory() == TEAM_SELECT_UI) { - int slot = e.getRawSlot(); - Player p = (Player) e.getWhoClicked(); - ChallengeTeam team = teamperSlot.get(slot); - if (team != null) { - if (e.isLeftClick()) { - TeamUtils.selectTeam(p, team); - p.closeInventory(); - } - } - - if (slot == CLOSE_IDEX) { - p.closeInventory(); - } - - e.setCancelled(true); - } - } -} - diff --git a/src/main/java/de/fanta/challenges/guis/eventgui/TeamSettingsGUI.java b/src/main/java/de/fanta/challenges/guis/eventgui/TeamSettingsGUI.java deleted file mode 100644 index ce8c963..0000000 --- a/src/main/java/de/fanta/challenges/guis/eventgui/TeamSettingsGUI.java +++ /dev/null @@ -1,132 +0,0 @@ -package de.fanta.challenges.guis.eventgui; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.teams.TeamUtils; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.ItemUtils; -import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryType; -import org.bukkit.inventory.ItemStack; - -public class TeamSettingsGUI extends AbstractWindow { - private static final Challenges plugin = Challenges.getPlugin(); - - private static final int TEAM_INDEX = 0; - private static final int TEAM_SELECT_INDEX = 2; - private static final int AUTOTEAM_BY_JOIN_INDEX = 4; - - public static final int INVENTORY_SIZE = 5; - - public TeamSettingsGUI(Player player) { - super(player, Bukkit.createInventory(player, InventoryType.HOPPER, plugin.getGuiPrefix().append(Component.text(" >> Team Settings")))); - } - - @Override - protected void rebuildInventory() { - for (int i = 0; i < INVENTORY_SIZE; i++) { - ItemStack item; - switch (i) { - case TEAM_INDEX -> { - if (!Config.getBoolean("event.teams")) { - item = ItemUtils.createGuiItem(Material.RED_BED, Component.text("Teams deaktiviert", ChatUtil.RED)); - } else { - item = ItemUtils.createGuiItem(Material.LIME_BED, Component.text("Teams aktiviert", ChatUtil.GREEN), true); - } - } - case TEAM_SELECT_INDEX -> { - if (!Config.getBoolean("event.teamselect")) { - item = ItemUtils.createGuiItem(Material.RED_CONCRETE_POWDER, Component.text("Team auswahl deaktiviert", ChatUtil.RED)); - } else { - item = ItemUtils.createGuiItem(Material.LIME_CONCRETE_POWDER, Component.text("Team auswahl aktiviert", ChatUtil.GREEN), true); - } - } - case AUTOTEAM_BY_JOIN_INDEX -> { - if (!Config.getBoolean("event.autoteams")) { - item = ItemUtils.createGuiItem(Material.RED_CONCRETE_POWDER, Component.text("Autoteams by Join deaktiviert", ChatUtil.RED)); - } else { - item = ItemUtils.createGuiItem(Material.LIME_CONCRETE_POWDER, Component.text("Autoteams by Join aktiviert", ChatUtil.GREEN), true); - } - } - default -> item = ItemUtils.EMPTY_ICON; - } - this.getInventory().setItem(i, item); - } - } - - @Override - public void onItemClicked(InventoryClickEvent event) { - Player player = getPlayer(); - if (!mayAffectThisInventory(event)) { - return; - } - - event.setCancelled(true); - if (!getInventory().equals(event.getClickedInventory())) { - return; - } - - int slot = event.getSlot(); - switch (slot) { - case TEAM_INDEX -> { - if (TeamUtils.getTeams() != null && TeamUtils.getTeamSize() != 0) { - if (!Config.getBoolean("event.teams")) { - Config.setValue("event.teams", true); - ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Teams aktiviert", ChatUtil.GREEN)); - plugin.getScoreManager().resetScores(); - plugin.getSBManager().updateEventScoreboard(); - } else { - Config.setValue("event.teams", false); - ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Teams deaktiviert", ChatUtil.RED)); - for (Player pp : Bukkit.getOnlinePlayers()) { - pp.getInventory().removeItem(TeamUtils.selctItem()); - } - } - } else { - ChatUtil.sendErrorMessage(player, "Du musst erst teams anlegen! /event createteams "); - } - } - case TEAM_SELECT_INDEX -> { - if (TeamUtils.getTeams() != null && TeamUtils.getTeamSize() != 0) { - if (!Config.getBoolean("event.teamselect")) { - Config.setValue("event.teamselect", true); - ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Team auswahl aktiviert", ChatUtil.GREEN)); - for (Player pp : Bukkit.getOnlinePlayers()) { - plugin.getSBManager().removeScoreboard(pp); - pp.getInventory().setItem(8, TeamUtils.selctItem()); - } - } else { - Config.setValue("event.teamselect", false); - ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Team auswahl deaktiviert", ChatUtil.RED)); - for (Player pp : Bukkit.getOnlinePlayers()) { - pp.getInventory().removeItem(TeamUtils.selctItem()); - } - } - } else { - ChatUtil.sendErrorMessage(player, "Du musst erst teams anlegen! /event createteams "); - } - } - case AUTOTEAM_BY_JOIN_INDEX -> { - if (TeamUtils.getTeams() != null && TeamUtils.getTeamSize() != 0) { - if (Config.getBoolean("event.autoteams")) { - Config.setValue("event.autoteams", false); - ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Autoteams by Join deaktiviert", ChatUtil.RED)); - } else { - Config.setValue("event.autoteams", true); - ChatUtil.sendTitleToAll(Component.text("Event"), Component.text("Autoteams by Join aktiviert", ChatUtil.GREEN)); - } - } else { - ChatUtil.sendErrorMessage(player, "Du musst erst teams anlegen! /event createteams "); - } - } - default -> { - } - } - rebuildInventory(); - } -} diff --git a/src/main/java/de/fanta/challenges/guis/savegui/ChallengeSaveConfirmGui.java b/src/main/java/de/fanta/challenges/guis/savegui/ChallengeSaveConfirmGui.java deleted file mode 100644 index c1aa1f0..0000000 --- a/src/main/java/de/fanta/challenges/guis/savegui/ChallengeSaveConfirmGui.java +++ /dev/null @@ -1,78 +0,0 @@ -package de.fanta.challenges.guis.savegui; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.SaveSlot; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.SaveWorldUtils; -import de.fanta.challenges.utils.ItemUtils; -import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryType; -import org.bukkit.inventory.ItemStack; - -import java.util.HashMap; -import java.util.UUID; - -public class ChallengeSaveConfirmGui extends AbstractWindow { - private static final Challenges plugin = Challenges.getPlugin(); - - private static final int JA_INDEX = 0; - private static final int ITEM_INDEX = 2; - private static final int NEIN_INDEX = 4; - - private static final int INVENTORY_SIZE = 5; - private static final HashMap playerItemList = new HashMap<>(); - private static final HashMap savePlayerList = new HashMap<>(); - private static final HashMap saveSlotList = new HashMap<>(); - - public ChallengeSaveConfirmGui(Player player, UUID savePlayerID, SaveSlot saveSlot, ItemStack displayItem) { - super(player, Bukkit.createInventory(player, InventoryType.HOPPER, plugin.getGuiPrefix().append(Component.text(" >> Save überschreiben?")))); - playerItemList.put(player.getUniqueId(), displayItem); - savePlayerList.put(player.getUniqueId(), savePlayerID); - saveSlotList.put(player.getUniqueId(), saveSlot); - } - - @Override - protected void rebuildInventory() { - for (int i = 0; i < INVENTORY_SIZE; i++) { - ItemStack item; - switch (i) { - case JA_INDEX -> - item = ItemUtils.createGuiItem(Material.LIME_CONCRETE, Component.text("Ja", ChatUtil.GREEN), true); - case ITEM_INDEX -> item = playerItemList.get(getPlayer().getUniqueId()); - case NEIN_INDEX -> - item = ItemUtils.createGuiItem(Material.RED_CONCRETE, Component.text("Nein", ChatUtil.RED), true); - default -> item = ItemUtils.EMPTY_ICON; - } - this.getInventory().setItem(i, item); - } - } - - @Override - public void onItemClicked(InventoryClickEvent event) { - Player player = getPlayer(); - if (!mayAffectThisInventory(event)) { - return; - } - - event.setCancelled(true); - if (!getInventory().equals(event.getClickedInventory())) { - return; - } - - int slot = event.getSlot(); - switch (slot) { - case JA_INDEX -> { - getPlayer().closeInventory(); - SaveWorldUtils.saveWorld(player, savePlayerList.get(player.getUniqueId()).toString(), saveSlotList.get(player.getUniqueId())); - } - case NEIN_INDEX -> getPlayer().closeInventory(); - default -> { - } - } - } -} diff --git a/src/main/java/de/fanta/challenges/guis/savegui/ChallengeSaveGui.java b/src/main/java/de/fanta/challenges/guis/savegui/ChallengeSaveGui.java deleted file mode 100644 index a962c4b..0000000 --- a/src/main/java/de/fanta/challenges/guis/savegui/ChallengeSaveGui.java +++ /dev/null @@ -1,200 +0,0 @@ -package de.fanta.challenges.guis.savegui; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.SaveSlot; -import de.fanta.challenges.ServerType; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.SaveWorldUtils; -import de.fanta.challenges.utils.ItemUtils; -import de.iani.cubesideutils.StringUtil; -import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; -import de.iani.playerUUIDCache.CachedPlayer; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.attribute.BasicFileAttributes; -import java.nio.file.attribute.FileTime; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; -import java.util.logging.Level; - -public class ChallengeSaveGui extends AbstractWindow { - private static final Challenges plugin = Challenges.getPlugin(); - private static final int SAVE_1_INDEX = 1; - private static final int SAVE_2_INDEX = 3; - private static final int SAVE_3_INDEX = 5; - private static final int SAVE_AUTO_INDEX = 7; - private static final int WINDOW_SIZE = 9; - private static final HashMap savePlayerList = new HashMap<>(); - - public ChallengeSaveGui(Player player, CachedPlayer savePlayer) { - super(player, Bukkit.createInventory(null, WINDOW_SIZE, plugin.getGuiPrefix().append(Component.text(" >> Map speichern")))); - savePlayerList.put(player.getUniqueId(), savePlayer.getUniqueId()); - } - - @Override - protected void rebuildInventory() { - Player player = getPlayer(); - UUID savePlayerID = savePlayerList.get(player.getUniqueId()); - File save1; - File save2; - File save3; - File saveAuto; - if (plugin.getServerType() != ServerType.ADVENTURE) { - save1 = new File(plugin.getChallengeSavePath().toFile(), savePlayerID + "/1"); - save2 = new File(plugin.getChallengeSavePath().toFile(), savePlayerID + "/2"); - save3 = new File(plugin.getChallengeSavePath().toFile(), savePlayerID + "/3"); - saveAuto = new File(plugin.getChallengeSavePath().toFile(), savePlayerID + "/autosave"); - } else { - save1 = new File(plugin.getAdventureSavePath().toFile(), savePlayerID + "/1"); - save2 = new File(plugin.getAdventureSavePath().toFile(), savePlayerID + "/2"); - save3 = new File(plugin.getAdventureSavePath().toFile(), savePlayerID + "/3"); - saveAuto = new File(plugin.getAdventureSavePath().toFile(), savePlayerID + "/autosave"); - } - - for (int i = 0; i < WINDOW_SIZE; i++) { - ItemStack item; - switch (i) { - case SAVE_1_INDEX -> item = getDisplayItem(player, SaveSlot.SLOT_1, save1); - case SAVE_2_INDEX -> item = getDisplayItem(player, SaveSlot.SLOT_2, save2); - case SAVE_3_INDEX -> item = getDisplayItem(player, SaveSlot.SLOT_3, save3); - case SAVE_AUTO_INDEX -> item = getDisplayItem(player, SaveSlot.SLOT_AUTO, saveAuto); - default -> item = ItemUtils.EMPTY_ICON; - } - this.getInventory().setItem(i, item); - } - } - - @Override - public void onItemClicked(InventoryClickEvent event) { - Player player = getPlayer(); - if (!mayAffectThisInventory(event)) { - return; - } - - event.setCancelled(true); - if (!getInventory().equals(event.getClickedInventory())) { - return; - } - - Player p = getPlayer(); - UUID savePlayerID = savePlayerList.get(p.getUniqueId()); - File save1; - File save2; - File save3; - if (plugin.getServerType() != ServerType.ADVENTURE) { - save1 = new File(plugin.getChallengeSavePath().toFile(), savePlayerID + "/1"); - save2 = new File(plugin.getChallengeSavePath().toFile(), savePlayerID + "/2"); - save3 = new File(plugin.getChallengeSavePath().toFile(), savePlayerID + "/3"); - } else { - save1 = new File(plugin.getAdventureSavePath().toFile(), savePlayerID + "/1"); - save2 = new File(plugin.getAdventureSavePath().toFile(), savePlayerID + "/2"); - save3 = new File(plugin.getAdventureSavePath().toFile(), savePlayerID + "/3"); - } - - int slot = event.getSlot(); - switch (slot) { - case SAVE_1_INDEX -> { - if (!p.hasPermission("challenge.save.slot1")) { - ChatUtil.sendErrorMessage(p, "Für diesen Slot hast du keine Rechte!"); - return; - } - if (!save1.isDirectory()) { - player.closeInventory(); - SaveWorldUtils.saveWorld(player, savePlayerID.toString(), SaveSlot.SLOT_1); - return; - } - new ChallengeSaveConfirmGui(player, savePlayerID, SaveSlot.SLOT_1, event.getCurrentItem()).open(); - } - case SAVE_2_INDEX -> { - if (!p.hasPermission("challenge.save.slot2")) { - ChatUtil.sendErrorMessage(p, "Für diesen Slot brauchst du VIP!"); - return; - } - if (!save2.isDirectory()) { - player.closeInventory(); - SaveWorldUtils.saveWorld(player, savePlayerID.toString(), SaveSlot.SLOT_2); - return; - } - new ChallengeSaveConfirmGui(player, savePlayerID, SaveSlot.SLOT_2, event.getCurrentItem()).open(); - } - case SAVE_3_INDEX -> { - if (!p.hasPermission("challenge.save.slot3")) { - ChatUtil.sendErrorMessage(p, "Für diesen Slot brauchst du VIP!"); - return; - } - if (!save3.isDirectory()) { - player.closeInventory(); - SaveWorldUtils.saveWorld(player, savePlayerID.toString(), SaveSlot.SLOT_3); - return; - } - new ChallengeSaveConfirmGui(player, savePlayerID, SaveSlot.SLOT_3, event.getCurrentItem()).open(); - } - default -> { - } - } - } - - private static String getFileDate(YamlConfiguration serverConfig) { - return StringUtil.formatDate(serverConfig.getLong("saveTime", 0)); - } - - private static ItemStack getDisplayItem(Player player, SaveSlot saveSlot, File save) { - ItemStack item; - if (player.hasPermission(saveSlot.getPermission())) { - if (save.isDirectory()) { - File mapConfig = new File(save, "/Challenges/serverconfig.yml"); - Material displayItem = null; - String displayName = null; - YamlConfiguration serverConfig = new YamlConfiguration(); - try { - serverConfig.load(mapConfig); - String itemType = serverConfig.getString("displayItem.item"); - String itemName = serverConfig.getString("displayItem.name"); - if (itemType != null) { - try { - displayItem = Material.valueOf(itemType); - } catch (IllegalArgumentException ignore) { - } - } - if (itemName != null) { - displayName = itemName; - } - } catch (IOException | InvalidConfigurationException ex) { - plugin.getLogger().log(Level.SEVERE, "Fehler beim laden der config", ex); - } - - ItemStack stack = new ItemStack(displayItem != null ? displayItem : Material.MAP); - ItemMeta meta = stack.getItemMeta(); - meta.displayName(displayName != null ? Component.text(displayName) : Component.text("Save " + saveSlot.getSlot(), ChatUtil.GREEN)); - - if (saveSlot == SaveSlot.SLOT_AUTO) { - meta.lore(List.of(Component.text("AutoSave kann nicht überschrieben werden!", ChatUtil.RED), Component.text("Gespeichert am " + getFileDate(serverConfig), ChatUtil.GREEN))); - } else { - meta.lore(List.of(Component.text("Gespeichert am " + getFileDate(serverConfig), ChatUtil.GREEN))); - } - - stack.setItemMeta(meta); - item = stack; - - - } else { - item = ItemUtils.createGuiItem(Material.LIME_STAINED_GLASS_PANE, Component.text("Frei", ChatUtil.GREEN)); - } - } else { - item = ItemUtils.createGuiItem(Material.BARRIER, Component.text("Für diesen Slot brauchst du VIP", ChatUtil.RED)); - } - return item; - } -} diff --git a/src/main/java/de/fanta/challenges/guis/settingsgui/ChallengesGui.java b/src/main/java/de/fanta/challenges/guis/settingsgui/ChallengesGui.java deleted file mode 100644 index f6fc22c..0000000 --- a/src/main/java/de/fanta/challenges/guis/settingsgui/ChallengesGui.java +++ /dev/null @@ -1,505 +0,0 @@ -package de.fanta.challenges.guis.settingsgui; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.challenges.AllAdvancementsChallenge; -import de.fanta.challenges.challenges.AllItemsChallenge; -import de.fanta.challenges.challenges.MLGChallenge; -import de.fanta.challenges.challenges.ManHunt; -import de.fanta.challenges.challenges.WorldBorderLevelChallenge; -import de.fanta.challenges.guis.challengesettingsguis.BedrockWallSettingsGui; -import de.fanta.challenges.guis.challengesettingsguis.LevelBorderSettingsGui; -import de.fanta.challenges.guis.challengesettingsguis.MLGSettingsGui; -import de.fanta.challenges.guis.challengesettingsguis.NoSneakSettingsGui; -import de.fanta.challenges.guis.challengesettingsguis.TiedTogetherSettingsGui; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.ItemUtils; -import de.iani.cubesideutils.bukkit.MinecraftVersion; -import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; -import de.iani.cubesideutils.bukkit.items.CustomHeads; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.ItemStack; - -public class ChallengesGui extends AbstractWindow { - - private static final Challenges plugin = Challenges.getPlugin(); - - public static final int WINDOW_SIZE = 54; - - private static final int GOAL_INDEX = 0; - private static final int SHUFFLE_RANDOM_DROP_INDEX = 1; - - private static final int BACK_INDEX = 7; - private static final int CLOSE_INDEX = 8; - - private static final int SHARED_DAMAGE_INDEX = 19; - private static final int FLOOR_IS_LAVA_INDEX = 20; - private static final int CHUNK_RANDOM_EFFECT_INDEX = 21; - private static final int BEDROCK_WALL_INDEX = 22; - private static final int MLG_INDEX = 23; - private static final int WORLD_BORDER_LEVEL_INDEX = 24; - private static final int ALL_ITEMS_INDEX = 25; - - private static final int DEATH_ON_XP_INDEX = 28; - private static final int DEATH_ON_FALLDAMAGE_INDEX = 29; - private static final int DEATH_ON_SPRINT_INDEX = 30; - private static final int DEATH_ON_JUMP_INDEX = 31; - private static final int CLEAR_INVENTAR_ON_DAMAGE_INDEX = 32; - private static final int ICE_RUNNER_INDEX = 33; - private static final int RANDOM_MOBS_INDEX = 34; - - private static final int RANDOM_DROPS_INDEX = 37; - private static final int DAMAGE_ON_SNEAK_INDEX = 38; - private static final int TIED_TOGETHER_INDEX = 39; - private static final int MOB_REMOVE_WORLD_INDEX = 40; - private static final int ALL_ADVANCEMENT_INDEX = 41; - private static final int MANHUNT_INDEX = 42; - - public ChallengesGui(Player player) { - super(player, Bukkit.createInventory(player, WINDOW_SIZE, plugin.getGuiPrefix().append(Component.text(" >> Challenges")))); - } - - @Override - public void onItemClicked(InventoryClickEvent event) { - Player player = getPlayer(); - if (!mayAffectThisInventory(event)) { - return; - } - - event.setCancelled(true); - if (!getInventory().equals(event.getClickedInventory())) { - return; - } - - int slot = event.getSlot(); - switch (slot) { - case GOAL_INDEX -> { - EntityType entityType = EntityType.valueOf(Config.getString("goal").toUpperCase()); - if (entityType == EntityType.ENDER_DRAGON) { - Config.setValue("goal", EntityType.WITHER.name()); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Ziel: Töte den Wither", ChatUtil.GREEN)); - } else if (entityType == EntityType.WITHER) { - Config.setValue("goal", EntityType.WARDEN.name()); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Ziel: Töte den Warden", ChatUtil.GREEN)); - } else if (entityType == EntityType.WARDEN) { - Config.setValue("goal", EntityType.ENDER_DRAGON.name()); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Ziel: Töte den Enderdrachen", ChatUtil.GREEN)); - } - } - case SHUFFLE_RANDOM_DROP_INDEX -> { - plugin.rndDrops.shuffleItems(); - plugin.rndDrops.saveItems(); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Zufällige Drops neu gemischt!", ChatUtil.GREEN)); - } - - case SHARED_DAMAGE_INDEX -> { - if (Config.getBoolean("sharedmg")) { - Config.setValue("sharedmg", false); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Geteielter Schaden deaktiviert", ChatUtil.RED)); - } else { - Config.setValue("sharedmg", true); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Geteielter Schaden aktiviert", ChatUtil.GREEN)); - } - } - case FLOOR_IS_LAVA_INDEX -> { - if (Config.getBoolean("lavafloor")) { - Config.setValue("lavafloor", false); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Der Boden ist Lava deaktiviert", ChatUtil.RED)); - } else { - Config.setValue("lavafloor", true); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Der Boden ist Lava aktiviert", ChatUtil.GREEN)); - } - } - case CHUNK_RANDOM_EFFECT_INDEX -> { - if (Config.getBoolean("randomeffect")) { - Config.setValue("randomeffect", false); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Chunk Random Effekt deaktiviert", ChatUtil.RED)); - } else { - Config.setValue("randomeffect", true); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Chunk Random Effekt aktiviert", ChatUtil.GREEN)); - } - } - case BEDROCK_WALL_INDEX -> { - if (event.isLeftClick()) { - if (Config.getBoolean("bedrockwall")) { - Config.setValue("bedrockwall", false); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Bedrock Wand deaktiviert", ChatUtil.RED)); - } else { - Config.setValue("bedrockwall", true); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Bedrock Wand aktiviert", ChatUtil.GREEN)); - } - } else if (event.isRightClick()) { - new BedrockWallSettingsGui(player).open(); - } - } - case MLG_INDEX -> { - if (event.isLeftClick()) { - if (Config.getBoolean("mlg.enabled")) { - Config.setValue("mlg.enabled", false); - MLGChallenge.setRunning(false); - MLGChallenge.stopTask(); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("MLG deaktiviert", ChatUtil.RED)); - } else { - Config.setValue("mlg.enabled", true); - MLGChallenge.setRunning(true); - MLGChallenge.startTask(); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("MLG aktiviert", ChatUtil.GREEN)); - } - } else if (event.isRightClick()) { - new MLGSettingsGui(player).open(); - } - } - case WORLD_BORDER_LEVEL_INDEX -> { - if (event.isLeftClick()) { - if (Config.getBoolean("worldborderlevel")) { - Config.setValue("worldborderlevel", false); - for (Player pp : Bukkit.getOnlinePlayers()) { - if (pp.getWorldBorder() != null) { - pp.getWorldBorder().reset(); - } - } - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("World Border Level deaktiviert", ChatUtil.RED)); - } else { - Config.setValue("worldborderlevel", true); - new WorldBorderLevelChallenge(); - WorldBorderLevelChallenge.borderSync(); - for (Player pp : Bukkit.getOnlinePlayers()) { - pp.teleportAsync(pp.getWorld().getSpawnLocation()); - } - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("World Border Level aktiviert", ChatUtil.GREEN)); - } - } else if (event.isRightClick()) { - new LevelBorderSettingsGui(player).open(); - } - - } - case ALL_ITEMS_INDEX -> { - if (Config.getBoolean("allitems")) { - Config.setValue("allitems", false); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("All Items deaktiviert", ChatUtil.RED)); - } else { - Config.setValue("allitems", true); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("All Items aktiviert", ChatUtil.GREEN)); - AllItemsChallenge.start(); - } - } - - case DEATH_ON_XP_INDEX -> { - if (Config.getBoolean("xpdeath")) { - Config.setValue("xpdeath", false); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Sterben durch Einsammeln von XP deaktiviert", ChatUtil.RED)); - } else { - Config.setValue("xpdeath", true); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Sterben durch Einsammeln von XP aktiviert", ChatUtil.GREEN)); - } - } - case DEATH_ON_FALLDAMAGE_INDEX -> { - if (Config.getBoolean("deathonfall")) { - Config.setValue("deathonfall", false); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Sterben durch Fallschaden deaktiviert", ChatUtil.RED)); - } else { - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Sterben durch Fallschaden aktiviert", ChatUtil.GREEN)); - Config.setValue("deathonfall", true); - } - } - case DEATH_ON_SPRINT_INDEX -> { - if (Config.getBoolean("deathonsprint")) { - Config.setValue("deathonsprint", false); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Sterben durch Sprinten deaktiviert", ChatUtil.RED)); - } else { - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Sterben durch Sprinten aktiviert", ChatUtil.GREEN)); - Config.setValue("deathonsprint", true); - } - } - case DEATH_ON_JUMP_INDEX -> { - if (Config.getBoolean("deathonjump")) { - Config.setValue("deathonjump", false); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Sterben durch Springen deaktiviert", ChatUtil.RED)); - } else { - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Sterben durch Springen aktiviert", ChatUtil.GREEN)); - Config.setValue("deathonjump", true); - } - } - case CLEAR_INVENTAR_ON_DAMAGE_INDEX -> { - if (Config.getBoolean("clinvdmg")) { - Config.setValue("clinvdmg", false); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Inventar von allen löschen wenn einer Schaden bekommt deaktiviert", ChatUtil.RED)); - } else { - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Inventar von allen löschen wenn einer Schaden bekommt aktiviert", ChatUtil.GREEN)); - Config.setValue("clinvdmg", true); - } - } - case ICE_RUNNER_INDEX -> { - if (Config.getBoolean("icerunner")) { - Config.setValue("icerunner", false); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Ice-Runner deaktiviert", ChatUtil.RED)); - } else { - Config.setValue("icerunner", true); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Ice-Runner aktiviert", ChatUtil.GREEN)); - } - } - case RANDOM_MOBS_INDEX -> { - if (Config.getBoolean("randommobs")) { - Config.setValue("randommobs", false); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Random Mobs deaktiviert", ChatUtil.RED)); - } else { - Config.setValue("randommobs", true); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Random Mobs aktiviert", ChatUtil.GREEN)); - } - } - - case RANDOM_DROPS_INDEX -> { - if (Config.getBoolean("rnddrops")) { - Config.setValue("rnddrops", false); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Zufällige Drops deaktiviert", ChatUtil.RED)); - } else { - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Zufällige Drops aktiviert", ChatUtil.GREEN)); - Config.setValue("rnddrops", true); - } - } - case DAMAGE_ON_SNEAK_INDEX -> { - if (event.isLeftClick()) { - if (Config.getBoolean("damageonsneak")) { - Config.setValue("damageonsneak", false); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Schaden bekommen beim Schleichen deaktiviert", ChatUtil.RED)); - } else { - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Schaden bekommen beim Schleichen aktiviert", ChatUtil.GREEN)); - Config.setValue("damageonsneak", true); - } - } else if (event.isRightClick()) { - new NoSneakSettingsGui(player).open(); - } - } - case TIED_TOGETHER_INDEX -> { - if (event.isLeftClick()) { - if (Config.getBoolean("tiedtogether")) { - Config.setValue("tiedtogether", false); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Zusammengebunden deaktiviert", ChatUtil.RED)); - } else { - Config.setValue("tiedtogether", true); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Zusammengebunden aktiviert", ChatUtil.GREEN)); - } - } else if (event.isRightClick()) { - new TiedTogetherSettingsGui(player).open(); - } - } - case MOB_REMOVE_WORLD_INDEX -> { - if (Config.getBoolean("mobremoveworld")) { - Config.setValue("mobremoveworld", false); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Mobs entfernen Welt deaktiviert", ChatUtil.RED)); - } else { - Config.setValue("mobremoveworld", true); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Mobs entfernen Welt aktiviert", ChatUtil.GREEN)); - } - } - case ALL_ADVANCEMENT_INDEX -> { - if (Config.getBoolean("alladvancements")) { - AllAdvancementsChallenge.stop(); - Config.setValue("alladvancements", false); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("All Advancement deaktiviert", ChatUtil.RED)); - } else { - AllAdvancementsChallenge.start(); - Config.setValue("alladvancements", true); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("All Advancement aktiviert", ChatUtil.GREEN)); - } - } - case MANHUNT_INDEX -> { - if (Config.getBoolean("manhunt")) { - ManHunt.stop(); - Config.setValue("manhunt", false); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Manhunt deaktiviert", ChatUtil.RED)); - } else { - ManHunt.start(); - Config.setValue("manhunt", true); - ChatUtil.sendTitleToAll(Component.text("Challenge"), Component.text("Manhunt aktiviert", ChatUtil.GREEN)); - } - } - default -> { - } - } - rebuildInventory(); - - switch (slot) { - case BACK_INDEX -> new MainGui(player).open(); - case CLOSE_INDEX -> player.closeInventory(); - } - } - - @Override - protected void rebuildInventory() { - for (int i = 0; i < WINDOW_SIZE; i++) { - ItemStack item; - switch (i) { - case GOAL_INDEX -> { - EntityType entityType = EntityType.valueOf(Config.getString("goal").toUpperCase()); - if (entityType == EntityType.ENDER_DRAGON) { - item = ItemUtils.createGuiItem(Material.DRAGON_HEAD, Component.text("Ziel: Enderdrachen töten", ChatUtil.GREEN)); - } else if (entityType == EntityType.WITHER) { - item = ItemUtils.createGuiItem(Material.WITHER_SKELETON_SKULL, Component.text("Ziel: Wither töten", ChatUtil.GREEN)); - } else if (entityType == EntityType.WARDEN) { - item = ItemUtils.createGuiItem(Material.SCULK_SHRIEKER, Component.text("Ziel: Warden töten", ChatUtil.GREEN)); - } else { - item = ItemUtils.createGuiItem(Material.DRAGON_HEAD, Component.text("Ziel: Enderdrachen töten", ChatUtil.GREEN)); - } - } - case SHUFFLE_RANDOM_DROP_INDEX -> - item = ItemUtils.createGuiItem(Material.CHORUS_FLOWER, Component.text("Zufällige Drops neu mischen", ChatUtil.GREEN)); - case BACK_INDEX -> - item = CustomHeads.RAINBOW_ARROW_BACKWARD_II.getHead(Component.text("Zurück", ChatUtil.RED)); - case CLOSE_INDEX -> - item = CustomHeads.RAINBOW_X.getHead(Component.text("Menü verlassen", ChatUtil.RED)); - - case SHARED_DAMAGE_INDEX -> { - if (Config.getBoolean("sharedmg")) { - item = ItemUtils.createGuiItem(Material.MELON_SLICE, Component.text("Geteilter Schaden aktiviert", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.MELON_SLICE, Component.text("Geteilter Schaden deaktiviert", ChatUtil.RED)); - } - } - case FLOOR_IS_LAVA_INDEX -> { - if (Config.getBoolean("lavafloor")) { - item = ItemUtils.createGuiItem(Material.MAGMA_BLOCK, Component.text("Der Boden ist Lava aktiviert", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.MAGMA_BLOCK, Component.text("Der Boden ist Lava deaktiviert", ChatUtil.RED)); - } - } - case CHUNK_RANDOM_EFFECT_INDEX -> { - if (Config.getBoolean("randomeffect")) { - item = ItemUtils.createGuiItem(Material.SPLASH_POTION, Component.text("Chunk Random Effekt aktiviert", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.SPLASH_POTION, Component.text("Chunk Random Effekt deaktiviert", ChatUtil.RED)); - } - } - case BEDROCK_WALL_INDEX -> { - if (Config.getBoolean("bedrockwall")) { - item = ItemUtils.createGuiItem(Material.BEDROCK, Component.text("Bedrock Wand aktiviert", ChatUtil.GREEN), true, Component.text("Linksklick = ", ChatUtil.GREEN).append(Component.text("Deaktivieren", ChatUtil.RED)), Component.text("Rechtsklick = Einstellungen", ChatUtil.GREEN)); - } else { - item = ItemUtils.createGuiItem(Material.BEDROCK, Component.text("Bedrock Wand deaktiviert", ChatUtil.RED), Component.text("Linksklick = Aktivieren", ChatUtil.GREEN), Component.text("Rechtsklick = Einstellungen", ChatUtil.GREEN)); - } - } - case MLG_INDEX -> { - if (Config.getBoolean("mlg.enabled")) { - item = ItemUtils.createGuiItem(Material.WATER_BUCKET, Component.text("MLG aktiviert", ChatUtil.GREEN), true, Component.text("Linksklick = ", ChatUtil.GREEN).append(Component.text("Deaktivieren", ChatUtil.RED)), Component.text("Rechtsklick = Einstellungen", ChatUtil.GREEN)); - } else { - item = ItemUtils.createGuiItem(Material.WATER_BUCKET, Component.text("MLG deaktiviert", ChatUtil.RED), Component.text("Linksklick = Aktivieren", ChatUtil.GREEN), Component.text("Rechtsklick = Einstellungen", ChatUtil.GREEN)); - } - } - case WORLD_BORDER_LEVEL_INDEX -> { - if (Config.getBoolean("worldborderlevel")) { - item = ItemUtils.createGuiItem(Material.STRUCTURE_VOID, Component.text("World Border Level aktiviert", ChatUtil.GREEN), true, Component.text("Linksklick = ", ChatUtil.GREEN).append(Component.text("Deaktivieren", ChatUtil.RED)), Component.text("Rechtsklick = Einstellungen", ChatUtil.GREEN)); - } else { - item = ItemUtils.createGuiItem(Material.STRUCTURE_VOID, Component.text("World Border Level deaktiviert", ChatUtil.RED), Component.text("Linksklick = Aktivieren", ChatUtil.GREEN), Component.text("Rechtsklick = Einstellungen", ChatUtil.GREEN)); - } - } - case ALL_ITEMS_INDEX -> { - if (Config.getBoolean("allitems")) { - item = ItemUtils.createGuiItem(Material.ITEM_FRAME, Component.text("All Items aktiviert", ChatUtil.GREEN), true, Component.text("/skipitem um ein Item zu überspringen", ChatUtil.GREEN)); - } else { - item = ItemUtils.createGuiItem(Material.ITEM_FRAME, Component.text("All Items deaktiviert", ChatUtil.RED), Component.text("/skipitem um ein Item zu überspringen", ChatUtil.GREEN)); - } - } - - case DEATH_ON_XP_INDEX -> { - if (Config.getBoolean("xpdeath")) { - item = ItemUtils.createGuiItem(Material.ENCHANTING_TABLE, Component.text("Sterben durch XP aktiviert", ChatUtil.GREEN), true, Component.text("Wenn ein Spieler XP einsammelt wird er sterben", ChatUtil.GREEN)); - } else { - item = ItemUtils.createGuiItem(Material.ENCHANTING_TABLE, Component.text("Sterben durch XP deaktiviert", ChatUtil.RED), Component.text("Wenn ein Spieler XP einsammelt wird er sterben", ChatUtil.RED)); - } - } - case DEATH_ON_FALLDAMAGE_INDEX -> { - if (Config.getBoolean("deathonfall")) { - item = ItemUtils.createGuiItem(Material.NETHERITE_BOOTS, Component.text("Tod bei Fallschaden aktiviert", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.NETHERITE_BOOTS, Component.text("Tod bei Fallschaden deaktiviert", ChatUtil.RED)); - } - } - case DEATH_ON_SPRINT_INDEX -> { - if (Config.getBoolean("deathonsprint")) { - item = ItemUtils.createGuiItem(Material.POTION, Component.text("Tod beim Sprinten aktiviert", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.GLASS_BOTTLE, Component.text("Tod beim Sprinten deaktiviert", ChatUtil.RED)); - } - } - case DEATH_ON_JUMP_INDEX -> { - if (Config.getBoolean("deathonjump")) { - item = ItemUtils.createGuiItem(Material.RABBIT_FOOT, Component.text("Tod beim Springen aktiviert", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.RABBIT_FOOT, Component.text("Tod beim Springen deaktiviert", ChatUtil.RED)); - } - } - case CLEAR_INVENTAR_ON_DAMAGE_INDEX -> { - if (Config.getBoolean("clinvdmg")) { - item = ItemUtils.createGuiItem(Material.BARRIER, Component.text("Alle Inventare löschen wenn ein Spieler Schaden bekommt aktiviert", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.BARRIER, Component.text("Alle Inventare löschen wenn ein Spieler Schaden bekommt deaktiviert", ChatUtil.RED)); - } - } - case ICE_RUNNER_INDEX -> { - if (Config.getBoolean("icerunner")) { - item = ItemUtils.createGuiItem(Material.BLUE_ICE, Component.text("Ice-Runner aktiviert", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.BLUE_ICE, Component.text("Ice-Runner deaktiviert", ChatUtil.RED)); - } - } - case RANDOM_MOBS_INDEX -> { - if (Config.getBoolean("randommobs")) { - item = ItemUtils.createGuiItem(Material.PARROT_SPAWN_EGG, Component.text("Random Mobs aktiviert", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.PARROT_SPAWN_EGG, Component.text("Random Mobs deaktiviert", ChatUtil.RED)); - } - } - - case RANDOM_DROPS_INDEX -> { - if (Config.getBoolean("rnddrops")) { - item = ItemUtils.createGuiItem(Material.NETHERITE_PICKAXE, Component.text("Zufällige Drops aktiviert", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.NETHERITE_PICKAXE, Component.text("Zufällige Drops deaktiviert", ChatUtil.RED)); - } - } - case DAMAGE_ON_SNEAK_INDEX -> { - if (Config.getBoolean("damageonsneak")) { - item = ItemUtils.createGuiItem(Material.SMOOTH_STONE_SLAB, Component.text("Schaden beim Schleichen aktiviert", ChatUtil.GREEN), true, Component.text("Schaden beim Schleichen: " + Config.getDouble("sneakdmg"), ChatUtil.GREEN), Component.text("Linksklick = ", ChatUtil.GREEN).append(Component.text("Deaktivieren", ChatUtil.RED)), Component.text("Rechtsklick = Einstellungen", ChatUtil.GREEN)); - - } else { - item = ItemUtils.createGuiItem(Material.SMOOTH_STONE_SLAB, Component.text("Schaden beim Schleichen deaktiviert", ChatUtil.RED), Component.text("Linksklick = Aktivieren", ChatUtil.GREEN), Component.text("Rechtsklick = Einstellungen", ChatUtil.GREEN)); - } - } - case TIED_TOGETHER_INDEX -> { - if (Config.getBoolean("tiedtogether")) { - item = ItemUtils.createGuiItem(Material.DIAMOND_BOOTS, Component.text("Zusammengebunden aktiviert", ChatUtil.GREEN), true, Component.text("Maximale Entfernung der Spieler: " + Config.getDouble("playerrange"), ChatUtil.GREEN), Component.text("Linksklick = ", ChatUtil.GREEN).append(Component.text("Deaktivieren", ChatUtil.RED)), Component.text("Rechtsklick = Einstellungen", ChatUtil.GREEN)); - } else { - item = ItemUtils.createGuiItem(Material.DIAMOND_BOOTS, Component.text("Zusammengebunden deaktiviert", ChatUtil.RED), Component.text("Linksklick = Aktivieren", ChatUtil.GREEN), Component.text("Rechtsklick = Einstellungen", ChatUtil.GREEN)); - } - } - case MOB_REMOVE_WORLD_INDEX -> { - if (Config.getBoolean("mobremoveworld")) { - item = ItemUtils.createGuiItem(Material.BLACK_CONCRETE, Component.text("Mobs entfernen Welt aktiviert", ChatUtil.GREEN), true, Component.text("Monster und Tiere löschen hinter sich die Welt.", ChatUtil.GREEN)); - } else { - item = ItemUtils.createGuiItem(Material.BLACK_CONCRETE, Component.text("Mobs entfernen Welt deaktiviert", ChatUtil.RED), Component.text("Monster und Tiere löschen hinter sich die Welt.", ChatUtil.GREEN)); - } - } - case ALL_ADVANCEMENT_INDEX -> { - if (Config.getBoolean("alladvancements")) { - item = ItemUtils.createGuiItem(Material.KNOWLEDGE_BOOK, Component.text("All Advancement aktiviert", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.KNOWLEDGE_BOOK, Component.text("All Advancement deaktiviert", ChatUtil.RED)); - } - } - case MANHUNT_INDEX -> { - if (Config.getBoolean("manhunt")) { - item = ItemUtils.createGuiItem(Material.COMPASS, Component.text("ManHunt aktiviert", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.COMPASS, Component.text("ManHunt deaktiviert", ChatUtil.RED)); - } - } - default -> item = ItemUtils.EMPTY_ICON; - } - this.getInventory().setItem(i, item); - } - } -} \ No newline at end of file diff --git a/src/main/java/de/fanta/challenges/guis/settingsgui/MainGui.java b/src/main/java/de/fanta/challenges/guis/settingsgui/MainGui.java deleted file mode 100644 index eef2e5d..0000000 --- a/src/main/java/de/fanta/challenges/guis/settingsgui/MainGui.java +++ /dev/null @@ -1,80 +0,0 @@ -package de.fanta.challenges.guis.settingsgui; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.ServerType; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.ItemUtils; -import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; -import de.iani.cubesideutils.bukkit.items.CustomHeads; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.ItemStack; - -public class MainGui extends AbstractWindow { - - private static final Challenges plugin = Challenges.getPlugin(); - - public static final int WINDOW_SIZE = 27; - - private static final int CLOSE_IDEX = 8; - private static final int CHALLENGES_INDEX = 10; - private static final int OTHER_SETTINGS_INDEX = 13; - private static final int SERVER_SETTINGS_INDEX = 16; - - public MainGui(Player player) { - super(player, Bukkit.createInventory(null, WINDOW_SIZE, plugin.getGuiPrefix().append(Component.text(" >> Settings")))); - } - - @Override - public void onItemClicked(InventoryClickEvent event) { - Player player = getPlayer(); - if (!mayAffectThisInventory(event)) { - return; - } - - event.setCancelled(true); - if (!getInventory().equals(event.getClickedInventory())) { - return; - } - - int slot = event.getSlot(); - switch (slot) { - case CHALLENGES_INDEX -> { - if (plugin.getServerType() != ServerType.ADVENTURE) { - new ChallengesGui(player).open(); - } - } - case OTHER_SETTINGS_INDEX -> new OtherSettingsGui(player).open(); - case SERVER_SETTINGS_INDEX -> new ServerSettingsGui(player).open(); - case CLOSE_IDEX -> player.closeInventory(); - default -> { - } - } - } - - @Override - protected void rebuildInventory() { - for (int i = 0; i < WINDOW_SIZE; i++) { - ItemStack item; - switch (i) { - case CHALLENGES_INDEX -> { - if (plugin.getServerType() != ServerType.ADVENTURE) { - item = ItemUtils.createGuiItem(Material.REPEATER, Component.text("Challenges", ChatUtil.GREEN)); - } else { - item = ItemUtils.createGuiItem(Material.BARRIER, Component.text("Challenges sind nur bei /tt challenge verfügbar", ChatUtil.RED)); - } - } - case OTHER_SETTINGS_INDEX -> - item = ItemUtils.createGuiItem(Material.COMPARATOR, Component.text("Andere Einstellungen", ChatUtil.GREEN)); - case SERVER_SETTINGS_INDEX -> - item = ItemUtils.createGuiItem(Material.COMMAND_BLOCK, Component.text("Server Einstellungen", ChatUtil.GREEN)); - case CLOSE_IDEX -> item = CustomHeads.RAINBOW_X.getHead(Component.text("Menü verlassen", ChatUtil.RED)); - default -> item = ItemUtils.EMPTY_ICON; - } - this.getInventory().setItem(i, item); - } - } -} \ No newline at end of file diff --git a/src/main/java/de/fanta/challenges/guis/settingsgui/OtherSettingsGui.java b/src/main/java/de/fanta/challenges/guis/settingsgui/OtherSettingsGui.java deleted file mode 100644 index c0d00da..0000000 --- a/src/main/java/de/fanta/challenges/guis/settingsgui/OtherSettingsGui.java +++ /dev/null @@ -1,208 +0,0 @@ -package de.fanta.challenges.guis.settingsgui; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.guis.challengesettingsguis.BackPackSettingsGui; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.ItemUtils; -import de.iani.cubesideutils.bukkit.MinecraftVersion; -import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; -import de.iani.cubesideutils.bukkit.items.CustomHeads; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.ItemStack; - -public class OtherSettingsGui extends AbstractWindow { - - private static final Challenges plugin = Challenges.getPlugin(); - - public static final int INVENTORY_SIZE = 45; - - private static final int BACK_INDEX = 7; - private static final int CLOSE_IDEX = 8; - - private static final int VILLAGER_TRADE_LIMITS_INDEX = 19; - private static final int DAMAGE_IN_CHAT_INDEX = 20; - private static final int TELEPORT_COMMAND_INDEX = 21; - private static final int HP_ON_TAB_INDEX = 22; - private static final int SMELT_ORES_ON_BREAK_INDEX = 23; - private static final int FAST_FURNACE_INDEX = 24; //TODO: SPEED SETTING - private static final int BACKPACK_INDEX = 25; - - private static final int GRAVESTONE_INDEX = 28; - - public OtherSettingsGui(Player player) { - super(player, Bukkit.createInventory(null, INVENTORY_SIZE, plugin.getGuiPrefix().append(Component.text(" >> Other Settings")))); - } - - @Override - public void onItemClicked(InventoryClickEvent event) { - Player player = getPlayer(); - if (!mayAffectThisInventory(event)) { - return; - } - - event.setCancelled(true); - if (!getInventory().equals(event.getClickedInventory())) { - return; - } - - int slot = event.getSlot(); - switch (slot) { - case VILLAGER_TRADE_LIMITS_INDEX -> { - if (Config.getBoolean("disablevillagertradelimits")) { - ChatUtil.sendTitleToAll(Component.text("Einstellungen"), Component.text("Villager Trade Limits aktiviert", ChatUtil.RED)); - Config.setValue("disablevillagertradelimits", false); - } else { - ChatUtil.sendTitleToAll(Component.text("Einstellungen"), Component.text("Villager Trade Limits deaktiviert (Default)", ChatUtil.GREEN)); - Config.setValue("disablevillagertradelimits", true); - } - } - case DAMAGE_IN_CHAT_INDEX -> { - if (Config.getBoolean("dmginchat")) { - ChatUtil.sendTitleToAll(Component.text("Einstellungen"), Component.text("Schaden im Chat anzeigen deaktiviert", ChatUtil.RED)); - Config.setValue("dmginchat", false); - } else { - ChatUtil.sendTitleToAll(Component.text("Einstellungen"), Component.text("Schaden im Chat anzeigen aktiviert", ChatUtil.GREEN)); - Config.setValue("dmginchat", true); - } - } - case TELEPORT_COMMAND_INDEX -> { - if (Config.getBoolean("teleportcommand")) { - ChatUtil.sendTitleToAll(Component.text("Einstellungen"), Component.text("Teleport Command deaktiviert", ChatUtil.RED)); - Config.setValue("teleportcommand", false); - } else { - ChatUtil.sendTitleToAll(Component.text("Einstellungen"), Component.text("Teleport Command aktiviert", ChatUtil.GREEN)); - Config.setValue("teleportcommand", true); - } - } - case HP_ON_TAB_INDEX -> { - if (Config.getBoolean("tabhp")) { - ChatUtil.sendTitleToAll(Component.text("Einstellungen"), Component.text("Herzen in der Tablist anzeigen deaktiviert", ChatUtil.RED)); - Config.setValue("tabhp", false); - } else { - ChatUtil.sendTitleToAll(Component.text("Einstellungen"), Component.text("Herzen in der Tablist anzeigen aktiviert", ChatUtil.GREEN)); - Config.setValue("tabhp", true); - } - plugin.getSBManager().updateTabHP(); - } - case SMELT_ORES_ON_BREAK_INDEX -> { - if (Config.getBoolean("silkore")) { - ChatUtil.sendTitleToAll(Component.text("Einstellungen"), Component.text("Abgebaute Erze droppen Barren deaktiviert", ChatUtil.RED)); - Config.setValue("silkore", false); - } else { - ChatUtil.sendTitleToAll(Component.text("Einstellungen"), Component.text("Abgebaute Erze droppen Barren aktiviert", ChatUtil.GREEN)); - Config.setValue("silkore", true); - } - } - case FAST_FURNACE_INDEX -> { - if (Config.getBoolean("speedfurnace")) { - ChatUtil.sendTitleToAll(Component.text("Einstellungen"), Component.text("Schneller Ofen deaktiviert", ChatUtil.RED)); - Config.setValue("speedfurnace", false); - } else { - ChatUtil.sendTitleToAll(Component.text("Einstellungen"), Component.text("Schneller Ofen aktiviert", ChatUtil.GREEN)); - Config.setValue("speedfurnace", true); - } - } - case BACKPACK_INDEX -> { - if (event.isRightClick()) { - new BackPackSettingsGui(player).open(); - } - } - - case GRAVESTONE_INDEX -> { - if (Config.getBoolean("gravestone")) { - ChatUtil.sendTitleToAll(Component.text("Einstellungen"), Component.text("Grabsteine deaktiviert", ChatUtil.RED)); - Config.setValue("gravestone", false); - } else { - ChatUtil.sendTitleToAll(Component.text("Einstellungen"), Component.text("Grabsteine aktiviert", ChatUtil.GREEN)); - Config.setValue("gravestone", true); - } - } - default -> { - } - } - rebuildInventory(); - - switch (slot) { - case BACK_INDEX -> new MainGui(player).open(); - case CLOSE_IDEX -> player.closeInventory(); - } - } - - @Override - protected void rebuildInventory() { - for (int i = 0; i < INVENTORY_SIZE; i++) { - ItemStack item; - switch (i) { - case BACK_INDEX -> - item = CustomHeads.RAINBOW_ARROW_BACKWARD_II.getHead(Component.text("Zurück", ChatUtil.RED)); - case CLOSE_IDEX -> item = CustomHeads.RAINBOW_X.getHead(Component.text("Menü verlassen", ChatUtil.RED)); - - case VILLAGER_TRADE_LIMITS_INDEX -> { - if (Config.getBoolean("disablevillagertradelimits")) { - item = ItemUtils.createGuiItem(Material.EMERALD, Component.text("Villager Trade Limits aktiviert", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.EMERALD, Component.text("Villager Trade Limits deaktiviert (Default)", ChatUtil.RED)); - } - } - case DAMAGE_IN_CHAT_INDEX -> { - if (Config.getBoolean("dmginchat")) { - item = ItemUtils.createGuiItem(Material.PAPER, Component.text("Schaden im Chat anzeigen aktiviert", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.PAPER, Component.text("Schaden im Chat anzeigen deaktiviert", ChatUtil.RED)); - } - } - case TELEPORT_COMMAND_INDEX -> { - if (Config.getBoolean("teleportcommand")) { - item = ItemUtils.createGuiItem(Material.ENDER_PEARL, Component.text("Teleport Command aktiviert", ChatUtil.GREEN), true, Component.text("Deaktiviert den \"/challenges tp\" command", ChatUtil.GREEN)); - } else { - item = ItemUtils.createGuiItem(Material.ENDER_PEARL, Component.text("Teleport Command deaktiviert", ChatUtil.RED), Component.text("Aktiviert den \"/challenges tp\" command", ChatUtil.RED)); - } - } - case HP_ON_TAB_INDEX -> { - if (Config.getBoolean("tabhp")) { - item = ItemUtils.createGuiItem(Material.HEART_OF_THE_SEA, Component.text("Herzen in der Tablist anzeigen aktiviert", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.HEART_OF_THE_SEA, Component.text("Herzen in der Tablist anzeigen deaktiviert", ChatUtil.RED)); - } - } - case SMELT_ORES_ON_BREAK_INDEX -> { - if (Config.getBoolean("silkore")) { - item = ItemUtils.createGuiItem(Material.IRON_INGOT, Component.text("Abgebaute Erze droppen Barren aktiviert", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.IRON_INGOT, Component.text("Abgebaute Erze droppen Barren deaktiviert", ChatUtil.RED)); - } - } - case FAST_FURNACE_INDEX -> { - if (Config.getBoolean("speedfurnace")) { - item = ItemUtils.createGuiItem(Material.FURNACE, Component.text("Schneller Ofen aktiviert", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.FURNACE, Component.text("Schneller Ofen deaktiviert", ChatUtil.RED)); - } - } - case BACKPACK_INDEX -> { - if (MinecraftVersion.isAboveOrEqual(1, 16, 5)) { - item = ItemUtils.createGuiItem(Material.BUNDLE, Component.text("Rucksack Größe: " + plugin.getBackpack().getSize() / 9 + "/6", ChatUtil.GREEN), Component.text("Rechtsklick = Einstellungen", ChatUtil.GREEN)); - } else { - item = ItemUtils.createGuiItem(Material.CHEST, Component.text("Rucksack Größe: " + plugin.getBackpack().getSize() / 9 + "/6", ChatUtil.GREEN), Component.text("Rechtsklick = Einstellungen", ChatUtil.GREEN)); - } - - } - - case GRAVESTONE_INDEX -> { - if (Config.getBoolean("gravestone")) { - item = ItemUtils.createGuiItem(Material.HOPPER, Component.text("Grabstein aktiviert", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.HOPPER, Component.text("Grabstein deaktiviert", ChatUtil.RED)); - } - } - default -> item = ItemUtils.EMPTY_ICON; - } - this.getInventory().setItem(i, item); - } - } -} \ No newline at end of file diff --git a/src/main/java/de/fanta/challenges/guis/settingsgui/ServerSettingsGui.java b/src/main/java/de/fanta/challenges/guis/settingsgui/ServerSettingsGui.java deleted file mode 100644 index ff6ba06..0000000 --- a/src/main/java/de/fanta/challenges/guis/settingsgui/ServerSettingsGui.java +++ /dev/null @@ -1,211 +0,0 @@ -package de.fanta.challenges.guis.settingsgui; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.ItemUtils; -import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; -import de.iani.cubesideutils.bukkit.items.CustomHeads; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Difficulty; -import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.ItemStack; - -public class ServerSettingsGui extends AbstractWindow { - - private static final Challenges plugin = Challenges.getPlugin(); - - public static final int INVENTORY_SIZE = 36; - - private static final int BACK_INDEX = 7; - private static final int CLOSE_IDEX = 8; - - private static final int DIFFICULTY_INDEX = 19; - private static final int KEEP_INVENTORY_INDEX = 20; - private static final int NATURAL_REGENERATION_INDEX = 21; - private static final int ULTRA_HARDCORE_INDEX = 22; - private static final int ONE_LIFE_INDEX = 23; - private static final int RESPAWN_INDEX = 24; - private static final int PVP_INDEX = 25; - - public ServerSettingsGui(Player player) { - super(player, Bukkit.createInventory(null, INVENTORY_SIZE, plugin.getGuiPrefix().append(Component.text(" >> Server Settings")))); - } - - @Override - public void onItemClicked(InventoryClickEvent event) { - Player player = getPlayer(); - if (!mayAffectThisInventory(event)) { - return; - } - - event.setCancelled(true); - if (!getInventory().equals(event.getClickedInventory())) { - return; - } - - int slot = event.getSlot(); - switch (slot) { - case DIFFICULTY_INDEX -> { - if (plugin.getDifficulty() == Difficulty.EASY) { - plugin.setDifficulty(Difficulty.NORMAL); - ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("Schwierigkeitsgrad Mittel", ChatUtil.ORANGE)); - } else if (plugin.getDifficulty() == Difficulty.NORMAL) { - plugin.setDifficulty(Difficulty.HARD); - ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("Schwierigkeitsgrad Schwer", ChatUtil.RED)); - } else if (plugin.getDifficulty() == Difficulty.HARD) { - plugin.setDifficulty(Difficulty.PEACEFUL); - ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("Schwierigkeitsgrad Friedlich", ChatUtil.GREEN)); - Config.setValue("editsettings", true); - ChatUtil.sendWarningMessage(plugin.getCurrentEditor(), "Diese Challenge wird nicht mehr als Speed Run gezählt, da die Difficulty auf Friedlich gesetzt wurde."); - } else if (plugin.getDifficulty() == Difficulty.PEACEFUL) { - plugin.setDifficulty(Difficulty.EASY); - ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("Schwierigkeitsgrad Leicht", ChatUtil.BLUE)); - } - } - case KEEP_INVENTORY_INDEX -> { - if (plugin.getKeepInventory()) { - plugin.setKeepInventory(false); - ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("Keep Inventory deaktiviert", ChatUtil.RED)); - } else { - plugin.setKeepInventory(true); - ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("Keep Inventory aktiviert", ChatUtil.GREEN)); - Config.setValue("editsettings", true); - ChatUtil.sendWarningMessage(plugin.getCurrentEditor(), "Diese Challenge wird nicht mehr als Speed Run gezählt, da du KeepInventory aktiviert hast."); - } - } - case NATURAL_REGENERATION_INDEX -> { - if (plugin.getNaturalRegeneration()) { - plugin.setNaturalRegeneration(false); - ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("Natürliche Regeneration aktiviert", ChatUtil.GREEN)); - } else { - plugin.setNaturalRegeneration(true); - ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("Natürliche Regeneration deaktiviert", ChatUtil.RED)); - } - Config.setValue("editsettings", true); - } - case ULTRA_HARDCORE_INDEX -> { - if (Config.getBoolean("ultrahardcore")) { - Config.setValue("ultrahardcore", false); - ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("Ultra Hardcore deaktiviert", ChatUtil.RED)); - } else { - Config.setValue("ultrahardcore", true); - ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("Ultra Hardcore aktiviert", ChatUtil.GREEN)); - } - } - case ONE_LIFE_INDEX -> { - if (Config.getBoolean("onelife")) { - Config.setValue("onelife", false, false); - ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("Ein Leben für alle deaktiviert", ChatUtil.RED)); - } else { - Config.setValue("onelife", true, false); - ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("Ein Leben für alle aktiviert", ChatUtil.GREEN)); - } - } - case RESPAWN_INDEX -> { - if (Config.getBoolean("respawn")) { - Config.setValue("respawn", false); - ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("Wiederbeleben deaktiviert", ChatUtil.RED)); - } else { - Config.setValue("respawn", true); - ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("Wiederbeleben aktiviert", ChatUtil.GREEN)); - } - } - case PVP_INDEX -> { - if (plugin.getPvP()) { - plugin.setPvP(false); - Config.setValue("pvp", false, false); - ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("PVP deaktiviert", ChatUtil.RED)); - } else { - plugin.setPvP(true); - Config.setValue("pvp", true, false); - ChatUtil.sendTitleToAll(Component.text("Server Einstellungen"), Component.text("PVP aktiviert", ChatUtil.GREEN)); - } - } - default -> { - } - } - rebuildInventory(); - - switch (slot) { - case BACK_INDEX -> new MainGui(player).open(); - case CLOSE_IDEX -> player.closeInventory(); - } - } - - @Override - protected void rebuildInventory() { - for (int i = 0; i < INVENTORY_SIZE; i++) { - ItemStack item; - switch (i) { - case BACK_INDEX -> - item = CustomHeads.RAINBOW_ARROW_BACKWARD_II.getHead(Component.text("Zurück", ChatUtil.RED)); - case CLOSE_IDEX -> item = CustomHeads.RAINBOW_X.getHead(Component.text("Menü verlassen", ChatUtil.RED)); - - case DIFFICULTY_INDEX -> { - if (plugin.getDifficulty() == Difficulty.EASY) { - item = ItemUtils.createGuiItem(Material.IRON_SWORD, Component.text("Schwierigkeitsgrad Leicht", ChatUtil.BLUE)); - } else if (plugin.getDifficulty() == Difficulty.NORMAL) { - item = ItemUtils.createGuiItem(Material.DIAMOND_SWORD, Component.text("Schwierigkeitsgrad Mittel", ChatUtil.ORANGE)); - } else if (plugin.getDifficulty() == Difficulty.HARD) { - item = ItemUtils.createGuiItem(Material.NETHERITE_SWORD, Component.text("Schwierigkeitsgrad Schwer", ChatUtil.RED)); - } else { - item = ItemUtils.createGuiItem(Material.POPPY, Component.text("Schwierigkeitsgrad Friedlich", ChatUtil.GREEN)); - } - } - case KEEP_INVENTORY_INDEX -> { - if (plugin.getKeepInventory()) { - item = ItemUtils.createGuiItem(Material.CHEST_MINECART, Component.text("Keep Inventory aktiviert", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.CHEST_MINECART, Component.text("Keep Inventory deaktiviert", ChatUtil.RED)); - } - } - case NATURAL_REGENERATION_INDEX -> { - if (plugin.getNaturalRegeneration()) { - item = ItemUtils.createGuiItem(Material.GOLDEN_APPLE, Component.text("Natürliche Regeneration aktiviert", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.GOLDEN_APPLE, Component.text("Natürliche Regeneration deaktiviert", ChatUtil.RED)); - } - } - case ULTRA_HARDCORE_INDEX -> { - if (Config.getBoolean("ultrahardcore")) { - item = ItemUtils.createGuiItem(Material.SUSPICIOUS_STEW, Component.text("Ultra Hardcore aktiviert", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.SUSPICIOUS_STEW, Component.text("Ultra Hardcore deaktiviert", ChatUtil.RED)); - } - } - case ONE_LIFE_INDEX -> { - if (Config.getBoolean("onelife")) { - item = ItemUtils.createGuiItem(Material.SUNFLOWER, Component.text("Ein Leben für alle aktiviert", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.SUNFLOWER, Component.text("Ein Leben für alle deaktiviert", ChatUtil.RED)); - } - } - case RESPAWN_INDEX -> { - if (Config.getBoolean("respawn")) { - item = ItemUtils.createGuiItem(Material.TOTEM_OF_UNDYING, Component.text("Wiederbeleben aktiviert", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.TOTEM_OF_UNDYING, Component.text("Wiederbeleben deaktiviert", ChatUtil.RED)); - } - } - case PVP_INDEX -> { - World world = plugin.getServer().getWorld("world"); - if (world == null) { - return; - } - if (world.getPVP()) { - item = ItemUtils.createGuiItem(Material.WOODEN_SWORD, Component.text("PVP aktiviert", ChatUtil.GREEN), true); - } else { - item = ItemUtils.createGuiItem(Material.WOODEN_SWORD, Component.text("PVP deaktiviert", ChatUtil.RED)); - } - } - default -> item = ItemUtils.EMPTY_ICON; - } - this.getInventory().setItem(i, item); - } - } -} \ No newline at end of file diff --git a/src/main/java/de/fanta/challenges/listeners/BlockCreateListener.java b/src/main/java/de/fanta/challenges/listeners/BlockCreateListener.java deleted file mode 100644 index 9844491..0000000 --- a/src/main/java/de/fanta/challenges/listeners/BlockCreateListener.java +++ /dev/null @@ -1,27 +0,0 @@ -package de.fanta.challenges.listeners; - -import de.fanta.challenges.Challenges; -import org.bukkit.GameMode; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.event.player.PlayerBucketEmptyEvent; - -public class BlockCreateListener implements Listener { - - private final Challenges plugin = Challenges.getPlugin(); - - @EventHandler - public void onBlockPlace(BlockPlaceEvent e) { - if (!plugin.getTimer().isRunning() && e.getPlayer().getGameMode() != GameMode.CREATIVE) { - e.setCancelled(true); - } - } - - @EventHandler - public void onBucketPlace(PlayerBucketEmptyEvent e) { - if (!plugin.getTimer().isRunning() && e.getPlayer().getGameMode() != GameMode.CREATIVE) { - e.setCancelled(true); - } - } -} diff --git a/src/main/java/de/fanta/challenges/listeners/BlockDestroyListener.java b/src/main/java/de/fanta/challenges/listeners/BlockDestroyListener.java deleted file mode 100644 index 18118ac..0000000 --- a/src/main/java/de/fanta/challenges/listeners/BlockDestroyListener.java +++ /dev/null @@ -1,55 +0,0 @@ -package de.fanta.challenges.listeners; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.MinecraftVersion; -import org.bukkit.GameMode; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.block.BlockDropItemEvent; -import org.bukkit.inventory.ItemStack; - -public class BlockDestroyListener implements Listener { - - private final Challenges plugin = Challenges.getPlugin(); - - @EventHandler - public void onBlockBreak(BlockBreakEvent e) { - if ((!plugin.getTimer().isRunning()) && e.getPlayer().getGameMode() != GameMode.CREATIVE) { - e.setCancelled(true); - } - } - - @EventHandler - public void onBlockDrop(BlockDropItemEvent e) { - if (Config.getBoolean("silkore")) { - Block block = e.getBlock(); - Material dropType; - if (MinecraftVersion.isAboveOrEqual(1, 17, 0)) { - dropType = switch (e.getBlockState().getType()) { - case IRON_ORE, DEEPSLATE_IRON_ORE -> Material.IRON_INGOT; - case GOLD_ORE, DEEPSLATE_GOLD_ORE -> Material.GOLD_INGOT; - case COPPER_ORE, DEEPSLATE_COPPER_ORE -> Material.COPPER_INGOT; - default -> null; - }; - } else { - dropType = switch (e.getBlockState().getType()) { - case IRON_ORE -> Material.IRON_INGOT; - case GOLD_ORE -> Material.GOLD_INGOT; - default -> null; - }; - } - - if (dropType != null) { - e.getItems().forEach(item -> block.getLocation().getWorld().dropItem(block.getLocation().add(0.5D, 0.5D, 0.5D), new ItemStack(dropType, item.getItemStack().getAmount()))); - e.setCancelled(true); - } - } - } - - -} - diff --git a/src/main/java/de/fanta/challenges/listeners/CommandBlockListener.java b/src/main/java/de/fanta/challenges/listeners/CommandBlockListener.java deleted file mode 100644 index 914f2e1..0000000 --- a/src/main/java/de/fanta/challenges/listeners/CommandBlockListener.java +++ /dev/null @@ -1,34 +0,0 @@ -package de.fanta.challenges.listeners; - -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.command.ProxiedCommandSender; -import org.bukkit.command.RemoteConsoleCommandSender; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.server.ServerCommandEvent; - -public class CommandBlockListener implements Listener { - - @EventHandler - public void onDispatchCommandBlockCommand(ServerCommandEvent e) { - - if (e.getSender() instanceof ConsoleCommandSender || e.getSender() instanceof ProxiedCommandSender || e.getSender() instanceof RemoteConsoleCommandSender) { - return; - } - String commandString = e.getCommand(); - if (commandString.startsWith("/minecraft:op") || commandString.startsWith("minecraft:op") || commandString.startsWith("/op") || commandString.startsWith("op") || (commandString.contains("execute") && commandString.matches(".*\\bop\\b.*"))) { - e.setCancelled(true); - } - - if (commandString.startsWith("/")) { - String command = commandString.replaceFirst("/", ""); - if (!command.startsWith("minecraft:")) { - e.setCommand("minecraft:" + command); - } - } else { - if (!e.getCommand().startsWith("minecraft:")) { - e.setCommand("minecraft:" + e.getCommand()); - } - } - } -} diff --git a/src/main/java/de/fanta/challenges/listeners/ContainerListener.java b/src/main/java/de/fanta/challenges/listeners/ContainerListener.java deleted file mode 100644 index 3300806..0000000 --- a/src/main/java/de/fanta/challenges/listeners/ContainerListener.java +++ /dev/null @@ -1,113 +0,0 @@ -package de.fanta.challenges.listeners; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.teams.ChallengeTeam; -import de.fanta.challenges.teams.TeamUtils; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import net.kyori.adventure.text.Component; -import org.bukkit.block.Block; -import org.bukkit.block.BlockState; -import org.bukkit.block.Container; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.event.inventory.FurnaceStartSmeltEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.metadata.FixedMetadataValue; -import org.bukkit.metadata.MetadataValue; - -import java.util.ArrayList; -import java.util.Optional; -import java.util.UUID; - -public class ContainerListener implements Listener { - - private static final String META_PLACED_BY_PLAYER = "PlacedByPlayer"; - private static final String META_PLACED_BY_TEAM = "PlacedByTeam"; - - private final Challenges plugin = Challenges.getPlugin(); - - public static final ArrayList unlockList = new ArrayList<>(); - - @EventHandler - public void onContainerPlace(BlockPlaceEvent e) { - BlockState state = e.getBlockPlaced().getState(); - if (!Config.getBoolean("event.minilwc")) { - return; - } - if (state instanceof Container container) { - if (Config.getBoolean("event.teams")) { - ChallengeTeam challengeTeam = TeamUtils.getPlayerTeam(e.getPlayer()); - if (challengeTeam != null) { - container.setMetadata(META_PLACED_BY_TEAM, new FixedMetadataValue(plugin, challengeTeam.getName())); - container.update(); - } - - } else { - container.setMetadata(META_PLACED_BY_PLAYER, new FixedMetadataValue(plugin, e.getPlayer().getUniqueId().toString())); - container.update(); - } - - } - } - - @EventHandler - public void onFurnaceStartSmelt(FurnaceStartSmeltEvent e) { - if (Config.getBoolean("speedfurnace")) { - e.setTotalCookTime(e.getTotalCookTime() / 10); - } - } - - - @EventHandler - public void onInteract(PlayerInteractEvent e) { - if (!Config.getBoolean("event.minilwc")) { - return; - } - - Block block = e.getClickedBlock(); - if (block != null) { - BlockState state = block.getState(); - if (state instanceof Container container && container.hasMetadata(META_PLACED_BY_PLAYER)) { - Optional valueOptional = container.getMetadata(META_PLACED_BY_PLAYER).stream().filter(metadataValue -> metadataValue.getOwningPlugin().equals(plugin)).findFirst(); - if (valueOptional.isPresent()) { - UUID uuid = UUID.fromString(valueOptional.get().asString()); - if (!e.getPlayer().getUniqueId().equals(uuid)) { - ChatUtil.sendMessage(e.getPlayer(), Component.text("Diese/r ", ChatUtil.GREEN).append(Component.translatable(container.getType().translationKey(), ChatUtil.GREEN).append(Component.text(" gehört: ", ChatUtil.GREEN).append(Component.text(plugin.getPlayerUUIDCache().getPlayer(uuid).getName(), ChatUtil.GREEN))))); - e.setCancelled(true); - return; - } - - if (unlockList.contains(e.getPlayer().getUniqueId())) { - container.removeMetadata(META_PLACED_BY_PLAYER, plugin); - unlockList.remove(e.getPlayer().getUniqueId()); - ChatUtil.sendMessage(e.getPlayer(), Component.translatable(container.getType().translationKey(), ChatUtil.GREEN).append(Component.text(" entsichert.", ChatUtil.GREEN))); - return; - } - - ChatUtil.sendMessage(e.getPlayer(), Component.text("Diese/r ", ChatUtil.GREEN).append(Component.translatable(container.getType().translationKey(), ChatUtil.GREEN).append(Component.text(" gehört: " + plugin.getPlayerUUIDCache().getPlayer(uuid).getName(), ChatUtil.GREEN)))); - } - } else if (state instanceof Container container && container.hasMetadata(META_PLACED_BY_TEAM)) { - Optional valueOptional = container.getMetadata(META_PLACED_BY_TEAM).stream().filter(metadataValue -> metadataValue.getOwningPlugin().equals(plugin)).findFirst(); - if (valueOptional.isPresent()) { - ChallengeTeam team = TeamUtils.getTeam(valueOptional.get().asString()); - if (TeamUtils.getPlayerTeam(e.getPlayer()) != team) { - ChatUtil.sendMessage(e.getPlayer(), Component.text("Diese/r ", ChatUtil.GREEN).append(Component.translatable(container.getType().translationKey(), ChatUtil.GREEN).append(Component.text(" gehört: Team ", ChatUtil.GREEN).append(Component.text(team.getName(), team.getChatColor()))))); - e.setCancelled(true); - return; - } - - if (unlockList.contains(e.getPlayer().getUniqueId())) { - container.removeMetadata(META_PLACED_BY_TEAM, plugin); - unlockList.remove(e.getPlayer().getUniqueId()); - ChatUtil.sendMessage(e.getPlayer(), Component.translatable(container.getType().translationKey(), ChatUtil.GREEN).append(Component.text(" entsichert.", ChatUtil.GREEN))); - return; - } - - ChatUtil.sendMessage(e.getPlayer(), Component.text("Diese/r ", ChatUtil.GREEN).append(Component.translatable(container.getType().translationKey(), ChatUtil.GREEN).append(Component.text(" gehört: Team ", ChatUtil.GREEN).append(Component.text(team.getName(), team.getChatColor()))))); - } - } - } - } -} diff --git a/src/main/java/de/fanta/challenges/listeners/DamageListener.java b/src/main/java/de/fanta/challenges/listeners/DamageListener.java deleted file mode 100644 index b852116..0000000 --- a/src/main/java/de/fanta/challenges/listeners/DamageListener.java +++ /dev/null @@ -1,64 +0,0 @@ -package de.fanta.challenges.listeners; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.StringUtil; -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.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.event.entity.EntityDamageEvent.DamageCause; - -import java.text.DecimalFormat; - -public class DamageListener implements Listener { - - private final Challenges plugin = Challenges.getPlugin(); - - @EventHandler - public void onDamage(EntityDamageEvent e) { - if (e.getEntity() instanceof Player p) { - if (plugin.getTimer().isRunning() && !plugin.getVanish().isVanish(p)) { - String dmg = new DecimalFormat("#.##").format(e.getFinalDamage()); - if (Config.getBoolean("dmginchat")) { - if ((e.getFinalDamage() > 0) && (e.getFinalDamage() < 10000)) { - if (!e.getCause().name().startsWith("ENTITY_")) { - if (e.getCause() == DamageCause.CUSTOM) { - ChatUtil.sendBrodCastMessage(p.name().color(ChatUtil.BLUE).append(Component.text(" hat ", ChatUtil.GREEN).append(Component.text(Config.getDouble("sneakdmg"), ChatUtil.ORANGE).append(Component.text(" HP Schaden genommen durch", ChatUtil.GREEN).append(Component.text(" Server", ChatUtil.ORANGE)))))); - } else { - ChatUtil.sendBrodCastMessage(p.name().color(ChatUtil.BLUE).append(Component.text(" hat ", ChatUtil.GREEN).append(Component.text(dmg, ChatUtil.ORANGE).append(Component.text(" HP Schaden genommen durch ", ChatUtil.GREEN).append(Component.text(StringUtil.capitalizeFirstLetter(e.getCause().toString(), true), ChatUtil.ORANGE)))))); - } - } - } - } - } else { - e.setCancelled(true); - } - } - } - - @EventHandler - public void onEntityDamage(EntityDamageByEntityEvent e) { - if (!plugin.getTimer().isRunning()) { - e.setCancelled(true); - return; - } - if ((e.getEntity() instanceof Player p) && (e.getFinalDamage() > 0) && !plugin.getVanish().isVanish(p)) { - String dmg = new DecimalFormat("#.##").format(e.getFinalDamage()); - if ((e.getCause() == DamageCause.ENTITY_ATTACK || e.getCause() == DamageCause.ENTITY_EXPLOSION) && Config.getBoolean("dmginchat")) { - if (e.getDamager() instanceof Player damager) { - if (!plugin.getVanish().isVanish(damager)) { - ChatUtil.sendBrodCastMessage(p.name().color(ChatUtil.BLUE).append(Component.text(" hat ", ChatUtil.GREEN).append(Component.text(dmg, ChatUtil.ORANGE)).append(Component.text(" HP Schaden genommen durch ", ChatUtil.GREEN)).append(e.getDamager().name()).color(ChatUtil.ORANGE))); - } - } else { - ChatUtil.sendBrodCastMessage(p.name().color(ChatUtil.BLUE).append(Component.text(" hat ", ChatUtil.GREEN).append(Component.text(dmg, ChatUtil.ORANGE)).append(Component.text(" HP Schaden genommen durch ", ChatUtil.GREEN)).append(e.getDamager().name()).color(ChatUtil.ORANGE))); - } - - } - } - } -} - diff --git a/src/main/java/de/fanta/challenges/listeners/DeathListener.java b/src/main/java/de/fanta/challenges/listeners/DeathListener.java deleted file mode 100644 index dc82508..0000000 --- a/src/main/java/de/fanta/challenges/listeners/DeathListener.java +++ /dev/null @@ -1,44 +0,0 @@ -package de.fanta.challenges.listeners; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.TextComponent; -import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.PlayerDeathEvent; - -public class DeathListener implements Listener { - - private final Challenges plugin = Challenges.getPlugin(); - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent e) { - TextComponent component = plugin.getPrefixComponent().append(e.deathMessage().color(ChatUtil.BLUE)); - if (Config.getBoolean("onelife")) { - plugin.getTimer().stopTimer(); - for (Player p : Bukkit.getOnlinePlayers()) { - p.setGameMode(GameMode.SPECTATOR); - } - e.deathMessage(component); - ChatUtil.sendBrodCastMessage(Component.text("Verschwendete Zeit ", ChatUtil.GREEN).append(plugin.getTimer().formatTime(ChatUtil.ORANGE))); - ChatUtil.sendBrodCastMessage(Component.text("Welt Seed: " + Bukkit.getWorlds().getFirst().getSeed(), ChatUtil.GREEN)); - ChatUtil.sendBrodCastMessage(Component.text("Um alle wiederzubeleben benutze §c/revive ALL", ChatUtil.GREEN)); - } else { - if (Config.getBoolean("event.enabled")) { - e.deathMessage(component); - } else { - component = component.append(Component.text(" (" + e.getEntity().getLocation().getBlockX() + "/" + e.getEntity().getLocation().getBlockY() + "/" + e.getEntity().getLocation().getBlockZ() + ")").color(ChatUtil.ORANGE)); - e.deathMessage(component); - } - if (!Config.getBoolean("respawn")) { - Player editor = plugin.getCurrentEditor(); - ChatUtil.sendMessage(editor, Component.text("Benutze ", ChatUtil.GREEN).append(Component.text("/revive " + e.getEntity().getName() + " [world] [x] [y] [z] ", ChatUtil.BLUE).append(Component.text("um ihn wiederzubeleben!", ChatUtil.GREEN)))); - } - } - } -} diff --git a/src/main/java/de/fanta/challenges/listeners/EventRegistration.java b/src/main/java/de/fanta/challenges/listeners/EventRegistration.java deleted file mode 100644 index 98a2ca7..0000000 --- a/src/main/java/de/fanta/challenges/listeners/EventRegistration.java +++ /dev/null @@ -1,106 +0,0 @@ -package de.fanta.challenges.listeners; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.challenges.AllAdvancementsChallenge; -import de.fanta.challenges.challenges.BedrockWallChallenge; -import de.fanta.challenges.challenges.ChallengeEvents.BingoChallengeEvent; -import de.fanta.challenges.challenges.ChallengeEvents.BridgeRaceChallengeEvent; -import de.fanta.challenges.challenges.ChallengeEvents.DeathrunChallengeEvent; -import de.fanta.challenges.challenges.ChallengeEvents.DifferentItemsChallenge; -import de.fanta.challenges.challenges.ChallengeEvents.forcequest.ForceQuestChallengeEvent; -import de.fanta.challenges.challenges.ChallengeEvents.OreBattleChallengeEvent; -import de.fanta.challenges.challenges.ChallengeEvents.SammelFieberChallengeEvent; -import de.fanta.challenges.challenges.ChallengeEvents.TimeChallengeEvent; -import de.fanta.challenges.challenges.ChallengeGoals; -import de.fanta.challenges.challenges.ClearInventoryByDamageChallenge; -import de.fanta.challenges.challenges.CraftingTableChallenge; -import de.fanta.challenges.challenges.FloorIsLavaChallenge; -import de.fanta.challenges.challenges.IceRunnerChallenge; -import de.fanta.challenges.challenges.MLGChallenge; -import de.fanta.challenges.challenges.ManHunt; -import de.fanta.challenges.challenges.MobRemoveWorldChallenge; -import de.fanta.challenges.challenges.NoFallDamageChallenge; -import de.fanta.challenges.challenges.NoJumpChallenge; -import de.fanta.challenges.challenges.NoSneakChallenge; -import de.fanta.challenges.challenges.NoSprintChallenge; -import de.fanta.challenges.challenges.NoTradingChallenge; -import de.fanta.challenges.challenges.RandomDropsChallenge; -import de.fanta.challenges.challenges.RandomEffectChallenge; -import de.fanta.challenges.challenges.RandomMobChallenge; -import de.fanta.challenges.challenges.ShareDamageChallenge; -import de.fanta.challenges.challenges.TiedTogetherChallenge; -import de.fanta.challenges.challenges.WorldBorderLevelChallenge; -import de.fanta.challenges.challenges.XPChallenge; -import de.fanta.challenges.gravestones.GravestoneListener; -import de.fanta.challenges.guis.coordsgui.CoordsDeleteGUI; -import de.fanta.challenges.guis.coordsgui.CoordsGUI; -import de.fanta.challenges.guis.eventgui.BingoItemsGui; -import de.fanta.challenges.guis.eventgui.TeamSelectGUI; -import de.fanta.challenges.teams.TeamListener; -import de.fanta.challenges.utils.CoordsTargeter; -import de.iani.cubesideutils.bukkit.MinecraftVersion; -import org.bukkit.Bukkit; -import org.bukkit.plugin.PluginManager; - -public record EventRegistration(Challenges plugin) { - public static final PluginManager pM = Bukkit.getPluginManager(); - - public void registerEvents() { - pM.registerEvents(new QuitJoinListener(), plugin); - pM.registerEvents(new BlockDestroyListener(), plugin); - pM.registerEvents(new BlockCreateListener(), plugin); - pM.registerEvents(new InteractListener(), plugin); - pM.registerEvents(new DamageListener(), plugin); - pM.registerEvents(new DeathListener(), plugin); - pM.registerEvents(new PlayerListener(), plugin); - pM.registerEvents(new MinimapListener(), plugin); - - pM.registerEvents(new BingoItemsGui(), plugin); - pM.registerEvents(new ContainerListener(), plugin); - pM.registerEvents(new CommandBlockListener(), plugin); - pM.registerEvents(new TeamSelectGUI(), plugin); - pM.registerEvents(new CoordsGUI(), plugin); - pM.registerEvents(new CoordsDeleteGUI(), plugin); - - pM.registerEvents(new GravestoneListener(), plugin); - - pM.registerEvents(new TeamListener(), plugin); - - pM.registerEvents(new ChallengeGoals(), plugin); - - pM.registerEvents(new RandomEffectChallenge(), plugin); - pM.registerEvents(new CraftingTableChallenge(), plugin); - pM.registerEvents(new RandomDropsChallenge(), plugin); - pM.registerEvents(new NoTradingChallenge(), plugin); - pM.registerEvents(new ShareDamageChallenge(), plugin); - pM.registerEvents(new FloorIsLavaChallenge(), plugin); - pM.registerEvents(new XPChallenge(), plugin); - pM.registerEvents(new NoFallDamageChallenge(), plugin); - pM.registerEvents(new NoSprintChallenge(), plugin); - pM.registerEvents(new NoJumpChallenge(), plugin); - pM.registerEvents(new ClearInventoryByDamageChallenge(), plugin); - pM.registerEvents(new TiedTogetherChallenge(), plugin); - pM.registerEvents(new NoSneakChallenge(), plugin); - pM.registerEvents(new BingoChallengeEvent(), plugin); - pM.registerEvents(new DeathrunChallengeEvent(), plugin); - pM.registerEvents(new IceRunnerChallenge(), plugin); - pM.registerEvents(new RandomMobChallenge(), plugin); - pM.registerEvents(new BedrockWallChallenge(), plugin); - pM.registerEvents(new SammelFieberChallengeEvent(), plugin); - pM.registerEvents(new OreBattleChallengeEvent(), plugin); - pM.registerEvents(new ForceQuestChallengeEvent(), plugin); - pM.registerEvents(new AllAdvancementsChallenge(), plugin); - pM.registerEvents(new MobRemoveWorldChallenge(), plugin); - pM.registerEvents(new BridgeRaceChallengeEvent(), plugin); - pM.registerEvents(new DifferentItemsChallenge(), plugin); - pM.registerEvents(new MLGChallenge(), plugin); - pM.registerEvents(new ManHunt(), plugin); - pM.registerEvents(new TimeChallengeEvent(), plugin); - //pM.registerEvents(new Troll(plugin), plugin); - - if (MinecraftVersion.isAboveOrEqual(1, 19, 0)) { - pM.registerEvents(new WorldBorderLevelChallenge(), plugin); - pM.registerEvents(new CoordsTargeter(), plugin); - } - } -} diff --git a/src/main/java/de/fanta/challenges/listeners/InteractListener.java b/src/main/java/de/fanta/challenges/listeners/InteractListener.java deleted file mode 100644 index 740b4d3..0000000 --- a/src/main/java/de/fanta/challenges/listeners/InteractListener.java +++ /dev/null @@ -1,42 +0,0 @@ -package de.fanta.challenges.listeners; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.Config; -import org.bukkit.GameMode; -import org.bukkit.entity.Villager; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.player.PlayerInteractEntityEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.inventory.MerchantRecipe; - -public class InteractListener implements Listener { - - private final Challenges plugin = Challenges.getPlugin(); - - @EventHandler - public void onBlockClick(PlayerInteractEvent e) { - if (e.getAction() == Action.RIGHT_CLICK_BLOCK) { - if (!plugin.getTimer().isRunning() && e.getPlayer().getGameMode() != GameMode.CREATIVE) { - e.setCancelled(true); - } - } - } - - @EventHandler - public void onEntityClick(PlayerInteractEntityEvent e) { - if (!plugin.getTimer().isRunning() && e.getPlayer().getGameMode() != GameMode.CREATIVE) { - e.setCancelled(true); - } - - if (Config.getBoolean("disablevillagertradelimits")) { - if (e.getRightClicked() instanceof Villager villager) { - for (MerchantRecipe trade : villager.getRecipes()) { - trade.setMaxUses(Integer.MAX_VALUE); - } - } - } - } -} - diff --git a/src/main/java/de/fanta/challenges/listeners/MinimapListener.java b/src/main/java/de/fanta/challenges/listeners/MinimapListener.java deleted file mode 100644 index 206f2d2..0000000 --- a/src/main/java/de/fanta/challenges/listeners/MinimapListener.java +++ /dev/null @@ -1,32 +0,0 @@ -package de.fanta.challenges.listeners; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.bukkit.events.GetMinimapWorldNameEvent; -import org.bukkit.World; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; - -import java.util.UUID; - -public class MinimapListener implements Listener { - - private static final Challenges plugin = Challenges.getPlugin(); - - @EventHandler - public void getMiniMapWorldName(GetMinimapWorldNameEvent e) { - e.setServerName(plugin.getServerType().getPrefix()); - World world = e.getPlayer().getWorld(); - String worldName; - if (Config.getString("minimap." + world.getName()) != null) { - worldName = Config.getString("minimap." + world.getName()); - } else { - UUID worldUUID = UUID.randomUUID(); - Config.setValue("minimap." + world.getName(), worldUUID.toString(), false); - plugin.saveConfig(); - worldName = worldUUID.toString(); - } - - e.setWorldName(worldName); - } -} diff --git a/src/main/java/de/fanta/challenges/listeners/PlayerListener.java b/src/main/java/de/fanta/challenges/listeners/PlayerListener.java deleted file mode 100644 index 69abd53..0000000 --- a/src/main/java/de/fanta/challenges/listeners/PlayerListener.java +++ /dev/null @@ -1,179 +0,0 @@ -package de.fanta.challenges.listeners; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.ServerType; -import de.fanta.challenges.challenges.ChallengeEvents.BridgeRaceChallengeEvent; -import de.fanta.challenges.events.PlayerCountChangedEvent; -import de.fanta.challenges.scoreboard.ChallengePlayer; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityPickupItemEvent; -import org.bukkit.event.entity.EntityRegainHealthEvent; -import org.bukkit.event.entity.EntityTargetLivingEntityEvent; -import org.bukkit.event.entity.FoodLevelChangeEvent; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.PlayerDropItemEvent; -import org.bukkit.event.player.PlayerItemConsumeEvent; -import org.bukkit.event.player.PlayerMoveEvent; -import org.bukkit.event.player.PlayerPortalEvent; -import org.bukkit.event.player.PlayerRespawnEvent; -import org.kitteh.vanish.event.VanishStatusChangeEvent; -import org.spigotmc.event.player.PlayerSpawnLocationEvent; - -import java.util.Objects; - -import static org.bukkit.Bukkit.getServer; - -public class PlayerListener implements Listener { - - private final Challenges plugin = Challenges.getPlugin(); - - @EventHandler - public void onEntityTarget(EntityTargetLivingEntityEvent e) { - if (!plugin.getTimer().isRunning()) { - e.setCancelled(true); - } - } - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent e) { - if (Objects.equals(Config.getString("event.type"), "deathcounter") && plugin.getTimer().isRunning()) { - plugin.getScoreManager().updateScore(new ChallengePlayer(e.getEntity().getUniqueId()), 1); - } - } - - @EventHandler - public void onFoodChange(FoodLevelChangeEvent e) { - if (!plugin.getTimer().isRunning()) { - e.setCancelled(true); - } - } - - @EventHandler - public void onPickUpItem(EntityPickupItemEvent e) { - if (e.getEntity() instanceof Player player) { - if (!plugin.getTimer().isRunning() && player.getGameMode() != GameMode.CREATIVE) { - e.setCancelled(true); - } - } - } - - @EventHandler - public void onDropItem(PlayerDropItemEvent e) { - Player p = e.getPlayer(); - if (!plugin.getTimer().isRunning() && p.getGameMode() != GameMode.CREATIVE) { - e.setCancelled(true); - } - } - - @EventHandler - public void onPayerMove(PlayerMoveEvent e) { - if (BridgeRaceChallengeEvent.isLoaded()) { - return; - } - - Player player = e.getPlayer(); - Location playerloc = player.getLocation(); - if (!Config.getBoolean("firsttimerstart") && plugin.getServerType() != ServerType.ADVENTURE) { - if (!plugin.getTimer().isRunning() && player.getGameMode() == GameMode.SURVIVAL) { - Location spawn = e.getPlayer().getWorld().getSpawnLocation(); - if (playerloc.distance(spawn) > 20) { - plugin.getScheduler().runAsync(() -> player.teleportAsync(spawn)); - - ChatUtil.sendWarningMessage(player, "Du kommst erst vom Spawn weg, wenn der Timer gestartet wurde!"); - } - } - } - } - - @EventHandler - public void onPlayerRespawn(PlayerRespawnEvent e) { - if (!Config.getBoolean("respawn")) { - ChatUtil.sendTitleToPlayer(e.getPlayer(), Component.text("Du bist gestorben!", ChatUtil.GREEN), Component.text("Du bist nun Zuschauer", ChatUtil.RED), 10, 80, 10, false); - plugin.getScheduler().runDelayedOnEntity(e.getPlayer(), () -> e.getPlayer().setGameMode(GameMode.SPECTATOR), 1); - } - if (Config.getBoolean("nether.enabled")) { - Location spawn = Bukkit.getWorlds().get(1).getSpawnLocation(); - e.setRespawnLocation(spawn); - } - if (!e.isBedSpawn() && !e.isAnchorSpawn() && !Config.getBoolean("nether.enabled")) { - e.setRespawnLocation(getServer().getWorlds().getFirst().getSpawnLocation().add(0.5, 0.0, 0.5)); - } - } - - @EventHandler - public void onPlayerSpawn(PlayerSpawnLocationEvent e) { - if (!e.getPlayer().hasPlayedBefore() && !Config.getBoolean("nether.enabled")) { - e.setSpawnLocation(getServer().getWorlds().getFirst().getSpawnLocation().add(0.5, 0.0, 0.5)); - } - } - - @EventHandler - public void onPlayerPortal(PlayerPortalEvent e) { - Location endspawn = Bukkit.getWorlds().get(2).getSpawnLocation().add(60, -15, 60); - if (plugin.getTimer().isRunning()) { - if (Config.getBoolean("nether.enabled")) { - 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); - e.setCancelled(true); - } - } else { - e.setCancelled(true); - } - } - - @EventHandler - public void vanishToggle(VanishStatusChangeEvent e) { - Player p = e.getPlayer(); - if (e.isVanishing()) { - plugin.getSBManager().removeScoreboard(p); - if (plugin.getCurrentEditor() == p) { - if (plugin.getServerType() != ServerType.CHALLENGE_EVENT) { - plugin.updateEditor(); - } - } - } else { - if (plugin.getServerType() != ServerType.ADVENTURE) { - plugin.getSBManager().setScoreboardtoPlayer(p); - } - if (plugin.getCurrentEditor() == null) { - plugin.setCurrentEditor(p); - } - } - Bukkit.getPluginManager().callEvent(new PlayerCountChangedEvent(Bukkit.getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers())); - } - - @EventHandler - public void onHealing(EntityRegainHealthEvent e) { - if (Config.getBoolean("ultrahardcore")) { - if (e.getEntity() instanceof Player) { - e.setCancelled(true); - } - } - } - - @EventHandler - public void onEat(PlayerItemConsumeEvent e) { - if (Config.getBoolean("ultrahardcore")) { - if (e.getItem().getType() == Material.ENCHANTED_GOLDEN_APPLE || e.getItem().getType() == Material.GOLDEN_APPLE) { - ChatUtil.sendErrorMessage(e.getPlayer(), "Goldäpfel sind in Ultra Hardcore nicht erlaubt!"); - e.setCancelled(true); - } - } - } -} diff --git a/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java b/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java deleted file mode 100644 index b7803d5..0000000 --- a/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java +++ /dev/null @@ -1,152 +0,0 @@ -package de.fanta.challenges.listeners; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.SaveSlot; -import de.fanta.challenges.ServerType; -import de.fanta.challenges.challenges.ChallengeEvents.DeathrunChallengeEvent; -import de.fanta.challenges.events.PlayerCountChangedEvent; -import de.fanta.challenges.events.ServerStatusChangedEvent; -import de.fanta.challenges.scoreboard.ChallengePlayer; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.SaveWorldUtils; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerLoginEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.spigotmc.event.player.PlayerSpawnLocationEvent; - -public class QuitJoinListener implements Listener { - - private final Challenges plugin = Challenges.getPlugin(); - - @EventHandler(priority = EventPriority.MONITOR) - public void onPlayerJoin(PlayerJoinEvent e) { - Player p = e.getPlayer(); - - if (plugin.reset) { - plugin.stopResetTask(); - } - - if (plugin.texturepacklink != null) { - p.setResourcePack(plugin.texturepacklink, ""); - } - - if (!plugin.getVanish().isVanish(p)) { - e.joinMessage(plugin.getPrefixComponent().append(p.name().color(ChatUtil.BLUE).append(Component.text(" hat die Lobby betreten! ", ChatUtil.GREEN).append(Component.text("[" + (Bukkit.getServer().getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers()) + "/" + Bukkit.getServer().getMaxPlayers() + "]", ChatUtil.YELLOW))))); - plugin.addstatisticPlayers(p.getUniqueId()); - if (plugin.getServerType() != ServerType.ADVENTURE) { - if (!DeathrunChallengeEvent.getDeadPlayer().contains(p.getUniqueId())) { - plugin.getScheduler().run(() -> { - plugin.getScoreManager().join(new ChallengePlayer(p.getUniqueId())); - plugin.getSBManager().setScoreboardtoPlayer(p); - plugin.getSBManager().updateEventScoreboard(); - if (!Config.getBoolean("event.teams") && plugin.getScoreManager().getScores() != null && plugin.getScoreManager().getScore(new ChallengePlayer(p.getUniqueId())) == 0) { - plugin.getScoreManager().updateScore(new ChallengePlayer(e.getPlayer().getUniqueId()), 0); - } - }); - } - } - if (plugin.getCurrentEditor() == null) { - plugin.getScheduler().runDelayedOnEntity(p, () -> { - if (p.hasPermission("Challenges.editor")) { - plugin.setCurrentEditor(p); - - } else { - ChatUtil.sendWarningMessage(p, "Es ist aktuell kein Editor in dieser Lobby"); - ChatUtil.sendWarningMessage(p, "Um selbst Editor zu werden musst du VIP sein!"); - } - }, 1L); - } else { - ChatUtil.sendMessage(p, plugin.getCurrentEditor().name().color(ChatUtil.BLUE).append(Component.text(" ist der Editor dieser Lobby!", ChatUtil.GREEN))); - } - } else { - ChatUtil.sendNormalMessage(p, "Du bist im Vanish, niemand weiß, dass du in der Lobby bist."); - } - - - Bukkit.getPluginManager().callEvent(new PlayerCountChangedEvent(Bukkit.getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers())); - } - - @EventHandler - public void onPlayerSpawn(PlayerSpawnLocationEvent e) { - Player p = e.getPlayer(); - if (Config.getBoolean("nether.enabled") && !p.hasPlayedBefore()) { - Location netherspawn = Bukkit.getWorlds().get(1).getSpawnLocation(); - e.setSpawnLocation(netherspawn); - } - } - - @EventHandler - public void onPlayerLogin(PlayerLoginEvent e) { - if (plugin.getServerType() == ServerType.CHALLENGE_EVENT) { - if (!Config.getBoolean("firsttimerstart") && Bukkit.getOnlinePlayers().isEmpty()) { - if (!e.getPlayer().hasPermission("challenges.event")) { - e.setResult(PlayerLoginEvent.Result.KICK_OTHER); - e.kickMessage(Component.text("Aktuell läuft kein Event.")); - } - } else { - if (!plugin.getTimer().isRunning() && Config.getBoolean("firsttimerstart")) { - if (!e.getPlayer().hasPermission("challenges.event")) { - e.setResult(PlayerLoginEvent.Result.KICK_OTHER); - e.kickMessage(Component.text("Das Event wurde pausiert.")); - } - } - } - - } - - if (plugin.isPlayerBanned(e.getPlayer().getUniqueId())) { - e.setResult(PlayerLoginEvent.Result.KICK_OTHER); - e.kickMessage(Component.text("Du wurdest von dieser Lobby gebannt.")); - } - - if (plugin.isWaitingForShutdown()) { - e.setResult(PlayerLoginEvent.Result.KICK_OTHER); - e.kickMessage(Component.text("Der Server wird gerade neu gestartet.")); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerQuit(PlayerQuitEvent e) { - Player player = e.getPlayer(); - - if (plugin.getServerType() != ServerType.CHALLENGE_EVENT) { - if (Bukkit.getOnlinePlayers().size() - 1 == 0) { - plugin.getTimer().stopTimer(); - Challenges.LOGGER.info("Stop Timer " + (Bukkit.getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers())); - } - - if (Bukkit.getServer().getOnlinePlayers().size() - 1 == 0) { - if (!plugin.isWaitingForShutdown()) { - if (Config.getBoolean("firsttimerstart")) { - SaveWorldUtils.saveWorld(plugin.getFirstEditor().getUniqueId().toString(), SaveSlot.SLOT_AUTO); - plugin.startResetTask(); - } else { - plugin.getScheduler().run(() -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "reset confirm")); - } - } - } - - if (player == plugin.getCurrentEditor()) { - plugin.updateEditor(); - } - } - if (!plugin.getVanish().isVanish(player)) { - e.quitMessage(plugin.getPrefixComponent().append(player.name().color(ChatUtil.BLUE).append(Component.text(" hat die Lobby verlassen! ", ChatUtil.RED).append(Component.text("[" + (Bukkit.getServer().getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers() - 1) + "/" + Bukkit.getServer().getMaxPlayers() + "]", ChatUtil.YELLOW))))); - this.plugin.getSBManager().removeScoreboard(player); - - Bukkit.getPluginManager().callEvent(new PlayerCountChangedEvent(Bukkit.getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers() - 1)); - - if (plugin.isWaitingForShutdown() && Bukkit.getOnlinePlayers().size() == 1) { - plugin.getScheduler().runGlobalDelayed(() -> Bukkit.getPluginManager().callEvent(new ServerStatusChangedEvent(false)), 1L); - } - } - } -} diff --git a/src/main/java/de/fanta/challenges/schedular/BukkitScheduler.java b/src/main/java/de/fanta/challenges/schedular/BukkitScheduler.java deleted file mode 100644 index c39a874..0000000 --- a/src/main/java/de/fanta/challenges/schedular/BukkitScheduler.java +++ /dev/null @@ -1,83 +0,0 @@ -package de.fanta.challenges.schedular; - -import de.fanta.challenges.Challenges; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.entity.Entity; - -import java.util.function.Consumer; - -public class BukkitScheduler implements Scheduler { - - private final Challenges plugin; - - public BukkitScheduler(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public void runAsync(Runnable task) { - Bukkit.getScheduler().runTaskAsynchronously(this.plugin, task); - } - - @Override - public void run(Runnable task) { - Bukkit.getScheduler().runTask(this.plugin, task); - } - - @Override - public void runLocal(Location location, Runnable task) { - Bukkit.getScheduler().runTask(this.plugin, task); - } - - @Override - public void runAtChunk(World world, int chunkX, int chunkZ, Runnable task) { - Bukkit.getScheduler().runTask(this.plugin, task); - } - - @Override - public CancellableTask runGlobalDelayed(Runnable task, long delay) { - return Bukkit.getScheduler().runTaskLater(this.plugin, task, delay)::cancel; - } - - @Override - public void runLocalDelayed(Location location, Runnable task, long delay) { - runGlobalDelayed(task, delay); - } - - @Override - public CancellableTask runLocalAtFixedRate(Location location, Runnable task, long delay, long period) { - return runGlobalAtFixedRate(task, delay, period); - } - - @Override - public void runLocalAtFixedRate(Location location, Consumer taskConsumer, long delay, long period) { - runGlobalAtFixedRate(taskConsumer, delay, period); - } - - @Override - public CancellableTask runGlobalAtFixedRate(Runnable task, long delay, long period) { - return Bukkit.getScheduler().runTaskTimer(this.plugin, task, delay, period)::cancel; - } - - @Override - public void runGlobalAtFixedRate(Consumer taskConsumer, long delay, long period) { - Bukkit.getScheduler().runTaskTimer(this.plugin, bukkitTask -> taskConsumer.accept(bukkitTask::cancel), delay, period); - } - - @Override - public CancellableTask runOnEntityAtFixedRate(Entity entity, Runnable task, long delay, long period) { - return runGlobalAtFixedRate(task, delay, period); - } - - @Override - public void runOnEntityAtFixedRate(Entity entity, Consumer taskConsumer, long delay, long period) { - runLocalAtFixedRate(null, taskConsumer, delay, period); - } - - @Override - public void runDelayedOnEntity(Entity entity, Runnable task, long delay) { - Bukkit.getScheduler().scheduleSyncDelayedTask(this.plugin, task, delay); - } -} diff --git a/src/main/java/de/fanta/challenges/schedular/CancellableTask.java b/src/main/java/de/fanta/challenges/schedular/CancellableTask.java deleted file mode 100644 index bf1585e..0000000 --- a/src/main/java/de/fanta/challenges/schedular/CancellableTask.java +++ /dev/null @@ -1,5 +0,0 @@ -package de.fanta.challenges.schedular; - -public interface CancellableTask { - void cancel(); -} diff --git a/src/main/java/de/fanta/challenges/schedular/Scheduler.java b/src/main/java/de/fanta/challenges/schedular/Scheduler.java deleted file mode 100644 index 6d02041..0000000 --- a/src/main/java/de/fanta/challenges/schedular/Scheduler.java +++ /dev/null @@ -1,44 +0,0 @@ -package de.fanta.challenges.schedular; - -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.entity.Entity; - -import java.util.function.Consumer; - -public interface Scheduler { - - void runAsync(Runnable task); - - void run(Runnable task); - - void runLocal(Location location, Runnable task); - - void runAtChunk(World world, int chunkX, int chunkZ, Runnable task); - - CancellableTask runGlobalDelayed(Runnable task, long delay); - - default void runGlobalDelayed(Runnable task) { - runGlobalDelayed(task, 1); - } - - void runLocalDelayed(Location location, Runnable task, long delay); - - default void runLocalDelayed(Runnable task) { - runGlobalDelayed(task, 1); - } - - CancellableTask runLocalAtFixedRate(Location location, Runnable task, long delay, long period); - - void runLocalAtFixedRate(Location location, Consumer taskConsumer, long delay, long period); - - CancellableTask runGlobalAtFixedRate(Runnable task, long delay, long period); - - void runGlobalAtFixedRate(Consumer taskConsumer, long delay, long period); - - CancellableTask runOnEntityAtFixedRate(Entity entity, Runnable task, long delay, long period); - - void runOnEntityAtFixedRate(Entity entity, Consumer taskConsumer, long delay, long period); - - void runDelayedOnEntity(Entity entity, Runnable task, long delay); -} diff --git a/src/main/java/de/fanta/challenges/scoreboard/BukkitScoreBoardManager.java b/src/main/java/de/fanta/challenges/scoreboard/BukkitScoreBoardManager.java deleted file mode 100644 index 4352a3b..0000000 --- a/src/main/java/de/fanta/challenges/scoreboard/BukkitScoreBoardManager.java +++ /dev/null @@ -1,167 +0,0 @@ -package de.fanta.challenges.scoreboard; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.ServerType; -import de.fanta.challenges.teams.ChallengeTeam; -import de.fanta.challenges.teams.TeamUtils; -import de.fanta.challenges.utils.Config; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.NamedTextColor; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.scoreboard.Criteria; -import org.bukkit.scoreboard.DisplaySlot; -import org.bukkit.scoreboard.Objective; -import org.bukkit.scoreboard.RenderType; -import org.bukkit.scoreboard.Score; -import org.bukkit.scoreboard.Scoreboard; -import org.bukkit.scoreboard.Team; - -public class BukkitScoreBoardManager implements ScoreBoardMananger { - - private final Challenges plugin; - private Scoreboard scoreboard; - private Team team; - - private Objective event; - private Objective tabHP; - - public BukkitScoreBoardManager(Challenges plugin) { - this.plugin = plugin; - } - - @Override - public void initScoreboard() { // only possible after first world has loaded - this.scoreboard = Bukkit.getScoreboardManager().getNewScoreboard(); - this.team = scoreboard.registerNewTeam("Player"); - - this.team.color(NamedTextColor.GREEN); - - updateTabHP(); - } - - @Override - public void setScoreboardtoPlayer(Player p) { - if (this.scoreboard == null) { - if (plugin.getServerType() != ServerType.ADVENTURE) { - initScoreboard(); - } - } - - team.addEntry(p.getName()); - - p.setScoreboard(scoreboard); - } - - @Override - public void setScoreboardtoTeam(ChallengeTeam challengeTeam) { - if (this.scoreboard == null) { - if (plugin.getServerType() != ServerType.ADVENTURE) { - initScoreboard(); - } - } - - team.addEntry(challengeTeam.getChatColor() + challengeTeam.getName()); - } - - @Override - public void removeScoreboard(Player p) { - if (team != null) { - if (plugin.getServerType() != ServerType.ADVENTURE) { - team.removeEntry(p.getName()); - p.setScoreboard(scoreboard); - } - } - } - - @Override - public void removeAllFromScoreboard() { - for (String s : team.getEntries()) { - team.removeEntry(s); - } - } - - @Override - public int countScoreboardPlayers() { - return team.getEntries().size(); - } - - @Override - public void updateTabHP() { - if (plugin.getServerType() == ServerType.ADVENTURE) { - return; - } - if (Config.getBoolean("tabhp")) { - if (this.tabHP == null) { - tabHP = scoreboard.registerNewObjective("health", Criteria.HEALTH, Component.empty()); - } - tabHP.setRenderType(RenderType.HEARTS); - tabHP.setDisplaySlot(DisplaySlot.PLAYER_LIST); - } else { - if (tabHP != null) { - tabHP.unregister(); - tabHP = null; - } - } - } - - @Override - public void updateEventScoreboard() { - if (plugin.getServerType() == ServerType.ADVENTURE) { - return; - } - if (Config.getBoolean("event.enabled")) { - if (!Config.getBoolean("event.teams")) { - this.team.color(NamedTextColor.BLUE); - this.team.displayName(Component.text("Event")); - - if (this.event == null) { - event = this.scoreboard.registerNewObjective("event", Criteria.DUMMY, Component.text("Challenges", NamedTextColor.GOLD)); - } - event.setDisplaySlot(DisplaySlot.SIDEBAR); - event.displayName(team.prefix().append(team.displayName()).color(team.color())); - event.setRenderType(RenderType.INTEGER); - - for (String entry : team.getEntries()) { - if (!event.getScore(entry).isScoreSet()) { - event.getScore(entry).setScore(0); - } - } - } else { - this.team.color(NamedTextColor.BLUE); - this.team.displayName(Component.text("Team Event")); - - event = TeamUtils.getTeamscoreboardObjective(); - - event.setDisplaySlot(DisplaySlot.SIDEBAR); - event.displayName(team.prefix().append(team.displayName()).color(team.color())); - event.setRenderType(RenderType.INTEGER); - } - - - } else { - if (event != null) { - event.unregister(); - event = null; - } - this.team.color(NamedTextColor.GREEN); - this.team.displayName(Component.text("Player")); - } - } - - @Override - public void updateEventScore(Scorable s) { - if (plugin.getServerType() == ServerType.ADVENTURE) { - return; - } - if (this.event != null) { - Score score = event.getScore(s.getIdentifier()); - score.setScore(plugin.getScoreManager().getScore(s)); - } - } - - @Override - public Scoreboard getScoreboard() { - return scoreboard; - } -} diff --git a/src/main/java/de/fanta/challenges/scoreboard/ChallengePlayer.java b/src/main/java/de/fanta/challenges/scoreboard/ChallengePlayer.java deleted file mode 100644 index 5547476..0000000 --- a/src/main/java/de/fanta/challenges/scoreboard/ChallengePlayer.java +++ /dev/null @@ -1,48 +0,0 @@ -package de.fanta.challenges.scoreboard; - -import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; -import org.bukkit.entity.Player; -import org.bukkit.scoreboard.Scoreboard; - -import java.util.UUID; - -public class ChallengePlayer implements Scorable { - - private final UUID uuid; - - public ChallengePlayer(UUID uuid) { - this.uuid = uuid; - } - - public int hashCode() { - return uuid.hashCode(); - } - - public boolean equals(Object other) { - if (!(other instanceof ChallengePlayer cp)) { - return false; - } - return this.uuid.equals(cp.uuid); - } - - @Override - public void setScoreboard(Scoreboard scoreboard) { - Player player = Bukkit.getPlayer(uuid); - if (player != null) { - player.setScoreboard(scoreboard); - } - } - - @Override - public String getIdentifier() { - OfflinePlayer player = Bukkit.getOfflinePlayer(uuid); - return player.getName(); - } - - @Override - public String getName() { - OfflinePlayer player = Bukkit.getOfflinePlayer(uuid); - return player.getName(); - } -} diff --git a/src/main/java/de/fanta/challenges/scoreboard/Scorable.java b/src/main/java/de/fanta/challenges/scoreboard/Scorable.java deleted file mode 100644 index 0421533..0000000 --- a/src/main/java/de/fanta/challenges/scoreboard/Scorable.java +++ /dev/null @@ -1,13 +0,0 @@ -package de.fanta.challenges.scoreboard; - -import org.bukkit.scoreboard.Scoreboard; - -public interface Scorable { - - void setScoreboard(Scoreboard scoreboard); - - String getIdentifier(); - - String getName(); - -} diff --git a/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardMananger.java b/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardMananger.java deleted file mode 100644 index c67882a..0000000 --- a/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardMananger.java +++ /dev/null @@ -1,19 +0,0 @@ -package de.fanta.challenges.scoreboard; - -import de.fanta.challenges.teams.ChallengeTeam; -import org.bukkit.entity.Player; -import org.bukkit.scoreboard.Scoreboard; - -public interface ScoreBoardMananger { - - void initScoreboard(); - void setScoreboardtoPlayer(Player p); - void setScoreboardtoTeam(ChallengeTeam challengeTeam); - void removeScoreboard(Player p); - void removeAllFromScoreboard(); - int countScoreboardPlayers(); - void updateTabHP(); - void updateEventScoreboard(); - void updateEventScore(Scorable s); - Scoreboard getScoreboard(); -} diff --git a/src/main/java/de/fanta/challenges/scoreboard/ScoreManager.java b/src/main/java/de/fanta/challenges/scoreboard/ScoreManager.java deleted file mode 100644 index 2d09631..0000000 --- a/src/main/java/de/fanta/challenges/scoreboard/ScoreManager.java +++ /dev/null @@ -1,342 +0,0 @@ -package de.fanta.challenges.scoreboard; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.challenges.ChallengeEvents.SammelFieberChallengeEvent; -import de.fanta.challenges.challenges.ChallengeEvents.TimeChallengeEvent; -import de.fanta.challenges.guis.eventgui.SammelFieberSettingsGui; -import de.fanta.challenges.teams.ChallengeTeam; -import de.fanta.challenges.teams.TeamUtils; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.iani.cubesideutils.HastebinUtil; -import de.iani.cubesideutils.StringUtil; -import de.iani.playerUUIDCache.CachedPlayer; -import org.bukkit.entity.Player; -import org.bukkit.scoreboard.Team; - -import javax.annotation.Nullable; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.UUID; -import java.util.function.IntPredicate; -import java.util.logging.Level; -import java.util.stream.Collectors; - -public class ScoreManager { - - public static class ScoreData { - private final Scorable scorable; - private int score; - private int position; - private int index; - - public ScoreData(Scorable scorable, int index) { - this.scorable = scorable; - this.index = index; - - this.score = 0; - this.position = 1; - } - - public Scorable getScorable() { - return scorable; - } - - public int getPostition() { - return position; - } - - public void setPosition(int position) { - this.position = position; - } - - public int getIndex() { - return index; - } - - public void setIndex(int index) { - this.index = index; - } - - public int getScore() { - return score; - } - - public void setScore(int score) { - this.score = score; - } - - public void changeScore(int difference) { - this.score += difference; - } - } - - private final Challenges plugin; - private final Map scores; - private final List positions; - - public ScoreManager(Challenges plugin) { - this.plugin = plugin; - this.scores = new HashMap<>(); - this.positions = new ArrayList<>(); - } - - public void join(Scorable s) { - if (!scores.containsKey(s)) { - ScoreData data = new ScoreData(s, positions.size()); - scores.put(s, data); - positions.add(data); - } - } - - public void updateScore(Scorable s, int difference) { - if (difference == 0) { - return; - } - - ScoreData data = scores.get(s); - data.changeScore(difference); - - int current = data.getIndex(); - int dir = (int) Math.signum(difference * -1); - - IntPredicate forCondition = (dir == -1) ? curr -> curr > 0 && positions.get(curr - 1).getScore() < data.getScore() : curr -> curr < positions.size() - 1 && positions.get(curr + 1).getScore() > data.getScore(); - - int startingIndex = data.getIndex(); - - // swap with neighbors as long as we are now better/worse then them - for (; forCondition.test(current); current += dir) { - ScoreData other = positions.get(current + dir); - - positions.set(current + dir, data); - positions.set(current, other); - data.setIndex(current + dir); - other.setIndex(current); - } - - // update positions - int endIndex = data.getIndex(); - int i = Math.min(startingIndex, endIndex); - - ScoreData curr; - int lastPosition; - int lastScore; - if (i == 0) { - curr = positions.getFirst(); - curr.setPosition(1); - lastPosition = 1; - lastScore = curr.getScore(); - i++; - } else { - curr = positions.get(i - 1); - lastPosition = curr.getPostition(); - lastScore = curr.getScore(); - } - - for (; i < positions.size(); i++) { - curr = positions.get(i); - int correctPosition = (curr.getScore() == lastScore) ? lastPosition : lastPosition + 1; - if (curr.getPostition() == correctPosition && i > Math.max(startingIndex, endIndex)) { - break; - } - - curr.setPosition(correctPosition); - lastPosition = correctPosition; - lastScore = curr.getScore(); - } - - this.plugin.getSBManager().updateEventScore(s); - } - - public void setScore(Scorable s, int score) { - int diff = score - getScore(s); - updateScore(s, diff); - } - - public int getScore(Scorable s) { - return scores.get(s).getScore(); - } - - public int getPosition(Scorable s) { - return scores.get(s).getPostition(); - } - - public Set getByPositon(int position) { - if (positions.isEmpty() || positions.getLast().getPostition() < position) { - return Collections.emptySet(); - } - - int start = position - 1; - int end = positions.size(); - - int found; - while (true) { - int middle = start + (end - start) / 2; - ScoreData current = positions.get(middle); - if (current.getPostition() == position) { - found = middle; - break; - } else if (start >= end - 1) { - plugin.getLogger().log(Level.SEVERE, "position not found but expected to be present: " + position); - plugin.getLogger().log(Level.SEVERE, positions.toString()); - return Collections.emptySet(); - } else if (current.getPostition() > position) { - end = middle; - } else { - start = middle; - } - } - - start = end = found; - for (; start > 0 && positions.get(start - 1).getPostition() == position; start--) { - } - for (; end < positions.size() - 2 && positions.get(end + 1).getPostition() == position; end++) { - } - - return positions.subList(start, end + 1).stream().map(ScoreData::getScorable).collect(Collectors.toSet()); - } - - public void saveScores(@Nullable Player player) { - saveScores(player, 0); - } - - public void saveScores(@Nullable Player player, int minScore) { - StringBuilder sb = new StringBuilder(); - String ownerName = player != null ? player.getName() : "Console"; - SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy - HH:mm:ss"); - Date currentTime = new Date(); - - sb.append("Challenges Event -> ").append(StringUtil.capitalizeFirstLetter(Config.getString("event.type"), false)).append('\n'); - sb.append("=".repeat(20)).append('\n'); - sb.append("Erstellt von: ").append(ownerName).append('\n'); - sb.append("Erstellt am: ").append(formatter.format(currentTime)).append('\n'); - sb.append("Timer: ").append(plugin.getTimer().formatTime()).append('\n'); - if (Objects.equals(Config.getString("event.type"), "sammelfieber")) { - if (SammelFieberSettingsGui.getEventItem() != null) { - sb.append("Item: ").append(SammelFieberSettingsGui.getEventItem().getType().name()).append('\n'); - sb.append("Cubes pro Item: ").append(SammelFieberSettingsGui.MONEY).append('\n'); - sb.append("Items abgegeben: ").append(SammelFieberChallengeEvent.getCount()).append('\n'); - sb.append("Cubes gesammt: ").append(SammelFieberSettingsGui.MONEY * SammelFieberChallengeEvent.getCount()).append('\n'); - sb.append("Cubes pro Spieler: ").append(SammelFieberSettingsGui.MONEY * SammelFieberChallengeEvent.getCount() / scores.size()).append('\n'); - } - } - sb.append("=".repeat(20)).append('\n'); - sb.append("Teilnehmer (").append(this.scores.size()).append("):\n"); - - if (!Objects.equals(Config.getString("event.type"), "time")) { - if (this.scores.isEmpty()) { - sb.append(" Das Event hatte keine Teilnehmer!\n"); - } else { - if (Config.getBoolean("event.teams")) { - for (ScoreData entry : positions) { - ChallengeTeam challengeTeam = TeamUtils.getTeam(entry.getScorable().getName()); - if (challengeTeam != null) { - Team team = TeamUtils.getScoreboard().getTeam(challengeTeam.getName()); - if (team != null) { - sb.append(entry.getPostition()).append(". ").append(entry.getScorable().getName()).append(" (").append(team.getEntries().toString().replace("[", "").replace("]", "")).append(")").append(" ").append(entry.getScore()).append("\n"); - } - } - } - } else { - if (Config.getBoolean("event.tournament")) { - HashMap tournamentScores = getTournamentScores(new ArrayList<>(positions), minScore); - for (ScoreData entry : positions) { - sb.append(entry.getPostition()).append(". ").append(entry.getScorable().getName()).append(" ").append(entry.getScore()).append(" (").append(tournamentScores.getOrDefault(entry.getScorable(), 0)).append(")").append("\n"); - } - } else { - for (ScoreData entry : positions) { - sb.append(entry.getPostition()).append(". ").append(entry.getScorable().getName()).append(" ").append(entry.getScore()).append("\n"); - } - } - } - } - } else { - HashMap times = TimeChallengeEvent.getPlayerPlayTimes(); - for (UUID uuid : times.keySet()) { - CachedPlayer cp = plugin.getPlayerUUIDCache().getPlayer(uuid); - sb.append(cp != null ? cp.getName() : uuid.toString()).append(": ").append(formatTime(times.get(uuid))).append("\n"); - } - } - - HastebinUtil.paste(sb.toString(), new HastebinUtil.PasteCompletedListener() { - @Override - public void onSuccess(String url) { - if (player != null) { - ChatUtil.sendNormalMessage(player, "Event Log gepastet: " + url); - } - plugin.getLogger().log(Level.SEVERE, "Event Log gepastet: " + url); - } - - @Override - public void onError(Exception e) { - if (player != null) { - ChatUtil.sendErrorMessage(player, "Paste konnte nicht erstellt werden"); - } - plugin.getLogger().log(Level.SEVERE, "Could not paste event log", e); - plugin.getLogger().log(Level.SEVERE, "Log Score String", sb.toString()); - } - }); - } - - public void resetScores() { - this.scores.clear(); - plugin.getSBManager().updateEventScoreboard(); - } - - public Map getScores() { - return scores; - } - - public List getPositions() { - return positions; - } - - public HashMap getTournamentScores(List scoreDataList, int minScore) { - HashMap tournamentScores = new HashMap<>(); - List newScoreDataList = new ArrayList<>(); - - for (ScoreData scoreData : scoreDataList) { - int score = scoreData.getScore(); - if (score >= minScore) { - newScoreDataList.add(scoreData); - } - } - - - int length = newScoreDataList.size(); - if (length > 0) { - int lastPostition = newScoreDataList.get(length - 1).getPostition() - 1; - int threePoints = Math.round((lastPostition + 1 - 3) / 3.0f + 3); - int twoPoints = Math.round((lastPostition + 1 - 3) / 3.0f * 2 + 3); - for (ScoreData scoreData : newScoreDataList) { - Scorable scorable = scoreData.getScorable(); - int pos = scoreData.getPostition() - 1; - if (pos < 3) { - tournamentScores.put(scorable, 6 - pos); - } else if (pos < threePoints) { - tournamentScores.put(scorable, 3); - } else if (pos < twoPoints) { - tournamentScores.put(scorable, 2); - } else { - tournamentScores.put(scorable, 1); - } - } - } - return tournamentScores; - } - - public String formatTime(long time) { - String formattime = StringUtil.formatTimespan((time / 1000) * 1000, " Tage, ", ":", "", "", "", ":", false, true); - if (formattime.startsWith("1 Tage")) { - return StringUtil.formatTimespan((time / 1000) * 1000, " Tag, ", ":", "", "", "", ":", false, true); - } - return formattime; - } -} diff --git a/src/main/java/de/fanta/challenges/teams/ChallengeTeam.java b/src/main/java/de/fanta/challenges/teams/ChallengeTeam.java deleted file mode 100644 index a49ac69..0000000 --- a/src/main/java/de/fanta/challenges/teams/ChallengeTeam.java +++ /dev/null @@ -1,82 +0,0 @@ -package de.fanta.challenges.teams; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.guis.BackpackGui; -import de.fanta.challenges.scoreboard.Scorable; -import de.fanta.challenges.utils.Config; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.NamedTextColor; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.OfflinePlayer; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.scoreboard.Scoreboard; - -public class ChallengeTeam implements Scorable { - private String name; - - private final NamedTextColor chatColor; - - private Location spawn; - - private final ItemStack displayItem; - - private int score; - - private final BackpackGui backpack; - - public ChallengeTeam(String name, NamedTextColor chatColor, ItemStack displayItem) { - this.name = name; - this.chatColor = chatColor; - this.displayItem = displayItem; - this.backpack = new BackpackGui(Config.getInt("backpack_size") * 9, Challenges.getPlugin().getGuiPrefix().append(Component.text(" >> " + name))); - } - - public String getName() { - return name; - } - - public NamedTextColor getChatColor() { - return chatColor; - } - - public Location getSpawn() { - return spawn; - } - - public int getScore() { - return score; - } - - public void setName(String name) { - this.name = name; - } - - public void setSpawn(Location spawn) { - this.spawn = spawn; - } - - public ItemStack getDisplayItem() { - return displayItem; - } - - @Override - public void setScoreboard(Scoreboard scoreboard) { - for (OfflinePlayer pp : TeamUtils.getPlayersInTeam(this)) { - Player tempPlayer = Bukkit.getPlayer(pp.getUniqueId()); - if (tempPlayer != null && tempPlayer.isOnline()) { - tempPlayer.setScoreboard(scoreboard); - } - } - } - - @Override - public String getIdentifier() { - return getChatColor() + getName(); - } - - public BackpackGui getBackpack() { - return backpack; - } -} diff --git a/src/main/java/de/fanta/challenges/teams/TeamListener.java b/src/main/java/de/fanta/challenges/teams/TeamListener.java deleted file mode 100644 index 705b34f..0000000 --- a/src/main/java/de/fanta/challenges/teams/TeamListener.java +++ /dev/null @@ -1,220 +0,0 @@ -package de.fanta.challenges.teams; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.ServerType; -import de.fanta.challenges.guis.eventgui.TeamSelectGUI; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import net.kyori.adventure.text.Component; -import org.bukkit.GameMode; -import org.bukkit.Location; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryDragEvent; -import org.bukkit.event.inventory.InventoryMoveItemEvent; -import org.bukkit.event.player.PlayerDropItemEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerLoginEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.event.player.PlayerRespawnEvent; -import org.bukkit.event.player.PlayerSwapHandItemsEvent; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -import java.util.HashMap; -import java.util.UUID; - -public class TeamListener implements Listener { - - private static final HashMap playerTeams = new HashMap<>(); - private final Challenges plugin = Challenges.getPlugin(); - - @EventHandler - public void onSwapItem(PlayerSwapHandItemsEvent e) { - if (plugin.getServerType() == ServerType.ADVENTURE) { - return; - } - Player p = e.getPlayer(); - ItemStack stack = p.getInventory().getItemInMainHand(); - ItemMeta meta = stack.getItemMeta(); - if (meta != null && meta.getPersistentDataContainer().has(TeamUtils.getSelectKey())) { - e.setCancelled(true); - } - } - - @EventHandler - public void onDrop(PlayerDropItemEvent e) { - if (plugin.getServerType() == ServerType.ADVENTURE) { - return; - } - ItemStack stack = e.getItemDrop().getItemStack(); - ItemMeta meta = stack.getItemMeta(); - if (meta != null && meta.getPersistentDataContainer().has(TeamUtils.getSelectKey())) { - e.setCancelled(true); - } - } - - @EventHandler - public void onItemMove(InventoryMoveItemEvent e) { - if (plugin.getServerType() == ServerType.ADVENTURE) { - return; - } - ItemStack stack = e.getItem(); - ItemMeta meta = stack.getItemMeta(); - if (meta != null && meta.getPersistentDataContainer().has(TeamUtils.getSelectKey())) { - e.setCancelled(true); - } - } - - @EventHandler - public void onItemClick(PlayerInteractEvent e) { - if (plugin.getServerType() == ServerType.ADVENTURE) { - return; - } - Player p = e.getPlayer(); - ItemStack stack = p.getInventory().getItemInMainHand(); - ItemMeta meta = stack.getItemMeta(); - if (meta != null && meta.getPersistentDataContainer().has(TeamUtils.getSelectKey())) { - TeamSelectGUI.openTeamSelectGui(p); - } - } - - @EventHandler - public void onPlace(BlockPlaceEvent e) { - if (plugin.getServerType() == ServerType.ADVENTURE) { - return; - } - Player p = e.getPlayer(); - ItemStack stack = p.getInventory().getItemInMainHand(); - ItemMeta meta = stack.getItemMeta(); - if (meta != null && meta.getPersistentDataContainer().has(TeamUtils.getSelectKey())) { - e.setCancelled(true); - } - } - - @EventHandler - public void onDrag(InventoryDragEvent e) { - if (plugin.getServerType() == ServerType.ADVENTURE) { - return; - } - ItemStack stack = e.getCursor(); - if (stack != null) { - ItemMeta meta = stack.getItemMeta(); - if (meta != null && meta.getPersistentDataContainer().has(TeamUtils.getSelectKey())) { - e.setCancelled(true); - } - } - } - - @EventHandler - public void onClick(InventoryClickEvent e) { - if (plugin.getServerType() == ServerType.ADVENTURE) { - return; - } - ItemStack stack = e.getCurrentItem(); - if (stack != null) { - ItemMeta meta = stack.getItemMeta(); - if (meta != null && meta.getPersistentDataContainer().has(TeamUtils.getSelectKey())) { - e.setCancelled(true); - } - } - } - - @EventHandler(priority = EventPriority.MONITOR) - public void onJoin(PlayerJoinEvent e) { - if (plugin.getServerType() == ServerType.ADVENTURE) { - return; - } - Inventory inventory = e.getPlayer().getInventory(); - if (Config.getBoolean("event.teams") && Config.getBoolean("event.teamselect") && !plugin.getTimer().isRunning()) { - inventory.setItem(8, TeamUtils.selctItem()); - } else { - inventory.removeItem(TeamUtils.selctItem()); - } - - if (Config.getBoolean("event.teams") && !Config.getBoolean("event.autoteams") && plugin.getTimer().isRunning() && !playerTeams.containsKey(e.getPlayer().getUniqueId())) { - e.getPlayer().setGameMode(GameMode.SPECTATOR); - ChatUtil.sendNormalMessage(e.getPlayer(), "Du bist nur zuschauer diese Runde."); - return; - } - - if (Config.getBoolean("event.teams") && plugin.getTimer().isRunning()) { - if (!plugin.getVanish().isVanish(e.getPlayer())) { - if (TeamUtils.getPlayerTeam(e.getPlayer()) == null) { - if (playerTeams.containsKey(e.getPlayer().getUniqueId())) { - TeamUtils.selectTeam(e.getPlayer(), playerTeams.get(e.getPlayer().getUniqueId())); - } else { - if (Config.getBoolean("event.autoteams") && e.getPlayer().getGameMode() == GameMode.SURVIVAL) { - TeamUtils.setAllPlayerWithoutTeamToTeam(); - plugin.getScoreManager().updateScore(TeamUtils.getPlayerTeam(e.getPlayer()), 0); - if (TeamUtils.getPlayerTeam(e.getPlayer()) != null && TeamUtils.getPlayerTeam(e.getPlayer()).getSpawn() != null) { - e.getPlayer().teleportAsync(TeamUtils.getPlayerTeam(e.getPlayer()).getSpawn()); - } - } - } - } - } - } - if (Config.getBoolean("event.teams") && plugin.getScoreManager().getScores() != null && plugin.getScoreManager().getScore(TeamUtils.getPlayerTeam(e.getPlayer())) == 0) { - plugin.getScoreManager().updateScore(TeamUtils.getPlayerTeam(e.getPlayer()), 0); - } - } - - @EventHandler - public void onDeath(PlayerRespawnEvent e) { - if (plugin.getServerType() == ServerType.ADVENTURE) { - return; - } - Player p = e.getPlayer(); - - plugin.getScheduler().runDelayedOnEntity(p, () -> { - ChallengeTeam team = TeamUtils.getPlayerTeam(p); - if (team == null) { - return; - } - - Location location = team.getSpawn(); - - if (location == null) { - return; - } - - p.teleportAsync(location); - }, 1L); - } - - @EventHandler - public void onLogin(PlayerLoginEvent e) { - if (plugin.getServerType() == ServerType.ADVENTURE) { - return; - } - if (Config.getBoolean("event.teams") && !Config.getBoolean("event.autoteams") && plugin.getTimer().isRunning()) { - if (e.getPlayer().hasPermission("challenges.event")) { - return; - } - if (!playerTeams.containsKey(e.getPlayer().getUniqueId())) { - e.setResult(PlayerLoginEvent.Result.KICK_OTHER); - e.kickMessage(Component.text("Bei diesem Event kannst du nicht nach joinen.")); - } - } - } - - @EventHandler - public void onDisconect(PlayerQuitEvent e) { - if (plugin.getServerType() == ServerType.ADVENTURE) { - return; - } - if (Config.getBoolean("event.teams") && plugin.getTimer().isRunning()) { - ChallengeTeam team = TeamUtils.getPlayerTeam(e.getPlayer()); - if (team != null) { - playerTeams.put(e.getPlayer().getUniqueId(), team); - } - } - } -} diff --git a/src/main/java/de/fanta/challenges/teams/TeamUtils.java b/src/main/java/de/fanta/challenges/teams/TeamUtils.java deleted file mode 100644 index 1eda5ab..0000000 --- a/src/main/java/de/fanta/challenges/teams/TeamUtils.java +++ /dev/null @@ -1,283 +0,0 @@ -package de.fanta.challenges.teams; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.guis.eventgui.TeamSelectGUI; -import de.fanta.challenges.utils.ChatUtil; -import de.iani.playerUUIDCache.CachedPlayer; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.NamedTextColor; -import org.bukkit.Color; -import org.bukkit.GameMode; -import org.bukkit.Material; -import org.bukkit.NamespacedKey; -import org.bukkit.OfflinePlayer; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemFlag; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.LeatherArmorMeta; -import org.bukkit.persistence.PersistentDataType; -import org.bukkit.scoreboard.Criteria; -import org.bukkit.scoreboard.DisplaySlot; -import org.bukkit.scoreboard.Objective; -import org.bukkit.scoreboard.Scoreboard; -import org.bukkit.scoreboard.Team; -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Set; -import java.util.UUID; - -public class TeamUtils { - - private static final HashMap playerTeams = new HashMap<>(); - private static final NamespacedKey selectKey = new NamespacedKey(Challenges.getPlugin(), "selectitem"); - private static ChallengeTeam[] teams; - private static int teamSize; - private static Scoreboard scoreboard; - private static Objective teamscoreboardObjective; - - private static ChallengeTeam createDefaultTeam(int nr) { - if (nr == 0) { - return new ChallengeTeam("Schwarz", NamedTextColor.BLACK, createDisplayItem(Color.fromRGB(0, 0, 0), NamedTextColor.BLACK, "Schwarz")); - } - if (nr == 1) { - return new ChallengeTeam("Dunkel-Blau", NamedTextColor.DARK_BLUE, createDisplayItem(Color.fromRGB(0, 0, 170), NamedTextColor.DARK_BLUE, "Dunkel-Blau")); - } - if (nr == 2) { - return new ChallengeTeam("Dunkel-Grün", NamedTextColor.DARK_GREEN, createDisplayItem(Color.fromRGB(0, 170, 0), NamedTextColor.DARK_GREEN, "Dunkel-Grün")); - } - if (nr == 3) { - return new ChallengeTeam("Türkis", NamedTextColor.DARK_AQUA, createDisplayItem(Color.fromRGB(0, 170, 170), NamedTextColor.DARK_AQUA, "Türkis")); - } - if (nr == 4) { - return new ChallengeTeam("Dunkel-Rot", NamedTextColor.DARK_RED, createDisplayItem(Color.fromRGB(170, 0, 0), NamedTextColor.DARK_RED, "Dunkel-Rot")); - } - if (nr == 5) { - return new ChallengeTeam("Lila", NamedTextColor.DARK_PURPLE, createDisplayItem(Color.fromRGB(170, 0, 170), NamedTextColor.DARK_PURPLE, "Lila")); - } - if (nr == 6) { - return new ChallengeTeam("Gold", NamedTextColor.GOLD, createDisplayItem(Color.fromRGB(255, 170, 0), NamedTextColor.GOLD, "Gold")); - } - if (nr == 7) { - return new ChallengeTeam("Grau", NamedTextColor.GRAY, createDisplayItem(Color.fromRGB(170, 170, 170), NamedTextColor.GRAY, "Grau")); - } - if (nr == 8) { - return new ChallengeTeam("Dunkel-Grau", NamedTextColor.DARK_GRAY, createDisplayItem(Color.fromRGB(85, 85, 85), NamedTextColor.DARK_GRAY, "Dunkel-Grau")); - } - if (nr == 9) { - return new ChallengeTeam("Blau", NamedTextColor.BLUE, createDisplayItem(Color.fromRGB(85, 85, 255), NamedTextColor.BLUE, "Blau")); - } - if (nr == 10) { - return new ChallengeTeam("Grün", NamedTextColor.GREEN, createDisplayItem(Color.fromRGB(85, 255, 85), NamedTextColor.GREEN, "Grün")); - } - if (nr == 11) { - return new ChallengeTeam("Hell-Blau", NamedTextColor.AQUA, createDisplayItem(Color.fromRGB(85, 255, 255), NamedTextColor.AQUA, "Hell-Blau")); - } - if (nr == 12) { - return new ChallengeTeam("Rot", NamedTextColor.RED, createDisplayItem(Color.fromRGB(255, 85, 85), NamedTextColor.RED, "Rot")); - } - if (nr == 13) { - return new ChallengeTeam("Pink", NamedTextColor.LIGHT_PURPLE, createDisplayItem(Color.fromRGB(255, 85, 255), NamedTextColor.LIGHT_PURPLE, "Pink")); - } - if (nr == 14) { - return new ChallengeTeam("Gelb", NamedTextColor.YELLOW, createDisplayItem(Color.fromRGB(255, 255, 85), NamedTextColor.YELLOW, "Gelb")); - } - - return new ChallengeTeam("Team_" + nr, NamedTextColor.WHITE, createDisplayItem(Color.WHITE, NamedTextColor.WHITE, "Team " + nr)); - } - - public static void setTeamCount(int teamcount) { - ChallengeTeam[] oldTeams = teams; - teams = new ChallengeTeam[teamcount]; - for (int i = 0; i < teamcount; i++) { - teams[i] = (oldTeams != null && oldTeams.length > i && oldTeams[i] != null) ? oldTeams[i] : createDefaultTeam(i); - } - createScoreBoardTeams(); - TeamSelectGUI.buildTeamSelectInventory(); - TeamSelectGUI.updateTeamSelectGui(); - } - - private static ItemStack createDisplayItem(Color color, NamedTextColor chatColor, String teamName) { - ItemStack displayItem = new ItemStack(Material.LEATHER_HELMET, 1); - LeatherArmorMeta meta = (LeatherArmorMeta) displayItem.getItemMeta(); - meta.setColor(color); - meta.displayName(Component.text(teamName, chatColor)); - meta.addItemFlags(ItemFlag.HIDE_DYE); - displayItem.setItemMeta(meta); - return displayItem; - } - - - public static int getTeamSize() { - return teamSize; - } - - public static void setTeamSize(int size) { - teamSize = size; - } - - public static ChallengeTeam[] getTeams() { - return teams; - } - - public static ItemStack selctItem() { - ItemStack stack = new ItemStack(Material.LIME_BED); - ItemMeta meta = stack.getItemMeta(); - meta.displayName(Component.text("Team Auswahl", ChatUtil.GREEN)); - meta.getPersistentDataContainer().set(selectKey, PersistentDataType.STRING, "SelectTool"); - stack.setItemMeta(meta); - - - return stack; - } - - public static ChallengeTeam getTeam(int nr) { - return nr >= 0 && nr < teams.length ? teams[nr] : null; - } - - public static ChallengeTeam getTeam(String name) { - ChallengeTeam team = null; - for (ChallengeTeam t : teams) { - if (name.equalsIgnoreCase(t.getName())) { - team = t; - } - } - return team; - } - - public static ChallengeTeam getPlayerTeam(OfflinePlayer player) { - ChallengeTeam team = null; - if (TeamUtils.getTeams() != null) { - for (ChallengeTeam challengeTeam : TeamUtils.getTeams()) { - if (challengeTeam != null) { - for (OfflinePlayer pp : getPlayersInTeam(challengeTeam)) { - if (pp == player) { - team = challengeTeam; - break; - } - } - } - } - } - - return team; - } - - public static @NotNull Collection getPlayersInTeam(ChallengeTeam team) { - Collection players = new ArrayList<>(); - Team scoreTeam = TeamUtils.getScoreboard().getTeam(team.getName()); - if (scoreTeam == null) { - return players; - } - Set entries = scoreTeam.getEntries(); - entries.forEach(string -> { - CachedPlayer cachedPlayer = Challenges.getPlugin().playerUUIDCache.getPlayer(string); - players.add(cachedPlayer); - }); - - return players; - } - - public static void createScoreBoardTeams() { - if (Challenges.getPlugin().getSBManager().getScoreboard() instanceof Scoreboard currentScore) { - scoreboard = currentScore; - if (teamscoreboardObjective == null) { - teamscoreboardObjective = scoreboard.registerNewObjective("teams", Criteria.DUMMY, Component.text("Event")); - teamscoreboardObjective.displayName(Component.text("Event")); - teamscoreboardObjective.setDisplaySlot(DisplaySlot.SIDEBAR); - } - Team[] scoreboardTeams = new Team[teams.length]; - for (int i = 0; i < teams.length; i++) { - ChallengeTeam t = getTeam(i); - if (scoreboardTeams[i] == null) { - if (scoreboard.getTeam(t.getName()) == null) { - scoreboardTeams[i] = scoreboard.registerNewTeam(t.getName()); - scoreboardTeams[i].prefix(Component.empty().color(t.getChatColor())); - scoreboardTeams[i].color(t.getChatColor()); - scoreboardTeams[i].setAllowFriendlyFire(false); - scoreboardTeams[i].setOption(Team.Option.COLLISION_RULE, Team.OptionStatus.FOR_OWN_TEAM); - } - } - } - } - } - - public static void selectTeam(Player player, ChallengeTeam team) { - ChallengeTeam oldteam = playerTeams.get(player.getUniqueId()); - if (team != null && !Challenges.getPlugin().getConfig().getBoolean("event.teams")) { - ChatUtil.sendErrorMessage(player, "In dieser Arena können keine Teams gewählt werden!"); - return; - } - if (team != null && oldteam == team) { - ChatUtil.sendMessage(player, Component.text("Du bist bereits in Team ", ChatUtil.GREEN).append(Component.text(team.getName(), team.getChatColor()).append(Component.text(".", ChatUtil.GREEN)))); - Team scoreboardteam = scoreboard.getTeam(team.getName()); - if (scoreboardteam != null && !scoreboardteam.getEntries().contains(player.getName())) { - scoreboardteam.addPlayer(player); - } - return; - } - int count = Collections.frequency(new ArrayList<>(playerTeams.values()), team); - if (team != null && count >= teamSize) { - ChatUtil.sendMessage(player, Component.text("Das Team ", ChatUtil.GREEN).append(Component.text(team.getName(), team.getChatColor()).append(Component.text(" ist voll.", ChatUtil.GREEN)))); - return; - } - playerTeams.put(player.getUniqueId(), team); - ChatUtil.sendMessage(player, Component.text("Du bist nun in Team ", ChatUtil.GREEN).append(Component.text(team.getName(), team.getChatColor()))); - - if (oldteam != null) { - scoreboard.getTeam(oldteam.getName()).removePlayer(player); - } - scoreboard.getTeam(team.getName()).addPlayer(player); - - TeamSelectGUI.updateTeamSelectGui(); - Challenges.getPlugin().getSBManager().setScoreboardtoTeam(team); - } - - public static void setAllPlayerWithoutTeamToTeam() { - ArrayList playersWithoutTeam = new ArrayList<>(); - for (Player pp : Challenges.getPlugin().getVanish().getPlayerListWithoutVanishPlayers()) { - if (getPlayerTeam(pp) == null && pp.getGameMode() == GameMode.SURVIVAL) { - playersWithoutTeam.add(pp); - } - } - - int emptyteamsize = 0; - for (ChallengeTeam challengeTeam : getTeams()) { - Team team = TeamUtils.getScoreboard().getTeam(challengeTeam.getName()); - if (team != null && team.getEntries().isEmpty()) { - emptyteamsize++; - } - } - - if (playersWithoutTeam.size() > emptyteamsize) { - setTeamCount(getTeams().length + playersWithoutTeam.size() - emptyteamsize); - } - - if (!playersWithoutTeam.isEmpty()) { - for (Player pp : playersWithoutTeam) { - for (ChallengeTeam challengeTeam : getTeams()) { - Team team = TeamUtils.getScoreboard().getTeam(challengeTeam.getName()); - if (team != null && team.getEntries().isEmpty()) { - selectTeam(pp, challengeTeam); - } - } - } - } - } - - public static Scoreboard getScoreboard() { - return scoreboard; - } - - public static Objective getTeamscoreboardObjective() { - return teamscoreboardObjective; - } - - public static NamespacedKey getSelectKey() { - return selectKey; - } -} diff --git a/src/main/java/de/fanta/challenges/utils/ChatSkullAPI/ChatSkull.java b/src/main/java/de/fanta/challenges/utils/ChatSkullAPI/ChatSkull.java deleted file mode 100644 index ec38a27..0000000 --- a/src/main/java/de/fanta/challenges/utils/ChatSkullAPI/ChatSkull.java +++ /dev/null @@ -1,19 +0,0 @@ -package de.fanta.challenges.utils.ChatSkullAPI; - -import net.kyori.adventure.text.Component; -import org.bukkit.entity.Player; -import org.bukkit.event.Listener; -import org.bukkit.plugin.java.JavaPlugin; - -public class ChatSkull extends JavaPlugin implements Listener { - - public static void sendAll(Player head, Component[] lines) { - SkullClass cs = new SkullClass(head, lines); - cs.sendAll(); - } - - public static void sendPlayer(Player head, Player target, Component[] lines) { - SkullClass cs = new SkullClass(head, lines); - cs.sendPlayer(target); - } -} diff --git a/src/main/java/de/fanta/challenges/utils/ChatSkullAPI/Message.java b/src/main/java/de/fanta/challenges/utils/ChatSkullAPI/Message.java deleted file mode 100644 index 52f4bee..0000000 --- a/src/main/java/de/fanta/challenges/utils/ChatSkullAPI/Message.java +++ /dev/null @@ -1,75 +0,0 @@ -package de.fanta.challenges.utils.ChatSkullAPI; - -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.NamedTextColor; -import net.kyori.adventure.text.format.TextColor; -import org.bukkit.entity.Player; - -import java.awt.geom.AffineTransform; -import java.awt.image.AffineTransformOp; -import java.awt.image.BufferedImage; - -public class Message { - - private final Component[] lines; - - public Message(BufferedImage image, int height, char imgChar) { - TextColor[][] chatColors = toChatColorArray(image, height); - this.lines = toImgMessage(chatColors, imgChar); - } - - public Message appendText(Component[] text) { - for (int y = 0; y < this.lines.length; y++) { - if (text.length > y) { - Component[] tmp16_12 = this.lines; - tmp16_12[y] = tmp16_12[y].append(text[y]); - } - } - return this; - } - - private TextColor[][] toChatColorArray(BufferedImage image, int height) { - double ratio = ((double) image.getHeight() / image.getWidth()); - BufferedImage resized = resizeImage(image, (int) (height / ratio), height); - TextColor[][] chatImg = new TextColor[resized.getWidth()][resized.getHeight()]; - for (int x = 0; x < resized.getWidth(); x++) { - for (int y = 0; y < resized.getHeight(); y++) { - int rgb = resized.getRGB(x, y); - String hex = "#" + Integer.toHexString(rgb).substring(2); - TextColor closest = getClosestChatColor(TextColor.fromHexString(hex)); - chatImg[x][y] = closest; - } - } - return chatImg; - } - - private Component[] toImgMessage(TextColor[][] colors, char imgchar) { - Component[] lines = new Component[(colors[0]).length]; - for (int y = 0; y < (colors[0]).length; y++) { - Component line = Component.empty(); - for (TextColor[] textColors : colors) { - TextColor color = textColors[y]; - line = line.append(Component.text(color != null ? imgchar : ' ', color != null ? textColors[y] : NamedTextColor.WHITE)); - } - lines[y] = line; - } - return lines; - } - - private BufferedImage resizeImage(BufferedImage originalImage, int width, int height) { - AffineTransform af = new AffineTransform(); - af.scale(((double) width / originalImage.getWidth()), ((double) height / originalImage.getHeight())); - AffineTransformOp operation = new AffineTransformOp(af, 1); - return operation.filter(originalImage, null); - } - - public void sendToPlayer(Player player) { - for (Component line : lines) { - player.sendMessage(line); - } - } - - private TextColor getClosestChatColor(TextColor color) { - return color; - } -} diff --git a/src/main/java/de/fanta/challenges/utils/ChatSkullAPI/SkullClass.java b/src/main/java/de/fanta/challenges/utils/ChatSkullAPI/SkullClass.java deleted file mode 100644 index 74f84cb..0000000 --- a/src/main/java/de/fanta/challenges/utils/ChatSkullAPI/SkullClass.java +++ /dev/null @@ -1,46 +0,0 @@ -package de.fanta.challenges.utils.ChatSkullAPI; - -import de.fanta.challenges.Challenges; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -import javax.imageio.ImageIO; -import java.awt.image.BufferedImage; -import java.net.URI; -import java.net.URL; -import java.util.logging.Level; - -public class SkullClass { - private final Player player; - - private final Component[] lines; - - public SkullClass(Player player, Component[] lines) { - this.player = player; - this.lines = lines; - } - - public void sendAll() { - for (Player player : Bukkit.getOnlinePlayers()) { - sendPlayer(player); - } - } - - public void sendPlayer(Player player) { - String name = this.player.getPlayer().getName(); - BufferedImage imageToSend = null; - try { - imageToSend = ImageIO.read(newURL(name)); - } catch (Exception e) { - Challenges.getPlugin().getLogger().log(Level.SEVERE, "Error while load skin", e); - } - new Message(imageToSend, 8, '█').appendText(this.lines).sendToPlayer(player); - } - - private static URL newURL(String name) throws Exception { - String url = "https://mineskin.eu/helm/%pname%/8.png"; - url = url.replace("%pname%", name); - return new URI(url).toURL(); - } -} diff --git a/src/main/java/de/fanta/challenges/utils/ChatUtil.java b/src/main/java/de/fanta/challenges/utils/ChatUtil.java deleted file mode 100644 index 7e2f607..0000000 --- a/src/main/java/de/fanta/challenges/utils/ChatUtil.java +++ /dev/null @@ -1,101 +0,0 @@ -package de.fanta.challenges.utils; - -import de.fanta.challenges.Challenges; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.TranslatableComponent; -import net.kyori.adventure.text.format.TextColor; -import net.kyori.adventure.title.Title; -import net.kyori.adventure.util.Ticks; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import javax.annotation.Nullable; - -public class ChatUtil { - - public static final TextColor GREEN = TextColor.fromHexString("#32CD32"); - public static final TextColor YELLOW = TextColor.fromHexString("#FFD700"); - public static final TextColor ORANGE = TextColor.fromHexString("#FF8C00"); - public static final TextColor RED = TextColor.fromHexString("#B22222"); - public static final TextColor PINK = TextColor.fromHexString("#FF1493"); - public static final TextColor BLUE = TextColor.fromHexString("#1E90FF"); - - private ChatUtil() { - } - - public static void sendMessage(CommandSender sender, Component component) { - Component message = Challenges.getPlugin().getPrefixComponent().append(component); - sender.sendMessage(message); - } - - public static void sendNormalMessage(CommandSender sender, String string) { - sendMessage(sender, Component.text(string).color(GREEN)); - } - - public static void sendWarningMessage(CommandSender sender, String string) { - sendMessage(sender, Component.text(string).color(ORANGE)); - } - - public static void sendErrorMessage(CommandSender sender, String string) { - sendMessage(sender, Component.text(string).color(RED)); - } - - public static void sendDebugMessage(CommandSender sender, String string) { - if (sender != null) { - if (sender.hasPermission("fanta.debug")) { - sendMessage(sender, Component.text(string).color(PINK)); - } - } - } - - public static void sendBrodCastMessage(Component component) { - for (Player player : Bukkit.getOnlinePlayers()) { - sendMessage(player, component); - } - } - - public static void sendTitleToAll(Component headline, Component text, int in, int time, int out, boolean pling) { - for (Player p : Bukkit.getOnlinePlayers()) { - sendTitleToPlayer(p, headline, text, in, time, out, pling); - } - } - - public static void sendTitleToAll(Component headline, Component text, boolean pling) { - sendTitleToAll(headline, text, 10, 60, 10, pling); - } - - public static void sendTitleToAll(Component headline, Component text) { - sendTitleToAll(headline, text, 10, 60, 10, true); - } - - public static void sendTitleToPlayer(Player player, @Nullable Component headline, @Nullable Component text, int in, int time, int out, boolean pling) { - Component headLine = headline != null ? headline.color(BLUE) : Component.empty(); - Component textComponent = text != null ? text : Component.empty(); - - Title title = Title.title(headLine, textComponent, Title.Times.times(Ticks.duration(in), Ticks.duration(time), Ticks.duration(out))); - player.showTitle(title); - if (pling) { - player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 2.0F); - } - } - - public static Component getTrasnlateItemComponent(Material material) { - TranslatableComponent component = Component.translatable(material.translationKey()); - if (material.name().toLowerCase().contains("music_disc") || material.name().toLowerCase().contains("banner_pattern")) { - component = component.append(Component.text(" ").append(Component.translatable(material.translationKey() + ".desc"))); - } - - if (material == Material.NETHERITE_UPGRADE_SMITHING_TEMPLATE) { - component = component.append(Component.text(" ").append(Component.translatable("upgrade.minecraft.netherite_upgrade"))); - } else if (material.name().endsWith("_SMITHING_TEMPLATE")) { - String key = material.getItemTranslationKey(); - key = key.replace("item.minecraft.", "").replace("_armor_trim_smithing_template", ""); - component = component.append(Component.text(" ").append(Component.translatable("trim_pattern.minecraft." + key))); - } - - return component; - } -} diff --git a/src/main/java/de/fanta/challenges/utils/ColorUtils.java b/src/main/java/de/fanta/challenges/utils/ColorUtils.java deleted file mode 100644 index 1dc54e2..0000000 --- a/src/main/java/de/fanta/challenges/utils/ColorUtils.java +++ /dev/null @@ -1,196 +0,0 @@ -package de.fanta.challenges.utils; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.Timer; -import de.fanta.challenges.schedular.CancellableTask; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.Style; -import net.kyori.adventure.text.format.TextColor; -import net.kyori.adventure.text.format.TextDecoration; - -public class ColorUtils { - - private final Challenges plugin; - private long time; - private CancellableTask cancellableTask; - - public ColorUtils(Challenges plugin) { - this.plugin = plugin; - restartTask(1); - } - - public static TextColor getColorGradient(int[] baseColors, long time, double extraTime, double speed) { - int v = Math.floorMod((int) (time * speed + extraTime * 21), baseColors.length * 100); - int step = v / 100; - double ratio = (v % 100) * 0.01; - int c0 = baseColors[step]; - int c1 = baseColors[(step + 1) % baseColors.length]; - - int r1 = (c0 >> 16) & 0xff; - int g1 = (c0 >> 8) & 0xff; - int b1 = c0 & 0xff; - - int r2 = (c1 >> 16) & 0xff; - int g2 = (c1 >> 8) & 0xff; - int b2 = c1 & 0xff; - - double cmax1 = Math.max(r1, g1); - if (b1 > cmax1) { - cmax1 = b1; - } - double cmin1 = Math.min(r1, g1); - if (b1 < cmin1) { - cmin1 = b1; - } - - double brightness1 = (cmax1) / 255.0; - double saturation1; - if (cmax1 != 0) { - saturation1 = ((cmax1 - cmin1)) / (cmax1); - } else { - saturation1 = 0; - } - double hue1; - if (saturation1 == 0) { - hue1 = 0; - } else { - double redc = ((cmax1 - r1)) / ((cmax1 - cmin1)); - double greenc = ((cmax1 - g1)) / ((cmax1 - cmin1)); - double bluec = ((cmax1 - b1)) / ((cmax1 - cmin1)); - if (r1 == cmax1) { - hue1 = bluec - greenc; - } else if (g1 == cmax1) { - hue1 = 2.0 + redc - bluec; - } else { - hue1 = 4.0 + greenc - redc; - } - hue1 = hue1 / 6.0; - if (hue1 < 0) { - hue1 = hue1 + 1.0; - } - } - - double cmax2 = Math.max(r2, g2); - if (b2 > cmax2) { - cmax2 = b2; - } - double cmin2 = Math.min(r2, g2); - if (b2 < cmin2) { - cmin2 = b2; - } - - double brightness2 = (cmax2) / 255.0; - double saturation2; - if (cmax2 != 0) { - saturation2 = ((cmax2 - cmin2)) / (cmax2); - } else { - saturation2 = 0; - } - double hue2; - if (saturation2 == 0) { - hue2 = 0; - } else { - double redc = ((cmax2 - r2)) / ((cmax2 - cmin2)); - double greenc = ((cmax2 - g2)) / ((cmax2 - cmin2)); - double bluec = ((cmax2 - b2)) / ((cmax2 - cmin2)); - if (r2 == cmax2) { - hue2 = bluec - greenc; - } else if (g2 == cmax2) { - hue2 = 2.0 + redc - bluec; - } else { - hue2 = 4.0 + greenc - redc; - } - hue2 = hue2 / 6.0; - if (hue2 < 0) { - hue2 = hue2 + 1.0; - } - } - - double ratio2 = 1.0 - ratio; - double brightness = brightness1 * ratio2 + brightness2 * ratio; - double saturation = saturation1 * ratio2 + saturation2 * ratio; - if (hue2 - hue1 > 0.5) { - hue1 += 1; - } else if (hue1 - hue2 > 0.5) { - hue2 += 1; - } - double hue = hue1 * ratio2 + hue2 * ratio; - if (hue > 1.0) { - hue -= 1.0; - } - - double r = 0.0; - double g = 0.0; - double b = 0.0; - if (saturation == 0) { - r = g = b = (int) (brightness * 255.0f + 0.5f); - } else { - double h = (hue - Math.floor(hue)) * 6.0f; - double f = h - Math.floor(h); - double p = brightness * (1.0f - saturation); - double q = brightness * (1.0f - saturation * f); - double t = brightness * (1.0f - (saturation * (1.0f - f))); - switch ((int) h) { - case 0 -> { - r = (int) (brightness * 255.0f + 0.5f); - g = (int) (t * 255.0f + 0.5f); - b = (int) (p * 255.0f + 0.5f); - } - case 1 -> { - r = (int) (q * 255.0f + 0.5f); - g = (int) (brightness * 255.0f + 0.5f); - b = (int) (p * 255.0f + 0.5f); - } - case 2 -> { - r = (int) (p * 255.0f + 0.5f); - g = (int) (brightness * 255.0f + 0.5f); - b = (int) (t * 255.0f + 0.5f); - } - case 3 -> { - r = (int) (p * 255.0f + 0.5f); - g = (int) (q * 255.0f + 0.5f); - b = (int) (brightness * 255.0f + 0.5f); - } - case 4 -> { - r = (int) (t * 255.0f + 0.5f); - g = (int) (p * 255.0f + 0.5f); - b = (int) (brightness * 255.0f + 0.5f); - } - case 5 -> { - r = (int) (brightness * 255.0f + 0.5f); - g = (int) (p * 255.0f + 0.5f); - b = (int) (q * 255.0f + 0.5f); - } - } - } - int rFinal = (int) r; - int gFinal = (int) g; - int bFinal = (int) b; - - int c = (rFinal << 16) | (gFinal << 8) | (bFinal); - - return TextColor.color(c); - } - - public void restartTask(long l) { - if (this.cancellableTask != null) { - cancellableTask.cancel(); - } - - cancellableTask = plugin.getScheduler().runGlobalAtFixedRate(() -> time++, 0L, l); - } - - public long getTime() { - return this.time; - } - - public Component addChatColorToString(String input, int[] baseColors, double speed) { - Component output = Component.empty(); - double extraTime = 0.0; - for (char c : input.toCharArray()) { - extraTime = plugin.getTimer().getMode() == Timer.TimerMode.UP ? extraTime - 0.40 : extraTime + 0.40; - output = output.append(Component.text(c, Style.style(getColorGradient(baseColors, getTime(), extraTime, speed), TextDecoration.BOLD))); - } - return output; - } -} diff --git a/src/main/java/de/fanta/challenges/utils/Config.java b/src/main/java/de/fanta/challenges/utils/Config.java deleted file mode 100644 index 9f79774..0000000 --- a/src/main/java/de/fanta/challenges/utils/Config.java +++ /dev/null @@ -1,77 +0,0 @@ -package de.fanta.challenges.utils; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.ServerType; -import org.bukkit.Location; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.inventory.ItemStack; - -import java.util.List; - -public class Config { - - private static final Challenges plugin = Challenges.getPlugin(); - - public static void setValue(String path, Object value) { - setValue(path, value, true); - } - - public static void setValue(String path, Object value, boolean edit) { - plugin.getConfig().set(path, value); - plugin.saveConfig(); - Challenges.getPlugin().getLogger().info("Save Config " + path + ": " + value + " (" + edit + ")"); - if (edit && plugin.getServerType() == ServerType.CHALLENGE) { - if (!getBoolean("editsettings")) { - setValue("editsettings", true, false); - plugin.getLogger().info("Diese Challenge ist kein SpeedRun mehr " + "(" + path + ": " + value + ")"); - if (plugin.getCurrentEditor() != null) { - ChatUtil.sendWarningMessage(plugin.getCurrentEditor(), "Diese Challenge wird nicht mehr als Speed Run gezählt, da du etwas in den Einstellungen bearbeitet hast."); - } - } - } - } - - public static ConfigurationSection createSection(String path) { - return plugin.getConfig().createSection(path); - } - - public static boolean getBoolean(String path) { - return plugin.getConfig().getBoolean(path); - } - - public static int getInt(String path) { - return plugin.getConfig().getInt(path); - } - - public static String getString(String path) { - return plugin.getConfig().getString(path); - } - - public static double getDouble(String path) { - return plugin.getConfig().getDouble(path); - } - - public static double getDouble(String path, Double def) { - return plugin.getConfig().getDouble(path, def); - } - - public static ItemStack getItemStack(String path) { - return plugin.getConfig().getItemStack(path); - } - - public static Location getLocation(String path) { - return plugin.getConfig().getLocation(path); - } - - public static ConfigurationSection getConfigurationSection(String path) { - return plugin.getConfig().getConfigurationSection(path); - } - - public static List getStringList(String path) { - return plugin.getConfig().getStringList(path); - } - - public static boolean contains(String path) { - return plugin.getConfig().contains(path); - } -} diff --git a/src/main/java/de/fanta/challenges/utils/CoordsTargeter.java b/src/main/java/de/fanta/challenges/utils/CoordsTargeter.java deleted file mode 100644 index 2676105..0000000 --- a/src/main/java/de/fanta/challenges/utils/CoordsTargeter.java +++ /dev/null @@ -1,104 +0,0 @@ -package de.fanta.challenges.utils; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.events.TimerChangedEvent; -import de.fanta.challenges.schedular.CancellableTask; -import org.bukkit.Location; -import org.bukkit.Particle; -import org.bukkit.Vibration; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerQuitEvent; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.UUID; - -public class CoordsTargeter implements Listener { - - private static final Challenges plugin = Challenges.getPlugin(); - private static final HashMap locationMap = new HashMap<>(); - private static final Collection autoDetectionList = new ArrayList<>(); - - private CancellableTask task; - - @EventHandler - public void onTimer(TimerChangedEvent e) { - if (e.isRunning()) { - startUpdateTask(); - } else { - locationMap.clear(); - stopUpdateTask(); - } - } - - @EventHandler - public void onLeave(PlayerQuitEvent e) { - if (locationMap.containsKey(e.getPlayer().getUniqueId())) { - removeLocation(e.getPlayer().getUniqueId()); - } - } - - public void updateTargeter() { - for (Player p : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { - if (locationMap.containsKey(p.getUniqueId())) { - Location targetLocation = locationMap.get(p.getUniqueId()); - - if (targetLocation != null && targetLocation.getWorld() == p.getWorld()) { - Location playerlocation; - if (p.getVehicle() != null) { - playerlocation = p.getLocation().clone().add(0, 0.5, 0); - } else { - playerlocation = p.getLocation().clone().add(0, 1, 0); - } - - int distance = (int) playerlocation.toVector().subtract(targetLocation.toVector()).length(); - Vibration vibration = new Vibration(new Vibration.Destination.BlockDestination(targetLocation.getBlock()), distance * 2); - p.spawnParticle(Particle.VIBRATION, playerlocation, 1, vibration); - - if (autoDetectionList.contains(p.getUniqueId()) && distance < 5) { - removeLocation(p.getUniqueId()); - ChatUtil.sendNormalMessage(p, "Sie haben ihr Ziel erreicht!"); - } - } else if (autoDetectionList.contains(p.getUniqueId())) { - removeLocation(p.getUniqueId()); - ChatUtil.sendWarningMessage(p, "Du bist nicht mehr in der Welt vom Waypoint, der Weg wird nicht mehr angezeigt!"); - } - } - } - } - - public void startUpdateTask() { - task = plugin.getScheduler().runGlobalAtFixedRate(this::updateTargeter, 5L, 5L); - } - - public void stopUpdateTask() { - if (task != null) { - task.cancel(); - } - task = null; - } - - public static void addLocation(UUID uuid, Location location) { - addLocation(uuid, location, true); - } - - public static void addLocation(UUID uuid, Location location, boolean autoDetection) { - locationMap.put(uuid, location); - if (autoDetection) { - autoDetectionList.add(uuid); - } - - } - - public static void removeLocation(UUID uuid) { - locationMap.remove(uuid); - autoDetectionList.remove(uuid); - } - - public static boolean containsLocation(UUID uuid) { - return locationMap.containsKey(uuid); - } -} diff --git a/src/main/java/de/fanta/challenges/utils/CubesideModUtils.java b/src/main/java/de/fanta/challenges/utils/CubesideModUtils.java deleted file mode 100644 index a348ed3..0000000 --- a/src/main/java/de/fanta/challenges/utils/CubesideModUtils.java +++ /dev/null @@ -1,41 +0,0 @@ -package de.fanta.challenges.utils; - -import de.fanta.challenges.Challenges; -import de.iani.cubesideutils.MinecraftDataOutputStream; -import net.kyori.adventure.text.format.TextColor; -import org.bukkit.entity.Player; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; - -public class CubesideModUtils { - - - - public static void sendFlashScreenToCubesideMod(Challenges plugin, Player player, int duration, TextColor color) { - plugin.getScheduler().runDelayedOnEntity(player, () -> { - if (player == null) { - return; - } - if (!player.getListeningPluginChannels().contains(plugin.getCubesideMod_ModChannel())) { - return; - } - - ByteArrayOutputStream out = new ByteArrayOutputStream(); - MinecraftDataOutputStream dataOut = new MinecraftDataOutputStream(out); - int cubesideDateChannel = 1; - int cubesideDateChannelVersion = 0; - try { - dataOut.writeByte(cubesideDateChannel); - dataOut.writeByte(cubesideDateChannelVersion); - dataOut.writeInt(color.value()); - dataOut.writeInt(duration); - dataOut.flush(); - } catch (IOException e) { - throw new RuntimeException(e); - } - player.sendPluginMessage(plugin, plugin.getCubesideMod_ModChannel(), out.toByteArray()); - }, 1L); - } - -} diff --git a/src/main/java/de/fanta/challenges/utils/ItemStackUtil.java b/src/main/java/de/fanta/challenges/utils/ItemStackUtil.java deleted file mode 100644 index 13254dd..0000000 --- a/src/main/java/de/fanta/challenges/utils/ItemStackUtil.java +++ /dev/null @@ -1,20 +0,0 @@ -package de.fanta.challenges.utils; - -import org.bukkit.inventory.ItemStack; - -import java.util.Base64; - -public class ItemStackUtil { - - public static String getBase64StringFromItemStack(ItemStack stack) { - if (stack == null) { - return null; - } - return Base64.getEncoder().encodeToString(stack.serializeAsBytes()); - } - - public static ItemStack getItemStackFromBase64(String itemString) { - byte[] itemBytes = Base64.getDecoder().decode(itemString); - return ItemStack.deserializeBytes(itemBytes); - } -} diff --git a/src/main/java/de/fanta/challenges/utils/ItemUtils.java b/src/main/java/de/fanta/challenges/utils/ItemUtils.java deleted file mode 100644 index 433f576..0000000 --- a/src/main/java/de/fanta/challenges/utils/ItemUtils.java +++ /dev/null @@ -1,45 +0,0 @@ -package de.fanta.challenges.utils; - -import de.iani.cubesideutils.bukkit.items.ItemBuilder; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.TextDecoration; -import org.bukkit.Material; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.inventory.ItemFlag; -import org.bukkit.inventory.ItemStack; - -public class ItemUtils { - - public static final ItemStack EMPTY_ICON = createGuiItem(Material.GRAY_STAINED_GLASS_PANE, Component.empty(), true, false); - - public static ItemStack createGuiItem(Material material, Component name, Component... lore) { - return createGuiItem(material, name, false, lore); - } - - public static ItemStack createGuiItem(Material material, Component name, boolean glowing, boolean showTooltip, Component... lore) { - if (!name.style().hasDecoration(TextDecoration.ITALIC)) { - name = name.decoration(TextDecoration.ITALIC, TextDecoration.State.FALSE); - } - - for (int i = 0; i < lore.length; i++) { - Component component = lore[i]; - if (!component.style().hasDecoration(TextDecoration.ITALIC)) { - component = component.decoration(TextDecoration.ITALIC, TextDecoration.State.FALSE); - } - lore[i] = component; - } - - ItemBuilder builder = ItemBuilder.fromMaterial(material).displayName(name).lore(lore); - if (glowing) { - builder.enchantment(Enchantment.UNBREAKING, 1, true).flag(ItemFlag.HIDE_ENCHANTS); - } - if (!showTooltip) { - builder.hideTooltip(true); - } - return builder.build(); - } - - public static ItemStack createGuiItem(Material material, Component name, boolean glowing, Component... lore) { - return createGuiItem(material, name, glowing, true, lore); - } -} diff --git a/src/main/java/de/fanta/challenges/utils/SaveWorldUtils.java b/src/main/java/de/fanta/challenges/utils/SaveWorldUtils.java deleted file mode 100644 index a409453..0000000 --- a/src/main/java/de/fanta/challenges/utils/SaveWorldUtils.java +++ /dev/null @@ -1,273 +0,0 @@ -package de.fanta.challenges.utils; - -import de.cubeside.nmsutils.NMSUtils; -import de.fanta.challenges.Challenges; -import de.fanta.challenges.SaveSlot; -import de.fanta.challenges.ServerType; -import de.fanta.challenges.events.ChallengeEventStatusChangedEvent; -import de.fanta.challenges.events.EventStatusChangedEvent; -import de.fanta.challenges.events.ServerStatusChangedEvent; -import net.kyori.adventure.text.Component; -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.entity.Player; - -import javax.annotation.Nullable; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileOutputStream; -import java.io.FileReader; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.StandardCopyOption; -import java.util.HashMap; -import java.util.Properties; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.logging.Level; - -public class SaveWorldUtils { - - private static final Challenges plugin = Challenges.getPlugin(); - - public static boolean isSavingWorld = false; - public static boolean isCopyWorld = false; - private static boolean isServerRestartRequested = false; - private static boolean restart = false; - private static String restartSeed = null; - public static double progress = 0.0; - - public static void saveWorld(String saveID, SaveSlot saveSlot) { - saveWorld(null, saveID, saveSlot); - } - - public static void saveWorld(@Nullable Player player, String saveID, SaveSlot saveSlot) { - plugin.getLogger().info("Try Save world slot: " + saveSlot.getSlot()); - try { - if (isSavingWorld) { - if (player != null) { - ChatUtil.sendErrorMessage(player, "Diese Welt wird aktuell gespeichert. Bitte warte bis der Vorgang abgeschlossen ist. Dies kann einige Minuten dauern."); - } - return; - } - if (plugin.getServerType() == ServerType.CHALLENGE_EVENT) { - if (player != null) { - ChatUtil.sendErrorMessage(player, "Challenge Events können nicht gespeichert werden."); - } - return; - } - isSavingWorld = true; - plugin.getServerConfig().set("saveTime", System.currentTimeMillis()); - plugin.saveServerConfig(); - Config.setValue("timertime", Challenges.getPlugin().getTimer().getTime()); - Config.setValue("backpack_size", Challenges.getPlugin().getBackpack().getSize() / 9); - Challenges.getPlugin().getBackpack().saveInventoryToConfig(); - - for (Player p : Bukkit.getOnlinePlayers()) { - p.saveData(); - } - NMSUtils nms = plugin.getNMSUtils(); - if (nms != null) { - for (World world : Bukkit.getWorlds()) { - nms.getWorldUtils().saveWorldNow(world); - } - copyWorldAsync(player, saveID, saveSlot); - } - } catch (Exception ex) { - plugin.getLogger().log(Level.SEVERE, "Welt konnte nicht gespeichert werden", ex); - } - } - - private static void copyWorldAsync(Player player, String saveID, SaveSlot saveSlot) { - File dir = new File(saveID); - File configs = new File("plugins/Challenges"); - File end = new File("world_the_end"); - File nether = new File("world_nether"); - File world = new File("world"); - File saveend = new File(saveID + "/world_the_end"); - File savenether = new File(saveID + "/world_nether"); - File saveworld = new File(saveID + "/world"); - File saveconfigs = new File(saveID + "/Challenges"); - File saveFolder; - if (plugin.getServerType() != ServerType.ADVENTURE) { - saveFolder = new File(plugin.getChallengeSavePath().toFile(), saveID + "/"); - } else { - saveFolder = new File(plugin.getAdventureSavePath().toFile(), saveID + "/"); - } - try { - FileUtils.forceMkdir(dir); - FileUtils.copyDirectory(configs, saveconfigs); - FileUtils.copyDirectory(end, saveend); - FileUtils.copyDirectory(nether, savenether); - FileUtils.copyDirectory(world, saveworld); - - if (player != null) { - ChatUtil.sendNormalMessage(player, "Welt wurde erfolgreich kopiert und wird nun gespeichert. Dies kann einige Minuten dauern. Du kannst aber ganz normal weiter spielen."); - } - - CompletableFuture copyFuture = CompletableFuture.supplyAsync(() -> { - try { - if (!saveFolder.isDirectory()) { - saveFolder.mkdirs(); - } - - File saveSlotFolder = new File(saveFolder, saveSlot.getSlot()); - - if (saveSlotFolder.isDirectory()) { - FileUtils.forceDelete(saveSlotFolder); - } - HashMap copyMap = new HashMap<>(); - copyMap.put(dir, saveSlotFolder); - moveFolderWithProgress(copyMap); - return true; - } catch (IOException ex) { - plugin.getLogger().log(Level.SEVERE, "Could not save world ", ex); - return false; - } - }); - - copyFuture.thenAccept(result -> { - plugin.getServer().getScheduler().runTask(plugin, () -> { - plugin.getLogger().info("Save result: " + result); - if (result) { - if (player != null) { - ChatUtil.sendNormalMessage(player, "Welt wurde erfolgreich auf Slot " + saveSlot.getSlot() + " gespeichert!"); - } - - if (isServerRestartRequested) { - restartServerInternal(restartSeed); - } else if (restart) { - Config.setValue("World_Reset", true); - Bukkit.shutdown(); - } - } else { - if (player != null) { - ChatUtil.sendErrorMessage(Bukkit.getPlayer(saveID), "Map konnte nicht richtig gespeichert werden, bitte versuche es noch einmal"); - } - } - isSavingWorld = false; - try { - FileUtils.deleteDirectory(dir); - } catch (IOException ex) { - plugin.getLogger().log(Level.SEVERE, "Could not delete tempFolder ", ex); - } - }); - }); - } catch (IOException ex) { - plugin.getLogger().log(Level.SEVERE, "Could not save world ", ex); - } - } - - public static void restartServer(@Nullable String seed) { - if (isSavingWorld) { - restartSeed = seed; - isServerRestartRequested = true; - } else { - restartServerInternal(seed); - } - } - - private static void restartServerInternal(@Nullable String seed) { - plugin.setWaitingForShutdown(true); - - Bukkit.getPluginManager().callEvent(new EventStatusChangedEvent(false)); - Bukkit.getPluginManager().callEvent(new ChallengeEventStatusChangedEvent(false)); - Bukkit.getPluginManager().callEvent(new ServerStatusChangedEvent(false)); - - for (Player p : Bukkit.getOnlinePlayers()) { - plugin.portPlayerToLobby(p); - } - - Config.setValue("editsettings", true, false); - - setSeedInServerProperties(seed); - - plugin.getTimer().stopTimer(); - - for (String key : Config.getConfigurationSection("Saved_Locations").getKeys(false)) { - Config.setValue("Saved_Locations." + key, null, false); - } - - plugin.saveConfig(); - plugin.getBackpack().saveInventoryToConfig(); - - if (Config.getBoolean("firsttimerstart") && plugin.getFirstEditor() != null && plugin.getServerType() != ServerType.CHALLENGE_EVENT) { - restart = true; - SaveWorldUtils.saveWorld(plugin.getFirstEditor().getUniqueId().toString(), SaveSlot.SLOT_AUTO); - } else { - Config.setValue("World_Reset", true); - Bukkit.shutdown(); - } - - } - - private static void setSeedInServerProperties(@Nullable String seed) { - try { - BufferedReader in = new BufferedReader(new FileReader("server.properties")); - Properties props = new Properties(); - props.load(in); - in.close(); - if (seed != null) { - props.setProperty("level-seed", seed); - Config.setValue("resetwithseed", true, false); - } else { - props.setProperty("level-seed", ""); - } - FileOutputStream out = new FileOutputStream("server.properties"); - props.store(out, null); - out.close(); - } catch (IOException e) { - plugin.getLogger().log(Level.SEVERE, "Error while read server properties Config", e); - } - } - - public static void moveFolderWithProgress(HashMap copyMap) throws IOException { - isCopyWorld = true; - final long[] totalBytes = {0}; - final long[] copiedBytes = {0}; - - for (File sourceFolder : copyMap.keySet()) { - Files.walk(sourceFolder.toPath()).forEach(source -> { - if (!Files.isDirectory(source)) { - totalBytes[0] += source.toFile().length(); - } - }); - } - - for (File sourceFolder : copyMap.keySet()) { - Files.walk(sourceFolder.toPath()).forEach(source -> { - try { - File target = new File(copyMap.get(sourceFolder).toPath().resolve(sourceFolder.toPath().relativize(source)).toString()); - if (Files.isDirectory(source)) { - target.mkdir(); - } else { - Files.copy(source, target.toPath(), StandardCopyOption.REPLACE_EXISTING); - copiedBytes[0] += source.toFile().length(); - progress = (double) copiedBytes[0] / totalBytes[0] * 100; - } - } catch (IOException e) { - plugin.getLogger().log(Level.SEVERE, "Error while copy files", e); - } - }); - } - isCopyWorld = false; - } - - public static Component getProgressBar(double value) { - int progress = (int) (value / 100 * 40); - - Component progressBar = Component.empty(); - progressBar = progressBar.append(Component.text("[", ChatUtil.RED)); - for (int i = 0; i < 40; i++) { - if (i < progress) { - progressBar = progressBar.append(Component.text("|", ChatUtil.PINK)); - } else { - progressBar = progressBar.append(Component.text("|", ChatUtil.GREEN)); - } - } - progressBar = progressBar.append(Component.text("] ", ChatUtil.RED).append(Component.text(String.format("%.2f", value) + "%", ChatUtil.PINK))); - - return progressBar; - } -} diff --git a/src/main/java/de/fanta/challenges/utils/Statistics.java b/src/main/java/de/fanta/challenges/utils/Statistics.java deleted file mode 100644 index a95d008..0000000 --- a/src/main/java/de/fanta/challenges/utils/Statistics.java +++ /dev/null @@ -1,141 +0,0 @@ -package de.fanta.challenges.utils; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.ServerType; -import de.iani.cubesidestats.api.CubesideStatisticsAPI; -import de.iani.cubesidestats.api.StatisticKey; - -import java.util.UUID; - -public class Statistics { - private final Challenges plugin; - - private final CubesideStatisticsAPI statistics; - - private final StatisticKey speedRunsPlayedSolo; - private final StatisticKey speedRunsWonSolo; - private final StatisticKey speedRunsTimeSolo; - - private final StatisticKey speedRunsPlayedDuo; - private final StatisticKey speedRunsWonDuo; - private final StatisticKey speedRunsTimeDuo; - - private final StatisticKey speedRunsPlayedTeam; - private final StatisticKey speedRunsWonTeam; - private final StatisticKey speedRunsTimeTeam; - - private final StatisticKey challengeWeekStats; - - public Statistics(Challenges plugin) { - this.plugin = plugin; - statistics = plugin.getCubesideStatistics(); - - speedRunsPlayedSolo = statistics.getStatisticKey("challenge.speedruns.solo.played"); - speedRunsPlayedSolo.setDisplayName("Challenge - SpeedRun's gespielt (Solo)"); - speedRunsPlayedSolo.setIsMonthlyStats(true); - - speedRunsWonSolo = statistics.getStatisticKey("challenge.speedruns.solo.won"); - speedRunsWonSolo.setDisplayName("Challenge - SpeedRun's gewonnen (Solo)"); - speedRunsWonSolo.setIsMonthlyStats(true); - - speedRunsTimeSolo = statistics.getStatisticKey("challenge.speedruns.solo.time"); - speedRunsTimeSolo.setDisplayName("Beste Zeit (Solo)"); - speedRunsTimeSolo.setIsMonthlyStats(true); - - - speedRunsPlayedDuo = statistics.getStatisticKey("challenge.speedruns.duo.played"); - speedRunsPlayedDuo.setDisplayName("Challenge - SpeedRun's gespielt (Duo)"); - speedRunsPlayedDuo.setIsMonthlyStats(true); - - speedRunsWonDuo = statistics.getStatisticKey("challenge.speedruns.duo.won"); - speedRunsWonDuo.setDisplayName("Challenge - SpeedRun's gewonnen (Duo)"); - speedRunsWonDuo.setIsMonthlyStats(true); - - speedRunsTimeDuo = statistics.getStatisticKey("challenge.speedruns.duo.time"); - speedRunsTimeDuo.setDisplayName("Beste Zeit (Duo)"); - speedRunsTimeDuo.setIsMonthlyStats(true); - - - speedRunsPlayedTeam = statistics.getStatisticKey("challenge.speedruns.team.played"); - speedRunsPlayedTeam.setDisplayName("Challenge - SpeedRun's gespielt (Team)"); - speedRunsPlayedTeam.setIsMonthlyStats(true); - - speedRunsWonTeam = statistics.getStatisticKey("challenge.speedruns.team.won"); - speedRunsWonTeam.setDisplayName("Challenge - SpeedRun's gewonnen (Team)"); - speedRunsWonTeam.setIsMonthlyStats(true); - - speedRunsTimeTeam = statistics.getStatisticKey("challenge.speedruns.team.time"); - speedRunsTimeTeam.setDisplayName("Beste Zeit (Team)"); - speedRunsTimeTeam.setIsMonthlyStats(true); - - - challengeWeekStats = statistics.getStatisticKey("challenge.challengeweek"); - challengeWeekStats.setDisplayName("Beste Spieler Challenge Woche"); - challengeWeekStats.setIsMonthlyStats(false); - } - - public void increaseChallengeWeekStats(UUID uuid, int points) { - statistics.getStatistics(uuid).increaseScore(challengeWeekStats, points); - } - - public void addSpeedRunWonSolo(UUID uuid, int time) { - statistics.getStatistics(uuid).increaseScore(speedRunsWonSolo, 1); - statistics.getStatistics(uuid).minScore(speedRunsTimeSolo, time); - } - - public void addSpeedRunsPlayedSolo(UUID uuid) { - statistics.getStatistics(uuid).increaseScore(speedRunsPlayedSolo, 1); - } - - public void addSpeedRunWonDuo(UUID uuid, int time) { - statistics.getStatistics(uuid).increaseScore(speedRunsWonDuo, 1); - statistics.getStatistics(uuid).minScore(speedRunsTimeDuo, time); - } - - public void addSpeedRunsPlayedDuo(UUID uuid) { - statistics.getStatistics(uuid).increaseScore(speedRunsPlayedDuo, 1); - } - - public void addSpeedRunWonTeam(UUID uuid, int time) { - statistics.getStatistics(uuid).increaseScore(speedRunsWonTeam, 1); - statistics.getStatistics(uuid).minScore(speedRunsTimeTeam, time); - } - - public void addSpeedRunsPlayedTeam(UUID uuid) { - statistics.getStatistics(uuid).increaseScore(speedRunsPlayedTeam, 1); - } - - public void saveSpeedRun() { - if (plugin.getServerType() != ServerType.CHALLENGE) { - return; - } - - for (UUID uuid : plugin.getstatisticPlayers()) { - int playerPlays = plugin.getstatisticPlayers().size(); - if (playerPlays == 1) { - addSpeedRunWonSolo(uuid, (int) (plugin.getTimer().getTimeInMs() / 1000) * 1000); - } else if (playerPlays == 2) { - addSpeedRunWonDuo(uuid, (int) (plugin.getTimer().getTimeInMs() / 1000) * 1000); - } else if (playerPlays >= 3) { - addSpeedRunWonTeam(uuid, (int) (plugin.getTimer().getTimeInMs() / 1000) * 1000); - } - } - } - - public void addSpeedRunPlayed() { - if (plugin.getServerType() != ServerType.CHALLENGE) { - return; - } - - for (UUID uuid : plugin.getstatisticPlayers()) { - int playerPlays = plugin.getstatisticPlayers().size(); - if (playerPlays == 1) { - addSpeedRunsPlayedSolo(uuid); - } else if (playerPlays == 2) { - addSpeedRunsPlayedDuo(uuid); - } else if (playerPlays >= 3) { - addSpeedRunsPlayedTeam(uuid); - } - } - } -} diff --git a/src/main/java/de/fanta/challenges/utils/VanishUtils.java b/src/main/java/de/fanta/challenges/utils/VanishUtils.java deleted file mode 100644 index 0b79ccc..0000000 --- a/src/main/java/de/fanta/challenges/utils/VanishUtils.java +++ /dev/null @@ -1,41 +0,0 @@ -package de.fanta.challenges.utils; - -import de.fanta.challenges.Challenges; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.kitteh.vanish.VanishPlugin; - -import java.util.ArrayList; -import java.util.List; - -public class VanishUtils { - - private final VanishPlugin vanish; - - public VanishUtils(Challenges plugin) { - vanish = (VanishPlugin) plugin.getServer().getPluginManager().getPlugin("VanishNoPacket"); - } - - public boolean isVanish(Player player) { - return vanish.getManager().isVanished(player); - } - - public int countVanishPlayers() { - return vanish.getManager().getVanishedPlayers().size(); - } - - public List getVanishPlayerList() { - return new ArrayList<>(vanish.getManager().getVanishedPlayers()); - } - - public List getPlayerListWithoutVanishPlayers() { - List playerlistwithoutvanishplayer = new ArrayList<>(); - for (Player player : Bukkit.getOnlinePlayers()) { - if (!isVanish(player)) { - playerlistwithoutvanishplayer.add(player); - } - } - return playerlistwithoutvanishplayer; - } - -} diff --git a/src/main/java/de/fanta/challenges/waypoints/Waypoint.java b/src/main/java/de/fanta/challenges/waypoints/Waypoint.java deleted file mode 100644 index 466c222..0000000 --- a/src/main/java/de/fanta/challenges/waypoints/Waypoint.java +++ /dev/null @@ -1,9 +0,0 @@ -package de.fanta.challenges.waypoints; - -import org.bukkit.Location; - -import javax.annotation.Nullable; -import java.util.UUID; - -public record Waypoint(String name, @Nullable UUID creator, Location location) { -} diff --git a/src/main/java/de/fanta/challenges/waypoints/WaypointManager.java b/src/main/java/de/fanta/challenges/waypoints/WaypointManager.java deleted file mode 100644 index 40398f1..0000000 --- a/src/main/java/de/fanta/challenges/waypoints/WaypointManager.java +++ /dev/null @@ -1,43 +0,0 @@ -package de.fanta.challenges.waypoints; - -import de.fanta.challenges.Challenges; - -import java.util.HashMap; - -public class WaypointManager { - - private final Challenges plugin; - private final HashMap waypoints; - - public WaypointManager(Challenges plugin) { - this.plugin = plugin; - this.waypoints = loadWaypoints(); - } - - private HashMap loadWaypoints() { - HashMap points = new HashMap<>(); - - - return points; - } - - public HashMap getWaypoints() { - return waypoints; - } - - public boolean addWaypoint(Waypoint waypoint) { - if (waypoints.containsKey(waypoint.name())) { - return false; - } - waypoints.put(waypoint.name(), waypoint); - return true; - } - - public boolean deleteWaypoint(Waypoint waypoint) { - if (!waypoints.containsKey(waypoint.name())) { - return false; - } - waypoints.remove(waypoint.name()); - return true; - } -} diff --git a/src/main/resources/allitems.yml b/src/main/resources/allitems.yml deleted file mode 100644 index e69de29..0000000 --- a/src/main/resources/allitems.yml +++ /dev/null diff --git a/src/main/resources/backpack.yml b/src/main/resources/backpack.yml deleted file mode 100644 index e69de29..0000000 --- a/src/main/resources/backpack.yml +++ /dev/null diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml deleted file mode 100644 index 8aa6988..0000000 --- a/src/main/resources/config.yml +++ /dev/null @@ -1,67 +0,0 @@ -craftingtable: true -allowtrading: true -deathonfall: false -damageonsneak: false -randommobs: false -sneakdmg: 2 -randomeffect: false -rnddrops: false -sharedmg: false -respawn: true -onelife: false -dmginchat: false -deathonsprint: false -deathonjump: false -xpdeath: false -clinvdmg: false -tabhp: false -tntdeath: false -goal: ender_dragon -lavafloor: false -tiedtogether: false -playerrange: 30 -icerunner: false -bedrockwall: false -bedrockwalltime: 10 -mobremoveworld: false -alladvancements: false -worldborderlevel: false -worldborderlevelnether: false -worldborderlevellevel: 0 -worldborderlevelxp: 0 -worldborderlevelbordermultiplier: 2 -disablevillagertradelimits: false -teleportcommand: false -gravestone: false -editsettings: false -resetwithseed: false -manhunt: false -#Mögliche werte: 1-6 -backpack_size: 3 -mlg: - enabled: false - maxtime: 380 - randommlgblock: false -timertime: 0 -firsttimerstart: false -showtimer: true -Saved_Locations: { } -World_Reset: false -silkore: false -ultrahardcore: false -speedfurnace: false -pvp: false -event: - enabled: false - type: nix - teams: false - teamselect: false - autoteams: false - tournament: false - minilwc: false - startinv: false - sammelfieber: - item: AIR - money: 100 -nether: - enabled: false \ No newline at end of file diff --git a/src/main/resources/items.yml b/src/main/resources/items.yml deleted file mode 100644 index 9f5a9ae..0000000 --- a/src/main/resources/items.yml +++ /dev/null @@ -1,114 +0,0 @@ -items: - - BEDROCK - - BUDDING_AMETHYST - - PETRIFIED_OAK_SLAB - - CHORUS_PLANT - - SPAWNER - - FARMLAND - - INFESTED_STONE - - INFESTED_COBBLESTONE - - INFESTED_STONE_BRICKS - - INFESTED_MOSSY_STONE_BRICKS - - INFESTED_CRACKED_STONE_BRICKS - - INFESTED_CHISELED_STONE_BRICKS - - INFESTED_DEEPSLATE - - REINFORCED_DEEPSLATE - - END_PORTAL_FRAME - - COMMAND_BLOCK - - BARRIER - - LIGHT - - DIRT_PATH - - REPEATING_COMMAND_BLOCK - - CHAIN_COMMAND_BLOCK - - STRUCTURE_VOID - - STRUCTURE_BLOCK - - JIGSAW - - BUNDLE - - ALLAY_SPAWN_EGG - - AXOLOTL_SPAWN_EGG - - BAT_SPAWN_EGG - - BEE_SPAWN_EGG - - BLAZE_SPAWN_EGG - - CAT_SPAWN_EGG - - CAVE_SPIDER_SPAWN_EGG - - CHICKEN_SPAWN_EGG - - COD_SPAWN_EGG - - COW_SPAWN_EGG - - CREEPER_SPAWN_EGG - - DOLPHIN_SPAWN_EGG - - DONKEY_SPAWN_EGG - - DROWNED_SPAWN_EGG - - ELDER_GUARDIAN_SPAWN_EGG - - ENDERMAN_SPAWN_EGG - - ENDERMITE_SPAWN_EGG - - EVOKER_SPAWN_EGG - - FOX_SPAWN_EGG - - FROG_SPAWN_EGG - - GHAST_SPAWN_EGG - - GLOW_SQUID_SPAWN_EGG - - GOAT_SPAWN_EGG - - GUARDIAN_SPAWN_EGG - - HOGLIN_SPAWN_EGG - - HORSE_SPAWN_EGG - - HUSK_SPAWN_EGG - - LLAMA_SPAWN_EGG - - MAGMA_CUBE_SPAWN_EGG - - MOOSHROOM_SPAWN_EGG - - MULE_SPAWN_EGG - - OCELOT_SPAWN_EGG - - PANDA_SPAWN_EGG - - PARROT_SPAWN_EGG - - PHANTOM_SPAWN_EGG - - PIG_SPAWN_EGG - - PIGLIN_SPAWN_EGG - - PIGLIN_BRUTE_SPAWN_EGG - - PILLAGER_SPAWN_EGG - - POLAR_BEAR_SPAWN_EGG - - PUFFERFISH_SPAWN_EGG - - RABBIT_SPAWN_EGG - - RAVAGER_SPAWN_EGG - - SALMON_SPAWN_EGG - - SHEEP_SPAWN_EGG - - SHULKER_SPAWN_EGG - - SILVERFISH_SPAWN_EGG - - SKELETON_SPAWN_EGG - - SKELETON_HORSE_SPAWN_EGG - - SLIME_SPAWN_EGG - - SPIDER_SPAWN_EGG - - SQUID_SPAWN_EGG - - STRAY_SPAWN_EGG - - STRIDER_SPAWN_EGG - - TADPOLE_SPAWN_EGG - - TRADER_LLAMA_SPAWN_EGG - - TROPICAL_FISH_SPAWN_EGG - - TURTLE_SPAWN_EGG - - VEX_SPAWN_EGG - - VILLAGER_SPAWN_EGG - - VINDICATOR_SPAWN_EGG - - WANDERING_TRADER_SPAWN_EGG - - WARDEN_SPAWN_EGG - - WITCH_SPAWN_EGG - - WITHER_SKELETON_SPAWN_EGG - - WOLF_SPAWN_EGG - - ZOGLIN_SPAWN_EGG - - ZOMBIE_SPAWN_EGG - - ZOMBIE_HORSE_SPAWN_EGG - - ZOMBIE_VILLAGER_SPAWN_EGG - - ZOMBIFIED_PIGLIN_SPAWN_EGG - - PLAYER_HEAD - - COMMAND_BLOCK_MINECART - - KNOWLEDGE_BOOK - - DEBUG_STICK - - GLOBE_BANNER_PATTERN - - FROGSPAWN - - CAMEL_SPAWN_EGG - - ENDER_DRAGON_SPAWN_EGG - - WITHER_SPAWN_EGG - - IRON_GOLEM_SPAWN_EGG - - SNOW_GOLEM_SPAWN_EGG - - SUSPICIOUS_SAND - - SNIFFER_SPAWN_EGG - - BREEZE_SPAWN_EGG - - TRIAL_SPAWNER - - ARMADILLO_SPAWN_EGG - - BOGGED_SPAWN_EGG \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml deleted file mode 100644 index f62427f..0000000 --- a/src/main/resources/plugin.yml +++ /dev/null @@ -1,74 +0,0 @@ -name: ${artifactId} -main: ${mainClass} -version: ${project.version} -author: ${project.author} -api-version: 1.16 -depend: [CubesideUtils, VanishNoPacket, GlobalPort, CubesideNMSUtils, PlayerUUIDCache] -softdepend: [CubesideStatistics] -commands: - hp: - description: Verwalte die HP eines Spielers - usage: Benutze /hp get/add/remove/set/max [Spieler] [Wert] - coords: - description: Teile oder speichere deine Position! - usage: Benutze /coords share/get/save/delete [Name] - settings: - description: Verwalte die Plugineinstellungen - usage: Benutze /settings Get/Crafting/Trading/DeathFall/DMGOnSneak/Respawn/OneLife/ChatDMG [True/False] - revive: - description: Wiederbelebe einen gestorbenen Spieler! - usage: Benutze /revive [world] [x] [y] [z] - timer: - description: Verwalte den Timer - usage: Benutze /timer resume/pause/reset/set [Zeit in Sekunden] - challenges: - description: Main Command - usage: Benutze /Challenges - aliases: [challenge, c] - adventure: - description: Main Command alias - usage: Benutze /adventure - aliases: [adventure, a] - backpack: - description: Oeffne ein Backpack - usage: Benutze /backpack oder /bp - aliases: [bp] - reset: - description: Setzte die Welt zurueck - usage: Benutze /Reset - aliases: - - stop - forcemlg: - description: Triggert einen MLG - usage: Use /forcemlg - editor: - description: Editor Befehl - usage: Use /editor - leave: - description: Spiel verlassen - usage: Use /leave - aliases: - - l - kick: - description: Spieler Kicken - usage: Use /kick - event: - description: Event - usage: Use /event - bingo: - description: Bingo - usage: Use /bingo - village: - description: Village - usage: /village - aliases: - - dorf - nether: - description: Spiele die Challenge vom Nether ins End durch - usage: Use /nether - test: - description: test command - skipitem: - description: skip item in All Items Challenge! - unlock: - cremove: \ No newline at end of file diff --git a/src/main/resources/rnddrops.yml b/src/main/resources/rnddrops.yml deleted file mode 100644 index e69de29..0000000 --- a/src/main/resources/rnddrops.yml +++ /dev/null diff --git a/src/main/resources/serverconfig.yml b/src/main/resources/serverconfig.yml deleted file mode 100644 index 9bf7a84..0000000 --- a/src/main/resources/serverconfig.yml +++ /dev/null @@ -1,2 +0,0 @@ -# ServerTyes: ADVENTURE, CHALLENGE, CHALLENGE_EVENT -servertype: CHALLENGE \ No newline at end of file diff --git a/todo.txt b/todo.txt deleted file mode 100644 index 4c93f1e..0000000 --- a/todo.txt +++ /dev/null @@ -1,6 +0,0 @@ -Rucksack abspeichern Fixen. -TexturePack laden Fixen. -Welten abspeichern überarbeiten. (Ohne VIP ein Slot + Autosave - mit VIP 3 Slots + Autosave). (Maps die mit namen abgespeichert werden in eine Admin GUI Packen.) -Eigene Plugin config für Server info. -für Adventure eigene Configs in dennen alle Map infos Stehen (Spawnpoint, Gamemode, Map Name, Map Typ, Map Icon...) -Autovanish Fixen.. wie auch immer xD \ No newline at end of file