diff --git a/pom.xml b/pom.xml index 263cd01..3fa8bf1 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ io.papermc.paper paper-api - 1.20.4-R0.1-SNAPSHOT + 1.20.5-R0.1-SNAPSHOT provided @@ -87,9 +87,9 @@ org.apache.maven.plugins maven-compiler-plugin - 3.11.0 + 3.13.0 - 17 + 21 diff --git a/src/main/java/de/fanta/challenges/Challenges.java b/src/main/java/de/fanta/challenges/Challenges.java index 44f59a6..ad81405 100644 --- a/src/main/java/de/fanta/challenges/Challenges.java +++ b/src/main/java/de/fanta/challenges/Challenges.java @@ -26,6 +26,11 @@ import de.iani.cubesidestats.api.CubesideStatisticsAPI; import de.iani.playerUUIDCache.PlayerUUIDCache; import de.speedy64.globalport.GlobalApi; +import net.kyori.adventure.key.Key; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; +import net.kyori.adventure.text.format.TextColor; +import net.kyori.adventure.translation.TranslationRegistry; import org.apache.commons.io.FileUtils; import org.bukkit.BanList; import org.bukkit.Bukkit; @@ -69,6 +74,7 @@ public CancellableTask resetTask; public boolean reset = false; private String PREFIX; + private TextComponent prefixComponent; private String GUIPREFIX; private File backpackConfigFile; private FileConfiguration BackpackConfig; @@ -112,6 +118,8 @@ private Path challengeSavePath = new File("/home/storagebox/Challenge-saves").toPath(); private Path adventureSavePath = new File("/home/storagebox/Adventure-saves/").toPath(); + private TranslationRegistry translationRegistry; + public static Challenges getPlugin() { return plugin; } @@ -153,6 +161,7 @@ String prefix = serverType.getPrefix(); PREFIX = ChatUtil.BLUE + "[" + ChatUtil.GREEN + prefix + ChatUtil.BLUE + "]"; + prefixComponent = Component.text("[").color(TextColor.color(ChatUtil.BLUE.getColor().getRGB())).append(Component.text(prefix).color(TextColor.color(ChatUtil.GREEN.getColor().getRGB()))).append(Component.text("] ").color(TextColor.color(ChatUtil.BLUE.getColor().getRGB()))); GUIPREFIX = ChatUtil.GREEN + prefix; createRndDropsConfig(); @@ -164,6 +173,9 @@ new CommandRegistration(this).registerCommands(); new EventRegistration(this).registerEvents(); + translationRegistry = TranslationRegistry.create(Key.key("challenge")); + new Translations(translationRegistry).registerTranslations(); + this.backpack.loadInventoryFromConfig(); this.sbManager = new BukkitScoreBoardManager(this); @@ -604,6 +616,10 @@ return PREFIX; } + public TextComponent getPrefixComponent() { + return prefixComponent; + } + public String getGUIPREFIX() { return GUIPREFIX; } @@ -689,4 +705,8 @@ public Path getChallengeSavePath() { return challengeSavePath; } + + public TranslationRegistry getTranslationRegistry() { + return translationRegistry; + } } diff --git a/src/main/java/de/fanta/challenges/Translations.java b/src/main/java/de/fanta/challenges/Translations.java new file mode 100644 index 0000000..995d2ba --- /dev/null +++ b/src/main/java/de/fanta/challenges/Translations.java @@ -0,0 +1,15 @@ +package de.fanta.challenges; + +import net.kyori.adventure.translation.TranslationRegistry; +import org.bukkit.event.entity.EntityDamageEvent; + +import java.text.MessageFormat; +import java.util.Locale; + +public record Translations(TranslationRegistry registry) { + + public void registerTranslations() { + registry.register("damagecause." + EntityDamageEvent.DamageCause.FALL.name().toLowerCase(), Locale.ENGLISH, new MessageFormat("Fall damage")); + registry.register("damagecause." + EntityDamageEvent.DamageCause.FALL.name().toLowerCase(), Locale.GERMAN, new MessageFormat("Fallschaden")); + } +} diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/BingoChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/BingoChallengeEvent.java index db2d876..cd4c910 100644 --- a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/BingoChallengeEvent.java +++ b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/BingoChallengeEvent.java @@ -27,6 +27,7 @@ import org.bukkit.event.player.PlayerBucketEntityEvent; import org.bukkit.event.player.PlayerBucketFillEvent; import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; @@ -95,7 +96,7 @@ } @EventHandler - public void onPickUpItem(PlayerAttemptPickupItemEvent e) { + public void onPickUpItem(PlayerPickupItemEvent e) { ItemStack itemStack = e.getItem().getItemStack(); Player player = e.getPlayer(); if (isRunning()) { diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DeathrunChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DeathrunChallengeEvent.java index 237d870..b77df38 100644 --- a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DeathrunChallengeEvent.java +++ b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DeathrunChallengeEvent.java @@ -36,6 +36,7 @@ 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; @@ -65,6 +66,7 @@ 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) { @@ -141,6 +143,14 @@ } @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); @@ -165,7 +175,6 @@ } } } else { - World world = Bukkit.getWorld("world"); plugin.getScheduler().run(() -> world.setGameRule(GameRule.MAX_ENTITY_CRAMMING, Bukkit.getServer().getMaxPlayers())); plugin.getScheduler().runGlobalDelayed(() -> { for (Player pp : Bukkit.getOnlinePlayers()) { @@ -266,8 +275,8 @@ } - public static void load() { - World world = Bukkit.getWorld("world"); + public static void load(Player player) { + world = player.getWorld(); spawnLocation = world.getSpawnLocation(); int height = world.getMaxHeight() - world.getMinHeight(); 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 index 359ca87..521fd5f 100644 --- a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/forcequest/ForceQuestChallengeEvent.java +++ b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/forcequest/ForceQuestChallengeEvent.java @@ -9,13 +9,18 @@ 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.guiutils.AbstractWindow; import de.fanta.challenges.utils.guiutils.GUIUtils; import de.iani.cubesideutils.StringUtil; 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.TextColor; +import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Bukkit; -import org.bukkit.Effect; import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; @@ -24,9 +29,6 @@ import org.bukkit.Sound; import org.bukkit.block.Biome; import org.bukkit.block.Block; -import org.bukkit.boss.BarColor; -import org.bukkit.boss.BarStyle; -import org.bukkit.boss.BossBar; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Entity; @@ -37,7 +39,6 @@ import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.entity.EntityDismountEvent; @@ -52,6 +53,7 @@ import org.bukkit.event.player.PlayerAttemptPickupItemEvent; 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; @@ -117,11 +119,18 @@ 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()) { @@ -149,7 +158,7 @@ } for (PotionEffectType potionEffectType : PotionEffectType.values()) { - if (potionEffectType != PotionEffectType.LUCK && potionEffectType != PotionEffectType.UNLUCK) { + if (!potionEffectType.isInstant() && potionEffectType != PotionEffectType.LUCK && potionEffectType != PotionEffectType.UNLUCK) { potionEffectTypes.add(potionEffectType); } } @@ -214,11 +223,21 @@ 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()); @@ -229,14 +248,20 @@ 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 -> - locationByPlayerList.put(player.getUniqueId(), getRandomLocationAroundPlayer(player, 350)); + case ForceLocation -> { + Location location = getRandomLocationAroundPlayer(player, 350); + locationByPlayerList.put(player.getUniqueId(), location); + CoordsTargeter.addLocation(player.getUniqueId(), location, false); + } + } } @@ -247,7 +272,7 @@ PROBABILITY_MAP = new TreeMap<>(Comparator.reverseOrder()); MAX_PROBABILITY = 0; - for (QuestType questType : QuestType.values()) { + for (QuestType questType : activeQuestTypes) { PROBABILITY_MAP.put(MAX_PROBABILITY, questType); MAX_PROBABILITY += questType.getProbability(); } @@ -365,6 +390,27 @@ } 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()); + } + + } } } @@ -556,7 +602,6 @@ removeArmorStand(e.getEntity()); - Player player = e.getPlayer(); QuestType questType = playerQuest.get(player.getUniqueId()); if (questType == QuestType.ForceDeath) { @@ -605,6 +650,9 @@ 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(); } } @@ -782,24 +830,30 @@ } } - private static void selectItem(Player player, Material pickupItem) { + 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); - ChatUtil.sendNormalMessage(player, "Item: " + ChatUtil.BLUE + StringUtil.capitalizeFirstLetter(pickupItem.name(), true) + ChatUtil.GREEN + " wurde Registriert"); + TextComponent textComponent = Component.text("Item: ").color(TextColor.color(ChatUtil.GREEN.getColor().getRGB())).append(Component.translatable(pickupItem.translationKey()).color(TextColor.color(ChatUtil.BLUE.getColor().getRGB()))).append(Component.text(" wurde Registriert").color(TextColor.color(ChatUtil.GREEN.getColor().getRGB()))); + ChatUtil.sendComponentMessage(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); - ChatUtil.sendNormalMessage(player, "Biom: " + ChatUtil.BLUE + StringUtil.capitalizeFirstLetter(biome.name(), true) + ChatUtil.GREEN + " wurde Registriert"); + TextComponent textComponent = Component.text("Biom: ").color(TextColor.color(ChatUtil.GREEN.getColor().getRGB())).append(Component.translatable(biome.translationKey()).color(TextColor.color(ChatUtil.BLUE.getColor().getRGB()))).append(Component.text(" wurde Registriert").color(TextColor.color(ChatUtil.GREEN.getColor().getRGB()))); + ChatUtil.sendComponentMessage(player, textComponent); finishQuest(player); } } @@ -807,10 +861,12 @@ 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); - ChatUtil.sendNormalMessage(player, "Mob: " + ChatUtil.BLUE + StringUtil.capitalizeFirstLetter(entityType.name(), true) + ChatUtil.GREEN + " wurde Registriert"); + TextComponent textComponent = Component.text("Mob: ").color(TextColor.color(ChatUtil.GREEN.getColor().getRGB())).append(Component.translatable(entityType.translationKey()).color(TextColor.color(ChatUtil.BLUE.getColor().getRGB()))).append(Component.text(" wurde Registriert").color(TextColor.color(ChatUtil.GREEN.getColor().getRGB()))); + ChatUtil.sendComponentMessage(player, textComponent); finishQuest(player); } } @@ -818,10 +874,12 @@ 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); - ChatUtil.sendNormalMessage(player, "Effect: " + ChatUtil.BLUE + StringUtil.capitalizeFirstLetter(potionEffectType.getKey().getKey(), true) + ChatUtil.GREEN + " wurde Registriert"); + TextComponent textComponent = Component.text("Effect: ").color(TextColor.color(ChatUtil.GREEN.getColor().getRGB())).append(Component.translatable(potionEffectType.translationKey()).color(TextColor.color(ChatUtil.BLUE.getColor().getRGB()))).append(Component.text(" wurde Registriert").color(TextColor.color(ChatUtil.GREEN.getColor().getRGB()))); + ChatUtil.sendComponentMessage(player, textComponent); finishQuest(player); } } @@ -829,6 +887,7 @@ 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); @@ -839,10 +898,11 @@ private static void selectLocation(Player player, Location location) { Location playerLocation = locationByPlayerList.get(player.getUniqueId()); - if (location.clone().toCenterLocation().distance(playerLocation.clone().toCenterLocation()) <= 0.5) { + 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.sendNormalMessage(player, "Location: " + ChatUtil.BLUE + locationString + ChatUtil.GREEN + " wurde Registriert"); + CoordsTargeter.removeLocation(player.getUniqueId()); finishQuest(player); } } @@ -860,63 +920,64 @@ private static void updateBossBar() { ScoreManager scoreManager = plugin.getScoreManager(); for (Player player : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { - String bossBarTitle = "Es ist ein Fehler aufgetreten :("; + TextComponent bossBarTitle = Component.text("Es ist ein Fehler aufgetreten :(").color(TextColor.color(ChatUtil.RED.getColor().getRGB())).decoration(TextDecoration.ITALIC, false); QuestType questType = playerQuest.get(player.getUniqueId()); switch (questType) { case ForceItem -> { Material material = itemByPlayerList.get(player.getUniqueId()); if (material != null) { - bossBarTitle = ChatUtil.GREEN + ">> ForceItem: " + StringUtil.capitalizeFirstLetter(material.name(), true) + ChatUtil.GREEN + " <<" + " | " + ChatUtil.GREEN + "Position: " + ChatUtil.BLUE + (scoreManager.getPosition(new ChallengePlayer(player.getUniqueId()))); + bossBarTitle = getBossBarTitle(">> ForceItem: ", material.translationKey(), scoreManager.getPosition(new ChallengePlayer(player.getUniqueId()))); } } case ForceBiome -> { Biome biome = biomeByPlayerList.get(player.getUniqueId()); if (biome != null) { - bossBarTitle = ChatUtil.GREEN + ">> ForceBiome: " + ChatUtil.BLUE + StringUtil.capitalizeFirstLetter(biome.name(), true) + ChatUtil.GREEN + " <<" + " | " + ChatUtil.GREEN + "Position: " + ChatUtil.BLUE + (scoreManager.getPosition(new ChallengePlayer(player.getUniqueId()))); + bossBarTitle = getBossBarTitle(">> ForceBiome: ", biome.translationKey(), scoreManager.getPosition(new ChallengePlayer(player.getUniqueId()))); } } case ForceMob -> { EntityType entityType = entityTypeByPlayerList.get(player.getUniqueId()); if (entityType != null) { - bossBarTitle = ChatUtil.GREEN + ">> ForceMob: " + ChatUtil.BLUE + StringUtil.capitalizeFirstLetter(entityType.name(), true) + ChatUtil.GREEN + " <<" + " | " + ChatUtil.GREEN + "Position: " + ChatUtil.BLUE + (scoreManager.getPosition(new ChallengePlayer(player.getUniqueId()))); + bossBarTitle = getBossBarTitle(">> ForceMob: ", entityType.translationKey(), scoreManager.getPosition(new ChallengePlayer(player.getUniqueId()))); } } case ForceEffect -> { PotionEffectType potionEffectType = potionEffectTypeByPlayerList.get(player.getUniqueId()); if (potionEffectType != null) { - bossBarTitle = ChatUtil.GREEN + ">> ForceEffect: " + ChatUtil.BLUE + StringUtil.capitalizeFirstLetter(potionEffectType.getKey().getKey(), true) + ChatUtil.GREEN + " <<" + " | " + ChatUtil.GREEN + "Position: " + ChatUtil.BLUE + (scoreManager.getPosition(new ChallengePlayer(player.getUniqueId()))); + bossBarTitle = getBossBarTitle(">> ForceEffect: ", potionEffectType.translationKey(), scoreManager.getPosition(new ChallengePlayer(player.getUniqueId()))); } } case ForceDeath -> { EntityDamageEvent.DamageCause damageCause = damageCauseByPlayerList.get(player.getUniqueId()); if (damageCause != null) { - bossBarTitle = ChatUtil.GREEN + ">> ForceDeath: " + ChatUtil.BLUE + StringUtil.capitalizeFirstLetter(damageCause.name(), true) + ChatUtil.GREEN + " <<" + " | " + ChatUtil.GREEN + "Position: " + ChatUtil.BLUE + (scoreManager.getPosition(new ChallengePlayer(player.getUniqueId()))); + bossBarTitle = getBossBarTitle(">> ForceDeath: ", 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 = "X: " + block.getX() + ", Y: " + block.getY() + ", Z: " + block.getZ(); - bossBarTitle = ChatUtil.GREEN + ">> ForceLocation: " + ChatUtil.BLUE + locationString + ChatUtil.GREEN + " <<" + " | " + ChatUtil.GREEN + "Position: " + ChatUtil.BLUE + (scoreManager.getPosition(new ChallengePlayer(player.getUniqueId()))); - + String locationString = "Welt: " + StringUtil.capitalizeFirstLetter(location.getWorld().getName(), true) + " X: " + block.getX() + ", Y: " + block.getY() + ", Z: " + block.getZ(); + bossBarTitle = getBossBarTitle(">> ForceLocation: ", locationString, scoreManager.getPosition(new ChallengePlayer(player.getUniqueId()))); } } } BossBar bossBar = bossBarMap.computeIfAbsent(player.getUniqueId(), bossPlayer -> { - BossBar newBossBar = Bukkit.createBossBar("", BarColor.GREEN, BarStyle.SOLID); - newBossBar.setVisible(true); - newBossBar.addPlayer(player); + BossBar newBossBar = BossBar.bossBar(Component.newline(), 1.0f, BossBar.Color.GREEN, BossBar.Overlay.PROGRESS); + newBossBar.addViewer(player); return newBossBar; }); - if (!bossBar.getPlayers().contains(player)) { - bossBar.addPlayer(player); - } - bossBar.setTitle(bossBarTitle); + + bossBar.addViewer(player); + bossBar.name(bossBarTitle); } } + private static TextComponent getBossBarTitle(String title, String key, int pos) { + return Component.text(title).color(TextColor.color(ChatUtil.GREEN.getColor().getRGB())).append(Component.translatable(key).color(TextColor.color(ChatUtil.BLUE.getColor().getRGB()))).append(Component.text(" << | Position: ").color(TextColor.color(ChatUtil.GREEN.getColor().getRGB()))).append(Component.text(pos).color(TextColor.color(ChatUtil.BLUE.getColor().getRGB()))); + } + public void removeArmorStand(Player player) { if (!player.getPassengers().isEmpty()) { dismountAllowList.add(player); diff --git a/src/main/java/de/fanta/challenges/challenges/MLGChallenge.java b/src/main/java/de/fanta/challenges/challenges/MLGChallenge.java index a0bc8e9..626999c 100644 --- a/src/main/java/de/fanta/challenges/challenges/MLGChallenge.java +++ b/src/main/java/de/fanta/challenges/challenges/MLGChallenge.java @@ -18,13 +18,13 @@ 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 org.spigotmc.event.entity.EntityMountEvent; import java.util.ArrayList; import java.util.HashMap; diff --git a/src/main/java/de/fanta/challenges/challenges/RandomEffectChallenge.java b/src/main/java/de/fanta/challenges/challenges/RandomEffectChallenge.java index b4d39d3..828cd85 100644 --- a/src/main/java/de/fanta/challenges/challenges/RandomEffectChallenge.java +++ b/src/main/java/de/fanta/challenges/challenges/RandomEffectChallenge.java @@ -26,7 +26,7 @@ if (Config.getBoolean("randomeffect") && plugin.getTimer().isRunning() && !plugin.getVanish().isVanish(p)) { long chunkkey = p.getLocation().getChunk().getChunkKey(); Random random = new Random(); - PotionEffectType[] values = Arrays.stream(PotionEffectType.values()).filter(effect -> (!effect.equals(PotionEffectType.HARM))).toArray(PotionEffectType[]::new); + PotionEffectType[] values = Arrays.stream(PotionEffectType.values()).filter(effect -> (!effect.equals(PotionEffectType.INSTANT_DAMAGE))).toArray(PotionEffectType[]::new); PotionEffect randomEffect = new PotionEffect(values[random.nextInt((int) Arrays.stream(values).count())], 999999, random.nextInt(5)); if (!chunkPotionEffectMap.containsKey(chunkkey)) { chunkPotionEffectMap.put(chunkkey, randomEffect); diff --git a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesCommand.java b/src/main/java/de/fanta/challenges/commands/challenges/ChallengesCommand.java index 8b3fc8c..7c1d4fb 100644 --- a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesCommand.java +++ b/src/main/java/de/fanta/challenges/commands/challenges/ChallengesCommand.java @@ -26,27 +26,7 @@ public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { ChatUtil.sendNormalMessage(sender, "Challenges v" + plugin.getPluginMeta().getVersion() + " by " + (plugin.getPluginMeta().getAuthors() + "").replace("[", "").replace("]", "")); ChatUtil.sendNormalMessage(sender, "Nutze /challenges help für Hilfe"); - - if (sender instanceof Player player) { - createCopperGrid(player.getLocation(), 10); - } - return true; } - public static void createCopperGrid(Location center, int gridSize) { - int distance = 5; // Abstand zwischen den Kupferblöcken - - int startX = center.getBlockX() - (gridSize / 2) * distance; - int startZ = center.getBlockZ() - (gridSize / 2) * distance; - - for (int x = 0; x < gridSize; x++) { - for (int z = 0; z < gridSize; z++) { - Location blockLocation = new Location(center.getWorld(), startX + x * distance, center.getBlockY(), startZ + z * distance); - Block block = blockLocation.getBlock(); - block.setType(Material.COPPER_BLOCK); - } - } - } - } diff --git a/src/main/java/de/fanta/challenges/guis/TimerGui.java b/src/main/java/de/fanta/challenges/guis/TimerGui.java index 202ef4e..e93f215 100644 --- a/src/main/java/de/fanta/challenges/guis/TimerGui.java +++ b/src/main/java/de/fanta/challenges/guis/TimerGui.java @@ -67,8 +67,8 @@ ChatUtil.sendWarningMessage(plugin.getCurrentEditor(), "Diese Challenge wird nicht mehr als Speed Run gezählt, da du etwas am Timer geändert hast."); } } - rebuildInventory(); } + rebuildInventory(); } case SHOW_TIMER_INDEX -> { if (Config.getBoolean("showtimer")) { diff --git a/src/main/java/de/fanta/challenges/guis/eventgui/EventGui.java b/src/main/java/de/fanta/challenges/guis/eventgui/EventGui.java index 90484e7..c826ff9 100644 --- a/src/main/java/de/fanta/challenges/guis/eventgui/EventGui.java +++ b/src/main/java/de/fanta/challenges/guis/eventgui/EventGui.java @@ -185,7 +185,7 @@ if (!Objects.equals(Config.getString("event.type"), "deathrun")) { Config.setValue("event.type", "deathrun"); ChatUtil.sendTitleToAll("Event", "Laufe so weit wie möglich ohne zu sterben!", ChatUtil.GREEN); - DeathrunChallengeEvent.load(); + DeathrunChallengeEvent.load(p); } else { ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits"); } @@ -217,7 +217,7 @@ case FORCE_ITEM_INDEX -> { if (!Objects.equals(Config.getString("event.type"), "forcequest")) { Config.setValue("event.type", "forcequest"); - ChatUtil.sendTitleToAll("Event", "Force Item", ChatUtil.GREEN); + ChatUtil.sendTitleToAll("Event", "Force Quest", ChatUtil.GREEN); } else { ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits"); } @@ -264,7 +264,7 @@ } case FORCE_ITEM_SETTINGS_INDEX -> { if (Objects.equals(Config.getString("event.type"), "forcequest")) { - new ForceItemSettingsGui(p).open(); + new ForceQuestSettingsGui(p).open(); } } case TEAM_INDEX -> new TeamSettingsGUI(p).open(); diff --git a/src/main/java/de/fanta/challenges/guis/eventgui/ForceItemSettingsGui.java b/src/main/java/de/fanta/challenges/guis/eventgui/ForceItemSettingsGui.java deleted file mode 100644 index c8efdf1..0000000 --- a/src/main/java/de/fanta/challenges/guis/eventgui/ForceItemSettingsGui.java +++ /dev/null @@ -1,82 +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.utils.ChatUtil; -import de.fanta.challenges.utils.guiutils.AbstractWindow; -import de.fanta.challenges.utils.guiutils.GUIUtils; -import de.iani.cubesideutils.bukkit.items.CustomHeads; -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 ForceItemSettingsGui extends AbstractWindow { - private static final Challenges plugin = Challenges.getPlugin(); - - private static final int ADD_SKIP_INDEX = 2; - private static final int SKIP_COUNT_INDEX = 5; - private static final int REMOVE_SKIP_INDEX = 8; - - private static final int BACK_INDEX = 6; - - public ForceItemSettingsGui(Player player) { - super(player, Bukkit.createInventory(player, InventoryType.DISPENSER, plugin.getGUIPREFIX() + " >> 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 BACK_INDEX -> new EventGui(getPlayer()).open(); - default -> { - } - } - } - - @Override - protected void rebuildInventory() { - for (int i = 0; i < 9; i++) { - ItemStack item; - switch (i) { - case ADD_SKIP_INDEX -> item = CustomHeads.RAINBOW_ARROW_UP.getHead(ChatUtil.GREEN + "Add Skip"); - case REMOVE_SKIP_INDEX -> item = CustomHeads.RAINBOW_ARROW_DOWN.getHead(ChatUtil.RED + "Remove Skip"); - - case SKIP_COUNT_INDEX -> { - ItemStack stack = new ItemStack(Material.STRUCTURE_VOID, ForceQuestChallengeEvent.skipQuestCount); - ItemMeta meta = stack.getItemMeta(); - meta.setDisplayName("" + ChatUtil.BLUE + ForceQuestChallengeEvent.skipQuestCount + "x " + ChatUtil.GREEN + "Skip Item"); - stack.setItemMeta(meta); - item = stack; - } - case BACK_INDEX -> item = CustomHeads.RAINBOW_ARROW_BACKWARD_II.getHead(ChatUtil.GREEN + "Zurück"); - default -> item = GUIUtils.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 new file mode 100644 index 0000000..b715c45 --- /dev/null +++ b/src/main/java/de/fanta/challenges/guis/eventgui/ForceQuestSettingsGui.java @@ -0,0 +1,179 @@ +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.guiutils.AbstractWindow; +import de.fanta.challenges.utils.guiutils.GUIUtils; +import de.iani.cubesideutils.bukkit.items.CustomHeads; +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 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() + " >> 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(ChatUtil.GREEN + "Add Skip"); + case REMOVE_SKIP_INDEX -> item = CustomHeads.RAINBOW_ARROW_DOWN.getHead(ChatUtil.RED + "Remove Skip"); + + case SKIP_COUNT_INDEX -> { + ItemStack stack = new ItemStack(Material.STRUCTURE_VOID, ForceQuestChallengeEvent.skipQuestCount); + ItemMeta meta = stack.getItemMeta(); + meta.setDisplayName("" + ChatUtil.BLUE + ForceQuestChallengeEvent.skipQuestCount + "x " + ChatUtil.GREEN + "Skip Item"); + stack.setItemMeta(meta); + item = stack; + } + case FORCE_ITEM_INDEX -> { + if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceItem)) { + item = GUIUtils.createGuiItem(Material.CHEST, ChatUtil.GREEN + "Force Item", true); + } else { + item = GUIUtils.createGuiItem(Material.CHEST, ChatUtil.RED + "Force Item", false); + } + } + case FORCE_BIOME_INDEX -> { + if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceBiome)) { + item = GUIUtils.createGuiItem(Material.GRASS_BLOCK, ChatUtil.GREEN + "Force Biome", true); + } else { + item = GUIUtils.createGuiItem(Material.GRASS_BLOCK, ChatUtil.RED + "Force Biome", false); + } + } + case FORCE_MOB_INDEX -> { + if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceMob)) { + item = GUIUtils.createGuiItem(Material.PIG_SPAWN_EGG, ChatUtil.GREEN + "Force Mob", true); + } else { + item = GUIUtils.createGuiItem(Material.PIG_SPAWN_EGG, ChatUtil.RED + "Force Mob", false); + } + } + case FORCE_EFFECT_INDEX -> { + if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceEffect)) { + item = GUIUtils.createGuiItem(Material.POTION, ChatUtil.GREEN + "Force Effect", true); + } else { + item = GUIUtils.createGuiItem(Material.POTION, ChatUtil.RED + "Force Effect", false); + } + } + case FORCE_DEATH_INDEX -> { + if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceDeath)) { + item = GUIUtils.createGuiItem(Material.NETHERITE_AXE, ChatUtil.GREEN + "Force Death", true); + } else { + item = GUIUtils.createGuiItem(Material.NETHERITE_AXE, ChatUtil.RED + "Force Death", false); + } + } + case FORCE_LOCATION_INDEX -> { + if (ForceQuestChallengeEvent.activeQuestTypes.contains(QuestType.ForceLocation)) { + item = GUIUtils.createGuiItem(Material.COMPASS, ChatUtil.GREEN + "Force Location", true); + } else { + item = GUIUtils.createGuiItem(Material.COMPASS, ChatUtil.RED + "Force Location", false); + } + } + case BACK_INDEX -> item = CustomHeads.RAINBOW_ARROW_BACKWARD_II.getHead(ChatUtil.GREEN + "Zurück"); + default -> item = GUIUtils.EMPTY_ICON; + } + this.getInventory().setItem(i, item); + } + } +} diff --git a/src/main/java/de/fanta/challenges/utils/ChatUtil.java b/src/main/java/de/fanta/challenges/utils/ChatUtil.java index 51dcd35..23541a8 100644 --- a/src/main/java/de/fanta/challenges/utils/ChatUtil.java +++ b/src/main/java/de/fanta/challenges/utils/ChatUtil.java @@ -2,6 +2,7 @@ import de.fanta.challenges.Challenges; import de.iani.cubesideutils.bukkit.ChatUtilBukkit; +import net.kyori.adventure.text.TextComponent; import net.md_5.bungee.api.ChatColor; import org.bukkit.Bukkit; import org.bukkit.Sound; @@ -47,6 +48,11 @@ } } + public static void sendComponentMessage(CommandSender sender, TextComponent component) { + //ChatUtilBukkit.sendMessageToPlayers(sender, component); + sender.sendMessage(Challenges.getPlugin().getPrefixComponent().append(component)); + } + public static void sendBrodcastMessage(Object... messageParts) { for (Player player : Bukkit.getOnlinePlayers()) { sendMessage(player, GREEN.toString(), messageParts); diff --git a/src/main/java/de/fanta/challenges/utils/CoordsTargeter.java b/src/main/java/de/fanta/challenges/utils/CoordsTargeter.java index a531eef..2676105 100644 --- a/src/main/java/de/fanta/challenges/utils/CoordsTargeter.java +++ b/src/main/java/de/fanta/challenges/utils/CoordsTargeter.java @@ -11,6 +11,8 @@ 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; @@ -18,6 +20,7 @@ private static final Challenges plugin = Challenges.getPlugin(); private static final HashMap locationMap = new HashMap<>(); + private static final Collection autoDetectionList = new ArrayList<>(); private CancellableTask task; @@ -55,11 +58,11 @@ Vibration vibration = new Vibration(new Vibration.Destination.BlockDestination(targetLocation.getBlock()), distance * 2); p.spawnParticle(Particle.VIBRATION, playerlocation, 1, vibration); - if (distance < 5) { + if (autoDetectionList.contains(p.getUniqueId()) && distance < 5) { removeLocation(p.getUniqueId()); ChatUtil.sendNormalMessage(p, "Sie haben ihr Ziel erreicht!"); } - } else { + } 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!"); } @@ -79,11 +82,20 @@ } 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) { diff --git a/src/main/resources/items.yml b/src/main/resources/items.yml index aa4cdba..5c6d2c0 100644 --- a/src/main/resources/items.yml +++ b/src/main/resources/items.yml @@ -107,4 +107,7 @@ - IRON_GOLEM_SPAWN_EGG - SNOW_GOLEM_SPAWN_EGG - SUSPICIOUS_SAND - - SNIFFER_SPAWN_EGG \ No newline at end of file + - SNIFFER_SPAWN_EGG + - TRIAL_KEY + - BREEZE_SPAWN_EGG + - TRIAL_SPAWNER \ No newline at end of file