More balancing & changed visual of bolt trim
This commit is contained in:
@@ -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)
|
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.VANISHING_CURSE,1,true);
|
||||||
|
armor.addEnchant(Enchantment.PROTECTION, 4, true);
|
||||||
armor.setUnbreakable(true);
|
armor.setUnbreakable(true);
|
||||||
armor.addItemFlags(ItemFlag.HIDE_ENCHANTS);
|
armor.addItemFlags(ItemFlag.HIDE_ENCHANTS);
|
||||||
armor.addItemFlags(ItemFlag.HIDE_UNBREAKABLE);
|
armor.addItemFlags(ItemFlag.HIDE_UNBREAKABLE);
|
||||||
|
|||||||
@@ -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.MaterialInfo;
|
||||||
import me.trouper.trimserver.server.systems.abilities.AbstractAbility;
|
import me.trouper.trimserver.server.systems.abilities.AbstractAbility;
|
||||||
import me.trouper.trimserver.server.systems.abilities.PatternInfo;
|
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.SoundPlayer;
|
||||||
import me.trouper.trimserver.utils.TargetingUtils;
|
import me.trouper.trimserver.utils.TargetingUtils;
|
||||||
import me.trouper.trimserver.utils.text.Text;
|
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 class BoltAbility extends AbstractAbility implements Main {
|
||||||
|
|
||||||
public static final int NORMAL_COOLDOWN = 20 * 10;
|
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 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 int NETHERITE_COOLDOWN = 20 * 15;
|
||||||
public static final double NETHERITE_DAMAGE = 20;
|
public static final double NETHERITE_DAMAGE = 8;
|
||||||
|
|
||||||
public BoltAbility() {
|
public BoltAbility() {
|
||||||
super(TrimPattern.BOLT);
|
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) &&
|
return TargetingUtils.areaAffect(caster.getLocation(),range,target-> !main.man().trustBackend.trusts(caster,target) &&
|
||||||
!shaper.activeShellTasks.containsKey(target.getUniqueId()) &&
|
!shaper.activeShellTasks.containsKey(target.getUniqueId()) &&
|
||||||
main.man().abilityBackend.abilityAllowed(caster,target.getLocation()),(target) ->{
|
main.man().abilityBackend.abilityAllowed(caster,target.getLocation()),(target) ->{
|
||||||
drawLightning(caster.getEyeLocation(),target.getEyeLocation(),innerBlock,outerBlock);
|
PlayerUtils.dealTrueDamage(target,DamageSource.builder(DamageType.LIGHTNING_BOLT).withDamageLocation(caster.getEyeLocation()).build(),damage);
|
||||||
target.damage(damage,DamageSource.builder(DamageType.LIGHTNING_BOLT).withDamageLocation(caster.getEyeLocation()).withDirectEntity(caster).build());
|
|
||||||
if (target instanceof Player t) Text.sendMessage(Text.Pallet.INFO,t,"You have been stunned by {0}'s Bolt!",caster.getName());
|
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);
|
AtomicInteger counter = new AtomicInteger(0);
|
||||||
Bukkit.getScheduler().runTaskTimer(main.getPlugin(),(task) -> {
|
Bukkit.getScheduler().runTaskTimer(main.getPlugin(),(task) -> {
|
||||||
if (counter.getAndIncrement() > 40) {
|
if (counter.getAndIncrement() > 40) {
|
||||||
@@ -55,13 +62,15 @@ public class BoltAbility extends AbstractAbility implements Main {
|
|||||||
int tick = target.getNoDamageTicks();
|
int tick = target.getNoDamageTicks();
|
||||||
int maxTick = target.getMaximumNoDamageTicks();
|
int maxTick = target.getMaximumNoDamageTicks();
|
||||||
|
|
||||||
target.setNoDamageTicks(1);
|
if (counter.get() % 5 == 0) zip.playWithin(30);
|
||||||
target.setMaximumNoDamageTicks(2);
|
target.setNoDamageTicks(0);
|
||||||
|
target.setMaximumNoDamageTicks(1);
|
||||||
target.damage(0.01,DamageSource.builder(DamageType.LIGHTNING_BOLT).withDamageLocation(caster.getLocation()).withDirectEntity(caster).build());
|
target.damage(0.01,DamageSource.builder(DamageType.LIGHTNING_BOLT).withDamageLocation(caster.getLocation()).withDirectEntity(caster).build());
|
||||||
target.setNoDamageTicks(tick);
|
target.setNoDamageTicks(tick);
|
||||||
target.setMaximumNoDamageTicks(maxTick);
|
target.setMaximumNoDamageTicks(maxTick);
|
||||||
Location stunLoc = target.getLocation().clone();
|
Location stunLoc = target.getLocation().clone();
|
||||||
target.teleport(stunLoc);
|
target.teleport(stunLoc);
|
||||||
|
drawLightning(caster.getEyeLocation().subtract(0,0.5,0),target.getEyeLocation(),innerBlock,outerBlock);
|
||||||
},0,1);
|
},0,1);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -70,21 +79,14 @@ public class BoltAbility extends AbstractAbility implements Main {
|
|||||||
int segments = 10;
|
int segments = 10;
|
||||||
double maxOffset = 0.5;
|
double maxOffset = 0.5;
|
||||||
long stayTime = 10L;
|
long stayTime = 10L;
|
||||||
double thickness = 0.07;
|
double thickness = 0.01;
|
||||||
double thicknessOut = 0.1;
|
double thicknessOut = 0.05;
|
||||||
List<Player> viewers = new ArrayList<>(start.getWorld().getPlayers());
|
List<Player> viewers = new ArrayList<>(start.getWorld().getPlayers());
|
||||||
|
|
||||||
Location current = start.clone();
|
Location current = start.clone();
|
||||||
Vector direction = end.clone().subtract(start).toVector();
|
Vector direction = end.clone().subtract(start).toVector();
|
||||||
double segmentLength = direction.length() / segments;
|
double segmentLength = direction.length() / segments;
|
||||||
direction.normalize().multiply(segmentLength);
|
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++) {
|
for (int i = 0; i < segments; i++) {
|
||||||
Vector offset = new Vector(
|
Vector offset = new Vector(
|
||||||
|
|||||||
@@ -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
|
@Override
|
||||||
public boolean amethystAbility(Player player) {
|
public boolean amethystAbility(Player player) {
|
||||||
spawnWormSign(player,player.getLocation());
|
spawnWormSign(player,player.getLocation());
|
||||||
return true;
|
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
|
@Override
|
||||||
public boolean copperAbility(Player player) {
|
public boolean copperAbility(Player player) {
|
||||||
spawnWormSign(player,player.getLocation());
|
spawnWormSign(player,player.getLocation());
|
||||||
return true;
|
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
|
@Override
|
||||||
public boolean diamondAbility(Player player) {
|
public boolean diamondAbility(Player player) {
|
||||||
spawnWormSign(player,player.getLocation());
|
spawnWormSign(player,player.getLocation());
|
||||||
return true;
|
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
|
@Override
|
||||||
public boolean emeraldAbility(Player player) {
|
public boolean emeraldAbility(Player player) {
|
||||||
spawnWormSign(player,player.getLocation());
|
spawnWormSign(player,player.getLocation());
|
||||||
return true;
|
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
|
@Override
|
||||||
public boolean goldAbility(Player player) {
|
public boolean goldAbility(Player player) {
|
||||||
spawnWormSign(player,player.getLocation());
|
spawnWormSign(player,player.getLocation());
|
||||||
return true;
|
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
|
@Override
|
||||||
public boolean ironAbility(Player player) {
|
public boolean ironAbility(Player player) {
|
||||||
spawnWormSign(player,player.getLocation());
|
spawnWormSign(player,player.getLocation());
|
||||||
return true;
|
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
|
@Override
|
||||||
public boolean lapisAbility(Player player) {
|
public boolean lapisAbility(Player player) {
|
||||||
spawnWormSign(player,player.getLocation());
|
spawnWormSign(player,player.getLocation());
|
||||||
return true;
|
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
|
@Override
|
||||||
public boolean netheriteAbility(Player player) {
|
public boolean netheriteAbility(Player player) {
|
||||||
spawnWormSign(player,player.getLocation());
|
spawnWormSign(player,player.getLocation());
|
||||||
return true;
|
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
|
@Override
|
||||||
public boolean quartzAbility(Player player) {
|
public boolean quartzAbility(Player player) {
|
||||||
spawnWormSign(player,player.getLocation());
|
spawnWormSign(player,player.getLocation());
|
||||||
return true;
|
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
|
@Override
|
||||||
public boolean redstoneAbility(Player player) {
|
public boolean redstoneAbility(Player player) {
|
||||||
spawnWormSign(player,player.getLocation());
|
spawnWormSign(player,player.getLocation());
|
||||||
return true;
|
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
|
@Override
|
||||||
public boolean resinAbility(Player player) {
|
public boolean resinAbility(Player player) {
|
||||||
spawnWormSign(player,player.getLocation());
|
spawnWormSign(player,player.getLocation());
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import me.trouper.trimserver.server.systems.abilities.AbstractAbility;
|
|||||||
import me.trouper.trimserver.server.systems.abilities.PatternInfo;
|
import me.trouper.trimserver.server.systems.abilities.PatternInfo;
|
||||||
import me.trouper.trimserver.utils.PlayerUtils;
|
import me.trouper.trimserver.utils.PlayerUtils;
|
||||||
import me.trouper.trimserver.utils.SoundPlayer;
|
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.BlockDisplayRaytracer;
|
||||||
import me.trouper.trimserver.utils.visual.CustomDisplayRaytracer;
|
import me.trouper.trimserver.utils.visual.CustomDisplayRaytracer;
|
||||||
import org.bukkit.*;
|
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.")
|
@PatternInfo(name = "Eye of Power", description = "Allows you to see players hidden with the host trim. Includes variants.")
|
||||||
public class EyeAbility extends AbstractAbility {
|
public class EyeAbility extends AbstractAbility {
|
||||||
|
|
||||||
public static final int NORMAL_COOLDOWN = 20 * 30;
|
public static final int NORMAL_COOLDOWN = 20 * 60;
|
||||||
public static final int NORMAL_DURATION = 5;
|
public static final int NORMAL_DURATION = 4;
|
||||||
public static final double NORMAL_DAMAGE = 0.1;
|
public static final double NORMAL_DAMAGE = 0.5;
|
||||||
public static final double NORMAL_DAMAGE_FAIL_CHANCE = 0.75;
|
public static final double NORMAL_DAMAGE_CHANCE = 0.80;
|
||||||
|
|
||||||
public static final int NETHERITE_COOLDOWN = 20 * 15;
|
public static final int NETHERITE_COOLDOWN = 20 * 40;
|
||||||
public static final int NETHERITE_DURATION = 10;
|
public static final int NETHERITE_DURATION = 6;
|
||||||
public static final double NETHERITE_DAMAGE = 0.2;
|
public static final double NETHERITE_DAMAGE = 0.8;
|
||||||
public static final double NETHERITE_DAMAGE_FAIL_CHANCE = 0.50;
|
public static final double NETHERITE_DAMAGE_CHANCE = 1.0;
|
||||||
|
|
||||||
public static final int RESIN_COOLDOWN = 20 * 10;
|
public static final int RESIN_COOLDOWN = 20 * 20;
|
||||||
public static final long RESIN_DURATION = 3;
|
public static final long RESIN_DURATION = 2;
|
||||||
public static final double RESIN_DAMAGE = 0.1;
|
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() {
|
public EyeAbility() {
|
||||||
super(TrimPattern.EYE);
|
super(TrimPattern.EYE);
|
||||||
@@ -87,7 +86,7 @@ public class EyeAbility extends AbstractAbility {
|
|||||||
if (!(entity instanceof LivingEntity liv) || shaper.activeShellTasks.containsKey(liv.getUniqueId())) return;
|
if (!(entity instanceof LivingEntity liv) || shaper.activeShellTasks.containsKey(liv.getUniqueId())) return;
|
||||||
hissSound.playWithin(30);
|
hissSound.playWithin(30);
|
||||||
|
|
||||||
if (random.nextDouble(1) >= damageFailChance) {
|
if (random.nextDouble(1) <= damageFailChance) {
|
||||||
int tick = liv.getNoDamageTicks();
|
int tick = liv.getNoDamageTicks();
|
||||||
int maxTick = liv.getMaximumNoDamageTicks();
|
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)
|
@MaterialInfo(name = "Amethyst Laser beam", description = "Shoot lasers from the eye on the chestpiece for 5 seconds", cooldownTicks = NORMAL_COOLDOWN)
|
||||||
@Override
|
@Override
|
||||||
public boolean amethystAbility(Player player) {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@MaterialInfo(name = "Copper Laser beam", description = "Shoot lasers from the eye on the chestpiece for 5 seconds", cooldownTicks = NORMAL_COOLDOWN)
|
@MaterialInfo(name = "Copper Laser beam", description = "Shoot lasers from the eye on the chestpiece for 5 seconds", cooldownTicks = NORMAL_COOLDOWN)
|
||||||
@Override
|
@Override
|
||||||
public boolean copperAbility(Player player) {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@MaterialInfo(name = "Diamond Laser beam", description = "Shoot lasers from the eye on the chestpiece for 5 seconds", cooldownTicks = NORMAL_COOLDOWN)
|
@MaterialInfo(name = "Diamond Laser beam", description = "Shoot lasers from the eye on the chestpiece for 5 seconds", cooldownTicks = NORMAL_COOLDOWN)
|
||||||
@Override
|
@Override
|
||||||
public boolean diamondAbility(Player player) {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@MaterialInfo(name = "Emerald Laser beam", description = "Shoot lasers from the eye on the chestpiece for 5 seconds", cooldownTicks = NORMAL_COOLDOWN)
|
@MaterialInfo(name = "Emerald Laser beam", description = "Shoot lasers from the eye on the chestpiece for 5 seconds", cooldownTicks = NORMAL_COOLDOWN)
|
||||||
@Override
|
@Override
|
||||||
public boolean emeraldAbility(Player player) {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@MaterialInfo(name = "Gold Laser beam", description = "Shoot lasers from the eye on the chestpiece for 5 seconds", cooldownTicks = NORMAL_COOLDOWN)
|
@MaterialInfo(name = "Gold Laser beam", description = "Shoot lasers from the eye on the chestpiece for 5 seconds", cooldownTicks = NORMAL_COOLDOWN)
|
||||||
@Override
|
@Override
|
||||||
public boolean goldAbility(Player player) {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@MaterialInfo(name = "Iron Laser beam", description = "Shoot lasers from the eye on the chestpiece for 5 seconds", cooldownTicks = NORMAL_COOLDOWN)
|
@MaterialInfo(name = "Iron Laser beam", description = "Shoot lasers from the eye on the chestpiece for 5 seconds", cooldownTicks = NORMAL_COOLDOWN)
|
||||||
@Override
|
@Override
|
||||||
public boolean ironAbility(Player player) {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@MaterialInfo(name = "Lapis Laser beam", description = "Shoot lasers from the eye on the chestpiece for 5 seconds", cooldownTicks = NORMAL_COOLDOWN)
|
@MaterialInfo(name = "Lapis Laser beam", description = "Shoot lasers from the eye on the chestpiece for 5 seconds", cooldownTicks = NORMAL_COOLDOWN)
|
||||||
@Override
|
@Override
|
||||||
public boolean lapisAbility(Player player) {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@MaterialInfo(name = "Netherite Laser beam", description = "Shoot lasers from the eye on the chestpiece for 10 seconds", cooldownTicks = NETHERITE_COOLDOWN)
|
@MaterialInfo(name = "Netherite Laser beam", description = "Shoot lasers from the eye on the chestpiece for 10 seconds", cooldownTicks = NETHERITE_COOLDOWN)
|
||||||
@Override
|
@Override
|
||||||
public boolean netheriteAbility(Player player) {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@MaterialInfo(name = "Quartz Laser beam", description = "Shoot lasers from the eye on the chestpiece for 5 seconds", cooldownTicks = NORMAL_COOLDOWN)
|
@MaterialInfo(name = "Quartz Laser beam", description = "Shoot lasers from the eye on the chestpiece for 5 seconds", cooldownTicks = NORMAL_COOLDOWN)
|
||||||
@Override
|
@Override
|
||||||
public boolean quartzAbility(Player player) {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@MaterialInfo(name = "Redstone Laser beam", description = "Shoot lasers from the eye on the chestpiece for 5 seconds", cooldownTicks = NORMAL_COOLDOWN)
|
@MaterialInfo(name = "Redstone Laser beam", description = "Shoot lasers from the eye on the chestpiece for 5 seconds", cooldownTicks = NORMAL_COOLDOWN)
|
||||||
@Override
|
@Override
|
||||||
public boolean redstoneAbility(Player player) {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@MaterialInfo(name = "Resin Laser beam", description = "Shoot lasers from the eye on the chestpiece for 5 seconds", cooldownTicks = RESIN_COOLDOWN)
|
@MaterialInfo(name = "Resin Laser beam", description = "Shoot lasers from the eye on the chestpiece for 5 seconds", cooldownTicks = RESIN_COOLDOWN)
|
||||||
@Override
|
@Override
|
||||||
public boolean resinAbility(Player player) {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,14 +25,14 @@ import java.util.concurrent.atomic.AtomicInteger;
|
|||||||
@PatternInfo(name = "The Host", description = "And like that, he vanishes!")
|
@PatternInfo(name = "The Host", description = "And like that, he vanishes!")
|
||||||
public class HostAbility extends AbstractAbility {
|
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 NORMAL_COOLDOWN = 20 * 30;
|
||||||
|
|
||||||
public static final int NETHERITE_DURATION = 15;
|
public static final int NETHERITE_DURATION = 8;
|
||||||
public static final int NETHERITE_COOLDOWN = 20 * 20;
|
public static final int NETHERITE_COOLDOWN = 20 * 45;
|
||||||
|
|
||||||
public static final int RESIN_DURATION = 5;
|
public static final int RESIN_DURATION = 3;
|
||||||
public static final int RESIN_COOLDOWN = 20 * 15;
|
public static final int RESIN_COOLDOWN = 20 * 10;
|
||||||
|
|
||||||
public HostAbility() {
|
public HostAbility() {
|
||||||
super(TrimPattern.HOST);
|
super(TrimPattern.HOST);
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ public class RaiserAbility extends AbstractAbility {
|
|||||||
public static final int NORMAL_COOLDOWN = 20 * 40;
|
public static final int NORMAL_COOLDOWN = 20 * 40;
|
||||||
|
|
||||||
public static final int NETHERITE_DURATION = 20;
|
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_DURATION = 10;
|
||||||
public static final int RESIN_COOLDOWN = 20 * 15;
|
public static final int RESIN_COOLDOWN = 20 * 15;
|
||||||
|
|||||||
@@ -29,13 +29,13 @@ import java.util.Random;
|
|||||||
public class RibAbility extends AbstractAbility {
|
public class RibAbility extends AbstractAbility {
|
||||||
|
|
||||||
public static final int NORMAL_COOLDOWN = 20 * 30;
|
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_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_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();
|
private final Random random = new Random();
|
||||||
|
|
||||||
|
|||||||
@@ -29,26 +29,29 @@ import java.util.concurrent.atomic.AtomicInteger;
|
|||||||
@PatternInfo(name = "Build Sentry", description = "\"Meet the Engineer.\" Includes Variants.")
|
@PatternInfo(name = "Build Sentry", description = "\"Meet the Engineer.\" Includes Variants.")
|
||||||
public class SentryAbility extends AbstractAbility {
|
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_AMMO = 30;
|
||||||
public static final int NORMAL_MAX_LIFE = 30;
|
public static final int NORMAL_MAX_LIFE = 30;
|
||||||
public static final int NORMAL_BULLET_COOLDOWN = 5;
|
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_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_COOLDOWN = 2;
|
||||||
|
public static final int NETHERITE_BULLET_DAMAGE = 5;
|
||||||
|
|
||||||
public static final int RESIN_COOLDOWN = 20 * 5;
|
public static final int RESIN_COOLDOWN = 20 * 25;
|
||||||
public static final int RESIN_AMMO = 15;
|
public static final int RESIN_AMMO = 5;
|
||||||
public static final int RESIN_MAX_LIFE = 15;
|
public static final int RESIN_MAX_LIFE = 7;
|
||||||
public static final int RESIN_BULLET_COOLDOWN = 3;
|
public static final int RESIN_BULLET_COOLDOWN = 1;
|
||||||
|
public static final int RESIN_BULLET_DAMAGE = 2;
|
||||||
|
|
||||||
public SentryAbility() {
|
public SentryAbility() {
|
||||||
super(TrimPattern.SENTRY);
|
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);
|
AbstractAbility shaperInstance = main.man().abilityBackend.getAbility(TrimPattern.SHAPER);
|
||||||
ShaperAbility shaper = (ShaperAbility) shaperInstance;
|
ShaperAbility shaper = (ShaperAbility) shaperInstance;
|
||||||
|
|
||||||
@@ -126,14 +129,16 @@ public class SentryAbility extends AbstractAbility {
|
|||||||
String bar = Text.generateProgressBar(10, maxAmmo, chamber);
|
String bar = Text.generateProgressBar(10, maxAmmo, chamber);
|
||||||
meter.text(Text.color("%s's Sentry\n".formatted(owner.getName()) + "Ammo " + bar));
|
meter.text(Text.color("%s's Sentry\n".formatted(owner.getName()) + "Ammo " + bar));
|
||||||
|
|
||||||
Optional<Player> target = TargetingUtils.getClosestPlayer(finalLoc,15,p -> !p.isDead() &&
|
Optional<LivingEntity> target = TargetingUtils.getClosestLivingEntity(finalLoc,15,p -> !p.isDead() &&
|
||||||
!p.equals(owner) &&
|
!p.equals(owner) &&
|
||||||
!main.man().trustBackend.trusts(owner,p) &&
|
!main.man().trustBackend.trusts(owner,p) &&
|
||||||
!shaper.activeShellTasks.containsKey(p.getUniqueId()) &&
|
!shaper.activeShellTasks.containsKey(p.getUniqueId()) &&
|
||||||
PlayerUtils.combatAllowed(p,owner));
|
PlayerUtils.combatAllowed(p,owner) &&
|
||||||
|
!p.equals(dummy)
|
||||||
|
);
|
||||||
|
|
||||||
if (target.isPresent()) {
|
if (target.isPresent()) {
|
||||||
Player tracked = target.get();
|
LivingEntity tracked = target.get();
|
||||||
Vector toEye = tracked.getLocation()
|
Vector toEye = tracked.getLocation()
|
||||||
.add(0, tracked.getEyeHeight(), 0)
|
.add(0, tracked.getEyeHeight(), 0)
|
||||||
.toVector()
|
.toVector()
|
||||||
@@ -157,7 +162,7 @@ public class SentryAbility extends AbstractAbility {
|
|||||||
int maxTick = liv.getMaximumNoDamageTicks();
|
int maxTick = liv.getMaximumNoDamageTicks();
|
||||||
liv.setNoDamageTicks(0);
|
liv.setNoDamageTicks(0);
|
||||||
liv.setMaximumNoDamageTicks(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.setNoDamageTicks(tick);
|
||||||
liv.setMaximumNoDamageTicks(maxTick);
|
liv.setMaximumNoDamageTicks(maxTick);
|
||||||
hitSound.playWithin(20);
|
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)
|
@MaterialInfo(name = "Amethyst ", description = "Spawns a sentry which shoots the nearest player", cooldownTicks = NORMAL_COOLDOWN)
|
||||||
@Override
|
@Override
|
||||||
public boolean amethystAbility(Player player) {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@MaterialInfo(name = "Copper ", description = "Spawns a sentry which shoots the nearest player", cooldownTicks = NORMAL_COOLDOWN)
|
@MaterialInfo(name = "Copper ", description = "Spawns a sentry which shoots the nearest player", cooldownTicks = NORMAL_COOLDOWN)
|
||||||
@Override
|
@Override
|
||||||
public boolean copperAbility(Player player) {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@MaterialInfo(name = "Diamond ", description = "Spawns a sentry which shoots the nearest player", cooldownTicks = NORMAL_COOLDOWN)
|
@MaterialInfo(name = "Diamond ", description = "Spawns a sentry which shoots the nearest player", cooldownTicks = NORMAL_COOLDOWN)
|
||||||
@Override
|
@Override
|
||||||
public boolean diamondAbility(Player player) {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@MaterialInfo(name = "Emerald ", description = "Spawns a sentry which shoots the nearest player", cooldownTicks = NORMAL_COOLDOWN)
|
@MaterialInfo(name = "Emerald ", description = "Spawns a sentry which shoots the nearest player", cooldownTicks = NORMAL_COOLDOWN)
|
||||||
@Override
|
@Override
|
||||||
public boolean emeraldAbility(Player player) {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@MaterialInfo(name = "Gold ", description = "Spawns a sentry which shoots the nearest player", cooldownTicks = NORMAL_COOLDOWN)
|
@MaterialInfo(name = "Gold ", description = "Spawns a sentry which shoots the nearest player", cooldownTicks = NORMAL_COOLDOWN)
|
||||||
@Override
|
@Override
|
||||||
public boolean goldAbility(Player player) {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@MaterialInfo(name = "Iron ", description = "Spawns a sentry which shoots the nearest player", cooldownTicks = NORMAL_COOLDOWN)
|
@MaterialInfo(name = "Iron ", description = "Spawns a sentry which shoots the nearest player", cooldownTicks = NORMAL_COOLDOWN)
|
||||||
@Override
|
@Override
|
||||||
public boolean ironAbility(Player player) {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@MaterialInfo(name = "Lapis ", description = "Spawns a sentry which shoots the nearest player", cooldownTicks = NORMAL_COOLDOWN)
|
@MaterialInfo(name = "Lapis ", description = "Spawns a sentry which shoots the nearest player", cooldownTicks = NORMAL_COOLDOWN)
|
||||||
@Override
|
@Override
|
||||||
public boolean lapisAbility(Player player) {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@MaterialInfo(name = "Netherite Sentry", description = "Spawns a supercharged sentry which absolutely shreds the nearest player", cooldownTicks = NETHERITE_COOLDOWN)
|
@MaterialInfo(name = "Netherite Sentry", description = "Spawns a supercharged sentry which absolutely shreds the nearest player", cooldownTicks = NETHERITE_COOLDOWN)
|
||||||
@Override
|
@Override
|
||||||
public boolean netheriteAbility(Player player) {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@MaterialInfo(name = "Quartz ", description = "Spawns a sentry which shoots the nearest player", cooldownTicks = NORMAL_COOLDOWN)
|
@MaterialInfo(name = "Quartz ", description = "Spawns a sentry which shoots the nearest player", cooldownTicks = NORMAL_COOLDOWN)
|
||||||
@Override
|
@Override
|
||||||
public boolean quartzAbility(Player player) {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@MaterialInfo(name = "Redstone ", description = "Spawns a sentry which shoots the nearest player", cooldownTicks = NORMAL_COOLDOWN)
|
@MaterialInfo(name = "Redstone ", description = "Spawns a sentry which shoots the nearest player", cooldownTicks = NORMAL_COOLDOWN)
|
||||||
@Override
|
@Override
|
||||||
public boolean redstoneAbility(Player player) {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@MaterialInfo(name = "Resin ", description = "Spawns a sentry which shoots the nearest player", cooldownTicks = RESIN_COOLDOWN)
|
@MaterialInfo(name = "Resin ", description = "Spawns a sentry which shoots the nearest player", cooldownTicks = RESIN_COOLDOWN)
|
||||||
@Override
|
@Override
|
||||||
public boolean resinAbility(Player player) {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,24 +35,26 @@ public class ShaperAbility extends AbstractAbility implements Listener {
|
|||||||
private final Map<UUID, AttributeModifier> knockbackModifiers = new ConcurrentHashMap<>();
|
private final Map<UUID, AttributeModifier> knockbackModifiers = new ConcurrentHashMap<>();
|
||||||
private final Map<UUID, Integer> originalFireTicks = new ConcurrentHashMap<>();
|
private final Map<UUID, Integer> 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_DAMAGE = 10.0;
|
||||||
private static final double NORMAL_SHATTER_RADIUS = 8.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 RESIN_COOLDOWN = 20 * 20;
|
||||||
private static final int NETHERITE_COOLDOWN = 20 * 90;
|
private static final int RESIN_DURATION = 20 * 8;
|
||||||
private static final int RESIN_COOLDOWN = 20 * 40;
|
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 int NETHERITE_COOLDOWN = 20 * 40;
|
||||||
private static final double NETHERITE_SHATTER_DAMAGE_MULTIPLIER = 1.5;
|
private static final int NETHERITE_DURATION = 20 * 10;
|
||||||
private static final double NETHERITE_SHATTER_RADIUS_MULTIPLIER = 1.2;
|
private static final double NETHERITE_SHATTER_DAMAGE = 16;
|
||||||
|
private static final double NETHERITE_SHATTER_RADIUS = 10;
|
||||||
|
|
||||||
public ShaperAbility() {
|
public ShaperAbility() {
|
||||||
super(TrimPattern.SHAPER);
|
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();
|
UUID playerUUID = player.getUniqueId();
|
||||||
|
|
||||||
if (activeShellTasks.containsKey(playerUUID)) return;
|
if (activeShellTasks.containsKey(playerUUID)) return;
|
||||||
@@ -93,20 +95,7 @@ public class ShaperAbility extends AbstractAbility implements Listener {
|
|||||||
shellParts.add(bd);
|
shellParts.add(bd);
|
||||||
}
|
}
|
||||||
|
|
||||||
int duration = NORMAL_DURATION;
|
player.addPotionEffect(new PotionEffect(PotionEffectType.SLOWNESS, duration, 1, false, false, true));
|
||||||
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));
|
|
||||||
|
|
||||||
originalFireTicks.put(playerUUID, player.getFireTicks());
|
originalFireTicks.put(playerUUID, player.getFireTicks());
|
||||||
if (player.getFireTicks() > 0) player.setFireTicks(0);
|
if (player.getFireTicks() > 0) player.setFireTicks(0);
|
||||||
@@ -243,80 +232,80 @@ public class ShaperAbility extends AbstractAbility implements Listener {
|
|||||||
a.damage(event.getDamage());
|
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
|
@Override
|
||||||
public boolean amethystAbility(Player player) {
|
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;
|
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
|
@Override
|
||||||
public boolean copperAbility(Player player) {
|
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;
|
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
|
@Override
|
||||||
public boolean diamondAbility(Player player) {
|
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;
|
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
|
@Override
|
||||||
public boolean emeraldAbility(Player player) {
|
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;
|
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
|
@Override
|
||||||
public boolean goldAbility(Player player) {
|
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;
|
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
|
@Override
|
||||||
public boolean ironAbility(Player player) {
|
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;
|
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
|
@Override
|
||||||
public boolean lapisAbility(Player player) {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@MaterialInfo(name = "Netherite Terra Shell", description = "Superior Netherite shell: longer duration, higher resistance, stronger shatter.", cooldownTicks = NETHERITE_COOLDOWN)
|
@MaterialInfo(name = "Netherite Terra Shell", description = "Superior Netherite shell: longer duration, higher resistance, stronger shatter.", cooldownTicks = NETHERITE_COOLDOWN)
|
||||||
@Override
|
@Override
|
||||||
public boolean netheriteAbility(Player player) {
|
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;
|
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
|
@Override
|
||||||
public boolean quartzAbility(Player player) {
|
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;
|
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
|
@Override
|
||||||
public boolean redstoneAbility(Player player) {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@MaterialInfo(name = "Resin Terra Shell", description = "Lightweight Resin shell (reduced slowness), shatters on expiry. Faster cooldown.", cooldownTicks = RESIN_COOLDOWN)
|
@MaterialInfo(name = "Resin Terra Shell", description = "Lightweight Resin shell (reduced slowness), shatters on expiry. Faster cooldown.", cooldownTicks = RESIN_COOLDOWN)
|
||||||
@Override
|
@Override
|
||||||
public boolean resinAbility(Player player) {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -29,11 +29,14 @@ import java.util.Optional;
|
|||||||
public class SilenceAbility extends AbstractAbility {
|
public class SilenceAbility extends AbstractAbility {
|
||||||
|
|
||||||
public static final double NORMAL_DAMAGE = 10;
|
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 int NETHERITE_COOLDOWN = 20 * 12;
|
||||||
|
|
||||||
|
public static final double RESIN_DAMAGE = 10;
|
||||||
|
public static final int RESIN_COOLDOWN = 20 * 6;
|
||||||
|
|
||||||
public SilenceAbility() {
|
public SilenceAbility() {
|
||||||
super(TrimPattern.SILENCE);
|
super(TrimPattern.SILENCE);
|
||||||
}
|
}
|
||||||
@@ -67,8 +70,8 @@ public class SilenceAbility extends AbstractAbility {
|
|||||||
!shaper.activeShellTasks.containsKey(entity.getUniqueId()) &&
|
!shaper.activeShellTasks.containsKey(entity.getUniqueId()) &&
|
||||||
PlayerUtils.combatAllowed(entity,player)
|
PlayerUtils.combatAllowed(entity,player)
|
||||||
);
|
);
|
||||||
targets.forEach(target -> {
|
targets.stream().filter(t -> t instanceof LivingEntity).map(t-> (LivingEntity) t).forEach(target -> {
|
||||||
PlayerUtils.dealTrueDamage((LivingEntity) target, DamageSource.builder(DamageType.SONIC_BOOM).withDirectEntity(player).build(), damage);
|
target.damage(damage,DamageSource.builder(DamageType.SONIC_BOOM).withDirectEntity(player).build());
|
||||||
});
|
});
|
||||||
return !targets.isEmpty();
|
return !targets.isEmpty();
|
||||||
},(point,blockHit) -> {
|
},(point,blockHit) -> {
|
||||||
@@ -151,10 +154,10 @@ public class SilenceAbility extends AbstractAbility {
|
|||||||
return true;
|
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
|
@Override
|
||||||
public boolean resinAbility(Player player) {
|
public boolean resinAbility(Player player) {
|
||||||
shootSonicBoom(player, NORMAL_DAMAGE);
|
shootSonicBoom(player, RESIN_DAMAGE);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,17 +34,17 @@ public class SpireAbility extends AbstractAbility {
|
|||||||
private final Map<UUID, BukkitTask> activeTasks = new HashMap<>();
|
private final Map<UUID, BukkitTask> activeTasks = new HashMap<>();
|
||||||
private final Map<UUID, UUID> activeProjectiles = new HashMap<>();
|
private final Map<UUID, UUID> activeProjectiles = new HashMap<>();
|
||||||
|
|
||||||
|
public static final int NORMAL_COOLDOWN = 20 * 90;
|
||||||
public static final int NORMAL_DURATION = 30;
|
public static final int NORMAL_DURATION = 30;
|
||||||
public static final int NORMAL_HEIGHT = 20;
|
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_DURATION = 40;
|
||||||
public static final int NETHERITE_HEIGHT = 30;
|
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_DURATION = 15;
|
||||||
public static final int RESIN_HEIGHT = 10;
|
public static final int RESIN_HEIGHT = 10;
|
||||||
public static final int RESIN_COOLDOWN = 20 * 60;
|
|
||||||
|
|
||||||
public SpireAbility() {
|
public SpireAbility() {
|
||||||
super(TrimPattern.SPIRE);
|
super(TrimPattern.SPIRE);
|
||||||
|
|||||||
@@ -24,17 +24,18 @@ import java.util.List;
|
|||||||
@PatternInfo(name = "Tidal Wave", description = "No lifeguard on duty, swim at your own risk!")
|
@PatternInfo(name = "Tidal Wave", description = "No lifeguard on duty, swim at your own risk!")
|
||||||
public class TideAbility extends AbstractAbility {
|
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_RADIUS = 10;
|
||||||
public static final int NORMAL_DAMAGE = 6;
|
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_RADIUS = 12;
|
||||||
public static final int NETHERITE_DAMAGE = 15;
|
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_RADIUS = 5;
|
||||||
public static final int RESIN_DAMAGE = 3;
|
public static final int RESIN_DAMAGE = 3;
|
||||||
public static final int RESIN_COOLDOWN = 20 * 6;
|
|
||||||
|
|
||||||
public TideAbility() {
|
public TideAbility() {
|
||||||
super(TrimPattern.TIDE);
|
super(TrimPattern.TIDE);
|
||||||
|
|||||||
@@ -27,15 +27,15 @@ import java.util.concurrent.atomic.AtomicInteger;
|
|||||||
public class WayfinderAbility extends AbstractAbility {
|
public class WayfinderAbility extends AbstractAbility {
|
||||||
|
|
||||||
public static final int NORMAL_COOLDOWN = 20 * 5;
|
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 double NORMAL_RADIUS = 10;
|
||||||
|
|
||||||
public static final int NETHERITE_COOLDOWN = 20 * 4;
|
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 double NETHERITE_RADIUS = 15;
|
||||||
|
|
||||||
public static final int RESIN_COOLDOWN = 20 * 2;
|
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 static final double RESIN_RADIUS = 4;
|
||||||
|
|
||||||
public WayfinderAbility() {
|
public WayfinderAbility() {
|
||||||
|
|||||||
@@ -88,13 +88,13 @@ public class PlayerUtils implements Main {
|
|||||||
public static void dealTrueDamage(LivingEntity target, DamageSource source, double amount) {
|
public static void dealTrueDamage(LivingEntity target, DamageSource source, double amount) {
|
||||||
if (source.getDirectEntity() instanceof Player a && target instanceof Player t && !combatAllowed(t,a)) return;
|
if (source.getDirectEntity() instanceof Player a && target instanceof Player t && !combatAllowed(t,a)) return;
|
||||||
|
|
||||||
target.damage(1, source);
|
|
||||||
|
|
||||||
double newHealth = target.getHealth() - amount;
|
double newHealth = target.getHealth() - amount;
|
||||||
if (newHealth <= 0) {
|
if (newHealth <= 0) {
|
||||||
target.setHealth(0);
|
target.setHealth(1);
|
||||||
|
target.damage(30, source);
|
||||||
} else {
|
} else {
|
||||||
target.setHealth(newHealth);
|
target.setHealth(newHealth);
|
||||||
|
target.damage(1, source);
|
||||||
}
|
}
|
||||||
|
|
||||||
Entity attacker = source.getDirectEntity();
|
Entity attacker = source.getDirectEntity();
|
||||||
|
|||||||
Reference in New Issue
Block a user