From 682f981ce7de61e2c6444d6d6317b8371b7839d7 Mon Sep 17 00:00:00 2001 From: SoraShiunin Date: Mon, 1 Jan 2024 05:30:46 +0000 Subject: [PATCH 1/3] Add files via upload Add BossBar that notifies the user of the ability charging and when its ready. For more compatibility with plugins that use the ActionBar. --- .../addons/ability/fire/CombustBeam.java | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/src/me/simplicitee/project/addons/ability/fire/CombustBeam.java b/src/me/simplicitee/project/addons/ability/fire/CombustBeam.java index 276df9d..01bef80 100644 --- a/src/me/simplicitee/project/addons/ability/fire/CombustBeam.java +++ b/src/me/simplicitee/project/addons/ability/fire/CombustBeam.java @@ -1,5 +1,6 @@ package me.simplicitee.project.addons.ability.fire; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; @@ -11,6 +12,9 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.util.Vector; +import org.bukkit.boss.BarColor; +import org.bukkit.boss.BarStyle; +import org.bukkit.boss.BossBar; import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ability.AddonAbility; @@ -48,6 +52,8 @@ public class CombustBeam extends CombustionAbility implements AddonAbility { @Attribute("MinDamage") private double minDamage; + private BossBar chargeBar; + private double power, rotation, angleCheck, damage, health; private long chargeTime, revertTime; private int counter; @@ -61,6 +67,12 @@ public class CombustBeam extends CombustionAbility implements AddonAbility { public CombustBeam(Player player) { super(player); + + this.chargeBar = Bukkit.getServer().createBossBar("CombustBeam Charging...", BarColor.WHITE, BarStyle.SEGMENTED_6); + this.chargeBar.setProgress(0); + this.chargeBar.addPlayer(player); + + if (hasAbility(player, CombustBeam.class)) { return; } @@ -85,6 +97,19 @@ public CombustBeam(Player player) { start(); } + + private void UpdateChargeBar() { + double spendMs = System.currentTimeMillis() - this.getStartTime(); + double subtract = spendMs / (maxChargeTime); + double progress = Math.min(1, subtract); + if(chargeBar.getColor()==BarColor.WHITE&&getStartTime() + maxChargeTime <= System.currentTimeMillis()) { + this.chargeBar.setColor(BarColor.RED); + this.chargeBar.setTitle("CombustionBeam Ready"); + } + + this.chargeBar.setProgress(progress); + //ActionBar.sendActionBar(ChatColor.RED + (Math.round(percent * 100) + "%"), player); + } @Override public void progress() { @@ -124,7 +149,8 @@ public void progress() { this.charged = true; GeneralMethods.displayColoredParticle("ff2424", player.getEyeLocation().add(player.getEyeLocation().getDirection().normalize()), 1, 0.4, 0.4, 0.4); player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 10, 5)); - + + UpdateChargeBar(); ActionBar.sendActionBar(ChatColor.RED + "100%", player); } else if (getStartTime() + minChargeTime <= System.currentTimeMillis()) { this.chargeTime = System.currentTimeMillis() - getStartTime() - minChargeTime; @@ -135,7 +161,7 @@ public void progress() { this.power = minPower + (maxPower - minPower) * percent; this.damage = minDamage + (maxDamage - minDamage) * percent; this.charged = true; - + UpdateChargeBar(); ActionBar.sendActionBar(ChatColor.RED + (Math.round(percent * 100) + "%"), player); HexColor color = new HexColor((int) (255 * percent), 136, 136); @@ -239,6 +265,7 @@ public void explode() { @Override public void remove() { super.remove(); + this.chargeBar.removePlayer(this.player); bPlayer.addCooldown(this); } From d4c6c6fc7628e5a3a5f12881dbce86a4238885c2 Mon Sep 17 00:00:00 2001 From: SoraShiunin Date: Mon, 1 Jan 2024 15:09:36 +0000 Subject: [PATCH 2/3] Add files via upload --- .../project/addons/MainListener.java | 10 +- .../project/addons/ProjectAddons.java | 12 +- .../addons/ability/earth/EarthShove.java | 251 ++++++++++++++++++ 3 files changed, 262 insertions(+), 11 deletions(-) create mode 100644 src/me/simplicitee/project/addons/ability/earth/EarthShove.java diff --git a/src/me/simplicitee/project/addons/MainListener.java b/src/me/simplicitee/project/addons/MainListener.java index 26d47e0..df5bae0 100644 --- a/src/me/simplicitee/project/addons/MainListener.java +++ b/src/me/simplicitee/project/addons/MainListener.java @@ -70,7 +70,7 @@ import me.simplicitee.project.addons.ability.earth.Bulwark; import me.simplicitee.project.addons.ability.earth.Crumble; import me.simplicitee.project.addons.ability.earth.Dig; -import me.simplicitee.project.addons.ability.earth.EarthKick; +import me.simplicitee.project.addons.ability.earth.EarthShove; import me.simplicitee.project.addons.ability.earth.LavaSurge; import me.simplicitee.project.addons.ability.earth.MagmaSlap; import me.simplicitee.project.addons.ability.earth.QuickWeld; @@ -236,8 +236,8 @@ public void onSneak(PlayerToggleSneakEvent event) { return; } - if (canBend(player, "EarthKick")) { - new EarthKick(player); + if (canBend(player, "EarthShove")) { + new EarthShove(player); } else if (canBend(player, "NinjaStance")) { if (CoreAbility.hasAbility(player, NinjaStance.class)) { CoreAbility.getAbility(player, NinjaStance.class).beginStealth(); @@ -309,9 +309,9 @@ public void onEntityChangeBlock(EntityChangeBlockEvent event) { if (e instanceof FallingBlock) { FallingBlock fb = (FallingBlock)e; - if (EarthKick.isBlock(fb)) { + if (EarthShove.isBlock(fb)) { event.setCancelled(true); - EarthKick.removeBlock(fb); + EarthShove.removeBlock(fb); } else if (MagmaSlap.isBlock(fb)) { event.setCancelled(true); ((MagmaSlap) fb.getMetadata("magmaslap").get(0).value()).turnToTempBlock(event.getBlock()); diff --git a/src/me/simplicitee/project/addons/ProjectAddons.java b/src/me/simplicitee/project/addons/ProjectAddons.java index 69a5faa..51a9949 100644 --- a/src/me/simplicitee/project/addons/ProjectAddons.java +++ b/src/me/simplicitee/project/addons/ProjectAddons.java @@ -179,12 +179,12 @@ private void setupConfig() { c.addDefault("Abilities.Earth.Dig.RevertTime", 3500); c.addDefault("Abilities.Earth.Dig.Speed", 0.51); - // EarthKick - c.addDefault("Abilities.Earth.EarthKick.Enabled", true); - c.addDefault("Abilities.Earth.EarthKick.Cooldown", 4000); - c.addDefault("Abilities.Earth.EarthKick.Damage", 0.5); - c.addDefault("Abilities.Earth.EarthKick.MaxBlocks", 9); - c.addDefault("Abilities.Earth.EarthKick.LavaMultiplier", 1.5); + // EarthShove + c.addDefault("Abilities.Earth.EarthShove.Enabled", true); + c.addDefault("Abilities.Earth.EarthShove.Cooldown", 4000); + c.addDefault("Abilities.Earth.EarthShove.Damage", 0.5); + c.addDefault("Abilities.Earth.EarthShove.MaxBlocks", 9); + c.addDefault("Abilities.Earth.EarthShove.LavaMultiplier", 1.5); // LavaSurge c.addDefault("Abilities.Earth.LavaSurge.Enabled", true); diff --git a/src/me/simplicitee/project/addons/ability/earth/EarthShove.java b/src/me/simplicitee/project/addons/ability/earth/EarthShove.java new file mode 100644 index 0000000..4c0592c --- /dev/null +++ b/src/me/simplicitee/project/addons/ability/earth/EarthShove.java @@ -0,0 +1,251 @@ +package me.simplicitee.project.addons.ability.earth; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Random; +import java.util.Set; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Entity; +import org.bukkit.entity.FallingBlock; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.Listener; +import org.bukkit.util.Vector; + +import com.projectkorra.projectkorra.Element; +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ability.AddonAbility; +import com.projectkorra.projectkorra.ability.EarthAbility; +import com.projectkorra.projectkorra.attribute.Attribute; +import com.projectkorra.projectkorra.util.DamageHandler; +import com.projectkorra.projectkorra.util.ParticleEffect; +import com.projectkorra.projectkorra.util.TempBlock; + +import me.simplicitee.project.addons.ProjectAddons; + +public class EarthShove extends EarthAbility implements AddonAbility, Listener{ + + private static Set BLOCKS = new HashSet<>(); + + @Attribute(Attribute.DAMAGE) + public double damage; + @Attribute("Blocks") + public int maxBlocks; + @Attribute("LavaMultiplier") + public double lavaMult; + + public List kick; + public long duration = 2500; + + public EarthShove(Player player) { + super(player); + + if (getAbility(this.getClass()) == null) { + return; + } + + setFields(); + if (launchKick()) { + bPlayer.addCooldown(this); + start(); + } + } + + public void setFields() { + damage = ProjectAddons.instance.getConfig().getDouble("Abilities.Earth.EarthShove.Damage"); + maxBlocks = ProjectAddons.instance.getConfig().getInt("Abilities.Earth.EarthShove.MaxBlocks"); + lavaMult = ProjectAddons.instance.getConfig().getDouble("Abilities.Earth.EarthShove.LavaMultiplier"); + kick = new ArrayList<>(); + } + + @Override + public Element getElement() { + return Element.EARTH; + } + + @Override + public Location getLocation() { + return null; + } + + @Override + public List getLocations() { + List locs = new ArrayList<>(); + for (FallingBlock fb : kick) { + locs.add(fb.getLocation()); + } + return locs; + } + + @Override + public String getName() { + return "EarthShove"; + } + + @Override + public boolean isExplosiveAbility() { + return false; + } + + @Override + public boolean isHarmlessAbility() { + return false; + } + + @Override + public boolean isIgniteAbility() { + return false; + } + + @Override + public boolean isSneakAbility() { + return true; + } + + @Override + public void progress() { + Iterator iter = kick.iterator(); + while (iter.hasNext()) { + FallingBlock fb = iter.next(); + + if (fb == null || fb.isDead()) { + BLOCKS.remove(fb); + iter.remove(); + continue; + } + + if (!BLOCKS.contains(fb)) { + iter.remove(); + fb.remove(); + continue; + } + + ParticleEffect.BLOCK_CRACK.display(fb.getLocation(), 3, 0.1, 0.1, 0.1, fb.getBlockData()); + + for (Entity e : GeneralMethods.getEntitiesAroundPoint(fb.getLocation(), 1.5)) { + if (e instanceof LivingEntity && e.getEntityId() != player.getEntityId()) { + DamageHandler.damageEntity(e, player, damage, this); + ((LivingEntity) e).setNoDamageTicks(0); + iter.remove(); + fb.remove(); + BLOCKS.remove(fb); + break; + } + } + } + + if (kick.isEmpty()) { + remove(); + return; + } + + if (System.currentTimeMillis() > getStartTime() + duration) { + remove(); + return; + } + } + + public boolean launchKick() { + Block b = player.getTargetBlock(getTransparentMaterialSet(), 3); + Material type = b.getType(); + + if (TempBlock.isTempBlock(b)) { + return false; + } + + if (!EarthAbility.isEarthbendable(type, bPlayer.canMetalbend(), bPlayer.canSandbend(), bPlayer.canLavabend())) { + return false; + } + + if (type == Material.LAVA) { + if (bPlayer.canLavabend()) { + type = Material.MAGMA_BLOCK; + damage *= lavaMult; + } else { + return false; + } + } + + for (int i = 0; i < maxBlocks; i++) { + FallingBlock fb = GeneralMethods.spawnFallingBlock(b.getLocation().clone().add(0.5, 1.2, 0.5), type); + fb.setDropItem(false); + Location loc = player.getLocation().clone(); + loc.setPitch(0); + loc.setYaw(loc.getYaw() + new Random().nextInt(25) - 12); + Vector vec = loc.getDirection(); + vec.setY(Math.max(0.3, Math.random()/2)); + vec.setX(vec.getX()/1.2); + vec.setZ(vec.getZ()/1.2); + fb.setVelocity(vec); + kick.add(fb); + BLOCKS.add(fb); + } + + playEarthbendingSound(player.getLocation()); + + return true; + } + + @Override + public void remove() { + super.remove(); + for (FallingBlock fb : kick) { + fb.remove(); + if (BLOCKS.contains(fb)) { + BLOCKS.remove(fb); + } + } + } + + @Override + public long getCooldown() { + return ProjectAddons.instance.getConfig().getLong("Abilities.Earth.EarthShove.Cooldown"); + } + + @Override + public String getAuthor() { + return "Simplicitee"; + } + + @Override + public String getVersion() { + return ProjectAddons.instance.version(); + } + + @Override + public void load() {} + + @Override + public void stop() {} + + @Override + public String getDescription() { + return "Earthbenders can kick the earth in front of them and send shards flying towards their enemies."; + } + + @Override + public String getInstructions() { + return "Sneak at earth in front of you"; + } + + public static boolean isBlock(FallingBlock fb) { + return BLOCKS.contains(fb); + } + + public static void removeBlock(FallingBlock fb) { + if (isBlock(fb)) { + BLOCKS.remove(fb); + fb.remove(); + } + } + + @Override + public boolean isEnabled() { + return ProjectAddons.instance.getConfig().getBoolean("Abilities.Earth.EarthShove.Enabled"); + } +} From ff1c15f75e2b1f40a75e5a949cf391be2fa4159f Mon Sep 17 00:00:00 2001 From: SoraShiunin Date: Mon, 1 Jan 2024 15:11:58 +0000 Subject: [PATCH 3/3] Delete src/me/simplicitee/project/addons/ability/earth/EarthKick.java Replaced with EarthShove to avoid compatibility issues with jedcores EarthKick --- .../addons/ability/earth/EarthKick.java | 251 ------------------ 1 file changed, 251 deletions(-) delete mode 100644 src/me/simplicitee/project/addons/ability/earth/EarthKick.java diff --git a/src/me/simplicitee/project/addons/ability/earth/EarthKick.java b/src/me/simplicitee/project/addons/ability/earth/EarthKick.java deleted file mode 100644 index ae36a52..0000000 --- a/src/me/simplicitee/project/addons/ability/earth/EarthKick.java +++ /dev/null @@ -1,251 +0,0 @@ -package me.simplicitee.project.addons.ability.earth; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Random; -import java.util.Set; - -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.Entity; -import org.bukkit.entity.FallingBlock; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.event.Listener; -import org.bukkit.util.Vector; - -import com.projectkorra.projectkorra.Element; -import com.projectkorra.projectkorra.GeneralMethods; -import com.projectkorra.projectkorra.ability.AddonAbility; -import com.projectkorra.projectkorra.ability.EarthAbility; -import com.projectkorra.projectkorra.attribute.Attribute; -import com.projectkorra.projectkorra.util.DamageHandler; -import com.projectkorra.projectkorra.util.ParticleEffect; -import com.projectkorra.projectkorra.util.TempBlock; - -import me.simplicitee.project.addons.ProjectAddons; - -public class EarthKick extends EarthAbility implements AddonAbility, Listener{ - - private static Set BLOCKS = new HashSet<>(); - - @Attribute(Attribute.DAMAGE) - public double damage; - @Attribute("Blocks") - public int maxBlocks; - @Attribute("LavaMultiplier") - public double lavaMult; - - public List kick; - public long duration = 2500; - - public EarthKick(Player player) { - super(player); - - if (getAbility(this.getClass()) == null) { - return; - } - - setFields(); - if (launchKick()) { - bPlayer.addCooldown(this); - start(); - } - } - - public void setFields() { - damage = ProjectAddons.instance.getConfig().getDouble("Abilities.Earth.EarthKick.Damage"); - maxBlocks = ProjectAddons.instance.getConfig().getInt("Abilities.Earth.EarthKick.MaxBlocks"); - lavaMult = ProjectAddons.instance.getConfig().getDouble("Abilities.Earth.EarthKick.LavaMultiplier"); - kick = new ArrayList<>(); - } - - @Override - public Element getElement() { - return Element.EARTH; - } - - @Override - public Location getLocation() { - return null; - } - - @Override - public List getLocations() { - List locs = new ArrayList<>(); - for (FallingBlock fb : kick) { - locs.add(fb.getLocation()); - } - return locs; - } - - @Override - public String getName() { - return "EarthKick"; - } - - @Override - public boolean isExplosiveAbility() { - return false; - } - - @Override - public boolean isHarmlessAbility() { - return false; - } - - @Override - public boolean isIgniteAbility() { - return false; - } - - @Override - public boolean isSneakAbility() { - return true; - } - - @Override - public void progress() { - Iterator iter = kick.iterator(); - while (iter.hasNext()) { - FallingBlock fb = iter.next(); - - if (fb == null || fb.isDead()) { - BLOCKS.remove(fb); - iter.remove(); - continue; - } - - if (!BLOCKS.contains(fb)) { - iter.remove(); - fb.remove(); - continue; - } - - ParticleEffect.BLOCK_CRACK.display(fb.getLocation(), 3, 0.1, 0.1, 0.1, fb.getBlockData()); - - for (Entity e : GeneralMethods.getEntitiesAroundPoint(fb.getLocation(), 1.5)) { - if (e instanceof LivingEntity && e.getEntityId() != player.getEntityId()) { - DamageHandler.damageEntity(e, player, damage, this); - ((LivingEntity) e).setNoDamageTicks(0); - iter.remove(); - fb.remove(); - BLOCKS.remove(fb); - break; - } - } - } - - if (kick.isEmpty()) { - remove(); - return; - } - - if (System.currentTimeMillis() > getStartTime() + duration) { - remove(); - return; - } - } - - public boolean launchKick() { - Block b = player.getTargetBlock(getTransparentMaterialSet(), 3); - Material type = b.getType(); - - if (TempBlock.isTempBlock(b)) { - return false; - } - - if (!EarthAbility.isEarthbendable(type, bPlayer.canMetalbend(), bPlayer.canSandbend(), bPlayer.canLavabend())) { - return false; - } - - if (type == Material.LAVA) { - if (bPlayer.canLavabend()) { - type = Material.MAGMA_BLOCK; - damage *= lavaMult; - } else { - return false; - } - } - - for (int i = 0; i < maxBlocks; i++) { - FallingBlock fb = GeneralMethods.spawnFallingBlock(b.getLocation().clone().add(0.5, 1.2, 0.5), type); - fb.setDropItem(false); - Location loc = player.getLocation().clone(); - loc.setPitch(0); - loc.setYaw(loc.getYaw() + new Random().nextInt(25) - 12); - Vector vec = loc.getDirection(); - vec.setY(Math.max(0.3, Math.random()/2)); - vec.setX(vec.getX()/1.2); - vec.setZ(vec.getZ()/1.2); - fb.setVelocity(vec); - kick.add(fb); - BLOCKS.add(fb); - } - - playEarthbendingSound(player.getLocation()); - - return true; - } - - @Override - public void remove() { - super.remove(); - for (FallingBlock fb : kick) { - fb.remove(); - if (BLOCKS.contains(fb)) { - BLOCKS.remove(fb); - } - } - } - - @Override - public long getCooldown() { - return ProjectAddons.instance.getConfig().getLong("Abilities.Earth.EarthKick.Cooldown"); - } - - @Override - public String getAuthor() { - return "Simplicitee"; - } - - @Override - public String getVersion() { - return ProjectAddons.instance.version(); - } - - @Override - public void load() {} - - @Override - public void stop() {} - - @Override - public String getDescription() { - return "Earthbenders can kick the earth in front of them and send shards flying towards their enemies."; - } - - @Override - public String getInstructions() { - return "Sneak at earth in front of you"; - } - - public static boolean isBlock(FallingBlock fb) { - return BLOCKS.contains(fb); - } - - public static void removeBlock(FallingBlock fb) { - if (isBlock(fb)) { - BLOCKS.remove(fb); - fb.remove(); - } - } - - @Override - public boolean isEnabled() { - return ProjectAddons.instance.getConfig().getBoolean("Abilities.Earth.EarthKick.Enabled"); - } -}