diff --git a/src/main/java/net/mcreator/superbwarfare/entity/ClaymoreEntity.java b/src/main/java/net/mcreator/superbwarfare/entity/ClaymoreEntity.java index 49995553b..113fdce0e 100644 --- a/src/main/java/net/mcreator/superbwarfare/entity/ClaymoreEntity.java +++ b/src/main/java/net/mcreator/superbwarfare/entity/ClaymoreEntity.java @@ -6,7 +6,6 @@ import net.mcreator.superbwarfare.init.ModEntities; import net.mcreator.superbwarfare.init.ModItems; import net.mcreator.superbwarfare.tools.CustomExplosion; import net.mcreator.superbwarfare.tools.ParticleTool; -import net.mcreator.superbwarfare.tools.ProjectileTool; import net.minecraft.core.NonNullList; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; @@ -116,7 +115,14 @@ public class ClaymoreEntity extends LivingEntity implements GeoEntity, AnimatedE super.die(source); if (level() instanceof ServerLevel) { - ProjectileTool.causeCustomExplode(this, this.getOwner(), 15.0f, 7.5f, 1); + CustomExplosion explosion = new CustomExplosion(this.level(), this, + ModDamageTypes.causeMineDamage(this.level().registryAccess(), this.getOwner()), 15.0f, + this.getX(), this.getY(), this.getZ(), 7.5f, Explosion.BlockInteraction.KEEP).setDamageMultiplier(1); + explosion.explode(); + net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion); + explosion.finalizeExplosion(false); + ParticleTool.spawnMediumExplosionParticles(this.level(), this.position()); + this.discard(); } } diff --git a/src/main/java/net/mcreator/superbwarfare/entity/projectile/GunGrenadeEntity.java b/src/main/java/net/mcreator/superbwarfare/entity/projectile/GunGrenadeEntity.java index 49679317a..de74c3ae6 100644 --- a/src/main/java/net/mcreator/superbwarfare/entity/projectile/GunGrenadeEntity.java +++ b/src/main/java/net/mcreator/superbwarfare/entity/projectile/GunGrenadeEntity.java @@ -90,7 +90,9 @@ public class GunGrenadeEntity extends ThrowableItemProjectile { if (this.tickCount > 0) { if (this.level() instanceof ServerLevel) { - ProjectileTool.causeCustomExplode(this, entity, this.damage * 1.8f, 7.5f, this.monsterMultiplier); + ProjectileTool.causeCustomExplode(this, + ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()), + entity, this.damage * 1.8f, 7.5f, this.monsterMultiplier); } } @@ -105,9 +107,12 @@ public class GunGrenadeEntity extends ThrowableItemProjectile { if (state.getBlock() instanceof BellBlock bell) { bell.attemptToRing(this.level(), resultPos, blockHitResult.getDirection()); } + if (this.tickCount > 0) { if (this.level() instanceof ServerLevel) { - ProjectileTool.causeCustomExplode(this, this.damage * 1.8f, 7.5f, this.monsterMultiplier); + ProjectileTool.causeCustomExplode(this, + ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()), + this, this.damage * 1.8f, 7.5f, this.monsterMultiplier); } } @@ -125,7 +130,9 @@ public class GunGrenadeEntity extends ThrowableItemProjectile { if (this.tickCount > 200 || this.isInWater()) { if (this.level() instanceof ServerLevel) { - ProjectileTool.causeCustomExplode(this, this.damage * 1.8f, 7.5f, this.monsterMultiplier); + ProjectileTool.causeCustomExplode(this, + ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()), + this, this.damage * 1.8f, 7.5f, this.monsterMultiplier); } this.discard(); } diff --git a/src/main/java/net/mcreator/superbwarfare/entity/projectile/JavelinMissileEntity.java b/src/main/java/net/mcreator/superbwarfare/entity/projectile/JavelinMissileEntity.java index 38142b887..a7eecfe1d 100644 --- a/src/main/java/net/mcreator/superbwarfare/entity/projectile/JavelinMissileEntity.java +++ b/src/main/java/net/mcreator/superbwarfare/entity/projectile/JavelinMissileEntity.java @@ -126,7 +126,9 @@ public class JavelinMissileEntity extends ThrowableItemProjectile implements Geo if (this.tickCount > 1) { if (this.level() instanceof ServerLevel) { - ProjectileTool.causeCustomExplode(this, entity, this.damage, 8.0f, this.monsterMultiplier); + ProjectileTool.causeCustomExplode(this, + ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()), + entity, this.damage, 8.0f, this.monsterMultiplier); } } @@ -150,7 +152,9 @@ public class JavelinMissileEntity extends ThrowableItemProjectile implements Geo if (this.tickCount > 1) { if (this.level() instanceof ServerLevel) { - ProjectileTool.causeCustomExplode(this, this.damage, 8.0f, this.monsterMultiplier); + ProjectileTool.causeCustomExplode(this, + ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()), + this, this.damage, 8.0f, this.monsterMultiplier); } } @@ -203,7 +207,9 @@ public class JavelinMissileEntity extends ThrowableItemProjectile implements Geo if (this.tickCount > 200 || this.isInWater()) { if (this.level() instanceof ServerLevel) { - ProjectileTool.causeCustomExplode(this, this.damage, 8.0f, this.monsterMultiplier); + ProjectileTool.causeCustomExplode(this, + ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()), + this, this.damage, 8.0f, this.monsterMultiplier); } this.discard(); } diff --git a/src/main/java/net/mcreator/superbwarfare/entity/projectile/RpgRocketEntity.java b/src/main/java/net/mcreator/superbwarfare/entity/projectile/RpgRocketEntity.java index 70f738a28..c5de41f68 100644 --- a/src/main/java/net/mcreator/superbwarfare/entity/projectile/RpgRocketEntity.java +++ b/src/main/java/net/mcreator/superbwarfare/entity/projectile/RpgRocketEntity.java @@ -107,7 +107,9 @@ public class RpgRocketEntity extends ThrowableItemProjectile implements GeoEntit if (this.tickCount > 1) { if (this.level() instanceof ServerLevel) { - ProjectileTool.causeCustomExplode(this, entity, this.damage * 0.67f, 10.0f, this.monsterMultiplier); + ProjectileTool.causeCustomExplode(this, + ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()), + entity, this.damage * 0.67f, 10.0f, this.monsterMultiplier); } } @@ -126,7 +128,9 @@ public class RpgRocketEntity extends ThrowableItemProjectile implements GeoEntit if (this.tickCount > 1) { if (this.level() instanceof ServerLevel) { - ProjectileTool.causeCustomExplode(this, this.damage * 0.67f, 10.0f, this.monsterMultiplier); + ProjectileTool.causeCustomExplode(this, + ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()), + this, this.damage * 0.67f, 10.0f, this.monsterMultiplier); } } @@ -153,7 +157,9 @@ public class RpgRocketEntity extends ThrowableItemProjectile implements GeoEntit if (this.tickCount > 100 || this.isInWater()) { if (this.level() instanceof ServerLevel) { - ProjectileTool.causeCustomExplode(this, this.damage * 0.67f, 10.0f, this.monsterMultiplier); + ProjectileTool.causeCustomExplode(this, + ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()), + this, this.damage * 0.67f, 10.0f, this.monsterMultiplier); } this.discard(); } @@ -181,7 +187,7 @@ public class RpgRocketEntity extends ThrowableItemProjectile implements GeoEntit @Override protected float getGravity() { - return 0.03F; + return super.getGravity(); } public String getSyncedAnimation() { diff --git a/src/main/java/net/mcreator/superbwarfare/init/ModDamageTypes.java b/src/main/java/net/mcreator/superbwarfare/init/ModDamageTypes.java index d35d6aa18..a41a06a80 100644 --- a/src/main/java/net/mcreator/superbwarfare/init/ModDamageTypes.java +++ b/src/main/java/net/mcreator/superbwarfare/init/ModDamageTypes.java @@ -25,6 +25,7 @@ public class ModDamageTypes { public static final ResourceKey SHOCK = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "shock")); public static final ResourceKey PROJECTILE_BOOM = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "projectile_boom")); public static final ResourceKey CANNON_FIRE = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "cannon_fire")); + public static final ResourceKey CUSTOM_EXPLOSION = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "custom_explosion")); public static DamageSource causeGunFireDamage(RegistryAccess registryAccess, @Nullable Entity directEntity, @Nullable Entity attacker) { return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(GUN_FIRE), directEntity, attacker); @@ -58,6 +59,10 @@ public class ModDamageTypes { return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(GUN_FIRE_HEADSHOT_ABSOLUTE), directEntity, attacker); } + public static DamageSource causeCustomExplosionDamage(RegistryAccess registryAccess, @Nullable Entity directEntity, @Nullable Entity attacker) { + return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(CUSTOM_EXPLOSION), directEntity, attacker); + } + private static class DamageMessages extends DamageSource { public DamageMessages(Holder.Reference typeReference) { super(typeReference); diff --git a/src/main/java/net/mcreator/superbwarfare/tools/ProjectileTool.java b/src/main/java/net/mcreator/superbwarfare/tools/ProjectileTool.java index 38a86aaf8..405d15413 100644 --- a/src/main/java/net/mcreator/superbwarfare/tools/ProjectileTool.java +++ b/src/main/java/net/mcreator/superbwarfare/tools/ProjectileTool.java @@ -1,8 +1,8 @@ package net.mcreator.superbwarfare.tools; import net.mcreator.superbwarfare.init.ModDamageTypes; +import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.projectile.ThrowableItemProjectile; import net.minecraft.world.level.Explosion; @@ -10,9 +10,8 @@ import javax.annotation.Nullable; public class ProjectileTool { - public static void causeCustomExplode(ThrowableItemProjectile projectile, Entity target, float damage, float radius, float damageMultiplier) { - CustomExplosion explosion = new CustomExplosion(projectile.level(), projectile, - ModDamageTypes.causeProjectileBoomDamage(projectile.level().registryAccess(), projectile, projectile.getOwner()), damage, + public static void causeCustomExplode(ThrowableItemProjectile projectile, @Nullable DamageSource source, Entity target, float damage, float radius, float damageMultiplier) { + CustomExplosion explosion = new CustomExplosion(projectile.level(), projectile, source, damage, target.getX(), target.getY(), target.getZ(), radius, Explosion.BlockInteraction.KEEP).setDamageMultiplier(damageMultiplier); explosion.explode(); net.minecraftforge.event.ForgeEventFactory.onExplosionStart(projectile.level(), explosion); @@ -21,6 +20,11 @@ public class ProjectileTool { projectile.discard(); } + public static void causeCustomExplode(ThrowableItemProjectile projectile, Entity target, float damage, float radius, float damageMultiplier) { + causeCustomExplode(projectile, ModDamageTypes.causeCustomExplosionDamage(projectile.level().registryAccess(), projectile, projectile.getOwner()), + target, damage, radius, damageMultiplier); + } + public static void causeCustomExplode(ThrowableItemProjectile projectile, float damage, float radius, float damageMultiplier) { causeCustomExplode(projectile, projectile, damage, radius, damageMultiplier); } @@ -29,14 +33,4 @@ public class ProjectileTool { causeCustomExplode(projectile, damage, radius, 0.0f); } - public static void causeCustomExplode(LivingEntity projectile, @Nullable LivingEntity owner, float damage, float radius, float damageMultiplier) { - CustomExplosion explosion = new CustomExplosion(projectile.level(), projectile, - ModDamageTypes.causeProjectileBoomDamage(projectile.level().registryAccess(), projectile, owner), damage, - projectile.getX(), projectile.getY(), projectile.getZ(), radius, Explosion.BlockInteraction.KEEP).setDamageMultiplier(damageMultiplier); - explosion.explode(); - net.minecraftforge.event.ForgeEventFactory.onExplosionStart(projectile.level(), explosion); - explosion.finalizeExplosion(false); - ParticleTool.spawnMediumExplosionParticles(projectile.level(), projectile.position()); - projectile.discard(); - } } diff --git a/src/main/resources/data/minecraft/tags/damage_type/always_hurts_ender_dragons.json b/src/main/resources/data/minecraft/tags/damage_type/always_hurts_ender_dragons.json index 2d64e2e05..970955c29 100644 --- a/src/main/resources/data/minecraft/tags/damage_type/always_hurts_ender_dragons.json +++ b/src/main/resources/data/minecraft/tags/damage_type/always_hurts_ender_dragons.json @@ -2,6 +2,7 @@ "replace": false, "values": [ "superbwarfare:projectile_boom", + "superbwarfare:custom_explosion", "superbwarfare:cannon_fire" ] } \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/damage_type/is_explosion.json b/src/main/resources/data/minecraft/tags/damage_type/is_explosion.json index 231365aff..917e6bd72 100644 --- a/src/main/resources/data/minecraft/tags/damage_type/is_explosion.json +++ b/src/main/resources/data/minecraft/tags/damage_type/is_explosion.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "superbwarfare:projectile_boom" + "superbwarfare:projectile_boom", + "superbwarfare:custom_explosion" ] } \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/damage_type/no_knockback.json b/src/main/resources/data/minecraft/tags/damage_type/no_knockback.json index 231365aff..917e6bd72 100644 --- a/src/main/resources/data/minecraft/tags/damage_type/no_knockback.json +++ b/src/main/resources/data/minecraft/tags/damage_type/no_knockback.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "superbwarfare:projectile_boom" + "superbwarfare:projectile_boom", + "superbwarfare:custom_explosion" ] } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/damage_type/custom_explosion.json b/src/main/resources/data/superbwarfare/damage_type/custom_explosion.json new file mode 100644 index 000000000..c872cdb8b --- /dev/null +++ b/src/main/resources/data/superbwarfare/damage_type/custom_explosion.json @@ -0,0 +1,5 @@ +{ + "exhaustion": 0.1, + "message_id": "projectile_boom", + "scaling": "never" +} \ No newline at end of file