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