diff --git a/src/main/java/de/fanta/challenges/challenges/RandomDropsChallenge.java b/src/main/java/de/fanta/challenges/challenges/RandomDropsChallenge.java index 4df7d58..ed1c663 100644 --- a/src/main/java/de/fanta/challenges/challenges/RandomDropsChallenge.java +++ b/src/main/java/de/fanta/challenges/challenges/RandomDropsChallenge.java @@ -8,7 +8,10 @@ import java.util.Random; import java.util.stream.Collectors; +import com.destroystokyo.paper.event.block.BlockDestroyEvent; import de.fanta.challenges.Challenges; +import io.papermc.paper.event.block.BlockBreakBlockEvent; +import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.configuration.file.FileConfiguration; @@ -42,6 +45,22 @@ } @EventHandler + public void onBlockBreakBlock(BlockBreakBlockEvent e) { + if (this.plugin.getConfig().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 onBlockDestroy(BlockDestroyEvent e) { + if (this.plugin.getConfig().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.setCancelled(true); + } + } */ + + @EventHandler public void onBlockExplode(BlockExplodeEvent e) { if (this.plugin.getConfig().getBoolean("rnddrops") && plugin.getTimer().isRunning()) { e.blockList().forEach(block -> { diff --git a/src/main/java/de/fanta/challenges/challenges/WorldBorderLevelChallenge.java b/src/main/java/de/fanta/challenges/challenges/WorldBorderLevelChallenge.java index 3a95ca1..2ebbae8 100644 --- a/src/main/java/de/fanta/challenges/challenges/WorldBorderLevelChallenge.java +++ b/src/main/java/de/fanta/challenges/challenges/WorldBorderLevelChallenge.java @@ -1,14 +1,20 @@ package de.fanta.challenges.challenges; import de.fanta.challenges.Challenges; +import de.fanta.challenges.utils.ChatUtil; +import io.papermc.paper.event.world.border.WorldBorderBoundsChangeEvent; import org.bukkit.Bukkit; import org.bukkit.GameMode; +import org.bukkit.GameRule; import org.bukkit.OfflinePlayer; +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.PlayerExpChangeEvent; import org.bukkit.event.player.PlayerLevelChangeEvent; import java.util.ArrayList; @@ -20,29 +26,64 @@ private final Challenges plugin = Challenges.getPlugin(); @EventHandler + public void onExpChange(PlayerExpChangeEvent e) { + Player p = e.getPlayer(); + if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL && !plugin.getVanish().isVanish(p)) { + if (plugin.getConfig().getBoolean("worldborderlevel")) { + xpSync(e.getPlayer()); + } + } + } + + @EventHandler public void onLevelChange(PlayerLevelChangeEvent e) { Player p = e.getPlayer(); if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL && !plugin.getVanish().isVanish(p)) { if (plugin.getConfig().getBoolean("worldborderlevel")) { - for (World w : plugin.getServer().getWorlds()) { - if (w != null) { - WorldBorder border = w.getWorldBorder(); - border.setSize(e.getPlayer().getLevel(), 5); - } + xpSync(e.getPlayer()); + } + } + } + + @EventHandler + public void whenPlayerDeath(PlayerDeathEvent e) { + if (plugin.getConfig().getBoolean("worldborderlevel")) { + e.setKeepLevel(true); + e.setDroppedExp(0); + } + } + + @EventHandler + public void border(WorldBorderBoundsChangeEvent e) { + if (e.getNewSize() > e.getOldSize()) { + if (plugin.getConfig().getBoolean("worldborderlevel")) { + for (Player pp : Bukkit.getOnlinePlayers()) { + pp.playSound(pp.getLocation(), Sound.UI_TOAST_CHALLENGE_COMPLETE, 0.01f, 1); } } } } - private void levelaverage() { - ArrayList onlinePlayers = Bukkit.getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toCollection(ArrayList::new)); - List vanishPlayers = plugin.getVanish().getVanishPlayerList(); - onlinePlayers.removeAll(vanishPlayers); - for (String playername : onlinePlayers) { - OfflinePlayer p = Bukkit.getOfflinePlayerIfCached(playername); - if (p != null && p.getPlayer() != null) { - p.getPlayer().getLevel(); - } + private void xpSync(Player p) { + if (Bukkit.getServer().getOnlinePlayers().size() >= 2) { + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { + for (Player player : Bukkit.getOnlinePlayers()) { + if (player != p) { + player.setLevel(p.getPlayer().getLevel()); + player.setExp(p.getPlayer().getExp()); + } + } + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { + for (World w : plugin.getServer().getWorlds()) { + if (w != null) { + WorldBorder border = w.getWorldBorder(); + if (plugin.getCurrentEditor() != null) { + border.setSize(plugin.getCurrentEditor().getLevel(), 5); + } + } + } + }, 1L); + }, 1L); } } } diff --git a/src/main/java/de/fanta/challenges/challenges/bringitemsChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/bringitemsChallengeEvent.java new file mode 100644 index 0000000..13dd424 --- /dev/null +++ b/src/main/java/de/fanta/challenges/challenges/bringitemsChallengeEvent.java @@ -0,0 +1,9 @@ +package de.fanta.challenges.challenges; + +import org.bukkit.event.Listener; + +public class bringitemsChallengeEvent implements Listener { + + public static String name = "Kommt noch"; + +} diff --git a/src/main/java/de/fanta/challenges/commands/NetherToggleCommand.java b/src/main/java/de/fanta/challenges/commands/NetherToggleCommand.java index a801c9a..5a7bd01 100644 --- a/src/main/java/de/fanta/challenges/commands/NetherToggleCommand.java +++ b/src/main/java/de/fanta/challenges/commands/NetherToggleCommand.java @@ -5,7 +5,6 @@ import de.fanta.challenges.utils.guiutils.GUIUtils; import de.iani.cubesideutils.bukkit.commands.SubCommand; import de.iani.cubesideutils.commands.ArgsParser; -import net.md_5.bungee.api.ChatColor; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -26,46 +25,54 @@ @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"); + if (!(sender instanceof Player p)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); return true; } - if (enable) { - if (!plugin.getConfig().getBoolean("nether.enabled")) { - GUIUtils.setConfig("nether.enabled", true); - for (Player pp : Bukkit.getOnlinePlayers()) { - Location spawn = Bukkit.getWorlds().get(1).getSpawnLocation(); - World world = spawn.getWorld(); - 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); + if (plugin.isEditor(p) || p.hasPermission("Challenges.editor.override")) { + if (enable) { + if (!plugin.getConfig().getBoolean("nether.enabled")) { + GUIUtils.setConfig("nether.enabled", true); + for (Player pp : Bukkit.getOnlinePlayers()) { + Location spawn = Bukkit.getWorlds().get(1).getSpawnLocation(); + World world = spawn.getWorld(); + 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); } - 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); } + pp.teleport(spawn); } - pp.teleport(spawn); + GUIUtils.sendTitleToAll("Nether Challenge", "Nether-Modus aktiviert", ChatUtil.GREEN); + } else { + ChatUtil.sendErrorMessage(p, "Die Nether Challenge läuft bereits!"); + return true; } - GUIUtils.sendTitleToAll("Nether Challenge", "Nether-Modus aktiviert", ChatUtil.GREEN); } else { - ChatUtil.sendErrorMessage(p, "Die Nether Challenge läuft bereits!"); - return true; + if (plugin.getConfig().getBoolean("nether.enabled")) { + GUIUtils.setConfig("nether.enabled", false); + GUIUtils.sendTitleToAll("Nether Challenge", "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 { - if (plugin.getConfig().getBoolean("nether.enabled")) { - GUIUtils.setConfig("nether.enabled", false); - GUIUtils.sendTitleToAll("Nether Challenge", "Nether-Modus deaktiviert", ChatUtil.RED); - } else { - ChatUtil.sendErrorMessage(p, "Aktuell läuft keine Nether Challenge!"); - return true; - } + 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/event/EventSettingsCommand.java b/src/main/java/de/fanta/challenges/commands/event/EventSettingsCommand.java index 2ca6e7f..bb27523 100644 --- a/src/main/java/de/fanta/challenges/commands/event/EventSettingsCommand.java +++ b/src/main/java/de/fanta/challenges/commands/event/EventSettingsCommand.java @@ -2,6 +2,7 @@ import de.fanta.challenges.Challenges; import de.fanta.challenges.guis.eventgui.EventGui; +import de.fanta.challenges.guis.eventgui.bringitemsSettingsGui; import de.fanta.challenges.utils.ChatUtil; import de.iani.cubesideutils.bukkit.commands.SubCommand; import de.iani.cubesideutils.commands.ArgsParser; diff --git a/src/main/java/de/fanta/challenges/guis/eventgui/bringitemsSettingsGui.java b/src/main/java/de/fanta/challenges/guis/eventgui/bringitemsSettingsGui.java new file mode 100644 index 0000000..ed1e310 --- /dev/null +++ b/src/main/java/de/fanta/challenges/guis/eventgui/bringitemsSettingsGui.java @@ -0,0 +1,71 @@ +package de.fanta.challenges.guis.eventgui; + +import de.fanta.challenges.Challenges; +import de.fanta.challenges.utils.ChatUtil; +import de.fanta.challenges.utils.guiutils.GUIUtils; +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 bringitemsSettingsGui implements Listener { + + private static final Challenges plugin = Challenges.getPlugin(); + + public static final int INVENTORY_SIZE = 9; + public static final Inventory SETTINGS_GUI = Bukkit.createInventory(null, InventoryType.DISPENSER, Challenges.GUIPREFIX + " >> Event Settings"); + + public static int MONEY = 100; + + private static final int ITEM_INDEX = 4; + private static final int MONEY_INDEX = 5; + private static final int ADD_MONEY_INDEX = 2; + private static final int REMOVE_MONEY_INDEX = 8; + private static final int BACK_INDEX = 6; + + public static final ItemStack ITEM = SETTINGS_GUI.getItem(ITEM_INDEX); + + public static void createSettingsGUI(Player p) { + SETTINGS_GUI.setItem(MONEY_INDEX, GUIUtils.createGuiItem(Material.GOLD_INGOT, ChatUtil.GREEN + "Money: " + MONEY)); + if (ITEM != null) { + SETTINGS_GUI.setItem(ITEM_INDEX, GUIUtils.createGuiItem(ITEM.getType(), "")); + } + for (int i = 0; i < INVENTORY_SIZE; i++) { + if (SETTINGS_GUI.getItem(i) == null || SETTINGS_GUI.getItem(i).getType() == Material.AIR) { + SETTINGS_GUI.setItem(i, GUIUtils.EMPTY_ICON); + } + } + p.openInventory(SETTINGS_GUI); + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent e) { + int slot = e.getRawSlot(); + Player p = (Player) e.getWhoClicked(); + if (e.getInventory() == SETTINGS_GUI) { + if (plugin.getConfig().getBoolean("event.enabled")) { + switch (slot) { + case ADD_MONEY_INDEX -> MONEY = MONEY + 10; + case REMOVE_MONEY_INDEX -> { + if (MONEY > 0) { + MONEY = MONEY - 10; + } + } + } + createSettingsGUI(p); + + if (slot == BACK_INDEX) { + EventGui.createEventGUI(p); + } + } + e.setCancelled(true); + } + } +} + + diff --git a/src/main/java/de/fanta/challenges/guis/settingsgui/SettingsGui.java b/src/main/java/de/fanta/challenges/guis/settingsgui/SettingsGui.java index fe0e9f1..8e6b44a 100644 --- a/src/main/java/de/fanta/challenges/guis/settingsgui/SettingsGui.java +++ b/src/main/java/de/fanta/challenges/guis/settingsgui/SettingsGui.java @@ -51,7 +51,7 @@ private static final int ICE_RUNNER_INDEX = 42; private static final int RANDOM_MOB_INDEX = 43; private static final int BEDROCK_WALL_INDEX = 31; - private static final int WORLD_BORDER_LEVEL_INDEX = 46; + private static final int WORLD_BORDER_LEVEL_INDEX = 33; public static void createSettingsGUI(Player p) { if (plugin.getConfig().getBoolean("craftingtable")) { @@ -373,6 +373,10 @@ w.getWorldBorder().setSize(0); } } + + for (Player pp : Bukkit.getOnlinePlayers()) { + pp.teleport(pp.getWorld().getSpawnLocation()); + } GUIUtils.sendTitleToAll("Challenge", "World Border Level aktiviert", ChatUtil.GREEN); } break; diff --git a/src/main/java/de/fanta/challenges/listeners/BlockDestroyListener.java b/src/main/java/de/fanta/challenges/listeners/BlockDestroyListener.java index ba49676..c7517de 100644 --- a/src/main/java/de/fanta/challenges/listeners/BlockDestroyListener.java +++ b/src/main/java/de/fanta/challenges/listeners/BlockDestroyListener.java @@ -40,7 +40,7 @@ default -> null; }; if(dropType != null) { - e.getItems().forEach(item -> block.getLocation().getWorld().dropItem(block.getLocation(), new ItemStack(dropType, item.getItemStack().getAmount()))); + 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/EventRegistration.java b/src/main/java/de/fanta/challenges/listeners/EventRegistration.java index a112246..610abfc 100644 --- a/src/main/java/de/fanta/challenges/listeners/EventRegistration.java +++ b/src/main/java/de/fanta/challenges/listeners/EventRegistration.java @@ -4,7 +4,7 @@ import de.fanta.challenges.challenges.*; import de.fanta.challenges.guis.ResetGui; import de.fanta.challenges.guis.TimerGui; -import de.fanta.challenges.guis.eventgui.EventGui; +import de.fanta.challenges.guis.eventgui.bringitemsSettingsGui; import de.fanta.challenges.guis.eventgui.EventItemsGui; import de.fanta.challenges.guis.settingsgui.MainGui; import de.fanta.challenges.guis.settingsgui.OtherSettingsGui; @@ -31,7 +31,7 @@ pM.registerEvents(new SettingsGui(), plugin); pM.registerEvents(new ServerSettingsGui(), plugin); pM.registerEvents(new OtherSettingsGui(), plugin); - pM.registerEvents(new EventGui(), plugin); + pM.registerEvents(new bringitemsSettingsGui(), plugin); pM.registerEvents(new EventItemsGui(), plugin); pM.registerEvents(new FurnaceListener(), plugin); pM.registerEvents(new CommandBlockListener(), plugin); @@ -57,5 +57,6 @@ pM.registerEvents(new RandomMobChallenge(), plugin); pM.registerEvents(new BedrockWallChallenge(), plugin); pM.registerEvents(new WorldBorderLevelChallenge(), plugin); + pM.registerEvents(new bringitemsChallengeEvent(), plugin); } } diff --git a/src/main/java/de/fanta/challenges/listeners/PlayerListener.java b/src/main/java/de/fanta/challenges/listeners/PlayerListener.java index 2db555c..8bebdfb 100644 --- a/src/main/java/de/fanta/challenges/listeners/PlayerListener.java +++ b/src/main/java/de/fanta/challenges/listeners/PlayerListener.java @@ -1,5 +1,6 @@ package de.fanta.challenges.listeners; +import com.destroystokyo.paper.event.player.PlayerAdvancementCriterionGrantEvent; import de.fanta.challenges.Challenges; import de.fanta.challenges.events.PlayerCountChangedEvent; import de.fanta.challenges.utils.ChatUtil; @@ -92,14 +93,14 @@ Location spawn = Bukkit.getWorlds().get(1).getSpawnLocation(); e.setRespawnLocation(spawn); } - if (!e.isBedSpawn() && !e.isAnchorSpawn()) { + if (!e.isBedSpawn() && !e.isAnchorSpawn() && !plugin.getConfig().getBoolean("nether.enabled")) { e.setRespawnLocation(getServer().getWorlds().get(0).getSpawnLocation().add(0.5, 0.0, 0.5)); } } @EventHandler public void onPlayerSpawn(PlayerSpawnLocationEvent e) { - if (!e.getPlayer().hasPlayedBefore()) { + if (!e.getPlayer().hasPlayedBefore() && !plugin.getConfig().getBoolean("nether.enabled")) { e.setSpawnLocation(getServer().getWorlds().get(0).getSpawnLocation().add(0.5, 0.0, 0.5)); }