From 1da50164eac2fb8a65b1300c48241730e253d821 Mon Sep 17 00:00:00 2001 From: thetrouper Date: Sun, 1 Jun 2025 08:27:11 -0500 Subject: [PATCH] More balancing & changed visual of bolt trim --- .../server/commands/AdminCommand.java | 1 + .../systems/abilities/trims/BoltAbility.java | 38 +++++----- .../systems/abilities/trims/DuneAbility.java | 22 +++--- .../systems/abilities/trims/EyeAbility.java | 47 ++++++------ .../systems/abilities/trims/HostAbility.java | 10 +-- .../abilities/trims/RaiserAbility.java | 2 +- .../systems/abilities/trims/RibAbility.java | 6 +- .../abilities/trims/SentryAbility.java | 51 +++++++------ .../abilities/trims/ShaperAbility.java | 75 ++++++++----------- .../abilities/trims/SilenceAbility.java | 17 +++-- .../systems/abilities/trims/SpireAbility.java | 6 +- .../systems/abilities/trims/TideAbility.java | 7 +- .../abilities/trims/WayfinderAbility.java | 6 +- .../trouper/trimserver/utils/PlayerUtils.java | 6 +- 14 files changed, 147 insertions(+), 147 deletions(-) diff --git a/src/main/java/me/trouper/trimserver/server/commands/AdminCommand.java b/src/main/java/me/trouper/trimserver/server/commands/AdminCommand.java index 8ffd712..38ba917 100755 --- a/src/main/java/me/trouper/trimserver/server/commands/AdminCommand.java +++ b/src/main/java/me/trouper/trimserver/server/commands/AdminCommand.java @@ -213,6 +213,7 @@ public class AdminCommand implements QuickCommand { Text.color("&8&l| &7This armor is for testing purposes &c&lONLY&7!").decoration(TextDecoration.ITALIC,false) )); armor.addEnchant(Enchantment.VANISHING_CURSE,1,true); + armor.addEnchant(Enchantment.PROTECTION, 4, true); armor.setUnbreakable(true); armor.addItemFlags(ItemFlag.HIDE_ENCHANTS); armor.addItemFlags(ItemFlag.HIDE_UNBREAKABLE); diff --git a/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/BoltAbility.java b/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/BoltAbility.java index 6d79458..3435903 100755 --- a/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/BoltAbility.java +++ b/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/BoltAbility.java @@ -4,6 +4,7 @@ import me.trouper.trimserver.server.Main; import me.trouper.trimserver.server.systems.abilities.MaterialInfo; import me.trouper.trimserver.server.systems.abilities.AbstractAbility; import me.trouper.trimserver.server.systems.abilities.PatternInfo; +import me.trouper.trimserver.utils.PlayerUtils; import me.trouper.trimserver.utils.SoundPlayer; import me.trouper.trimserver.utils.TargetingUtils; import me.trouper.trimserver.utils.text.Text; @@ -23,13 +24,13 @@ import java.util.concurrent.atomic.AtomicInteger; public class BoltAbility extends AbstractAbility implements Main { public static final int NORMAL_COOLDOWN = 20 * 10; - public static final double NORMAL_DAMAGE = 10; + public static final double NORMAL_DAMAGE = 6; public static final int RESIN_COOLDOWN = 20 * 5; - public static final double RESIN_DAMAGE = 7; + public static final double RESIN_DAMAGE = 4; public static final int NETHERITE_COOLDOWN = 20 * 15; - public static final double NETHERITE_DAMAGE = 20; + public static final double NETHERITE_DAMAGE = 8; public BoltAbility() { super(TrimPattern.BOLT); @@ -42,10 +43,16 @@ public class BoltAbility extends AbstractAbility implements Main { return TargetingUtils.areaAffect(caster.getLocation(),range,target-> !main.man().trustBackend.trusts(caster,target) && !shaper.activeShellTasks.containsKey(target.getUniqueId()) && main.man().abilityBackend.abilityAllowed(caster,target.getLocation()),(target) ->{ - drawLightning(caster.getEyeLocation(),target.getEyeLocation(),innerBlock,outerBlock); - target.damage(damage,DamageSource.builder(DamageType.LIGHTNING_BOLT).withDamageLocation(caster.getEyeLocation()).withDirectEntity(caster).build()); + PlayerUtils.dealTrueDamage(target,DamageSource.builder(DamageType.LIGHTNING_BOLT).withDamageLocation(caster.getEyeLocation()).build(),damage); if (target instanceof Player t) Text.sendMessage(Text.Pallet.INFO,t,"You have been stunned by {0}'s Bolt!",caster.getName()); - + + SoundPlayer bolt = new SoundPlayer(target.getLocation(), Sound.ENTITY_LIGHTNING_BOLT_THUNDER,10,1); + SoundPlayer ring = new SoundPlayer(target.getLocation(), Sound.ITEM_TRIDENT_THUNDER,10,2); + SoundPlayer zip = new SoundPlayer(target.getLocation(), Sound.ENTITY_BEE_STING,10,1); + + bolt.playWithin(50); + ring.playWithin(30); + AtomicInteger counter = new AtomicInteger(0); Bukkit.getScheduler().runTaskTimer(main.getPlugin(),(task) -> { if (counter.getAndIncrement() > 40) { @@ -54,14 +61,16 @@ public class BoltAbility extends AbstractAbility implements Main { } int tick = target.getNoDamageTicks(); int maxTick = target.getMaximumNoDamageTicks(); - - target.setNoDamageTicks(1); - target.setMaximumNoDamageTicks(2); + + if (counter.get() % 5 == 0) zip.playWithin(30); + target.setNoDamageTicks(0); + target.setMaximumNoDamageTicks(1); target.damage(0.01,DamageSource.builder(DamageType.LIGHTNING_BOLT).withDamageLocation(caster.getLocation()).withDirectEntity(caster).build()); target.setNoDamageTicks(tick); target.setMaximumNoDamageTicks(maxTick); Location stunLoc = target.getLocation().clone(); target.teleport(stunLoc); + drawLightning(caster.getEyeLocation().subtract(0,0.5,0),target.getEyeLocation(),innerBlock,outerBlock); },0,1); }); } @@ -70,21 +79,14 @@ public class BoltAbility extends AbstractAbility implements Main { int segments = 10; double maxOffset = 0.5; long stayTime = 10L; - double thickness = 0.07; - double thicknessOut = 0.1; + double thickness = 0.01; + double thicknessOut = 0.05; List viewers = new ArrayList<>(start.getWorld().getPlayers()); Location current = start.clone(); Vector direction = end.clone().subtract(start).toVector(); double segmentLength = direction.length() / segments; direction.normalize().multiply(segmentLength); - SoundPlayer bolt = new SoundPlayer(end, Sound.ENTITY_LIGHTNING_BOLT_THUNDER,10,1); - SoundPlayer ring = new SoundPlayer(end, Sound.ITEM_TRIDENT_THUNDER,10,1); - SoundPlayer zip = new SoundPlayer(end, Sound.ENTITY_BEE_STING,10,1); - - zip.playWithin(30); - bolt.playWithin(50); - ring.playWithin(30); for (int i = 0; i < segments; i++) { Vector offset = new Vector( diff --git a/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/DuneAbility.java b/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/DuneAbility.java index 69dc2bc..e4200c4 100755 --- a/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/DuneAbility.java +++ b/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/DuneAbility.java @@ -133,77 +133,77 @@ public class DuneAbility extends AbstractAbility { } } - @MaterialInfo(name = "Amethyst Wormsign",description = "Call upon Shai-Hulud to destroy your enemies", cooldownTicks = 20*160) + @MaterialInfo(name = "Amethyst Wormsign",description = "Call upon Shai-Hulud to destroy your enemies", cooldownTicks = 20*90) @Override public boolean amethystAbility(Player player) { spawnWormSign(player,player.getLocation()); return true; } - @MaterialInfo(name = "Copper Wormsign",description = "Call upon Shai-Hulud to destroy your enemies", cooldownTicks = 20*160) + @MaterialInfo(name = "Copper Wormsign",description = "Call upon Shai-Hulud to destroy your enemies", cooldownTicks = 20*90) @Override public boolean copperAbility(Player player) { spawnWormSign(player,player.getLocation()); return true; } - @MaterialInfo(name = "Diamond Wormsign",description = "Call upon Shai-Hulud to destroy your enemies", cooldownTicks = 20*160) + @MaterialInfo(name = "Diamond Wormsign",description = "Call upon Shai-Hulud to destroy your enemies", cooldownTicks = 20*90) @Override public boolean diamondAbility(Player player) { spawnWormSign(player,player.getLocation()); return true; } - @MaterialInfo(name = "Emerald Wormsign",description = "Call upon Shai-Hulud to destroy your enemies", cooldownTicks = 20*160) + @MaterialInfo(name = "Emerald Wormsign",description = "Call upon Shai-Hulud to destroy your enemies", cooldownTicks = 20*90) @Override public boolean emeraldAbility(Player player) { spawnWormSign(player,player.getLocation()); return true; } - @MaterialInfo(name = "Gold Wormsign",description = "Call upon Shai-Hulud to destroy your enemies", cooldownTicks = 20*160) + @MaterialInfo(name = "Gold Wormsign",description = "Call upon Shai-Hulud to destroy your enemies", cooldownTicks = 20*90) @Override public boolean goldAbility(Player player) { spawnWormSign(player,player.getLocation()); return true; } - @MaterialInfo(name = "Iron Wormsign",description = "Call upon Shai-Hulud to destroy your enemies", cooldownTicks = 20*160) + @MaterialInfo(name = "Iron Wormsign",description = "Call upon Shai-Hulud to destroy your enemies", cooldownTicks = 20*90) @Override public boolean ironAbility(Player player) { spawnWormSign(player,player.getLocation()); return true; } - @MaterialInfo(name = "Lapis Wormsign",description = "Call upon Shai-Hulud to destroy your enemies", cooldownTicks = 20*160) + @MaterialInfo(name = "Lapis Wormsign",description = "Call upon Shai-Hulud to destroy your enemies", cooldownTicks = 20*90) @Override public boolean lapisAbility(Player player) { spawnWormSign(player,player.getLocation()); return true; } - @MaterialInfo(name = "Netherite Wormsign",description = "Call upon Shai-Hulud to destroy your enemies", cooldownTicks = 20*90) + @MaterialInfo(name = "Netherite Wormsign",description = "Call upon Shai-Hulud to destroy your enemies", cooldownTicks = 20*60) @Override public boolean netheriteAbility(Player player) { spawnWormSign(player,player.getLocation()); return true; } - @MaterialInfo(name = "Quartz Wormsign",description = "Call upon Shai-Hulud to destroy your enemies", cooldownTicks = 20*160) + @MaterialInfo(name = "Quartz Wormsign",description = "Call upon Shai-Hulud to destroy your enemies", cooldownTicks = 20*90) @Override public boolean quartzAbility(Player player) { spawnWormSign(player,player.getLocation()); return true; } - @MaterialInfo(name = "Redstone Wormsign",description = "Call upon Shai-Hulud to destroy your enemies", cooldownTicks = 20*160) + @MaterialInfo(name = "Redstone Wormsign",description = "Call upon Shai-Hulud to destroy your enemies", cooldownTicks = 20*90) @Override public boolean redstoneAbility(Player player) { spawnWormSign(player,player.getLocation()); return true; } - @MaterialInfo(name = "Resin Wormsign",description = "Call upon Shai-Hulud to destroy your enemies", cooldownTicks = 20*160) + @MaterialInfo(name = "Resin Wormsign",description = "Call upon Shai-Hulud to destroy your enemies", cooldownTicks = 20*90) @Override public boolean resinAbility(Player player) { spawnWormSign(player,player.getLocation()); diff --git a/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/EyeAbility.java b/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/EyeAbility.java index 15ca81d..9326e0d 100755 --- a/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/EyeAbility.java +++ b/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/EyeAbility.java @@ -5,7 +5,6 @@ import me.trouper.trimserver.server.systems.abilities.AbstractAbility; import me.trouper.trimserver.server.systems.abilities.PatternInfo; import me.trouper.trimserver.utils.PlayerUtils; import me.trouper.trimserver.utils.SoundPlayer; -import me.trouper.trimserver.utils.TargetingUtils; import me.trouper.trimserver.utils.visual.BlockDisplayRaytracer; import me.trouper.trimserver.utils.visual.CustomDisplayRaytracer; import org.bukkit.*; @@ -25,20 +24,20 @@ import java.util.concurrent.atomic.AtomicInteger; @PatternInfo(name = "Eye of Power", description = "Allows you to see players hidden with the host trim. Includes variants.") public class EyeAbility extends AbstractAbility { - public static final int NORMAL_COOLDOWN = 20 * 30; - public static final int NORMAL_DURATION = 5; - public static final double NORMAL_DAMAGE = 0.1; - public static final double NORMAL_DAMAGE_FAIL_CHANCE = 0.75; + public static final int NORMAL_COOLDOWN = 20 * 60; + public static final int NORMAL_DURATION = 4; + public static final double NORMAL_DAMAGE = 0.5; + public static final double NORMAL_DAMAGE_CHANCE = 0.80; - public static final int NETHERITE_COOLDOWN = 20 * 15; - public static final int NETHERITE_DURATION = 10; - public static final double NETHERITE_DAMAGE = 0.2; - public static final double NETHERITE_DAMAGE_FAIL_CHANCE = 0.50; + public static final int NETHERITE_COOLDOWN = 20 * 40; + public static final int NETHERITE_DURATION = 6; + public static final double NETHERITE_DAMAGE = 0.8; + public static final double NETHERITE_DAMAGE_CHANCE = 1.0; - public static final int RESIN_COOLDOWN = 20 * 10; - public static final long RESIN_DURATION = 3; + public static final int RESIN_COOLDOWN = 20 * 20; + public static final long RESIN_DURATION = 2; public static final double RESIN_DAMAGE = 0.1; - public static final double RESIN_DAMAGE_FAIL_CHANCE = 0.80; + public static final double RESIN_DAMAGE_CHANCE = 0.60; public EyeAbility() { super(TrimPattern.EYE); @@ -87,7 +86,7 @@ public class EyeAbility extends AbstractAbility { if (!(entity instanceof LivingEntity liv) || shaper.activeShellTasks.containsKey(liv.getUniqueId())) return; hissSound.playWithin(30); - if (random.nextDouble(1) >= damageFailChance) { + if (random.nextDouble(1) <= damageFailChance) { int tick = liv.getNoDamageTicks(); int maxTick = liv.getMaximumNoDamageTicks(); @@ -114,77 +113,77 @@ public class EyeAbility extends AbstractAbility { @MaterialInfo(name = "Amethyst Laser beam", description = "Shoot lasers from the eye on the chestpiece for 5 seconds", cooldownTicks = NORMAL_COOLDOWN) @Override public boolean amethystAbility(Player player) { - eyeLasers(player,Material.PURPLE_CONCRETE_POWDER,Material.MAGENTA_STAINED_GLASS,NORMAL_DURATION,NORMAL_DAMAGE,NORMAL_DAMAGE_FAIL_CHANCE); + eyeLasers(player,Material.PURPLE_CONCRETE_POWDER,Material.MAGENTA_STAINED_GLASS,NORMAL_DURATION,NORMAL_DAMAGE, NORMAL_DAMAGE_CHANCE); return true; } @MaterialInfo(name = "Copper Laser beam", description = "Shoot lasers from the eye on the chestpiece for 5 seconds", cooldownTicks = NORMAL_COOLDOWN) @Override public boolean copperAbility(Player player) { - eyeLasers(player,Material.LIME_TERRACOTTA,Material.GREEN_STAINED_GLASS,NORMAL_DURATION,NORMAL_DAMAGE,NORMAL_DAMAGE_FAIL_CHANCE); + eyeLasers(player,Material.LIME_TERRACOTTA,Material.GREEN_STAINED_GLASS,NORMAL_DURATION,NORMAL_DAMAGE, NORMAL_DAMAGE_CHANCE); return true; } @MaterialInfo(name = "Diamond Laser beam", description = "Shoot lasers from the eye on the chestpiece for 5 seconds", cooldownTicks = NORMAL_COOLDOWN) @Override public boolean diamondAbility(Player player) { - eyeLasers(player,Material.LIGHT_BLUE_CONCRETE_POWDER,Material.LIGHT_BLUE_STAINED_GLASS,NORMAL_DURATION,NORMAL_DAMAGE,NORMAL_DAMAGE_FAIL_CHANCE); + eyeLasers(player,Material.LIGHT_BLUE_CONCRETE_POWDER,Material.LIGHT_BLUE_STAINED_GLASS,NORMAL_DURATION,NORMAL_DAMAGE, NORMAL_DAMAGE_CHANCE); return true; } @MaterialInfo(name = "Emerald Laser beam", description = "Shoot lasers from the eye on the chestpiece for 5 seconds", cooldownTicks = NORMAL_COOLDOWN) @Override public boolean emeraldAbility(Player player) { - eyeLasers(player,Material.LIME_CONCRETE_POWDER,Material.LIME_STAINED_GLASS,NORMAL_DURATION,NORMAL_DAMAGE,NORMAL_DAMAGE_FAIL_CHANCE); + eyeLasers(player,Material.LIME_CONCRETE_POWDER,Material.LIME_STAINED_GLASS,NORMAL_DURATION,NORMAL_DAMAGE, NORMAL_DAMAGE_CHANCE); return true; } @MaterialInfo(name = "Gold Laser beam", description = "Shoot lasers from the eye on the chestpiece for 5 seconds", cooldownTicks = NORMAL_COOLDOWN) @Override public boolean goldAbility(Player player) { - eyeLasers(player,Material.YELLOW_TERRACOTTA,Material.YELLOW_STAINED_GLASS,NORMAL_DURATION,NORMAL_DAMAGE,NORMAL_DAMAGE_FAIL_CHANCE); + eyeLasers(player,Material.YELLOW_TERRACOTTA,Material.YELLOW_STAINED_GLASS,NORMAL_DURATION,NORMAL_DAMAGE, NORMAL_DAMAGE_CHANCE); return true; } @MaterialInfo(name = "Iron Laser beam", description = "Shoot lasers from the eye on the chestpiece for 5 seconds", cooldownTicks = NORMAL_COOLDOWN) @Override public boolean ironAbility(Player player) { - eyeLasers(player,Material.LIGHT_GRAY_CONCRETE_POWDER,Material.LIGHT_GRAY_STAINED_GLASS,NORMAL_DURATION,NORMAL_DAMAGE,NORMAL_DAMAGE_FAIL_CHANCE); + eyeLasers(player,Material.LIGHT_GRAY_CONCRETE_POWDER,Material.LIGHT_GRAY_STAINED_GLASS,NORMAL_DURATION,NORMAL_DAMAGE, NORMAL_DAMAGE_CHANCE); return true; } @MaterialInfo(name = "Lapis Laser beam", description = "Shoot lasers from the eye on the chestpiece for 5 seconds", cooldownTicks = NORMAL_COOLDOWN) @Override public boolean lapisAbility(Player player) { - eyeLasers(player,Material.BLUE_CONCRETE,Material.BLUE_STAINED_GLASS,NORMAL_DURATION,NORMAL_DAMAGE,NORMAL_DAMAGE_FAIL_CHANCE); + eyeLasers(player,Material.BLUE_CONCRETE,Material.BLUE_STAINED_GLASS,NORMAL_DURATION,NORMAL_DAMAGE, NORMAL_DAMAGE_CHANCE); return true; } @MaterialInfo(name = "Netherite Laser beam", description = "Shoot lasers from the eye on the chestpiece for 10 seconds", cooldownTicks = NETHERITE_COOLDOWN) @Override public boolean netheriteAbility(Player player) { - eyeLasers(player,Material.BLACK_CONCRETE,Material.BLACK_STAINED_GLASS,NETHERITE_DURATION,NETHERITE_DAMAGE,NETHERITE_DAMAGE_FAIL_CHANCE); + eyeLasers(player,Material.BLACK_CONCRETE,Material.BLACK_STAINED_GLASS,NETHERITE_DURATION,NETHERITE_DAMAGE, NETHERITE_DAMAGE_CHANCE); return true; } @MaterialInfo(name = "Quartz Laser beam", description = "Shoot lasers from the eye on the chestpiece for 5 seconds", cooldownTicks = NORMAL_COOLDOWN) @Override public boolean quartzAbility(Player player) { - eyeLasers(player,Material.WHITE_CONCRETE_POWDER,Material.WHITE_STAINED_GLASS,NORMAL_DURATION,NORMAL_DAMAGE,NORMAL_DAMAGE_FAIL_CHANCE); + eyeLasers(player,Material.WHITE_CONCRETE_POWDER,Material.WHITE_STAINED_GLASS,NORMAL_DURATION,NORMAL_DAMAGE, NORMAL_DAMAGE_CHANCE); return true; } @MaterialInfo(name = "Redstone Laser beam", description = "Shoot lasers from the eye on the chestpiece for 5 seconds", cooldownTicks = NORMAL_COOLDOWN) @Override public boolean redstoneAbility(Player player) { - eyeLasers(player,Material.RED_CONCRETE,Material.RED_STAINED_GLASS,NORMAL_DURATION,NORMAL_DAMAGE,NORMAL_DAMAGE_FAIL_CHANCE); + eyeLasers(player,Material.RED_CONCRETE,Material.RED_STAINED_GLASS,NORMAL_DURATION,NORMAL_DAMAGE, NORMAL_DAMAGE_CHANCE); return true; } @MaterialInfo(name = "Resin Laser beam", description = "Shoot lasers from the eye on the chestpiece for 5 seconds", cooldownTicks = RESIN_COOLDOWN) @Override public boolean resinAbility(Player player) { - eyeLasers(player,Material.ORANGE_CONCRETE_POWDER,Material.ORANGE_STAINED_GLASS,RESIN_DURATION,RESIN_DAMAGE,RESIN_DAMAGE_FAIL_CHANCE); + eyeLasers(player,Material.ORANGE_CONCRETE_POWDER,Material.ORANGE_STAINED_GLASS,RESIN_DURATION,RESIN_DAMAGE, RESIN_DAMAGE_CHANCE); return true; } } diff --git a/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/HostAbility.java b/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/HostAbility.java index 0d28f95..8521509 100755 --- a/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/HostAbility.java +++ b/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/HostAbility.java @@ -25,14 +25,14 @@ import java.util.concurrent.atomic.AtomicInteger; @PatternInfo(name = "The Host", description = "And like that, he vanishes!") public class HostAbility extends AbstractAbility { - public static final int NORMAL_DURATION = 6; + public static final int NORMAL_DURATION = 5; public static final int NORMAL_COOLDOWN = 20 * 30; - public static final int NETHERITE_DURATION = 15; - public static final int NETHERITE_COOLDOWN = 20 * 20; + public static final int NETHERITE_DURATION = 8; + public static final int NETHERITE_COOLDOWN = 20 * 45; - public static final int RESIN_DURATION = 5; - public static final int RESIN_COOLDOWN = 20 * 15; + public static final int RESIN_DURATION = 3; + public static final int RESIN_COOLDOWN = 20 * 10; public HostAbility() { super(TrimPattern.HOST); diff --git a/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/RaiserAbility.java b/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/RaiserAbility.java index f5762d8..495b864 100755 --- a/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/RaiserAbility.java +++ b/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/RaiserAbility.java @@ -28,7 +28,7 @@ public class RaiserAbility extends AbstractAbility { public static final int NORMAL_COOLDOWN = 20 * 40; public static final int NETHERITE_DURATION = 20; - public static final int NETHERITE_COOLDOWN = 20 * 25; + public static final int NETHERITE_COOLDOWN = 20 * 30; public static final int RESIN_DURATION = 10; public static final int RESIN_COOLDOWN = 20 * 15; diff --git a/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/RibAbility.java b/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/RibAbility.java index 3a82d7e..7ea7789 100755 --- a/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/RibAbility.java +++ b/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/RibAbility.java @@ -29,13 +29,13 @@ import java.util.Random; public class RibAbility extends AbstractAbility { public static final int NORMAL_COOLDOWN = 20 * 30; - public static final int NORMAL_SPIKE_DAMAGE = 30; + public static final int NORMAL_SPIKE_DAMAGE = 15; public static final int NETHERITE_COOLDOWN = 20 * 20; - public static final int NETHERITE_SPIKE_DAMAGE = 50; + public static final int NETHERITE_SPIKE_DAMAGE = 20; public static final int RESIN_COOLDOWN = 20 * 15; - public static final int RESIN_SPIKE_DAMAGE = 15; + public static final int RESIN_SPIKE_DAMAGE = 6; private final Random random = new Random(); diff --git a/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/SentryAbility.java b/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/SentryAbility.java index 5b87d12..9ffe6a2 100755 --- a/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/SentryAbility.java +++ b/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/SentryAbility.java @@ -29,26 +29,29 @@ import java.util.concurrent.atomic.AtomicInteger; @PatternInfo(name = "Build Sentry", description = "\"Meet the Engineer.\" Includes Variants.") public class SentryAbility extends AbstractAbility { - public static final int NORMAL_COOLDOWN = 20 * 10; + public static final int NORMAL_COOLDOWN = 20 * 60; public static final int NORMAL_AMMO = 30; public static final int NORMAL_MAX_LIFE = 30; public static final int NORMAL_BULLET_COOLDOWN = 5; + public static final int NORMAL_BULLET_DAMAGE = 4; - public static final int NETHERITE_COOLDOWN = 20 * 15; + public static final int NETHERITE_COOLDOWN = 20 * 45; public static final int NETHERITE_AMMO = 50; - public static final int NETHERITE_MAX_LIFE = 45; + public static final int NETHERITE_MAX_LIFE = 30; public static final int NETHERITE_BULLET_COOLDOWN = 2; + public static final int NETHERITE_BULLET_DAMAGE = 5; - public static final int RESIN_COOLDOWN = 20 * 5; - public static final int RESIN_AMMO = 15; - public static final int RESIN_MAX_LIFE = 15; - public static final int RESIN_BULLET_COOLDOWN = 3; + public static final int RESIN_COOLDOWN = 20 * 25; + public static final int RESIN_AMMO = 5; + public static final int RESIN_MAX_LIFE = 7; + public static final int RESIN_BULLET_COOLDOWN = 1; + public static final int RESIN_BULLET_DAMAGE = 2; public SentryAbility() { super(TrimPattern.SENTRY); } - public static void spawnSentry(Location loc, Player owner, Material legsMat, Material turretMat, int ammo, long secondsAlive, long cooldownTicks) { + public static void spawnSentry(Location loc, Player owner, Material legsMat, Material turretMat, int ammo, long secondsAlive, long cooldownTicks, double bulletDamage) { AbstractAbility shaperInstance = main.man().abilityBackend.getAbility(TrimPattern.SHAPER); ShaperAbility shaper = (ShaperAbility) shaperInstance; @@ -126,14 +129,16 @@ public class SentryAbility extends AbstractAbility { String bar = Text.generateProgressBar(10, maxAmmo, chamber); meter.text(Text.color("%s's Sentry\n".formatted(owner.getName()) + "Ammo " + bar)); - Optional target = TargetingUtils.getClosestPlayer(finalLoc,15,p -> !p.isDead() && + Optional target = TargetingUtils.getClosestLivingEntity(finalLoc,15,p -> !p.isDead() && !p.equals(owner) && !main.man().trustBackend.trusts(owner,p) && !shaper.activeShellTasks.containsKey(p.getUniqueId()) && - PlayerUtils.combatAllowed(p,owner)); + PlayerUtils.combatAllowed(p,owner) && + !p.equals(dummy) + ); if (target.isPresent()) { - Player tracked = target.get(); + LivingEntity tracked = target.get(); Vector toEye = tracked.getLocation() .add(0, tracked.getEyeHeight(), 0) .toVector() @@ -157,7 +162,7 @@ public class SentryAbility extends AbstractAbility { int maxTick = liv.getMaximumNoDamageTicks(); liv.setNoDamageTicks(0); liv.setMaximumNoDamageTicks(0); - liv.damage(8, DamageSource.builder(DamageType.ARROW).withDirectEntity(dummy).withDamageLocation(finalLoc).build()); + liv.damage(bulletDamage, DamageSource.builder(DamageType.ARROW).withDirectEntity(dummy).build()); liv.setNoDamageTicks(tick); liv.setMaximumNoDamageTicks(maxTick); hitSound.playWithin(20); @@ -233,77 +238,77 @@ public class SentryAbility extends AbstractAbility { @MaterialInfo(name = "Amethyst ", description = "Spawns a sentry which shoots the nearest player", cooldownTicks = NORMAL_COOLDOWN) @Override public boolean amethystAbility(Player player) { - spawnSentry(player.getLocation(),player,Material.AMETHYST_BLOCK,Material.DISPENSER,NORMAL_AMMO,NORMAL_MAX_LIFE,NORMAL_BULLET_COOLDOWN); + spawnSentry(player.getLocation(),player,Material.AMETHYST_BLOCK,Material.DISPENSER,NORMAL_AMMO,NORMAL_MAX_LIFE,NORMAL_BULLET_COOLDOWN,NORMAL_BULLET_DAMAGE); return true; } @MaterialInfo(name = "Copper ", description = "Spawns a sentry which shoots the nearest player", cooldownTicks = NORMAL_COOLDOWN) @Override public boolean copperAbility(Player player) { - spawnSentry(player.getLocation(),player,Material.COPPER_BLOCK,Material.DISPENSER,NORMAL_AMMO,NORMAL_MAX_LIFE,NORMAL_BULLET_COOLDOWN); + spawnSentry(player.getLocation(),player,Material.COPPER_BLOCK,Material.DISPENSER,NORMAL_AMMO,NORMAL_MAX_LIFE,NORMAL_BULLET_COOLDOWN,NORMAL_BULLET_DAMAGE); return true; } @MaterialInfo(name = "Diamond ", description = "Spawns a sentry which shoots the nearest player", cooldownTicks = NORMAL_COOLDOWN) @Override public boolean diamondAbility(Player player) { - spawnSentry(player.getLocation(),player,Material.DIAMOND_BLOCK,Material.DISPENSER,NORMAL_AMMO,NORMAL_MAX_LIFE,NORMAL_BULLET_COOLDOWN); + spawnSentry(player.getLocation(),player,Material.DIAMOND_BLOCK,Material.DISPENSER,NORMAL_AMMO,NORMAL_MAX_LIFE,NORMAL_BULLET_COOLDOWN,NORMAL_BULLET_DAMAGE); return true; } @MaterialInfo(name = "Emerald ", description = "Spawns a sentry which shoots the nearest player", cooldownTicks = NORMAL_COOLDOWN) @Override public boolean emeraldAbility(Player player) { - spawnSentry(player.getLocation(),player,Material.EMERALD_BLOCK,Material.DISPENSER,NORMAL_AMMO,NORMAL_MAX_LIFE,NORMAL_BULLET_COOLDOWN); + spawnSentry(player.getLocation(),player,Material.EMERALD_BLOCK,Material.DISPENSER,NORMAL_AMMO,NORMAL_MAX_LIFE,NORMAL_BULLET_COOLDOWN,NORMAL_BULLET_DAMAGE); return true; } @MaterialInfo(name = "Gold ", description = "Spawns a sentry which shoots the nearest player", cooldownTicks = NORMAL_COOLDOWN) @Override public boolean goldAbility(Player player) { - spawnSentry(player.getLocation(),player,Material.GOLD_BLOCK,Material.DISPENSER,NORMAL_AMMO,NORMAL_MAX_LIFE,NORMAL_BULLET_COOLDOWN); + spawnSentry(player.getLocation(),player,Material.GOLD_BLOCK,Material.DISPENSER,NORMAL_AMMO,NORMAL_MAX_LIFE,NORMAL_BULLET_COOLDOWN,NORMAL_BULLET_DAMAGE); return true; } @MaterialInfo(name = "Iron ", description = "Spawns a sentry which shoots the nearest player", cooldownTicks = NORMAL_COOLDOWN) @Override public boolean ironAbility(Player player) { - spawnSentry(player.getLocation(),player,Material.IRON_BLOCK,Material.DISPENSER,NORMAL_AMMO,NORMAL_MAX_LIFE,NORMAL_BULLET_COOLDOWN); + spawnSentry(player.getLocation(),player,Material.IRON_BLOCK,Material.DISPENSER,NORMAL_AMMO,NORMAL_MAX_LIFE,NORMAL_BULLET_COOLDOWN,NORMAL_BULLET_DAMAGE); return true; } @MaterialInfo(name = "Lapis ", description = "Spawns a sentry which shoots the nearest player", cooldownTicks = NORMAL_COOLDOWN) @Override public boolean lapisAbility(Player player) { - spawnSentry(player.getLocation(),player,Material.LAPIS_BLOCK,Material.DISPENSER,NORMAL_AMMO,NORMAL_MAX_LIFE,NORMAL_BULLET_COOLDOWN); + spawnSentry(player.getLocation(),player,Material.LAPIS_BLOCK,Material.DISPENSER,NORMAL_AMMO,NORMAL_MAX_LIFE,NORMAL_BULLET_COOLDOWN,NORMAL_BULLET_DAMAGE); return true; } @MaterialInfo(name = "Netherite Sentry", description = "Spawns a supercharged sentry which absolutely shreds the nearest player", cooldownTicks = NETHERITE_COOLDOWN) @Override public boolean netheriteAbility(Player player) { - spawnSentry(player.getLocation(),player,Material.NETHERITE_BLOCK,Material.CRAFTER,NETHERITE_AMMO,NETHERITE_MAX_LIFE,NETHERITE_BULLET_COOLDOWN); + spawnSentry(player.getLocation(),player,Material.NETHERITE_BLOCK,Material.CRAFTER,NETHERITE_AMMO,NETHERITE_MAX_LIFE,NETHERITE_BULLET_COOLDOWN,NETHERITE_BULLET_DAMAGE); return true; } @MaterialInfo(name = "Quartz ", description = "Spawns a sentry which shoots the nearest player", cooldownTicks = NORMAL_COOLDOWN) @Override public boolean quartzAbility(Player player) { - spawnSentry(player.getLocation(),player,Material.QUARTZ_BLOCK,Material.DISPENSER,NORMAL_AMMO,NORMAL_MAX_LIFE,NORMAL_BULLET_COOLDOWN); + spawnSentry(player.getLocation(),player,Material.QUARTZ_BLOCK,Material.DISPENSER,NORMAL_AMMO,NORMAL_MAX_LIFE,NORMAL_BULLET_COOLDOWN,NORMAL_BULLET_DAMAGE); return true; } @MaterialInfo(name = "Redstone ", description = "Spawns a sentry which shoots the nearest player", cooldownTicks = NORMAL_COOLDOWN) @Override public boolean redstoneAbility(Player player) { - spawnSentry(player.getLocation(),player,Material.REDSTONE_BLOCK,Material.DISPENSER,NORMAL_AMMO,NORMAL_MAX_LIFE,NORMAL_BULLET_COOLDOWN); + spawnSentry(player.getLocation(),player,Material.REDSTONE_BLOCK,Material.DISPENSER,NORMAL_AMMO,NORMAL_MAX_LIFE,NORMAL_BULLET_COOLDOWN,NORMAL_BULLET_DAMAGE); return true; } @MaterialInfo(name = "Resin ", description = "Spawns a sentry which shoots the nearest player", cooldownTicks = RESIN_COOLDOWN) @Override public boolean resinAbility(Player player) { - spawnSentry(player.getLocation(),player,Material.RESIN_BLOCK,Material.DISPENSER,RESIN_AMMO,RESIN_MAX_LIFE,RESIN_BULLET_COOLDOWN); + spawnSentry(player.getLocation(),player,Material.RESIN_BLOCK,Material.DISPENSER,RESIN_AMMO,RESIN_MAX_LIFE,RESIN_BULLET_COOLDOWN,RESIN_BULLET_DAMAGE); return true; } } diff --git a/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/ShaperAbility.java b/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/ShaperAbility.java index 71319f6..bfed231 100755 --- a/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/ShaperAbility.java +++ b/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/ShaperAbility.java @@ -35,24 +35,26 @@ public class ShaperAbility extends AbstractAbility implements Listener { private final Map knockbackModifiers = new ConcurrentHashMap<>(); private final Map originalFireTicks = new ConcurrentHashMap<>(); - private static final int NORMAL_DURATION = 8 * 20; + private static final int NORMAL_COOLDOWN = 20 * 30; + private static final int NORMAL_DURATION = 20 * 8; private static final double NORMAL_SHATTER_DAMAGE = 10.0; private static final double NORMAL_SHATTER_RADIUS = 8.0; - private static final int SLOWNESS_AMPLIFIER = 1; - private static final int DEFAULT_COOLDOWN = 20 * 50; - private static final int NETHERITE_COOLDOWN = 20 * 90; - private static final int RESIN_COOLDOWN = 20 * 40; + private static final int RESIN_COOLDOWN = 20 * 20; + private static final int RESIN_DURATION = 20 * 8; + private static final double RESIN_SHATTER_DAMAGE = 8; + private static final double RESIN_SHATTER_RADIUS = 8; - private static final double NETHERITE_DURATION_MULTIPLIER = 1.3; - private static final double NETHERITE_SHATTER_DAMAGE_MULTIPLIER = 1.5; - private static final double NETHERITE_SHATTER_RADIUS_MULTIPLIER = 1.2; + private static final int NETHERITE_COOLDOWN = 20 * 40; + private static final int NETHERITE_DURATION = 20 * 10; + private static final double NETHERITE_SHATTER_DAMAGE = 16; + private static final double NETHERITE_SHATTER_RADIUS = 10; public ShaperAbility() { super(TrimPattern.SHAPER); } - private void activateTerraShell(Player player, Material blockMaterialForShell) { + private void activateTerraShell(Player player, Material blockMaterialForShell, int duration, double shatterDamage, double shatterRadius) { UUID playerUUID = player.getUniqueId(); if (activeShellTasks.containsKey(playerUUID)) return; @@ -93,20 +95,7 @@ public class ShaperAbility extends AbstractAbility implements Listener { shellParts.add(bd); } - int duration = NORMAL_DURATION; - double shatterDamage = NORMAL_SHATTER_DAMAGE; - double shatterRadius = NORMAL_SHATTER_RADIUS; - int slownessAmplifier = SLOWNESS_AMPLIFIER; - - if (blockMaterialForShell == Material.NETHERITE_BLOCK) { - duration = (int) (duration * NETHERITE_DURATION_MULTIPLIER); - shatterDamage *= NETHERITE_SHATTER_DAMAGE_MULTIPLIER; - shatterRadius *= NETHERITE_SHATTER_RADIUS_MULTIPLIER; - } else if (blockMaterialForShell == Material.RESIN_BLOCK) { - slownessAmplifier = 0; - } - - player.addPotionEffect(new PotionEffect(PotionEffectType.SLOWNESS, duration, slownessAmplifier, false, false, true)); + player.addPotionEffect(new PotionEffect(PotionEffectType.SLOWNESS, duration, 1, false, false, true)); originalFireTicks.put(playerUUID, player.getFireTicks()); if (player.getFireTicks() > 0) player.setFireTicks(0); @@ -243,80 +232,80 @@ public class ShaperAbility extends AbstractAbility implements Listener { a.damage(event.getDamage()); } - @MaterialInfo(name = "Amethyst Terra Shell", description = "Protective Amethyst shell, shatters on expiry.", cooldownTicks = DEFAULT_COOLDOWN) + @MaterialInfo(name = "Amethyst Terra Shell", description = "Protective Amethyst shell, shatters on expiry.", cooldownTicks = NORMAL_COOLDOWN) @Override public boolean amethystAbility(Player player) { - activateTerraShell(player, Material.AMETHYST_BLOCK); + activateTerraShell(player, Material.AMETHYST_BLOCK,NORMAL_DURATION,NORMAL_SHATTER_DAMAGE,NORMAL_SHATTER_RADIUS); return true; } - @MaterialInfo(name = "Copper Terra Shell", description = "Protective Copper shell, shatters on expiry.", cooldownTicks = DEFAULT_COOLDOWN) + @MaterialInfo(name = "Copper Terra Shell", description = "Protective Copper shell, shatters on expiry.", cooldownTicks = NORMAL_COOLDOWN) @Override public boolean copperAbility(Player player) { - activateTerraShell(player, Material.COPPER_BLOCK); + activateTerraShell(player, Material.COPPER_BLOCK,NORMAL_DURATION,NORMAL_SHATTER_DAMAGE,NORMAL_SHATTER_RADIUS); return true; } - @MaterialInfo(name = "Diamond Terra Shell", description = "Protective Diamond shell, shatters on expiry.", cooldownTicks = DEFAULT_COOLDOWN) + @MaterialInfo(name = "Diamond Terra Shell", description = "Protective Diamond shell, shatters on expiry.", cooldownTicks = NORMAL_COOLDOWN) @Override public boolean diamondAbility(Player player) { - activateTerraShell(player, Material.DIAMOND_BLOCK); + activateTerraShell(player, Material.DIAMOND_BLOCK,NORMAL_DURATION,NORMAL_SHATTER_DAMAGE,NORMAL_SHATTER_RADIUS); return true; } - @MaterialInfo(name = "Emerald Terra Shell", description = "Protective Emerald shell, shatters on expiry.", cooldownTicks = DEFAULT_COOLDOWN) + @MaterialInfo(name = "Emerald Terra Shell", description = "Protective Emerald shell, shatters on expiry.", cooldownTicks = NORMAL_COOLDOWN) @Override public boolean emeraldAbility(Player player) { - activateTerraShell(player, Material.EMERALD_BLOCK); + activateTerraShell(player, Material.EMERALD_BLOCK,NORMAL_DURATION,NORMAL_SHATTER_DAMAGE,NORMAL_SHATTER_RADIUS); return true; } - @MaterialInfo(name = "Gold Terra Shell", description = "Protective Gold shell, shatters on expiry.", cooldownTicks = DEFAULT_COOLDOWN) + @MaterialInfo(name = "Gold Terra Shell", description = "Protective Gold shell, shatters on expiry.", cooldownTicks = NORMAL_COOLDOWN) @Override public boolean goldAbility(Player player) { - activateTerraShell(player, Material.GOLD_BLOCK); + activateTerraShell(player, Material.GOLD_BLOCK,NORMAL_DURATION,NORMAL_SHATTER_DAMAGE,NORMAL_SHATTER_RADIUS); return true; } - @MaterialInfo(name = "Iron Terra Shell", description = "Protective Iron shell, shatters on expiry.", cooldownTicks = DEFAULT_COOLDOWN) + @MaterialInfo(name = "Iron Terra Shell", description = "Protective Iron shell, shatters on expiry.", cooldownTicks = NORMAL_COOLDOWN) @Override public boolean ironAbility(Player player) { - activateTerraShell(player, Material.IRON_BLOCK); + activateTerraShell(player, Material.IRON_BLOCK,NORMAL_DURATION,NORMAL_SHATTER_DAMAGE,NORMAL_SHATTER_RADIUS); return true; } - @MaterialInfo(name = "Lapis Terra Shell", description = "Protective Lapis shell, shatters on expiry.", cooldownTicks = DEFAULT_COOLDOWN) + @MaterialInfo(name = "Lapis Terra Shell", description = "Protective Lapis shell, shatters on expiry.", cooldownTicks = NORMAL_COOLDOWN) @Override public boolean lapisAbility(Player player) { - activateTerraShell(player, Material.LAPIS_BLOCK); + activateTerraShell(player, Material.LAPIS_BLOCK,NORMAL_DURATION,NORMAL_SHATTER_DAMAGE,NORMAL_SHATTER_RADIUS); return true; } @MaterialInfo(name = "Netherite Terra Shell", description = "Superior Netherite shell: longer duration, higher resistance, stronger shatter.", cooldownTicks = NETHERITE_COOLDOWN) @Override public boolean netheriteAbility(Player player) { - activateTerraShell(player, Material.NETHERITE_BLOCK); + activateTerraShell(player, Material.NETHERITE_BLOCK,NETHERITE_DURATION,NETHERITE_SHATTER_DAMAGE,NETHERITE_SHATTER_RADIUS); return true; } - @MaterialInfo(name = "Quartz Terra Shell", description = "Protective Quartz shell, shatters on expiry.", cooldownTicks = DEFAULT_COOLDOWN) + @MaterialInfo(name = "Quartz Terra Shell", description = "Protective Quartz shell, shatters on expiry.", cooldownTicks = NORMAL_COOLDOWN) @Override public boolean quartzAbility(Player player) { - activateTerraShell(player, Material.QUARTZ_BLOCK); + activateTerraShell(player, Material.QUARTZ_BLOCK,NORMAL_DURATION,NORMAL_SHATTER_DAMAGE,NORMAL_SHATTER_RADIUS); return true; } - @MaterialInfo(name = "Redstone Terra Shell", description = "Protective Redstone shell, shatters on expiry.", cooldownTicks = DEFAULT_COOLDOWN) + @MaterialInfo(name = "Redstone Terra Shell", description = "Protective Redstone shell, shatters on expiry.", cooldownTicks = NORMAL_COOLDOWN) @Override public boolean redstoneAbility(Player player) { - activateTerraShell(player, Material.REDSTONE_BLOCK); + activateTerraShell(player, Material.REDSTONE_BLOCK,NORMAL_DURATION,NORMAL_SHATTER_DAMAGE,NORMAL_SHATTER_RADIUS); return true; } @MaterialInfo(name = "Resin Terra Shell", description = "Lightweight Resin shell (reduced slowness), shatters on expiry. Faster cooldown.", cooldownTicks = RESIN_COOLDOWN) @Override public boolean resinAbility(Player player) { - activateTerraShell(player, Material.RESIN_BLOCK); + activateTerraShell(player, Material.RESIN_BLOCK,RESIN_DURATION,RESIN_SHATTER_DAMAGE,RESIN_SHATTER_RADIUS); return true; } } \ No newline at end of file diff --git a/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/SilenceAbility.java b/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/SilenceAbility.java index 343c8c2..329fc4d 100755 --- a/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/SilenceAbility.java +++ b/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/SilenceAbility.java @@ -29,11 +29,14 @@ import java.util.Optional; public class SilenceAbility extends AbstractAbility { public static final double NORMAL_DAMAGE = 10; - public static final int NORMAL_COOLDOWN = 20 * 10; + public static final int NORMAL_COOLDOWN = 20 * 25; - public static final double NETHERITE_DAMAGE = 15; + public static final double NETHERITE_DAMAGE = 30; public static final int NETHERITE_COOLDOWN = 20 * 12; + public static final double RESIN_DAMAGE = 10; + public static final int RESIN_COOLDOWN = 20 * 6; + public SilenceAbility() { super(TrimPattern.SILENCE); } @@ -59,7 +62,7 @@ public class SilenceAbility extends AbstractAbility { CustomDisplayRaytracer.traceWithReflection(chestLocation,direction,30,0.5,4,point->{ point.getWorld().spawnParticle(Particle.SONIC_BOOM, point.getLoc(), 1, 0, 0, 0, 0); - List targets = point.getNearbyEntities(player,5,true,0.5, entity -> + List targets = point.getNearbyEntities(player,5,true,0.5, entity -> entity instanceof LivingEntity && !entity.equals(player) && !entity.isDead() && @@ -67,8 +70,8 @@ public class SilenceAbility extends AbstractAbility { !shaper.activeShellTasks.containsKey(entity.getUniqueId()) && PlayerUtils.combatAllowed(entity,player) ); - targets.forEach(target -> { - PlayerUtils.dealTrueDamage((LivingEntity) target, DamageSource.builder(DamageType.SONIC_BOOM).withDirectEntity(player).build(), damage); + targets.stream().filter(t -> t instanceof LivingEntity).map(t-> (LivingEntity) t).forEach(target -> { + target.damage(damage,DamageSource.builder(DamageType.SONIC_BOOM).withDirectEntity(player).build()); }); return !targets.isEmpty(); },(point,blockHit) -> { @@ -151,10 +154,10 @@ public class SilenceAbility extends AbstractAbility { return true; } - @MaterialInfo(name = "Resin ", description = "Shoot a sonic blast like the warden. Deals 15 true damage", cooldownTicks = NORMAL_COOLDOWN) + @MaterialInfo(name = "Resin ", description = "Shoot a sonic blast like the warden. Deals 15 true damage", cooldownTicks = RESIN_COOLDOWN) @Override public boolean resinAbility(Player player) { - shootSonicBoom(player, NORMAL_DAMAGE); + shootSonicBoom(player, RESIN_DAMAGE); return true; } } diff --git a/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/SpireAbility.java b/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/SpireAbility.java index cbf1faf..703f78f 100755 --- a/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/SpireAbility.java +++ b/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/SpireAbility.java @@ -34,17 +34,17 @@ public class SpireAbility extends AbstractAbility { private final Map activeTasks = new HashMap<>(); private final Map activeProjectiles = new HashMap<>(); + public static final int NORMAL_COOLDOWN = 20 * 90; public static final int NORMAL_DURATION = 30; public static final int NORMAL_HEIGHT = 20; - public static final int NORMAL_COOLDOWN = 20 * 90; + public static final int NETHERITE_COOLDOWN = 20 * 100; public static final int NETHERITE_DURATION = 40; public static final int NETHERITE_HEIGHT = 30; - public static final int NETHERITE_COOLDOWN = 20 * 100; + public static final int RESIN_COOLDOWN = 20 * 60; public static final int RESIN_DURATION = 15; public static final int RESIN_HEIGHT = 10; - public static final int RESIN_COOLDOWN = 20 * 60; public SpireAbility() { super(TrimPattern.SPIRE); diff --git a/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/TideAbility.java b/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/TideAbility.java index 4d6ca4a..930b9dd 100755 --- a/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/TideAbility.java +++ b/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/TideAbility.java @@ -24,17 +24,18 @@ import java.util.List; @PatternInfo(name = "Tidal Wave", description = "No lifeguard on duty, swim at your own risk!") public class TideAbility extends AbstractAbility { + public static final int NORMAL_COOLDOWN = 20 * 30; public static final int NORMAL_RADIUS = 10; public static final int NORMAL_DAMAGE = 6; - public static final int NORMAL_COOLDOWN = 20 * 30; + public static final int NETHERITE_COOLDOWN = 20 * 35; public static final int NETHERITE_RADIUS = 12; public static final int NETHERITE_DAMAGE = 15; - public static final int NETHERITE_COOLDOWN = 20 * 35; + public static final int RESIN_COOLDOWN = 20 * 6; public static final int RESIN_RADIUS = 5; public static final int RESIN_DAMAGE = 3; - public static final int RESIN_COOLDOWN = 20 * 6; + public TideAbility() { super(TrimPattern.TIDE); diff --git a/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/WayfinderAbility.java b/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/WayfinderAbility.java index 28a0293..59896d7 100755 --- a/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/WayfinderAbility.java +++ b/src/main/java/me/trouper/trimserver/server/systems/abilities/trims/WayfinderAbility.java @@ -27,15 +27,15 @@ import java.util.concurrent.atomic.AtomicInteger; public class WayfinderAbility extends AbstractAbility { public static final int NORMAL_COOLDOWN = 20 * 5; - public static final double NORMAL_DAMAGE = 30; + public static final double NORMAL_DAMAGE = 36; public static final double NORMAL_RADIUS = 10; public static final int NETHERITE_COOLDOWN = 20 * 4; - public static final double NETHERITE_DAMAGE = 40; + public static final double NETHERITE_DAMAGE = 46; public static final double NETHERITE_RADIUS = 15; public static final int RESIN_COOLDOWN = 20 * 2; - public static final double RESIN_DAMAGE = 20; + public static final double RESIN_DAMAGE = 26; public static final double RESIN_RADIUS = 4; public WayfinderAbility() { diff --git a/src/main/java/me/trouper/trimserver/utils/PlayerUtils.java b/src/main/java/me/trouper/trimserver/utils/PlayerUtils.java index b8a417c..b31003b 100755 --- a/src/main/java/me/trouper/trimserver/utils/PlayerUtils.java +++ b/src/main/java/me/trouper/trimserver/utils/PlayerUtils.java @@ -87,14 +87,14 @@ public class PlayerUtils implements Main { public static void dealTrueDamage(LivingEntity target, DamageSource source, double amount) { if (source.getDirectEntity() instanceof Player a && target instanceof Player t && !combatAllowed(t,a)) return; - - target.damage(1, source); double newHealth = target.getHealth() - amount; if (newHealth <= 0) { - target.setHealth(0); + target.setHealth(1); + target.damage(30, source); } else { target.setHealth(newHealth); + target.damage(1, source); } Entity attacker = source.getDirectEntity();