diff --git a/src/de/steamwar/lobby/LobbySystem.java b/src/de/steamwar/lobby/LobbySystem.java index fd85f70..383d657 100644 --- a/src/de/steamwar/lobby/LobbySystem.java +++ b/src/de/steamwar/lobby/LobbySystem.java @@ -27,6 +27,8 @@ import de.steamwar.lobby.command.PortalCommand; import de.steamwar.lobby.jumpandrun.JumpAndRun; import de.steamwar.lobby.listener.*; import de.steamwar.lobby.map.CustomMapCommand; +import de.steamwar.lobby.particle.ParticleListener; +import de.steamwar.lobby.special.easter.EggHunt; import de.steamwar.lobby.team.TeamPlayer; import de.steamwar.message.Message; import org.bukkit.plugin.java.JavaPlugin; @@ -71,6 +73,8 @@ public class LobbySystem extends JavaPlugin { new TeleporterListener(); new TeamPlayer(); + EggHunt.init(); + new AlphaWall(l -> l.getX() > 1199, AlphaWall.REFLECT_X); new AlphaWall(l -> l.getX() < 2977, AlphaWall.REFLECT_X); new AlphaWall(l -> l.getZ() > 892, AlphaWall.REFLECT_Z); diff --git a/src/de/steamwar/lobby/LobbySystem.properties b/src/de/steamwar/lobby/LobbySystem.properties index 78e8745..788714f 100644 --- a/src/de/steamwar/lobby/LobbySystem.properties +++ b/src/de/steamwar/lobby/LobbySystem.properties @@ -20,9 +20,15 @@ PARTICLE_INVENTORY = §6Particle PARTICLE_DESELECT = §8No particle PARTICLE_LOCKED = {0} §8- §c§lLocked -PARTICLE_UNLOCKED_BY_TEAM = §fJoin the team +PARTICLE_UNLOCKED_BY = §eUnlocked by +PARTICLE_UNLOCKED_BY_TEAM = §fJoin a team +PARTICLE_UNLOCKED_BY_SPECIFIC_TEAM = §fTeam {0} PARTICLE_UNLOCKED_BY_EVENT = §fEvent participation PARTICLE_UNLOCKED_BY_SERVER_TEAM = §fServer Team +PARTICLE_UNLOCKED_BY_EVENT_PLACEMENT = §f{0} 1., 2. or 3. Place +PARTICLE_UNLOCKED_BY_EVENT_PARTICIPATION = §f{0} +PARTICLE_UNLOCKED_BY_EASTER_EGG_HUNT_HALF = §fFind 45 Easter Eggs +PARTICLE_UNLOCKED_BY_EASTER_EGG_HUNT_DIFFICULTY = §fFind all Easter Eggs with difficulty {0} PARTICLE_ATTRIBUTE_CIRCLE = §8-§f Ring PARTICLE_ATTRIBUTE_BI_CIRCLE = §8-§f Double ring @@ -32,8 +38,6 @@ PARTICLE_ATTRIBUTE_NON_FLOOR = §8-§f in air PARTICLE_ATTRIBUTE_WING = §8-§f Wings PARTICLE_ATTRIBUTE = §eAttributes§7: -PARTICLE_UNLOCKED_BY = §eUnlocked by - PARTICLE_SELECT = §eClick to select PARTICLE_SNEEZE = §aSneeze @@ -71,9 +75,6 @@ PARTICLE_WATER_FIRE = §bWater§7/§cFire PARTICLE_MAGIC_ENCHANTING = §5Magic/Enchantment PARTICLE_WINGS_EVIL = §5Purple wings -PARTICLE_UNLOCKED_BY_EVENT_PLACEMENT = §f{0} 1., 2. or 3. Place -PARTICLE_UNLOCKED_BY_EVENT_PARTICIPATION = §f{0} - PARTICLE_EVENT_ENCHANTING = §cEnchantment PARTICLE_EVENT_CLOUD = §fClouds PARTICLE_EVENT_SMOKE = §7Smoke @@ -86,4 +87,11 @@ PARTICLE_EVENT_WARGEARCLASH = §fClash JUMP_AND_RUN_PROGRESS = §e{0}§8/§f{1} §c{2} §7{3} JUMP_AND_RUN_CANCEL = {0} JUMP_AND_RUN_TIME = mm:ss SSS -JUMP_AND_RUN_FINISHED = §aFinished in {0} with {1} fails \ No newline at end of file +JUMP_AND_RUN_FINISHED = §aFinished in {0} with {1} fails + +# Easter Egg Hunt +DIFFICULTY_EASY = §aEasy +DIFFICULTY_MEDIUM = §eMedium +DIFFICULTY_HARD = §cHard +DIFFICULTY_EXTREME = §5Extreme +DIFFICULTY_ADVANCED = §5Advanced \ No newline at end of file diff --git a/src/de/steamwar/lobby/LobbySystem_de.properties b/src/de/steamwar/lobby/LobbySystem_de.properties index 6065269..3a1e68e 100644 --- a/src/de/steamwar/lobby/LobbySystem_de.properties +++ b/src/de/steamwar/lobby/LobbySystem_de.properties @@ -20,9 +20,15 @@ PARTICLE_INVENTORY = §6Partikel PARTICLE_DESELECT = §8Keine Partikel PARTICLE_LOCKED = {0} §8- §c§lGesperrt +PARTICLE_UNLOCKED_BY = §eFreigeschaltet durch PARTICLE_UNLOCKED_BY_TEAM = §fTeambeitritt +PARTICLE_UNLOCKED_BY_SPECIFIC_TEAM = §fTeam {0} PARTICLE_UNLOCKED_BY_EVENT = §fEventteilnahme PARTICLE_UNLOCKED_BY_SERVER_TEAM = §fServerteam +PARTICLE_UNLOCKED_BY_EVENT_PLACEMENT = §f{0} 1., 2. oder 3. Platz +PARTICLE_UNLOCKED_BY_EVENT_PARTICIPATION = §f{0} +PARTICLE_UNLOCKED_BY_EASTER_EGG_HUNT_HALF = §fFinde 45 Oster-Eierer +PARTICLE_UNLOCKED_BY_EASTER_EGG_HUNT_DIFFICULTY = §fAlle Eierer mit Schwierigkeit {0} finden PARTICLE_ATTRIBUTE_CIRCLE = §8-§f Ring PARTICLE_ATTRIBUTE_BI_CIRCLE = §8-§f Doppelring @@ -32,8 +38,6 @@ PARTICLE_ATTRIBUTE_NON_FLOOR = §8-§f in Luft PARTICLE_ATTRIBUTE_WING = §8-§f Flügel PARTICLE_ATTRIBUTE = §eAttribute§7: -PARTICLE_UNLOCKED_BY = §eFreigeschaltet durch - PARTICLE_SELECT = §eZum Auswählen klicken PARTICLE_SNEEZE = §aSneeze @@ -71,11 +75,6 @@ PARTICLE_WATER_FIRE = §bWasser§7/§cFeuer PARTICLE_MAGIC_ENCHANTING = §5Magie§7/§eZauber PARTICLE_WINGS_EVIL = §5Lila Flügel -PARTICLE_UNLOCKED_BY_EVENT_PLACEMENT = §f{0} 1., 2. oder 3. Platz -PARTICLE_UNLOCKED_BY_EVENT_PARTICIPATION = §f{0} - -JUMP_AND_RUN_FINISHED = §aBeendet in {0} mit {1} Fails - PARTICLE_EVENT_ENCHANTING = §cVerzaubert PARTICLE_EVENT_CLOUD = §fWolken PARTICLE_EVENT_SMOKE = §7Rauch @@ -83,4 +82,13 @@ PARTICLE_EVENT_WATER = §bWasser PARTICLE_EVENT_WINGS = §fFlügel PARTICLE_EVENT_RAIN_CLOUD = §fRegenwolke PARTICLE_EVENT_WGS = §fWGS -PARTICLE_EVENT_WARGEARCLASH = §fClash \ No newline at end of file +PARTICLE_EVENT_WARGEARCLASH = §fClash + +JUMP_AND_RUN_FINISHED = §aBeendet in {0} mit {1} Fails + +# Easter Egg Hunt +DIFFICULTY_EASY = §aLeicht +DIFFICULTY_MEDIUM = §eMedium +DIFFICULTY_HARD = §cHart +DIFFICULTY_EXTREME = §5Extrem +DIFFICULTY_ADVANCED = §5Advanced \ No newline at end of file diff --git a/src/de/steamwar/lobby/otherparticle/Particle.java b/src/de/steamwar/lobby/otherparticle/Particle.java new file mode 100644 index 0000000..7811f6a --- /dev/null +++ b/src/de/steamwar/lobby/otherparticle/Particle.java @@ -0,0 +1,47 @@ +package de.steamwar.lobby.otherparticle; + +import de.steamwar.inventory.SWItem; +import de.steamwar.lobby.LobbySystem; +import de.steamwar.sql.SteamwarUser; +import org.bukkit.Material; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; +import java.util.function.Predicate; + +public class Particle { + + private ParticleItem item; + + private static class ParticleItem { + + private Material material; + private String name; + private Set attributes = new LinkedHashSet<>(); + private String unlockedBy; + + public SWItem toSWItem(Player player) { + String translatedName = LobbySystem.getMessage().parse(name, player); + List lore = new ArrayList<>(); + lore.add(""); + if (!attributes.isEmpty()) { + lore.add(LobbySystem.getMessage().parse("PARTICLE_ATTRIBUTE", player)); + attributes.forEach(attribute -> lore.add(LobbySystem.getMessage().parse(attribute, player))); + lore.add(""); + } + if (unlockedBy != null) { + lore.add(LobbySystem.getMessage().parse("PARTICLE_UNLOCKED_BY", player)); + lore.add(LobbySystem.getMessage().parse(unlockedBy, player)); + lore.add(""); + } + lore.add(LobbySystem.getMessage().parse("PARTICLE_SELECT", player)); + return new SWItem(material, translatedName, lore, false, clickType -> {}); + } + } + + private Predicate unlocked = player -> true; + +} diff --git a/src/de/steamwar/lobby/otherparticle/ParticleRequirement.java b/src/de/steamwar/lobby/otherparticle/ParticleRequirement.java new file mode 100644 index 0000000..28e3d20 --- /dev/null +++ b/src/de/steamwar/lobby/otherparticle/ParticleRequirement.java @@ -0,0 +1,179 @@ +package de.steamwar.lobby.otherparticle; + +import de.steamwar.lobby.LobbySystem; +import de.steamwar.lobby.special.easter.EggDifficulty; +import de.steamwar.lobby.special.easter.EggHunt; +import de.steamwar.sql.Event; +import de.steamwar.sql.SteamwarUser; +import de.steamwar.sql.Team; +import de.steamwar.sql.UserGroup; +import org.bukkit.entity.Player; + +import java.util.HashSet; +import java.util.List; +import java.util.Objects; +import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + +public interface ParticleRequirement { + + String getRequirementName(Player player); + ParticleRequirementPredicate getRequirement(); + + ParticleRequirement NO_REQUIRMENT = new ParticleRequirement() { + @Override + public String getRequirementName(Player player) { + return null; + } + + @Override + public ParticleRequirementPredicate getRequirement() { + return (player, eventTeilname, eggHuntConfig) -> true; + } + }; + ParticleRequirement HAS_TEAM = new ParticleRequirement() { + @Override + public String getRequirementName(Player player) { + return LobbySystem.getMessage().parse("PARTICLE_UNLOCKED_BY_TEAM", player); + } + + @Override + public ParticleRequirementPredicate getRequirement() { + return (steamwarUser, eventTeilname, eggHuntConfig) -> steamwarUser.getTeam() != 0 || steamwarUser.getUserGroup() != UserGroup.Member; + } + }; + ParticleRequirement EVENT_PARTICIPATION = new ParticleRequirement() { + @Override + public String getRequirementName(Player player) { + return LobbySystem.getMessage().parse("PARTICLE_UNLOCKED_BY_EVENT", player); + } + + @Override + public ParticleRequirementPredicate getRequirement() { + return (steamwarUser, eventTeilname, eggHuntConfig) -> !eventTeilname.isEmpty(); + } + }; + ParticleRequirement SERVER_TEAM = new ParticleRequirement() { + @Override + public String getRequirementName(Player player) { + return LobbySystem.getMessage().parse("PARTICLE_UNLOCKED_BY_SERVER_TEAM", player); + } + + @Override + public ParticleRequirementPredicate getRequirement() { + return (steamwarUser, eventTeilname, eggHuntConfig) -> false; + } + }; + ParticleRequirement EGG_HUNT_EASY = _easterEggHuntDifficulty(EggDifficulty.EASY); + ParticleRequirement EGG_HUNT_MEDIUM = _easterEggHuntDifficulty(EggDifficulty.MEDIUM); + ParticleRequirement EGG_HUNT_HARD = _easterEggHuntDifficulty(EggDifficulty.HARD); + ParticleRequirement EGG_HUNT_EXTREME = _easterEggHuntDifficulty(EggDifficulty.EXTREME); + ParticleRequirement EGG_HUNT_ADVANCED = _easterEggHuntDifficulty(EggDifficulty.ADVANCED); + ParticleRequirement EGG_HUNT_FOUND_HALF = new ParticleRequirement() { + @Override + public String getRequirementName(Player player) { + return LobbySystem.getMessage().parse("PARTICLE_UNLOCKED_BY_EASTER_EGG_HUNT_HALF", player); + } + + @Override + public ParticleRequirementPredicate getRequirement() { + return (user, eventTeilname, eggHuntConfig) -> { + if (eggHuntConfig == null) return false; + int count = 0; + for (int i = 0; i < eggHuntConfig.length(); i++) { + if (eggHuntConfig.charAt(i) == '1') { + count++; + } + } + return count >= EggHunt.getEggList().size() / 2; + }; + } + }; + + static ParticleRequirement specificTeam(int teamId) { + if (teamId == 0) return NO_REQUIRMENT; + String teamKuerzel = Team.get(teamId).getTeamKuerzel(); + return new ParticleRequirement() { + @Override + public String getRequirementName(Player player) { + return LobbySystem.getMessage().parse("PARTICLE_UNLOCKED_BY_SPECIFIC_TEAM", player, teamKuerzel); + } + + @Override + public ParticleRequirementPredicate getRequirement() { + return (steamwarUser, eventTeilname, eggHuntConfig) -> steamwarUser.getTeam() == teamId; + } + }; + } + + static ParticleRequirement eventParticipation(int eventId) { + String eventName = Event.get(eventId).getEventName(); + return new ParticleRequirement() { + @Override + public String getRequirementName(Player player) { + return LobbySystem.getMessage().parse("PARTICLE_UNLOCKED_BY_EVENT_PARTICIPATION", player, eventName); + } + + @Override + public ParticleRequirementPredicate getRequirement() { + return (steamwarUser, eventTeilname, eggHuntConfig) -> eventTeilname.contains(eventId); + } + }; + } + + static ParticleRequirement eventPlacement(int eventId, int... placementTeams) { + String eventName = Event.get(eventId).getEventName(); + Set teams = new HashSet<>(); + for (int i : placementTeams) teams.add(i); + return new ParticleRequirement() { + @Override + public String getRequirementName(Player player) { + return LobbySystem.getMessage().parse("PARTICLE_UNLOCKED_BY_EVENT_PLACEMENT", player, eventName); + } + + @Override + public ParticleRequirementPredicate getRequirement() { + return (steamwarUser, eventTeilname, eggHuntConfig) -> { + if (!eventTeilname.contains(eventId)) return false; + return teams.contains(steamwarUser.getTeam()); + }; + } + }; + } + + static ParticleRequirement _easterEggHuntDifficulty(EggDifficulty difficulty) { + AtomicInteger count = new AtomicInteger(); + List eggs = EggHunt.getEggList() + .stream() + .map(egg -> { + int id = count.getAndIncrement(); + if (egg.getDifficulty() == difficulty) { + return id; + } else { + return null; + } + }) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + + return new ParticleRequirement() { + @Override + public String getRequirementName(Player player) { + return LobbySystem.getMessage().parse("PARTICLE_UNLOCKED_BY_EASTER_EGG_HUNT_DIFFICULTY", player, LobbySystem.getMessage().parse(difficulty.getMessage(), player)); + } + + @Override + public ParticleRequirementPredicate getRequirement() { + return (steamwarUser, integers, eggHuntConfig) -> { + if (eggHuntConfig == null) return false; + return eggs.stream().allMatch(id -> eggHuntConfig.length() >= id && eggHuntConfig.charAt(id) == '1'); + }; + } + }; + } + + interface ParticleRequirementPredicate { + boolean test(SteamwarUser user, Set eventTeilname, String eggHuntConfig); + } +} diff --git a/src/de/steamwar/lobby/particle/ParticleBuilder.java b/src/de/steamwar/lobby/particle/ParticleBuilder.java new file mode 100644 index 0000000..0b8b589 --- /dev/null +++ b/src/de/steamwar/lobby/particle/ParticleBuilder.java @@ -0,0 +1,15 @@ +package de.steamwar.lobby.particle; + +public class ParticleBuilder { + + public ParticleBuilder() { + } + + public void cloud() {} + + public void offset() {} + + public void rotated() {} + + public void build() {} +} diff --git a/src/de/steamwar/lobby/listener/ParticleListener.java b/src/de/steamwar/lobby/particle/ParticleListener.java similarity index 95% rename from src/de/steamwar/lobby/listener/ParticleListener.java rename to src/de/steamwar/lobby/particle/ParticleListener.java index 43ac5b8..5c9c8f5 100644 --- a/src/de/steamwar/lobby/listener/ParticleListener.java +++ b/src/de/steamwar/lobby/particle/ParticleListener.java @@ -17,13 +17,12 @@ * along with this program. If not, see . */ -package de.steamwar.lobby.listener; +package de.steamwar.lobby.particle; import de.steamwar.lobby.LobbySystem; import de.steamwar.lobby.jumpandrun.JumpAndRun; -import de.steamwar.lobby.particle.BaseParticle; -import de.steamwar.lobby.particle.ParticleData; -import de.steamwar.lobby.particle.ParticleInventory; +import de.steamwar.lobby.listener.BasicListener; +import de.steamwar.lobby.listener.PlayerSpawn; import de.steamwar.lobby.particle.particles.ParticleEnum; import de.steamwar.lobby.util.LobbyPlayer; import org.bukkit.Bukkit; diff --git a/src/de/steamwar/lobby/special/easter/Egg.java b/src/de/steamwar/lobby/special/easter/Egg.java new file mode 100644 index 0000000..206fd72 --- /dev/null +++ b/src/de/steamwar/lobby/special/easter/Egg.java @@ -0,0 +1,102 @@ +package de.steamwar.lobby.special.easter; + +import de.steamwar.inventory.SWItem; +import de.steamwar.lobby.LobbySystem; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.block.Skull; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.SkullMeta; +import org.bukkit.profile.PlayerProfile; +import org.bukkit.util.Vector; + +import java.util.Arrays; +import java.util.Map; +import java.util.Optional; + +public class Egg { + + private static final World world = Bukkit.getWorlds().get(0); + + private final int x; + private final int y; + private final int z; + private final String message; + private final EggDifficulty difficulty; + + private Optional playerProfile = null; + + public Egg(Map config) { + this.x = (int) config.get("x"); + this.y = (int) config.get("y"); + this.z = (int) config.get("z"); + this.message = (String) config.get("name"); + this.difficulty = EggDifficulty.valueOf(((String) config.get("difficulty")).toUpperCase()); + } + + public Vector getVector() { + return new Vector(x, y, z); + } + + public String getMessage() { + return message; + } + + public EggDifficulty getDifficulty() { + return difficulty; + } + + public Block getBlock() { + Block block = world.getBlockAt(x, y, z); + if (block.getType() != Material.PLAYER_HEAD && block.getType() != Material.PLAYER_WALL_HEAD) { + System.out.println("Block is not a skull: " + block.getType() + " " + x + "," + y + "," + z); + return null; + } + return block; + } + + public SWItem getItem(Player player, boolean found) { + if (playerProfile == null) { + Block block = getBlock(); + if (block == null) { + playerProfile = Optional.empty(); + return null; + } + + Skull skull = (Skull) block.getState(); + PlayerProfile playerProfile = skull.getOwnerProfile(); + if (playerProfile == null) { + this.playerProfile = Optional.empty(); + return null; + } + this.playerProfile = Optional.of(playerProfile); + } + + if (!playerProfile.isPresent()) { + return null; + } + + SWItem swItem; + if (found) { + swItem = new SWItem(); + ItemStack itemStack = new ItemStack(Material.PLAYER_HEAD); + SkullMeta skullMeta = (SkullMeta) itemStack.getItemMeta(); + skullMeta.setOwnerProfile(playerProfile.get()); + itemStack.setItemMeta(skullMeta); + swItem.setItemStack(itemStack); + } else { + swItem = SWItem.getPlayerSkull("MHF_Question"); + } + + swItem.setLore(Arrays.asList(LobbySystem.getMessage().parse(difficulty.getMessage(), player))); + try { + swItem.setName("§f" + LobbySystem.getMessage().parse(message, player)); + } catch (Exception e) { + swItem.setName("§f" + message); + } + return swItem; + } +} diff --git a/src/de/steamwar/lobby/special/easter/EggClickListener.java b/src/de/steamwar/lobby/special/easter/EggClickListener.java new file mode 100644 index 0000000..08664e9 --- /dev/null +++ b/src/de/steamwar/lobby/special/easter/EggClickListener.java @@ -0,0 +1,64 @@ +package de.steamwar.lobby.special.easter; + +import de.steamwar.lobby.LobbySystem; +import de.steamwar.lobby.listener.BasicListener; +import de.steamwar.sql.UserConfig; +import org.bukkit.Particle; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.util.Vector; + +public class EggClickListener extends BasicListener { + + @EventHandler + public void onPlayerInteract(PlayerInteractEvent event) { + if (event.getAction() != Action.RIGHT_CLICK_BLOCK) { + return; + } + Block block = event.getClickedBlock(); + if (block == null) { + return; + } + Vector vector = block.getLocation().toVector(); + Egg egg = null; + int index = -1; + for (Egg egg1 : EggHunt.getEggList()) { + index++; + if (egg1.getVector().equals(vector)) { + egg = egg1; + break; + } + } + if (egg == null) { + return; + } + Player player = event.getPlayer(); + String found = UserConfig.getConfig(player.getUniqueId(), "egghunt"); + if (found == null) { + found = ""; + } + StringBuilder builder = new StringBuilder(found); + while (builder.length() <= index) { + builder.append("0"); + } + if (builder.charAt(index) == '1') { + return; + } + + try { + player.sendTitle(LobbySystem.getMessage().parse(egg.getMessage(), player), LobbySystem.getMessage().parse(egg.getDifficulty().getMessage(), player), 0, 80, 5); + } catch (Exception e) { + player.sendTitle(egg.getMessage(), LobbySystem.getMessage().parse(egg.getDifficulty().getMessage(), player), 0, 10, 5); + } + + player.spawnParticle(Particle.END_ROD, block.getLocation().add(0.5, 0.5, 0.5), 10, 0.5, 0.5, 0.5, 0.1); + player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 0.25f, 1.0f); + + builder.setCharAt(index, '1'); + UserConfig.updatePlayerConfig(player.getUniqueId(), "egghunt", builder.toString()); + } +} diff --git a/src/de/steamwar/lobby/special/easter/EggDifficulty.java b/src/de/steamwar/lobby/special/easter/EggDifficulty.java new file mode 100644 index 0000000..6c86dca --- /dev/null +++ b/src/de/steamwar/lobby/special/easter/EggDifficulty.java @@ -0,0 +1,19 @@ +package de.steamwar.lobby.special.easter; + +public enum EggDifficulty { + EASY("DIFFICULTY_EASY"), + MEDIUM("DIFFICULTY_MEDIUM"), + HARD("DIFFICULTY_HARD"), + EXTREME("DIFFICULTY_EXTREME"), + ADVANCED("DIFFICULTY_ADVANCED"); + + private final String message; + + EggDifficulty(String message) { + this.message = message; + } + + public String getMessage() { + return message; + } +} diff --git a/src/de/steamwar/lobby/special/easter/EggHunt.java b/src/de/steamwar/lobby/special/easter/EggHunt.java new file mode 100644 index 0000000..d4f284d --- /dev/null +++ b/src/de/steamwar/lobby/special/easter/EggHunt.java @@ -0,0 +1,35 @@ +package de.steamwar.lobby.special.easter; + +import de.steamwar.lobby.LobbySystem; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class EggHunt { + + private static List eggList = new ArrayList<>(); + + public static void init() { + } + + static { + new EggHuntCommand(); + new EggClickListener(); + + File file = new File(LobbySystem.getPlugin().getDataFolder(), "eggs.yml"); + FileConfiguration fileConfiguration = YamlConfiguration.loadConfiguration(file); + fileConfiguration.getList("eggs") + .forEach(o -> { + if (!(o instanceof Map)) return; + eggList.add(new Egg((Map) o)); + }); + } + + public static List getEggList() { + return eggList; + } +} diff --git a/src/de/steamwar/lobby/special/easter/EggHuntCommand.java b/src/de/steamwar/lobby/special/easter/EggHuntCommand.java new file mode 100644 index 0000000..9c87af8 --- /dev/null +++ b/src/de/steamwar/lobby/special/easter/EggHuntCommand.java @@ -0,0 +1,38 @@ +package de.steamwar.lobby.special.easter; + +import de.steamwar.command.SWCommand; +import de.steamwar.inventory.SWItem; +import de.steamwar.inventory.SWListInv; +import de.steamwar.sql.UserConfig; +import org.bukkit.entity.Player; + +import java.util.Comparator; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + +public class EggHuntCommand extends SWCommand { + + public EggHuntCommand() { + super("egghunt", "easteregg", "easter", "egg", "eh"); + } + + @Register + public void genericCommand(Player player) { + AtomicInteger atomicInteger = new AtomicInteger(); + String found = UserConfig.getConfig(player.getUniqueId(), "egghunt"); + List> entries = EggHunt.getEggList().stream() + .map(egg -> { + int index = atomicInteger.getAndIncrement(); + SWItem swItem = egg.getItem(player, found != null && found.length() > index && found.charAt(index) == '1'); + if (swItem == null) return null; + return new SWListInv.SWListEntry<>(swItem, egg); + }) + .sorted(Comparator.comparing(eggSWListEntry -> eggSWListEntry.getObject().getDifficulty())) + .filter(Objects::nonNull).collect(Collectors.toList()); + SWListInv inv = new SWListInv<>(player, "", entries, (clickType, egg) -> { + }); + inv.open(); + } +}