优化爆炸

This commit is contained in:
Atsuihsio 2024-06-26 16:07:22 +08:00
parent 9f355a1003
commit 7a11f4dad6
11 changed files with 279 additions and 1341 deletions

View file

@ -149,9 +149,9 @@ public class BocekArrowEntity extends AbstractArrow implements ItemSupplier {
} }
} else { } else {
if (entity instanceof Monster monster) { if (entity instanceof Monster monster) {
hurt = monster.hurt(TargetModDamageTypes.causeArrowInBrainDamage(this.level().registryAccess(), this, this.getOwner()), (float) i * damageMultiplier); hurt = monster.hurt(TargetModDamageTypes.causeArrowInKneeDamage(this.level().registryAccess(), this, this.getOwner()), (float) i * damageMultiplier);
} else { } else {
hurt = entity.hurt(TargetModDamageTypes.causeArrowInBrainDamage(this.level().registryAccess(), this, this.getOwner()), (float) i); hurt = entity.hurt(TargetModDamageTypes.causeArrowInKneeDamage(this.level().registryAccess(), this, this.getOwner()), (float) i);
} }
} }

View file

@ -1,9 +1,8 @@
package net.mcreator.target.entity; package net.mcreator.target.entity;
import net.mcreator.target.TargetMod; import net.mcreator.target.TargetMod;
import net.mcreator.target.init.TargetModDamageTypes; import net.mcreator.target.init.*;
import net.mcreator.target.init.TargetModEntities; import net.mcreator.target.network.TargetModVariables;
import net.mcreator.target.init.TargetModItems;
import net.mcreator.target.tools.CustomExplosion; import net.mcreator.target.tools.CustomExplosion;
import net.mcreator.target.tools.ParticleTool; import net.mcreator.target.tools.ParticleTool;
import net.minecraft.core.registries.Registries; import net.minecraft.core.registries.Registries;
@ -28,6 +27,7 @@ import net.minecraft.world.entity.projectile.ThrownPotion;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.SpawnEggItem; import net.minecraft.world.item.SpawnEggItem;
import net.minecraft.world.item.enchantment.EnchantmentHelper;
import net.minecraft.world.level.Explosion; import net.minecraft.world.level.Explosion;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.AABB;
@ -249,13 +249,11 @@ public class ClaymoreEntity extends TamableAnimal implements GeoEntity, Animated
private void triggerExplode(Entity target) { private void triggerExplode(Entity target) {
CustomExplosion explosion = new CustomExplosion(this.level(), this, CustomExplosion explosion = new CustomExplosion(this.level(), this,
TargetModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()), 150f, TargetModDamageTypes.causeMineDamage(this.level().registryAccess(), this.getOwner()), 150f,
target.getX(), target.getY(), target.getZ(), 4f, Explosion.BlockInteraction.KEEP).setDamageMultiplier(1); target.getX(), target.getY(), target.getZ(), 4f, Explosion.BlockInteraction.KEEP).setDamageMultiplier(1);
explosion.explode(); explosion.explode();
net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion); net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion);
explosion.finalizeExplosion(false); explosion.finalizeExplosion(false);
ParticleTool.spawnMediumExplosionParticles(this.level(), this.position());
} }
@Override @Override

View file

@ -171,7 +171,7 @@ public class GunGrenadeEntity extends ThrowableItemProjectile {
private void causeExplode() { private void causeExplode() {
CustomExplosion explosion = new CustomExplosion(this.level(), this, CustomExplosion explosion = new CustomExplosion(this.level(), this,
TargetModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()), 72f, TargetModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()), 1.8f * this.damage,
this.getX(), this.getY(), this.getZ(), 7.5f, Explosion.BlockInteraction.KEEP).setDamageMultiplier(this.monsterMultiplier); this.getX(), this.getY(), this.getZ(), 7.5f, Explosion.BlockInteraction.KEEP).setDamageMultiplier(this.monsterMultiplier);
explosion.explode(); explosion.explode();
net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion); net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion);

View file

@ -198,10 +198,10 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa
boolean legshot = false; boolean legshot = false;
float eyeHeight = entity.getEyeHeight(); float eyeHeight = entity.getEyeHeight();
float BodyHeight = entity.getBbHeight(); float BodyHeight = entity.getBbHeight();
if ((eyeHeight - 0.35) < hitBoxPos.y && hitBoxPos.y < (eyeHeight + 0.4)) { if ((eyeHeight - 0.35) < hitBoxPos.y && hitBoxPos.y < (eyeHeight + 0.4) && !(entity instanceof ClaymoreEntity || entity instanceof MortarEntity)) {
headshot = true; headshot = true;
} }
if (hitBoxPos.y < (0.33 * BodyHeight)) { if (hitBoxPos.y < (0.33 * BodyHeight) && !(entity instanceof ClaymoreEntity || entity instanceof MortarEntity)) {
legshot = true; legshot = true;
} }

View file

@ -185,7 +185,7 @@ public class RpgRocketEntity extends ThrowableItemProjectile {
private void causeExplode() { private void causeExplode() {
CustomExplosion explosion = new CustomExplosion(this.level(), this, CustomExplosion explosion = new CustomExplosion(this.level(), this,
TargetModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()), 100f, TargetModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()), (float) 2 / 3 * this.damage,
this.getX(), this.getY(), this.getZ(), 10f, Explosion.BlockInteraction.KEEP).setDamageMultiplier(this.monsterMultiplier); this.getX(), this.getY(), this.getZ(), 10f, Explosion.BlockInteraction.KEEP).setDamageMultiplier(this.monsterMultiplier);
explosion.explode(); explosion.explode();
net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion); net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion);

View file

@ -43,15 +43,6 @@ public class LivingEventHandler {
reduceBulletDamage(event, event.getSource(), event.getEntity(), event.getSource().getEntity(), event.getAmount()); reduceBulletDamage(event, event.getSource(), event.getEntity(), event.getSource().getEntity(), event.getAmount());
} }
@SubscribeEvent
public static void onEntityAttacked(LivingAttackEvent event) {
if (event == null || event.getEntity() == null) {
return;
}
claymoreDamage(event);
}
@SubscribeEvent @SubscribeEvent
public static void onEntityDeath(LivingDeathEvent event) { public static void onEntityDeath(LivingDeathEvent event) {
if (event == null || event.getEntity() == null) { if (event == null || event.getEntity() == null) {
@ -72,7 +63,7 @@ public class LivingEventHandler {
if (damagesource.is(TargetModDamageTypes.ARROW_IN_KNEE) || damagesource.is(TargetModDamageTypes.ARROW_IN_BRAIN)) { if (damagesource.is(TargetModDamageTypes.ARROW_IN_KNEE) || damagesource.is(TargetModDamageTypes.ARROW_IN_BRAIN)) {
stack.getOrCreateTag().putDouble("damagetotal", stack.getOrCreateTag().getDouble("damagetotal") + damage); stack.getOrCreateTag().putDouble("damagetotal", stack.getOrCreateTag().getDouble("damagetotal") + damage);
} }
if ((damagesource.is(DamageTypes.EXPLOSION) || damagesource.is(DamageTypes.PLAYER_EXPLOSION) || damagesource.is(DamageTypes.ARROW)) if ((damagesource.is(TargetModDamageTypes.PROJECTILE_BOOM) || damagesource.is(DamageTypes.ARROW))
&& (stack.getItem() == TargetModItems.M_79.get() || stack.getItem() == TargetModItems.RPG.get()) && (stack.getItem() == TargetModItems.M_79.get() || stack.getItem() == TargetModItems.RPG.get())
) { ) {
stack.getOrCreateTag().putDouble("damagetotal", stack.getOrCreateTag().getDouble("damagetotal") + damage); stack.getOrCreateTag().putDouble("damagetotal", stack.getOrCreateTag().getDouble("damagetotal") + damage);
@ -94,10 +85,10 @@ public class LivingEventHandler {
} }
event.setAmount((float) damage); event.setAmount((float) damage);
stack.getOrCreateTag().putDouble("damagetotal", stack.getOrCreateTag().getDouble("damagetotal") + damage); stack.getOrCreateTag().putDouble("damagetotal", stack.getOrCreateTag().getDouble("damagetotal") + damage);
}
if (entity instanceof Target1Entity && sourceentity instanceof Player player) { if (entity instanceof Target1Entity && sourceentity instanceof Player player) {
player.displayClientMessage(Component.literal("Damage:" + new java.text.DecimalFormat("##.#").format(damage) + " Distance:" + new java.text.DecimalFormat("##.#").format((entity.position()).distanceTo((sourceentity.position()))) + "M"), false); player.displayClientMessage(Component.literal("Damage:" + new java.text.DecimalFormat("##.#").format(damage) + " Distance:" + new java.text.DecimalFormat("##.#").format((entity.position()).distanceTo((sourceentity.position()))) + "M"), false);
}
} }
} }
@ -105,21 +96,6 @@ public class LivingEventHandler {
return amount / (1 + rate * Math.max(0, distance - minDistance)); return amount / (1 + rate * Math.max(0, distance - minDistance));
} }
private static void claymoreDamage(LivingAttackEvent event) {
LivingEntity entity = event.getEntity();
DamageSource source = event.getSource();
Entity sourceentity = source.getEntity();
if (event.getEntity() == null || entity == null || sourceentity == null) {
return;
}
if ((source.is(DamageTypes.EXPLOSION) || source.is(DamageTypes.PLAYER_EXPLOSION)) && sourceentity instanceof ClaymoreEntity claymore) {
event.setCanceled(true);
entity.hurt(TargetModDamageTypes.causeMineDamage(entity.level().registryAccess(), claymore.getOwner()), event.getAmount());
}
}
private static void killIndication(Entity sourceEntity) { private static void killIndication(Entity sourceEntity) {
if (sourceEntity == null) { if (sourceEntity == null) {
return; return;

View file

@ -36,7 +36,7 @@ public class M79fireProcedure {
Level level = entity.level(); Level level = entity.level();
if (!level.isClientSide()) { if (!level.isClientSide()) {
int monsterMultiple = EnchantmentHelper.getTagEnchantmentLevel(TargetModEnchantments.MONSTER_HUNTER.get(), stack); int monsterMultiple = EnchantmentHelper.getTagEnchantmentLevel(TargetModEnchantments.MONSTER_HUNTER.get(), stack);
GunGrenadeEntity gunGrenadeEntity = new GunGrenadeEntity(player, level, (float) stack.getOrCreateTag().getDouble("damage"), monsterMultiple); GunGrenadeEntity gunGrenadeEntity = new GunGrenadeEntity(player, level, (float) stack.getOrCreateTag().getDouble("damage") * (float) stack.getOrCreateTag().getDouble("damageadd"), monsterMultiple);
gunGrenadeEntity.setPos(entity.getX(), entity.getEyeY() - 0.1, entity.getZ()); gunGrenadeEntity.setPos(entity.getX(), entity.getEyeY() - 0.1, entity.getZ());
gunGrenadeEntity.shoot(entity.getLookAngle().x, entity.getLookAngle().y, entity.getLookAngle().z, (float) stack.getOrCreateTag().getDouble("velocity"), gunGrenadeEntity.shoot(entity.getLookAngle().x, entity.getLookAngle().y, entity.getLookAngle().z, (float) stack.getOrCreateTag().getDouble("velocity"),

View file

@ -39,7 +39,7 @@ public class RpgFireProcedure {
if (!level.isClientSide()) { if (!level.isClientSide()) {
int monsterMultiple = EnchantmentHelper.getTagEnchantmentLevel(TargetModEnchantments.MONSTER_HUNTER.get(), mainHandItem); int monsterMultiple = EnchantmentHelper.getTagEnchantmentLevel(TargetModEnchantments.MONSTER_HUNTER.get(), mainHandItem);
RpgRocketEntity rocketEntity = new RpgRocketEntity(player, level, (float) tag.getDouble("damage"), monsterMultiple); RpgRocketEntity rocketEntity = new RpgRocketEntity(player, level, (float) tag.getDouble("damage") * (float) tag.getDouble("damageadd"), monsterMultiple);
rocketEntity.setPos(player.getX(), player.getEyeY() - 0.1, player.getZ()); rocketEntity.setPos(player.getX(), player.getEyeY() - 0.1, player.getZ());
rocketEntity.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, (float) tag.getDouble("velocity"), rocketEntity.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, (float) tag.getDouble("velocity"),
(float) player.getAttribute(TargetModAttributes.SPREAD.get()).getBaseValue()); (float) player.getAttribute(TargetModAttributes.SPREAD.get()).getBaseValue());

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,6 @@
{
"replace": false,
"values": [
"target:barbed_wire"
]
}

View file

@ -0,0 +1,6 @@
{
"replace": false,
"values": [
"target:sandbag"
]
}