From 98f04451a42292603bc9fd238aa11790c9215704 Mon Sep 17 00:00:00 2001 From: YoyoNow Date: Fri, 23 Oct 2026 16:21:40 +0200 Subject: [PATCH] Polish lobby particle slots Count the real particle amount of reward designs, set slot budgets to 30 particles per tick (60 for the server team), let requirements test only against an UnlockContext, and drop requirements and messages the old particle menu used. --- .../de/steamwar/lobby/LobbySystem.properties | 68 --------------- .../steamwar/lobby/LobbySystem_de.properties | 67 --------------- .../lobby/particle/ParticleRequirement.java | 82 +++++-------------- .../lobby/particle/design/RewardDesigns.java | 28 +++---- .../lobby/particle/slot/ParticleSlots.java | 4 +- Packet.md | 0 6 files changed, 38 insertions(+), 211 deletions(-) create mode 100644 Packet.md diff --git a/LobbySystem/src/de/steamwar/lobby/LobbySystem.properties b/LobbySystem/src/de/steamwar/lobby/LobbySystem.properties index 2d80d7f9..702e340e 100644 --- a/LobbySystem/src/de/steamwar/lobby/LobbySystem.properties +++ b/LobbySystem/src/de/steamwar/lobby/LobbySystem.properties @@ -49,38 +49,18 @@ PORTAL_NO_WORLDEDIT_SELECTION = §cNo WorldEdit selection PARTICLE_INVENTORY = §0Particle PARTICLE_DESELECT = §8No particle -PARTICLE_SHOW_HAS_ALL = §8You have all particles -PARTICLE_SHOW_ALL = §aShow all -PARTICLE_SHOW_UNLOCKED = §cShow unlocked - PARTICLE_UNLOCKED_BY = §eUnlocked by PARTICLE_UNLOCKED_BY_TEAM = §fJoin a team PARTICLE_UNLOCKED_BY_SPECIFIC_TEAM = §fTeam {0} PARTICLE_UNLOCKED_BY_SPECIFIC_TEAM_EASTER = §fTeam {0} (Easter Egg Hunt) PARTICLE_UNLOCKED_BY_SPECIFIC_USER = §fUser {0} PARTICLE_UNLOCKED_BY_SPECIFIC_USER_EASTER = §fUser {0} (Easter Egg Hunt) -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 = §eAttributes§7: -PARTICLE_ATTRIBUTE_CIRCLE = §8-§f Ring -PARTICLE_ATTRIBUTE_BI_CIRCLE = §8-§f Double ring -PARTICLE_ATTRIBUTE_TRI_CIRCLE = §8-§f Tripple ring -PARTICLE_ATTRIBUTE_CLOUD = §8-§f Cloud -PARTICLE_ATTRIBUTE_TICK = §8-§f Always active -PARTICLE_ATTRIBUTE_NON_FLOOR = §8-§f In air -PARTICLE_ATTRIBUTE_FLOOR = §8-§f On ground -PARTICLE_ATTRIBUTE_NON_FLYING = §8-§f Not flying -PARTICLE_ATTRIBUTE_FLYING = §8-§f Flying -PARTICLE_ATTRIBUTE_WING = §8-§f Wings -PARTICLE_ATTRIBUTE_SNEAKING = §8-§f Sneaking -PARTICLE_ATTRIBUTE_NON_MOVING = §8-§f Not moving -PARTICLE_ATTRIBUTE_SEPARATOR = §f - PARTICLE_SELECT = §eClick to select PARTICLE_LOCKED = §c§lLocked PARTICLE_DEACTIVATED = §cThere are too many players online, particles are deactivated @@ -184,41 +164,6 @@ PARTICLE_CHOICE_IMAGE_SIMPLE = §fSimple PARTICLE_CHOICE_IMAGE_COMPLEX = §fComplex PARTICLE_CHOICE_IMAGE_SWORD = §fSword -PARTICLE_SNEEZE = §aSneeze -PARTICLE_SMOKE = §7Smoke -PARTICLE_FIRE = §cFire -PARTICLE_WATER = §bWater -PARTICLE_HEART = §cHearts -PARTICLE_NOTES = §eNotes -PARTICLE_NAUTILUS = §aNautilus -PARTICLE_SNOWBALL = §fSnowball -PARTICLE_EFFECT = §5Effect -PARTICLE_CAMPFIRE = §7Smoke -PARTICLE_MAGIC = §5Magic -PARTICLE_ANGRY = §4Angry -PARTICLE_SLIME = §aSlime -PARTICLE_MOB = §7Mob -PARTICLE_SQUID = §8Squid -PARTICLE_BUBBLE = §aBubbles -PARTICLE_HONEY = §6Honey -PARTICLE_NECTAR = §6Nectar -PARTICLE_FIREWORK = §7Firework -PARTICLE_DRAGON_BREATH = §5Dragon breath -PARTICLE_DAMAGE = §5Damage -PARTICLE_DOLPHIN = §dDolphin -PARTICLE_WITCH = §5Witch -PARTICLE_ENCHANTING = §eEnchantment -PARTICLE_HAPPY = §2Joy -PARTICLE_FLAME = §7Flames -PARTICLE_END_ROD = §fEnd Rod -PARTICLE_CLOUD = §7Cloud -PARTICLE_TOTEM = §aTotem -PARTICLE_TOWN = §5Town -PARTICLE_ENCHANTING_CIRCLE = §fEnchanted -PARTICLE_WATER_FIRE = §bWater§7/§cFire -PARTICLE_MAGIC_ENCHANTING = §5Magic/Enchantment -PARTICLE_WINGS_EVIL = §5Purple wings - PARTICLE_PLAYER_HAYLIM_AURA = §fHaylim\'s Aura PARTICLE_PLAYER_1063 = §7Circling Circle PARTICLE_PLAYER_10916_AURA = §7Tornado @@ -235,19 +180,6 @@ PARTICLE_TEAM_PULSE_AURA_3 = §fPulse Aura §fEnchanted PARTICLE_TEAM_PULSE_LOGO = §fPulse Logo PARTICLE_TEAM_PULSE_HEART_BEAT = §cHeart Beat -PARTICLE_RAINCLOUD_NORMAL = §fRaincloud -PARTICLE_RAINCLOUD_RED = §fLava cloud -PARTICLE_RAINCLOUD_YELLOW = §fNectar cloud -PARTICLE_RAINCLOUD_ORANGE = §fHoney cloud -PARTICLE_RAINCLOUD_GREEN = §fSpore Blossom cloud -PARTICLE_RAINCLOUD_PURPLE = §fObsidian Tears cloud -PARTICLE_RAINCLOUD_NAUTILUS = §fNautilus cloud -PARTICLE_RAINCLOUD_ENCHANTMENT = §fEnchantment cloud -PARTICLE_RAINCLOUD_SLIME = §fSlime cloud -PARTICLE_RAINCLOUD_HAIL = §fHail cloud -PARTICLE_RAINCLOUD_SNOW = §fSnow cloud -PARTICLE_RAINCLOUD_TOTEM = §fTotem cloud - PARTICLE_EVENT_ENCHANTING = §cEnchantment PARTICLE_EVENT_CLOUD = §fClouds PARTICLE_EVENT_SMOKE = §7Smoke diff --git a/LobbySystem/src/de/steamwar/lobby/LobbySystem_de.properties b/LobbySystem/src/de/steamwar/lobby/LobbySystem_de.properties index 6c01a373..59647e67 100644 --- a/LobbySystem/src/de/steamwar/lobby/LobbySystem_de.properties +++ b/LobbySystem/src/de/steamwar/lobby/LobbySystem_de.properties @@ -49,37 +49,18 @@ PORTAL_NO_WORLDEDIT_SELECTION = §cKeine WorldEdit Selection PARTICLE_INVENTORY = §0Partikel PARTICLE_DESELECT = §8Keine Partikel -PARTICLE_SHOW_HAS_ALL = §8Du hast alle Partikel -PARTICLE_SHOW_ALL = §aZeige alle -PARTICLE_SHOW_UNLOCKED = §cZeige freigeschaltete - PARTICLE_UNLOCKED_BY = §eFreigeschaltet durch PARTICLE_UNLOCKED_BY_TEAM = §fTeambeitritt PARTICLE_UNLOCKED_BY_SPECIFIC_TEAM = §fTeam {0} PARTICLE_UNLOCKED_BY_SPECIFIC_TEAM_EASTER = §fTeam {0} (Oster-Eierer-Suche) PARTICLE_UNLOCKED_BY_SPECIFIC_USER = §fUser {0} PARTICLE_UNLOCKED_BY_SPECIFIC_USER_EASTER = §fUser {0} (Oster-Eierer-Suche) -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 -PARTICLE_ATTRIBUTE_TRI_CIRCLE = §8-§f Dreifachring -PARTICLE_ATTRIBUTE_CLOUD = §8-§f Wolke -PARTICLE_ATTRIBUTE_TICK = §8-§f Immer aktiv -PARTICLE_ATTRIBUTE_NON_FLOOR = §8-§f In der Luft -PARTICLE_ATTRIBUTE_FLOOR = §8-§f Auf dem Boden -PARTICLE_ATTRIBUTE_NON_FLYING = §8-§f Nicht am Fliegen -PARTICLE_ATTRIBUTE_FLYING = §8-§f Am Fliegen -PARTICLE_ATTRIBUTE_WING = §8-§f Flügel -PARTICLE_ATTRIBUTE_SNEAKING = §8-§f Ducken -PARTICLE_ATTRIBUTE_NON_MOVING = §8-§f Beim Stehen -PARTICLE_ATTRIBUTE = §eAttribute§7: - PARTICLE_SELECT = §eZum Auswählen klicken PARTICLE_LOCKED = §c§lGesperrt PARTICLE_DEACTIVATED = §cEs sind zu viele Spieler online! Partikel sind deaktiviert. @@ -183,59 +164,11 @@ PARTICLE_CHOICE_IMAGE_SIMPLE = §fEinfach PARTICLE_CHOICE_IMAGE_COMPLEX = §fKomplex PARTICLE_CHOICE_IMAGE_SWORD = §fSchwert -PARTICLE_SNEEZE = §aSneeze -PARTICLE_SMOKE = §7Rauch -PARTICLE_FIRE = §cFeuer -PARTICLE_WATER = §bWasser -PARTICLE_HEART = §cHerzen -PARTICLE_NOTES = §eNoten -PARTICLE_NAUTILUS = §aNautilus -PARTICLE_SNOWBALL = §fSchneeball -PARTICLE_EFFECT = §5Effekt -PARTICLE_CAMPFIRE = §7Rauch -PARTICLE_MAGIC = §5Magie -PARTICLE_ANGRY = §4Wut -PARTICLE_SLIME = §aSchleim -PARTICLE_MOB = §7Mob -PARTICLE_SQUID = §8Tintenfisch -PARTICLE_BUBBLE = §aBlasen -PARTICLE_HONEY = §6Honig -PARTICLE_NECTAR = §6Nektar -PARTICLE_FIREWORK = §7Feuerwerk -PARTICLE_DRAGON_BREATH = §5Drachenatem -PARTICLE_DAMAGE = §5Schaden -PARTICLE_DOLPHIN = §dDelphin -PARTICLE_WITCH = §5Hexe -PARTICLE_ENCHANTING = §eZauber -PARTICLE_HAPPY = §2Freude -PARTICLE_FLAME = §7Flammen -PARTICLE_END_ROD = §fEnd Rod -PARTICLE_CLOUD = §7Wolke -PARTICLE_TOTEM = §aTotem -PARTICLE_TOWN = §5Town -PARTICLE_ENCHANTING_CIRCLE = §fVerzaubert -PARTICLE_WATER_FIRE = §bWasser§7/§cFeuer -PARTICLE_MAGIC_ENCHANTING = §5Magie§7/§eZauber -PARTICLE_WINGS_EVIL = §5Lila Flügel - PARTICLE_PLAYER_1063 = §7Kreisende Kreise PARTICLE_PLAYER_10697_AURA = §7Rauchgranate PARTICLE_TEAM_PULSE_HEART_BEAT = §cHerzschlag -PARTICLE_RAINCLOUD_NORMAL = §fRegenwolke -PARTICLE_RAINCLOUD_RED = §fLavawolke -PARTICLE_RAINCLOUD_YELLOW = §fNektarwolke -PARTICLE_RAINCLOUD_ORANGE = §fHonigwolke -PARTICLE_RAINCLOUD_GREEN = §fSporenwolke -PARTICLE_RAINCLOUD_PURPLE = §fObsidanwolke -PARTICLE_RAINCLOUD_NAUTILUS = §fNautiluswolke -PARTICLE_RAINCLOUD_ENCHANTMENT = §fVerzauberungswolke -PARTICLE_RAINCLOUD_SLIME = §fSchleimwolke -PARTICLE_RAINCLOUD_HAIL = §fHagelwolke -PARTICLE_RAINCLOUD_SNOW = §fSchneewolke -PARTICLE_RAINCLOUD_TOTEM = §fTotemwolke - PARTICLE_EVENT_ENCHANTING = §cVerzaubert PARTICLE_EVENT_CLOUD = §fWolken PARTICLE_EVENT_SMOKE = §7Rauch diff --git a/LobbySystem/src/de/steamwar/lobby/particle/ParticleRequirement.java b/LobbySystem/src/de/steamwar/lobby/particle/ParticleRequirement.java index f5e29349..4d5c3fc3 100644 --- a/LobbySystem/src/de/steamwar/lobby/particle/ParticleRequirement.java +++ b/LobbySystem/src/de/steamwar/lobby/particle/ParticleRequirement.java @@ -39,11 +39,7 @@ public interface ParticleRequirement { String getRequirementName(Player player); - boolean test(SteamwarUser user, Set eventTeilname, String eggHuntConfig); - - default boolean test(UnlockContext context) { - return test(context.getUser(), context.getEvents(), context.getEggHuntConfig()); - } + boolean test(UnlockContext context); ParticleRequirement SERVER_TEAM = new ParticleRequirement() { @Override @@ -51,11 +47,6 @@ public interface ParticleRequirement { return LobbySystem.getMessage().parse("PARTICLE_UNLOCKED_BY_SERVER_TEAM", player); } - @Override - public boolean test(SteamwarUser user, Set eventTeilname, String eggHuntConfig) { - return user.hasPerm(UserPerm.TEAM); - } - @Override public boolean test(UnlockContext context) { return context.getUser().hasPerm(UserPerm.TEAM); @@ -68,56 +59,24 @@ public interface ParticleRequirement { return null; } - @Override - public boolean test(SteamwarUser user, Set eventTeilname, String eggHuntConfig) { - return true; - } - @Override public boolean test(UnlockContext context) { return true; } }; - // Unlike HAS_TEAM this does not also pass for the server team + // Does not also pass for the server team ParticleRequirement TEAM_MEMBER = new ParticleRequirement() { @Override public String getRequirementName(Player player) { return LobbySystem.getMessage().parse("PARTICLE_UNLOCKED_BY_TEAM", player); } - @Override - public boolean test(SteamwarUser user, Set eventTeilname, String eggHuntConfig) { - return user.getTeam() != 0; - } - @Override public boolean test(UnlockContext context) { return context.getUser().getTeam() != 0; } }; - ParticleRequirement HAS_TEAM = new ParticleRequirement() { - @Override - public String getRequirementName(Player player) { - return LobbySystem.getMessage().parse("PARTICLE_UNLOCKED_BY_TEAM", player); - } - - @Override - public boolean test(SteamwarUser user, Set eventTeilname, String eggHuntConfig) { - return user.getTeam() != 0; - } - }.or(SERVER_TEAM); - ParticleRequirement EVENT_PARTICIPATION = new ParticleRequirement() { - @Override - public String getRequirementName(Player player) { - return LobbySystem.getMessage().parse("PARTICLE_UNLOCKED_BY_EVENT", player); - } - - @Override - public boolean test(SteamwarUser user, Set eventTeilname, String eggHuntConfig) { - return !eventTeilname.isEmpty(); - } - }.or(SERVER_TEAM); ParticleRequirement EGG_HUNT_EASY = _easterEggHuntDifficulty(EggDifficulty.EASY); ParticleRequirement EGG_HUNT_MEDIUM = _easterEggHuntDifficulty(EggDifficulty.MEDIUM); ParticleRequirement EGG_HUNT_HARD = _easterEggHuntDifficulty(EggDifficulty.HARD); @@ -130,7 +89,8 @@ public interface ParticleRequirement { } @Override - public boolean test(SteamwarUser user, Set eventTeilname, String eggHuntConfig) { + public boolean test(UnlockContext context) { + String eggHuntConfig = context.getEggHuntConfig(); if (eggHuntConfig == null) return false; int count = 0; for (int i = 0; i < eggHuntConfig.length(); i++) { @@ -152,8 +112,8 @@ public interface ParticleRequirement { } @Override - public boolean test(SteamwarUser user, Set eventTeilname, String eggHuntConfig) { - return user.getTeam() == teamId; + public boolean test(UnlockContext context) { + return context.getUser().getTeam() == teamId; } }.or(SERVER_TEAM); } @@ -167,8 +127,8 @@ public interface ParticleRequirement { } @Override - public boolean test(SteamwarUser user, Set eventTeilname, String eggHuntConfig) { - return eventTeilname.contains(eventId); + public boolean test(UnlockContext context) { + return context.getEvents().contains(eventId); } }.or(SERVER_TEAM); } @@ -184,9 +144,9 @@ public interface ParticleRequirement { } @Override - public boolean test(SteamwarUser user, Set eventTeilname, String eggHuntConfig) { - if (!eventTeilname.contains(eventId)) return false; - return teams.contains(user.getTeam()); + public boolean test(UnlockContext context) { + if (!teams.contains(context.getUser().getTeam())) return false; + return context.getEvents().contains(eventId); } }.or(SERVER_TEAM); } @@ -213,7 +173,8 @@ public interface ParticleRequirement { } @Override - public boolean test(SteamwarUser user, Set eventTeilname, String eggHuntConfig) { + public boolean test(UnlockContext context) { + String eggHuntConfig = context.getEggHuntConfig(); if (eggHuntConfig == null) return false; return eggs.stream().allMatch(id -> eggHuntConfig.length() > id && eggHuntConfig.charAt(id) == '1'); } @@ -229,8 +190,8 @@ public interface ParticleRequirement { } @Override - public boolean test(SteamwarUser user, Set eventTeilname, String eggHuntConfig) { - return user.getId() == userId; + public boolean test(UnlockContext context) { + return context.getUser().getId() == userId; } }.or(SERVER_TEAM); } @@ -244,8 +205,8 @@ public interface ParticleRequirement { } @Override - public boolean test(SteamwarUser user, Set eventTeilname, String eggHuntConfig) { - return user.getId() == userId; + public boolean test(UnlockContext context) { + return context.getUser().getId() == userId; } }.or(SERVER_TEAM); } @@ -260,12 +221,13 @@ public interface ParticleRequirement { } @Override - public boolean test(SteamwarUser user, Set eventTeilname, String eggHuntConfig) { - return user.getTeam() == teamId; + public boolean test(UnlockContext context) { + return context.getUser().getTeam() == teamId; } }.or(SERVER_TEAM); } + // The alternative is checked first, as it is usually the cheap server team check default ParticleRequirement or(ParticleRequirement particleRequirement) { return new ParticleRequirement() { @Override @@ -274,8 +236,8 @@ public interface ParticleRequirement { } @Override - public boolean test(SteamwarUser user, Set eventTeilname, String eggHuntConfig) { - return ParticleRequirement.this.test(user, eventTeilname, eggHuntConfig) || particleRequirement.test(user, eventTeilname, eggHuntConfig); + public boolean test(UnlockContext context) { + return particleRequirement.test(context) || ParticleRequirement.this.test(context); } }; } diff --git a/LobbySystem/src/de/steamwar/lobby/particle/design/RewardDesigns.java b/LobbySystem/src/de/steamwar/lobby/particle/design/RewardDesigns.java index 6a85b03d..921dd571 100644 --- a/LobbySystem/src/de/steamwar/lobby/particle/design/RewardDesigns.java +++ b/LobbySystem/src/de/steamwar/lobby/particle/design/RewardDesigns.java @@ -47,19 +47,19 @@ public class RewardDesigns { .set(GLIDING, Gliding.NOT_GLIDING); public final ParticleDesign EVENT_PLACEMENT_WARGEAR_SEASON = new FixedDesign("event_placement_wargear_season", Material.ENCHANTING_TABLE, "PARTICLE_EVENT_ENCHANTING", - ParticleRequirement.eventPlacement(22, 12, 285, 54), 1, MOVE, + ParticleRequirement.eventPlacement(22, 12, 285, 54), 5, MOVE, () -> new Cloud(new Circle(new LocationMutator(new SimpleParticle(Particle.ENCHANT, 0, 0, 0, 0.01), 0, 1.1, 0)))); public final ParticleDesign EVENT_PLACEMENT_AIRSHIP = new FixedDesign("event_placement_airship", Material.SNOWBALL, "PARTICLE_EVENT_CLOUD", - ParticleRequirement.eventPlacement(26, 205, 9, 54, 120, 292), 1, MOVE, + ParticleRequirement.eventPlacement(26, 205, 9, 54, 120, 292), 5, MOVE, () -> new Circle(new LocationMutator(new SimpleParticle(Particle.CLOUD, 0, 0, 0, 0.01), 0, 2.2, 0))); public final ParticleDesign EVENT_PLACEMENT_HELLS_BELLS = new FixedDesign("event_placement_hells_bells", Material.TNT_MINECART, "PARTICLE_EVENT_SMOKE", - ParticleRequirement.eventPlacement(28, 205, 9, 11), 1, MOVE, + ParticleRequirement.eventPlacement(28, 205, 9, 11), 5, MOVE, () -> new Cloud(new Circle(new LocationMutator(new SimpleParticle(Particle.CAMPFIRE_COSY_SMOKE, 0, 0, 0, 0.01), 0, 2.2, 0)))); public final ParticleDesign EVENT_PLACEMENT_UNDERWATER = new FixedDesign("event_placement_underwater", Material.PRISMARINE_SHARD, "PARTICLE_EVENT_WATER", - ParticleRequirement.eventPlacement(31, 9, 210, 520), 1, MOVE, + ParticleRequirement.eventPlacement(31, 9, 210, 520), 5, MOVE, () -> new Cloud(new SimpleParticle(Particle.DRIPPING_WATER))); public final ParticleDesign EVENT_PLACEMENT_ADVENT_WAR_SHIP = new FixedDesign("event_placement_advent_war_ship", Material.PRISMARINE_CRYSTALS, "PARTICLE_EVENT_WATER", - ParticleRequirement.eventPlacement(32, 9, 205, 210), 2, ALWAYS, + ParticleRequirement.eventPlacement(32, 9, 205, 210), 10, ALWAYS, () -> new LocationMutator(new Circle(new Group(new SimpleParticle(Particle.DRIPPING_WATER), new SimpleParticle(Particle.UNDERWATER, 0.2F, 0.2F, 0.2F, 0.01))), 0, 1.1, 0)); public final ParticleDesign EVENT_PLACEMENT_MINI_WARGEAR_LIGA = wings("event_placement_mini_wargear_liga", Material.IRON_SWORD, "PARTICLE_EVENT_WINGS", ParticleRequirement.eventPlacement(33, 9, 34, 205), Particle.UNDERWATER, 0.15, WingDesign.MWGL); @@ -73,25 +73,25 @@ public class RewardDesigns { ParticleRequirement.eventPlacement(38, 210, 158, 167, 286), Particle.CRIT, 0.1, WingDesign.SWORD_CROSSED); public final ParticleDesign EVENT_PARTICIPATION_WARGEAR_SEASON = new FixedDesign("event_participation_wargear_season", Material.BOOK, "PARTICLE_EVENT_ENCHANTING", - ParticleRequirement.eventParticipation(22), 1, MOVE, + ParticleRequirement.eventParticipation(22), 5, MOVE, () -> new SimpleParticle(Particle.ENCHANT)); public final ParticleDesign EVENT_PARTICIPATION_AIRSHIP = new FixedDesign("event_participation_airship", Material.SNOW_BLOCK, "PARTICLE_EVENT_CLOUD", - ParticleRequirement.eventParticipation(26), 1, MOVE, + ParticleRequirement.eventParticipation(26), 5, MOVE, () -> new SimpleParticle(Particle.CLOUD)); public final ParticleDesign EVENT_PARTICIPATION_HELLS_BELLS = new FixedDesign("event_participation_hells_bells", Material.TNT, "PARTICLE_EVENT_SMOKE", - ParticleRequirement.eventParticipation(28), 1, MOVE, + ParticleRequirement.eventParticipation(28), 5, MOVE, () -> new Circle(new SimpleParticle(Particle.CAMPFIRE_COSY_SMOKE, 0, 0, 0, 0.01))); public final ParticleDesign EVENT_PARTICIPATION_UNDERWATER = new FixedDesign("event_participation_underwater", Material.PRISMARINE_BRICKS, "PARTICLE_EVENT_WATER", - ParticleRequirement.eventParticipation(31), 1, MOVE, + ParticleRequirement.eventParticipation(31), 5, MOVE, () -> new SimpleParticle(Particle.DRIPPING_WATER)); public final ParticleDesign EVENT_PARTICIPATION_ADVENT_WAR_SHIP = new FixedDesign("event_participation_advent_war_ship", Material.PRISMARINE_WALL, "PARTICLE_EVENT_WATER", - ParticleRequirement.eventParticipation(32), 2, MOVE, + ParticleRequirement.eventParticipation(32), 10, MOVE, () -> new Group(new SimpleParticle(Particle.DRIPPING_WATER), new SimpleParticle(Particle.UNDERWATER, 0.2F, 0.2F, 0.2F, 0.01))); public final ParticleDesign EVENT_PARTICIPATION_MINI_WARGEAR_LIGA = new FixedDesign("event_participation_mini_wargear_liga", Material.PRISMARINE_SLAB, "PARTICLE_EVENT_WATER", - ParticleRequirement.eventParticipation(33), 1, MOVE, + ParticleRequirement.eventParticipation(33), 5, MOVE, () -> new Circle(new SimpleParticle(Particle.UNDERWATER, 0, 0, 0, 0))); public final ParticleDesign EVENT_PARTICIPATION_UNDERWATER_MWG = new FixedDesign("event_participation_underwater_mwg", Material.BLUE_CARPET, "PARTICLE_EVENT_RAIN_CLOUD", - ParticleRequirement.eventParticipation(35), 3, ALWAYS, + ParticleRequirement.eventParticipation(35), 15, ALWAYS, () -> new RandomParticle( rainCloud(Particle.RAIN, Particle.DRIPPING_WATER, 5), rainCloud(null, Particle.DRIPPING_LAVA, 5), @@ -113,7 +113,7 @@ public class RewardDesigns { ParticleRequirement.EGG_HUNT_EASY, 1, ALWAYS, () -> new LocationMutator(new SimpleParticle(Particle.FALLING_SPORE_BLOSSOM, 0.5F, 0.1f, 0.5F, 1, 1), 0, 2.2, 0)); public final ParticleDesign EGG_HUNT_MEDIUM = new FixedDesign("egg_hunt_medium", Material.YELLOW_CONCRETE_POWDER, "PARTICLE_EGG_HUNT_MEDIUM", - ParticleRequirement.EGG_HUNT_MEDIUM, 1, ALWAYS.andThen(values -> values.set(GROUND, Ground.ON_GROUND).set(SNEAK, Sneak.SNEAKING)), + ParticleRequirement.EGG_HUNT_MEDIUM, 5, ALWAYS.andThen(values -> values.set(GROUND, Ground.ON_GROUND).set(SNEAK, Sneak.SNEAKING)), () -> new SimpleParticle(Particle.GLOW_SQUID_INK, 0.4F, 0.9F, 0.4F, 0.01)); public final ParticleDesign EGG_HUNT_HARD = new FixedDesign("egg_hunt_hard", Material.RED_CONCRETE_POWDER, "PARTICLE_EGG_HUNT_HARD", ParticleRequirement.EGG_HUNT_HARD, 2, ALWAYS, @@ -133,7 +133,7 @@ public class RewardDesigns { ), 0, -0.2, 0)); // Hearts above the head while sneaking on the ground, a heart cloud ring while in the air public final ParticleDesign EGG_HUNT_HALF = new FixedDesign("egg_hunt_half", Material.EGG, "PARTICLE_EGG_HUNT_HALF", - ParticleRequirement.EGG_HUNT_FOUND_HALF, 1, ALWAYS, + ParticleRequirement.EGG_HUNT_FOUND_HALF, 5, ALWAYS, () -> new Group( new Sneaking(new Floor(new LocationMutator(new SimpleParticle(Particle.HEART, 0, 0, 0, 0.01), 0, 1.7, 0))), new NonFloor(new NonFlying(new LocationMutator(new Cloud(new Circle(new SimpleParticle(Particle.HEART, 0, 0, 0, 0.01))), 0, 0.5, 0))) diff --git a/LobbySystem/src/de/steamwar/lobby/particle/slot/ParticleSlots.java b/LobbySystem/src/de/steamwar/lobby/particle/slot/ParticleSlots.java index 47e254bd..d047f25c 100644 --- a/LobbySystem/src/de/steamwar/lobby/particle/slot/ParticleSlots.java +++ b/LobbySystem/src/de/steamwar/lobby/particle/slot/ParticleSlots.java @@ -36,9 +36,9 @@ public class ParticleSlots { public final int MAX_ENTRIES = 10; private final String KEY_PREFIX = "lobby-particle-slot-"; - // Particle positions per tick a slot may spawn + // Particles per tick a slot may spawn. A default entry costs 5; the largest preset costs 38. public double maxCost(SteamwarUser user) { - return user.hasPerm(UserPerm.TEAM) ? 80 : 40; + return user.hasPerm(UserPerm.TEAM) ? 60 : 30; } // Slots 1-3 for everyone, 4-5 for team members, 6-7 for the server team diff --git a/Packet.md b/Packet.md new file mode 100644 index 00000000..e69de29b