From 75fbfb9c11fd8f6a411d0f8b83fdd2023d0f8508 Mon Sep 17 00:00:00 2001 From: Sollace Date: Tue, 28 Dec 2021 02:20:08 +0200 Subject: [PATCH] Use the lightning particle instead of lightning entities --- .../ability/magic/spell/effect/FireSpell.java | 2 +- .../ability/magic/spell/effect/IceSpell.java | 2 +- .../ability/magic/spell/effect/SiphoningSpell.java | 2 +- .../client/particle/CloudsEscapingParticle.java | 2 +- .../client/particle/GroundPoundParticle.java | 2 +- .../minelittlepony/unicopia/entity/FairyEntity.java | 13 ++++++++++++- .../com/minelittlepony/unicopia/item/JarItem.java | 6 ++++++ .../minelittlepony/unicopia/item/ZapAppleItem.java | 11 +++++++++-- .../unicopia/particle/ParticleUtils.java | 8 ++++---- 9 files changed, 36 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/FireSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/FireSpell.java index cf842a83..2b0a7071 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/FireSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/FireSpell.java @@ -162,7 +162,7 @@ public class FireSpell extends AbstractAreaEffectSpell implements ProjectileSpel world.playSound(null, pos, SoundEvents.BLOCK_FURNACE_FIRE_CRACKLE, SoundCategory.AMBIENT, 0.5F, 2.6F + (world.random.nextFloat() - world.random.nextFloat()) * 0.8F); for (int i = 0; i < 8; ++i) { - ParticleUtils.spawnParticle(ParticleTypes.LARGE_SMOKE, world, new Vec3d( + ParticleUtils.spawnParticle(world, ParticleTypes.LARGE_SMOKE, new Vec3d( x + Math.random(), y + Math.random(), z + Math.random() diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/IceSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/IceSpell.java index 392238d4..d5c7c3e7 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/IceSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/IceSpell.java @@ -46,7 +46,7 @@ public class IceSpell extends AbstractSpell { PosHelper.getAllInRegionMutable(source.getOrigin(), effect_range) .forEach(i -> { if (applyBlockSingle(owner, source.getWorld(), i)) { - ParticleUtils.spawnParticle(ParticleTypes.SPLASH, source.getWorld(), new Vec3d( + ParticleUtils.spawnParticle(source.getWorld(), ParticleTypes.SPLASH, new Vec3d( i.getX() + source.getWorld().random.nextFloat(), i.getY() + 1, i.getZ() + source.getWorld().random.nextFloat()), Vec3d.ZERO); diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/SiphoningSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/SiphoningSpell.java index 2546027a..cc71f51e 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/SiphoningSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/SiphoningSpell.java @@ -102,7 +102,7 @@ public class SiphoningSpell extends AbstractAreaEffectSpell { } } else { e.heal((float)Math.min(0.5F * (1 + source.getLevel().get()), maxHealthGain * 0.6)); - ParticleUtils.spawnParticle(new FollowingParticleEffect(UParticles.HEALTH_DRAIN, e, 0.2F), e.world, e.getPos(), Vec3d.ZERO); + ParticleUtils.spawnParticle(e.world, new FollowingParticleEffect(UParticles.HEALTH_DRAIN, e, 0.2F), e.getPos(), Vec3d.ZERO); } }); } diff --git a/src/main/java/com/minelittlepony/unicopia/client/particle/CloudsEscapingParticle.java b/src/main/java/com/minelittlepony/unicopia/client/particle/CloudsEscapingParticle.java index a9fbb4c2..e6a048b0 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/particle/CloudsEscapingParticle.java +++ b/src/main/java/com/minelittlepony/unicopia/client/particle/CloudsEscapingParticle.java @@ -34,7 +34,7 @@ public class CloudsEscapingParticle extends GroundPoundParticle { .offset(center) .randomPoints(random) .forEach(point -> { - ParticleUtils.spawnParticle(ParticleTypes.CLOUD, world, point, vel); + ParticleUtils.spawnParticle(world, ParticleTypes.CLOUD, point, vel); }); } } diff --git a/src/main/java/com/minelittlepony/unicopia/client/particle/GroundPoundParticle.java b/src/main/java/com/minelittlepony/unicopia/client/particle/GroundPoundParticle.java index 98c9d93b..93e67333 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/particle/GroundPoundParticle.java +++ b/src/main/java/com/minelittlepony/unicopia/client/particle/GroundPoundParticle.java @@ -56,7 +56,7 @@ public class GroundPoundParticle extends Particle { } } - ParticleUtils.spawnParticle(new BlockStateParticleEffect(ParticleTypes.BLOCK, state), world, point, vel); + ParticleUtils.spawnParticle(world, new BlockStateParticleEffect(ParticleTypes.BLOCK, state), point, vel); }); } } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/FairyEntity.java b/src/main/java/com/minelittlepony/unicopia/entity/FairyEntity.java index cbbd81af..c8b93e00 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/FairyEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/FairyEntity.java @@ -8,10 +8,13 @@ import org.jetbrains.annotations.Nullable; import com.minelittlepony.unicopia.Owned; import com.minelittlepony.unicopia.USounds; import com.minelittlepony.unicopia.particle.MagicParticleEffect; +import com.minelittlepony.unicopia.particle.ParticleUtils; +import com.minelittlepony.unicopia.particle.UParticles; import net.minecraft.block.BlockState; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; +import net.minecraft.entity.LightningEntity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.MovementType; import net.minecraft.entity.ai.FuzzyPositions; @@ -29,6 +32,7 @@ import net.minecraft.entity.mob.PathAwareEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtHelper; +import net.minecraft.server.world.ServerWorld; import net.minecraft.sound.SoundEvent; import net.minecraft.sound.SoundEvents; import net.minecraft.util.ActionResult; @@ -36,6 +40,7 @@ import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; +import net.minecraft.world.event.GameEvent; public class FairyEntity extends PathAwareEntity implements LightEmittingEntity, Owned { private final EntityReference owner = new EntityReference<>(); @@ -199,7 +204,13 @@ public class FairyEntity extends PathAwareEntity implements LightEmittingEntity, @Override public boolean handleAttack(Entity attacker) { - attacker.damage(DamageSource.LIGHTNING_BOLT, (float)getAttackDistanceScalingFactor(attacker) * 3); + if (world instanceof ServerWorld) { + LightningEntity lightning = EntityType.LIGHTNING_BOLT.create(world); + lightning.refreshPositionAfterTeleport(getX(), getY(), getZ()); + attacker.onStruckByLightning((ServerWorld)world, lightning); + } + emitGameEvent(GameEvent.LIGHTNING_STRIKE); + ParticleUtils.spawnParticle(world, UParticles.LIGHTNING_BOLT, getPos(), Vec3d.ZERO); return false; } diff --git a/src/main/java/com/minelittlepony/unicopia/item/JarItem.java b/src/main/java/com/minelittlepony/unicopia/item/JarItem.java index cfdbd135..b93cd0f5 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/JarItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/JarItem.java @@ -2,6 +2,7 @@ package com.minelittlepony.unicopia.item; import com.minelittlepony.unicopia.entity.IItemEntity; import com.minelittlepony.unicopia.entity.ItemImpl; +import com.minelittlepony.unicopia.particle.ParticleUtils; import com.minelittlepony.unicopia.particle.UParticles; import com.minelittlepony.unicopia.projectile.MagicProjectileEntity; import com.minelittlepony.unicopia.projectile.ProjectileDelegate; @@ -25,6 +26,7 @@ import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import net.minecraft.world.WorldEvents; import net.minecraft.world.level.ServerWorldProperties; @@ -139,6 +141,10 @@ public class JarItem extends Item implements ProjectileDelegate, ItemImpl.Tickab } } + if (lightning) { + ParticleUtils.spawnParticle(projectile.world, UParticles.LIGHTNING_BOLT, projectile.getPos(), Vec3d.ZERO); + } + if (rain || thunder) { projectile.world.syncWorldEvent(WorldEvents.SPLASH_POTION_SPLASHED, projectile.getBlockPos(), thunder ? 0x888888 : 0xF8F8F8); diff --git a/src/main/java/com/minelittlepony/unicopia/item/ZapAppleItem.java b/src/main/java/com/minelittlepony/unicopia/item/ZapAppleItem.java index 9c501ad8..d164155a 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/ZapAppleItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/ZapAppleItem.java @@ -1,11 +1,12 @@ package com.minelittlepony.unicopia.item; - import java.util.Optional; import com.minelittlepony.unicopia.UTags; import com.minelittlepony.unicopia.advancement.UCriteria; import com.minelittlepony.unicopia.item.toxin.Toxicity; +import com.minelittlepony.unicopia.particle.ParticleUtils; +import com.minelittlepony.unicopia.particle.UParticles; import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.RayTraceHelper; import net.minecraft.entity.Entity; @@ -24,11 +25,13 @@ import net.minecraft.server.world.ServerWorld; import net.minecraft.text.Text; import net.minecraft.util.ActionResult; import net.minecraft.util.collection.DefaultedList; +import net.minecraft.util.math.Vec3d; import net.minecraft.util.Hand; import net.minecraft.util.Rarity; import net.minecraft.util.TypedActionResult; import net.minecraft.util.registry.Registry; import net.minecraft.world.World; +import net.minecraft.world.event.GameEvent; public class ZapAppleItem extends AppleItem implements ChameleonItem { @@ -59,12 +62,16 @@ public class ZapAppleItem extends AppleItem implements ChameleonItem { LightningEntity lightning = EntityType.LIGHTNING_BOLT.create(w); lightning.refreshPositionAfterTeleport(player.getX(), player.getY(), player.getZ()); - w.spawnEntity(lightning); + player.onStruckByLightning((ServerWorld)w, lightning); + if (player instanceof PlayerEntity) { UCriteria.EAT_TRICK_APPLE.trigger((PlayerEntity)player); } } + player.emitGameEvent(GameEvent.LIGHTNING_STRIKE); + ParticleUtils.spawnParticle(w, UParticles.LIGHTNING_BOLT, player.getPos(), Vec3d.ZERO); + return stack; } diff --git a/src/main/java/com/minelittlepony/unicopia/particle/ParticleUtils.java b/src/main/java/com/minelittlepony/unicopia/particle/ParticleUtils.java index 1f300ddd..7f71ef13 100644 --- a/src/main/java/com/minelittlepony/unicopia/particle/ParticleUtils.java +++ b/src/main/java/com/minelittlepony/unicopia/particle/ParticleUtils.java @@ -14,14 +14,14 @@ import net.minecraft.world.World; */ public final class ParticleUtils { - public static void spawnParticles(ParticleEffect particleId, Entity entity, int count) { + public static void spawnParticles(ParticleEffect effect, Entity entity, int count) { double halfDist = Math.abs(entity.getStandingEyeHeight() / 1.5); double middle = entity.getBoundingBox().minY + halfDist; Shape shape = new Sphere(false, Math.abs((float)halfDist + entity.getWidth())); shape.randomPoints(count, entity.world.random).forEach(point -> { - spawnParticle(entity.world, particleId, + spawnParticle(entity.world, effect, entity.getX() + point.x, middle + point.y, entity.getZ() + point.z, @@ -29,8 +29,8 @@ public final class ParticleUtils { }); } - public static void spawnParticle(ParticleEffect particleId, World world, Vec3d pos, Vec3d vel) { - spawnParticle(world, particleId, pos.x, pos.y, pos.z, vel.x, vel.y, vel.z); + public static void spawnParticle(World world, ParticleEffect effect, Vec3d pos, Vec3d vel) { + spawnParticle(world, effect, pos.x, pos.y, pos.z, vel.x, vel.y, vel.z); } public static void spawnParticle(World world, ParticleEffect effect, double x, double y, double z, double vX, double vY, double vZ) {