From fc092e6326a957d1c57c02cc9ddf6b8c170042ce Mon Sep 17 00:00:00 2001 From: Christian Date: Wed, 20 Dec 2023 18:03:24 -0600 Subject: [PATCH] polish arrow volley --- .../entity/spells/ArrowVolleyEntity.java | 3 ++- .../spells/evocation/ArrowVolleySpell.java | 10 ++++++---- .../textures/gui/spell_icons/arrow_volley.png | Bin 0 -> 5493 bytes .../textures/gui/spell_icons/spell_icons.psd | Bin 489970 -> 504954 bytes 4 files changed, 8 insertions(+), 5 deletions(-) create mode 100644 src/main/resources/assets/irons_spellbooks/textures/gui/spell_icons/arrow_volley.png diff --git a/src/main/java/io/redspace/ironsspellbooks/entity/spells/ArrowVolleyEntity.java b/src/main/java/io/redspace/ironsspellbooks/entity/spells/ArrowVolleyEntity.java index ca634cd22..24fcf9b55 100644 --- a/src/main/java/io/redspace/ironsspellbooks/entity/spells/ArrowVolleyEntity.java +++ b/src/main/java/io/redspace/ironsspellbooks/entity/spells/ArrowVolleyEntity.java @@ -45,8 +45,9 @@ public void tick() { arrow.setPos(spawn); arrow.shoot(motion.add(Utils.getRandomVec3(.04f))); level.addFreshEntity(arrow); - MagicManager.spawnParticles(level, ParticleTypes.ELECTRIC_SPARK, spawn.x, spawn.y, spawn.z, 3, .1, .1, .1, .05, false); + MagicManager.spawnParticles(level, ParticleTypes.FIREWORK, spawn.x, spawn.y, spawn.z, 2, .1, .1, .1, .05, false); } + level.playSound(null, position().x, position().y, position().z, SoundEvents.FIREWORK_ROCKET_LAUNCH, SoundSource.NEUTRAL, 3.0f, 1.1f + Utils.random.nextFloat() * .3f); level.playSound(null, position().x, position().y, position().z, SoundRegistry.BOW_SHOOT.get(), SoundSource.NEUTRAL, 2, Utils.random.nextIntBetweenInclusive(16, 20) * .1f); } else if (tickCount > rows * delay) { discard(); diff --git a/src/main/java/io/redspace/ironsspellbooks/spells/evocation/ArrowVolleySpell.java b/src/main/java/io/redspace/ironsspellbooks/spells/evocation/ArrowVolleySpell.java index 56c17942d..894b38d8a 100644 --- a/src/main/java/io/redspace/ironsspellbooks/spells/evocation/ArrowVolleySpell.java +++ b/src/main/java/io/redspace/ironsspellbooks/spells/evocation/ArrowVolleySpell.java @@ -96,9 +96,11 @@ public void onCast(Level level, int spellLevel, LivingEntity entity, MagicData p targetLocation = Utils.raycastForEntity(level, entity, 100, true).getLocation(); } Vec3 backward = new Vec3(targetLocation.x - entity.getX(), 0, targetLocation.z - entity.getZ()).normalize().scale(-4); - Vec3 spawnLocation = Utils.moveToRelativeGroundLevel(level, Utils.moveToRelativeGroundLevel(level, targetLocation, 6).add(backward), 1, 2); - spawnLocation = Utils.raycastForBlock(level, spawnLocation.add(0, 0.25, 0), spawnLocation.add(0, 6, 0), ClipContext.Fluid.NONE).getLocation().add(0, -1, 0); - + //Vec3 spawnLocation = Utils.moveToRelativeGroundLevel(level, Utils.moveToRelativeGroundLevel(level, targetLocation, 6).add(backward), 1, 2); + //spawnLocation = Utils.raycastForBlock(level, spawnLocation.add(0, 0.25, 0), spawnLocation.add(0, 6, 0), ClipContext.Fluid.NONE).getLocation().add(0, -1, 0); + Vec3 raycastTarget = Utils.moveToRelativeGroundLevel(level, targetLocation.add(0, 2, 0), 4).add(backward).add(0, 6, 0); + Vec3 spawnLocation = Utils.raycastForBlock(level, targetLocation, raycastTarget, ClipContext.Fluid.NONE).getLocation(); + spawnLocation = spawnLocation.subtract(targetLocation).scale(.9f).add(targetLocation); float dx = Mth.sqrt((float) ((spawnLocation.x - targetLocation.x) * (spawnLocation.x - targetLocation.x) + (spawnLocation.z - targetLocation.z) * (spawnLocation.z - targetLocation.z))); float arrowAngleX = dx == 0 ? 70 : (float) (Mth.atan2(dx, (spawnLocation.y - targetLocation.y)) * Mth.RAD_TO_DEG); float arrowAngleY = entity.getX() == targetLocation.x && entity.getZ() == targetLocation.z ? (entity.getYRot() - 90) * Mth.DEG_TO_RAD : Utils.getAngle(entity.getX(), entity.getZ(), targetLocation.x, targetLocation.z); @@ -106,7 +108,7 @@ public void onCast(Level level, int spellLevel, LivingEntity entity, MagicData p ArrowVolleyEntity arrowVolleyEntity = new ArrowVolleyEntity(EntityRegistry.ARROW_VOLLEY_ENTITY.get(), level); arrowVolleyEntity.moveTo(spawnLocation); arrowVolleyEntity.setYRot(arrowAngleY * Mth.RAD_TO_DEG + 90); - arrowVolleyEntity.setXRot(arrowAngleX + 15); + arrowVolleyEntity.setXRot(arrowAngleX + 25); arrowVolleyEntity.setDamage(getDamage(spellLevel, entity)); arrowVolleyEntity.setArrowsPerRow(getArrowsPerRow(spellLevel, entity)); arrowVolleyEntity.setRows(getRows(spellLevel, entity)); diff --git a/src/main/resources/assets/irons_spellbooks/textures/gui/spell_icons/arrow_volley.png b/src/main/resources/assets/irons_spellbooks/textures/gui/spell_icons/arrow_volley.png new file mode 100644 index 0000000000000000000000000000000000000000..77175c1dc9a02e6ded8b764643699db2a7435dd7 GIT binary patch literal 5493 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 BC#e7c literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/irons_spellbooks/textures/gui/spell_icons/spell_icons.psd b/src/main/resources/assets/irons_spellbooks/textures/gui/spell_icons/spell_icons.psd index a6f10f6a6dca1ad64903abf4eedf3d9648e9a680..58aec557883d2a0382601a581bc98f231eb44a37 100644 GIT binary patch delta 18670 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 Z$?ESd`p6tGMFvGG4GJaCX+k;fzW~eMKp+4B delta 9550 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