diff --git a/src/main/java/net/mcreator/target/client/screens/KillMessageOverlay.java b/src/main/java/net/mcreator/target/client/screens/KillMessageOverlay.java index 771d67beb..470a2688a 100644 --- a/src/main/java/net/mcreator/target/client/screens/KillMessageOverlay.java +++ b/src/main/java/net/mcreator/target/client/screens/KillMessageOverlay.java @@ -252,7 +252,7 @@ public class KillMessageOverlay { icon = null; } else { // 如果是其他伤害,则渲染对应图标 - if (record.damageType == DamageTypes.EXPLOSION || record.damageType == DamageTypes.PLAYER_EXPLOSION) { + if (record.damageType == DamageTypes.EXPLOSION || record.damageType == DamageTypes.PLAYER_EXPLOSION || record.damageType == TargetModDamageTypes.PROJECTILE_BOOM) { icon = EXPLOSION; } else if (record.damageType == DamageTypes.PLAYER_ATTACK) { icon = KNIFE; diff --git a/src/main/java/net/mcreator/target/entity/GunGrenadeEntity.java b/src/main/java/net/mcreator/target/entity/GunGrenadeEntity.java index d95dee9cb..4a7fc2919 100644 --- a/src/main/java/net/mcreator/target/entity/GunGrenadeEntity.java +++ b/src/main/java/net/mcreator/target/entity/GunGrenadeEntity.java @@ -162,7 +162,8 @@ public class GunGrenadeEntity extends ThrowableItemProjectile { } private void causeExplode() { - CustomExplosion explosion = new CustomExplosion(this.level(), this, 72f, this.getX(), this.getY(), this.getZ(), + CustomExplosion explosion = new CustomExplosion(this.level(), this, + TargetModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()), 72f, this.getX(), this.getY(), this.getZ(), 7.5f, Explosion.BlockInteraction.KEEP); explosion.explode(); net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion); diff --git a/src/main/java/net/mcreator/target/event/ClientEventHandler.java b/src/main/java/net/mcreator/target/event/ClientEventHandler.java index 0454bb5b2..6b1e30b16 100644 --- a/src/main/java/net/mcreator/target/event/ClientEventHandler.java +++ b/src/main/java/net/mcreator/target/event/ClientEventHandler.java @@ -1,7 +1,6 @@ package net.mcreator.target.event; import net.mcreator.target.init.TargetModAttributes; -import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModMobEffects; import net.mcreator.target.init.TargetModTags; import net.mcreator.target.network.TargetModVariables; @@ -38,9 +37,9 @@ public class ClientEventHandler { float yRotOffset = Mth.lerp(event.getPartialTick(), player.yBobO, player.yBob); float xRot = player.getViewXRot(event.getPartialTick()) - xRotOffset; float yRot = player.getViewYRot(event.getPartialTick()) - yRotOffset; - data.putDouble("xRot", Mth.clamp(0.05 * xRot,-5,5) * (1 - 0.75 * data.getDouble("zoom_time"))); - data.putDouble("yRot", Mth.clamp(0.05 * yRot,-10,10) * (1 - 0.75 * data.getDouble("zoom_time"))); - data.putDouble("zRot", Mth.clamp(0.1 * yRot,-10,10) * (1 - data.getDouble("zoom_time"))); + data.putDouble("xRot", Mth.clamp(0.05 * xRot, -5, 5) * (1 - 0.75 * data.getDouble("zoom_time"))); + data.putDouble("yRot", Mth.clamp(0.05 * yRot, -10, 10) * (1 - 0.75 * data.getDouble("zoom_time"))); + data.putDouble("zRot", Mth.clamp(0.1 * yRot, -10, 10) * (1 - data.getDouble("zoom_time"))); } @SubscribeEvent @@ -254,7 +253,6 @@ public class ClientEventHandler { double pitch = event.getPitch(); double roll = event.getRoll(); - double pose; double amplitude; float fps = Minecraft.getInstance().getFps(); if (fps <= 0) { @@ -275,7 +273,7 @@ public class ClientEventHandler { data.putDouble("firepos2", 0.1); } - data.putDouble("firepos2", Mth.clamp(data.getDouble("firepos2") - 0.01 * times,0,0.6)); + data.putDouble("firepos2", Mth.clamp(data.getDouble("firepos2") - 0.01 * times, 0, 0.6)); if (0 < data.getDouble("firetime")) { data.putDouble("firetime", (data.getDouble("firetime") + 0.25 * (1.1 - data.getDouble("firetime")) * times)); @@ -296,15 +294,15 @@ public class ClientEventHandler { if (0 < data.getDouble("fire_rotx_time") && data.getDouble("fire_rotx_time") < 1.732) { data.putDouble("fire_rot", - (1 / 6.3 * (data.getDouble("fire_rotx_time") - 0.5)) * Math.sin(6.3 * (data.getDouble("fire_rotx_time") - 0.5)) * (3 - Math.pow(data.getDouble("fire_rotx_time") , 2))); + (1 / 6.3 * (data.getDouble("fire_rotx_time") - 0.5)) * Math.sin(6.3 * (data.getDouble("fire_rotx_time") - 0.5)) * (3 - Math.pow(data.getDouble("fire_rotx_time"), 2))); if ((capability.orElse(new TargetModVariables.PlayerVariables())).recoilHorizon > 0) { - event.setYaw((float) (yaw - 1.3 * amplitude * (1 / 6.3 * (data.getDouble("fire_rotx_time") - 0.5)) * Math.sin(6.3 * (data.getDouble("fire_rotx_time") - 0.5)) * (3 - Math.pow(data.getDouble("fire_rotx_time") , 2)) + 1 * Mth.clamp(0.3 - data.getDouble("fire_rotx_time"),0,1) * (2 * Math.random() - 1))); - event.setPitch((float) (pitch + 1.3 * amplitude * (1 / 6.3 * (data.getDouble("fire_rotx_time") - 0.5)) * Math.sin(6.3 * (data.getDouble("fire_rotx_time") - 0.5)) * (3 - Math.pow(data.getDouble("fire_rotx_time") , 2)) + 1 * Mth.clamp(0.3 - data.getDouble("fire_rotx_time"),0,1) * (2 * Math.random() - 1))); - event.setRoll((float) (roll + 4.2 * amplitude * (1 / 6.3 * (data.getDouble("fire_rotx_time") - 0.5)) * Math.sin(6.3 * (data.getDouble("fire_rotx_time") - 0.5)) * (3 - Math.pow(data.getDouble("fire_rotx_time") , 2)) + 3 * Mth.clamp(0.5 - data.getDouble("fire_rotx_time"),0,0.5) * (2 * Math.random() - 1))); + event.setYaw((float) (yaw - 1.3 * amplitude * (1 / 6.3 * (data.getDouble("fire_rotx_time") - 0.5)) * Math.sin(6.3 * (data.getDouble("fire_rotx_time") - 0.5)) * (3 - Math.pow(data.getDouble("fire_rotx_time"), 2)) + 1 * Mth.clamp(0.3 - data.getDouble("fire_rotx_time"), 0, 1) * (2 * Math.random() - 1))); + event.setPitch((float) (pitch + 1.3 * amplitude * (1 / 6.3 * (data.getDouble("fire_rotx_time") - 0.5)) * Math.sin(6.3 * (data.getDouble("fire_rotx_time") - 0.5)) * (3 - Math.pow(data.getDouble("fire_rotx_time"), 2)) + 1 * Mth.clamp(0.3 - data.getDouble("fire_rotx_time"), 0, 1) * (2 * Math.random() - 1))); + event.setRoll((float) (roll + 4.2 * amplitude * (1 / 6.3 * (data.getDouble("fire_rotx_time") - 0.5)) * Math.sin(6.3 * (data.getDouble("fire_rotx_time") - 0.5)) * (3 - Math.pow(data.getDouble("fire_rotx_time"), 2)) + 3 * Mth.clamp(0.5 - data.getDouble("fire_rotx_time"), 0, 0.5) * (2 * Math.random() - 1))); } else if ((capability.orElse(new TargetModVariables.PlayerVariables())).recoilHorizon <= 0) { - event.setYaw((float) (yaw + 1.3 * amplitude * (1 / 6.3 * (data.getDouble("fire_rotx_time") - 0.5)) * Math.sin(6.3 * (data.getDouble("fire_rotx_time") - 0.5)) * (3 - Math.pow(data.getDouble("fire_rotx_time") , 2)) + 1 * Mth.clamp(0.3 - data.getDouble("fire_rotx_time"),0,1) * (2 * Math.random() - 1))); - event.setPitch((float) (pitch - 1.3 * amplitude * (1 / 6.3 * (data.getDouble("fire_rotx_time") - 0.5)) * Math.sin(6.3 * (data.getDouble("fire_rotx_time") - 0.5)) * (3 - Math.pow(data.getDouble("fire_rotx_time") , 2)) + 1 * Mth.clamp(0.3 - data.getDouble("fire_rotx_time"),0,1) * (2 * Math.random() - 1))); - event.setRoll((float) (roll - 4.2 * amplitude * (1 / 6.3 * (data.getDouble("fire_rotx_time") - 0.5)) * Math.sin(6.3 * (data.getDouble("fire_rotx_time") - 0.5)) * (3 - Math.pow(data.getDouble("fire_rotx_time") , 2)) + 3 * Mth.clamp(0.5 - data.getDouble("fire_rotx_time"),0,0.5) * (2 * Math.random() - 1))); + event.setYaw((float) (yaw + 1.3 * amplitude * (1 / 6.3 * (data.getDouble("fire_rotx_time") - 0.5)) * Math.sin(6.3 * (data.getDouble("fire_rotx_time") - 0.5)) * (3 - Math.pow(data.getDouble("fire_rotx_time"), 2)) + 1 * Mth.clamp(0.3 - data.getDouble("fire_rotx_time"), 0, 1) * (2 * Math.random() - 1))); + event.setPitch((float) (pitch - 1.3 * amplitude * (1 / 6.3 * (data.getDouble("fire_rotx_time") - 0.5)) * Math.sin(6.3 * (data.getDouble("fire_rotx_time") - 0.5)) * (3 - Math.pow(data.getDouble("fire_rotx_time"), 2)) + 1 * Mth.clamp(0.3 - data.getDouble("fire_rotx_time"), 0, 1) * (2 * Math.random() - 1))); + event.setRoll((float) (roll - 4.2 * amplitude * (1 / 6.3 * (data.getDouble("fire_rotx_time") - 0.5)) * Math.sin(6.3 * (data.getDouble("fire_rotx_time") - 0.5)) * (3 - Math.pow(data.getDouble("fire_rotx_time"), 2)) + 3 * Mth.clamp(0.5 - data.getDouble("fire_rotx_time"), 0, 0.5) * (2 * Math.random() - 1))); } } if (0 <= data.getDouble("firetime") && data.getDouble("firetime") <= 0.25) { @@ -375,12 +373,12 @@ public class ClientEventHandler { @SubscribeEvent public static void onFovUpdate(ViewportEvent.ComputeFov event) { Player player = Minecraft.getInstance().player; - ItemStack stack = player.getMainHandItem(); - if (player == null) { return; } + ItemStack stack = player.getMainHandItem(); + if (stack.is(TargetModTags.Items.GUN)) { if (!event.usedConfiguredFov()) { return; diff --git a/src/main/java/net/mcreator/target/event/GunEventHandler.java b/src/main/java/net/mcreator/target/event/GunEventHandler.java index d3dcc3530..49f7cf9f4 100644 --- a/src/main/java/net/mcreator/target/event/GunEventHandler.java +++ b/src/main/java/net/mcreator/target/event/GunEventHandler.java @@ -27,12 +27,12 @@ public class GunEventHandler { @SubscribeEvent public static void onPlayerTick(TickEvent.PlayerTickEvent event) { Player player = event.player; - ItemStack stack = player.getMainHandItem(); - if (player == null) { return; } + ItemStack stack = player.getMainHandItem(); + if (event.phase == TickEvent.Phase.END && stack.is(TargetModTags.Items.GUN)) { handleGunFire(player); handleMiniGunFire(player); @@ -332,7 +332,7 @@ public class GunEventHandler { projectile.monster_multiple(monster_multiple); projectile.setPos(player.getX() - 0.1 * player.getLookAngle().x, player.getEyeY() - 0.1 - 0.1 * player.getLookAngle().y, player.getZ() + -0.1 * player.getLookAngle().z); - projectile.shoot(player.getLookAngle().x, player.getLookAngle().y + 0.0005f , player.getLookAngle().z, 1 * (float) heldItem.getOrCreateTag().getDouble("velocity"), + projectile.shoot(player.getLookAngle().x, player.getLookAngle().y + 0.0005f, player.getLookAngle().z, 1 * (float) heldItem.getOrCreateTag().getDouble("velocity"), (float) player.getAttributeBaseValue(TargetModAttributes.SPREAD.get())); player.level().addFreshEntity(projectile); } diff --git a/src/main/java/net/mcreator/target/event/LivingEventHandler.java b/src/main/java/net/mcreator/target/event/LivingEventHandler.java index 9b51c3eec..a32b819cf 100644 --- a/src/main/java/net/mcreator/target/event/LivingEventHandler.java +++ b/src/main/java/net/mcreator/target/event/LivingEventHandler.java @@ -138,13 +138,14 @@ public class LivingEventHandler { } var damagesource = event.getSource(); - var sourceEntity = damagesource.getDirectEntity(); + var sourceEntity = damagesource.getEntity(); if (sourceEntity == null) { return; } - if (sourceEntity instanceof ServerPlayer player && (damagesource.is(DamageTypes.EXPLOSION) || damagesource.is(DamageTypes.PLAYER_EXPLOSION) || damagesource.is(TargetModDamageTypes.MINE))) { + if (sourceEntity instanceof ServerPlayer player && (damagesource.is(DamageTypes.EXPLOSION) || damagesource.is(DamageTypes.PLAYER_EXPLOSION) + || damagesource.is(TargetModDamageTypes.MINE) || damagesource.is(TargetModDamageTypes.PROJECTILE_BOOM))) { SoundTool.playLocalSound(player, TargetModSounds.INDICATION.get(), 1f, 1f); TargetMod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(0, 5)); diff --git a/src/main/java/net/mcreator/target/event/PlayerEventHandler.java b/src/main/java/net/mcreator/target/event/PlayerEventHandler.java index 082c78e90..1d0546b60 100644 --- a/src/main/java/net/mcreator/target/event/PlayerEventHandler.java +++ b/src/main/java/net/mcreator/target/event/PlayerEventHandler.java @@ -48,12 +48,12 @@ public class PlayerEventHandler { @SubscribeEvent public static void onPlayerTick(TickEvent.PlayerTickEvent event) { Player player = event.player; - ItemStack stack = player.getMainHandItem(); - if (player == null) { return; } + ItemStack stack = player.getMainHandItem(); + if (event.phase == TickEvent.Phase.END && stack.is(TargetModTags.Items.GUN)) { handlePlayerProne(player); handlePlayerSprint(player); @@ -282,10 +282,9 @@ public class PlayerEventHandler { Runnable recoilRunnable = () -> { while (recoilTimer[0] < recoilDuration) { - /** - * 开火动画计时器 + /* + 开火动画计时器 */ - if ((player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).firing > 0) { player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { capability.firing = (player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).firing - 0.1; @@ -298,10 +297,9 @@ public class PlayerEventHandler { }); } - /** - * 计算后坐力 + /* + 计算后坐力 */ - float rx, ry; if (player.isShiftKeyDown() && player.getBbHeight() >= 1 && player.getPersistentData().getDouble("prone") == 0) { rx = 0.7f; @@ -345,10 +343,9 @@ public class PlayerEventHandler { player.yRotO = player.getYRot(); } - /** - * 计算散布 + /* + 计算散布 */ - ItemStack stack = player.getMainHandItem(); double basic = stack.getOrCreateTag().getDouble("dev"); diff --git a/src/main/java/net/mcreator/target/init/TargetModDamageTypes.java b/src/main/java/net/mcreator/target/init/TargetModDamageTypes.java index 92782e85c..b10360242 100644 --- a/src/main/java/net/mcreator/target/init/TargetModDamageTypes.java +++ b/src/main/java/net/mcreator/target/init/TargetModDamageTypes.java @@ -23,6 +23,7 @@ public class TargetModDamageTypes { public static final ResourceKey MINE = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(TargetMod.MODID, "mine")); public static final ResourceKey BEAST = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(TargetMod.MODID, "beast")); public static final ResourceKey SHOCK = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(TargetMod.MODID, "shock")); + public static final ResourceKey PROJECTILE_BOOM = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(TargetMod.MODID, "projectile_boom")); 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); @@ -48,6 +49,10 @@ public class TargetModDamageTypes { return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(SHOCK), attacker); } + public static DamageSource causeProjectileBoomDamage(RegistryAccess registryAccess, @Nullable Entity directEntity, @Nullable Entity attacker) { + return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(PROJECTILE_BOOM), directEntity, attacker); + } + private static class DamageMessages extends DamageSource { public DamageMessages(Holder.Reference typeReference) { super(typeReference); diff --git a/src/main/java/net/mcreator/target/mobeffect/ShockMobEffect.java b/src/main/java/net/mcreator/target/mobeffect/ShockMobEffect.java index 0af2d1d64..0e42fa538 100644 --- a/src/main/java/net/mcreator/target/mobeffect/ShockMobEffect.java +++ b/src/main/java/net/mcreator/target/mobeffect/ShockMobEffect.java @@ -1,7 +1,6 @@ package net.mcreator.target.mobeffect; import net.mcreator.target.TargetMod; -import net.mcreator.target.entity.ClaymoreEntity; import net.mcreator.target.init.TargetModDamageTypes; import net.mcreator.target.init.TargetModMobEffects; import net.mcreator.target.init.TargetModSounds; @@ -12,7 +11,6 @@ import net.minecraft.sounds.SoundSource; import net.minecraft.util.Mth; import net.minecraft.util.RandomSource; import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.damagesource.DamageTypes; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectCategory; import net.minecraft.world.effect.MobEffectInstance; diff --git a/src/main/java/net/mcreator/target/tools/CustomExplosion.java b/src/main/java/net/mcreator/target/tools/CustomExplosion.java index 8d345f9a8..922698ec3 100644 --- a/src/main/java/net/mcreator/target/tools/CustomExplosion.java +++ b/src/main/java/net/mcreator/target/tools/CustomExplosion.java @@ -56,6 +56,10 @@ public class CustomExplosion extends Explosion { this(pLevel, pSource, null, null, damage, pToBlowX, pToBlowY, pToBlowZ, pRadius, 0, pBlockInteraction); } + public CustomExplosion(Level pLevel, @Nullable Entity pSource, @Nullable DamageSource source, float damage, double pToBlowX, double pToBlowY, double pToBlowZ, float pRadius, Explosion.BlockInteraction pBlockInteraction) { + this(pLevel, pSource, source, null, damage, pToBlowX, pToBlowY, pToBlowZ, pRadius, 0, pBlockInteraction); + } + public CustomExplosion(Level pLevel, @Nullable Entity pSource, float damage, double pToBlowX, double pToBlowY, double pToBlowZ, float pRadius, int fireTime, Explosion.BlockInteraction pBlockInteraction) { this(pLevel, pSource, null, null, damage, pToBlowX, pToBlowY, pToBlowZ, pRadius, fireTime, pBlockInteraction); } diff --git a/src/main/resources/assets/target/lang/en_us.json b/src/main/resources/assets/target/lang/en_us.json index 9a1822bc9..761fc1e5d 100644 --- a/src/main/resources/assets/target/lang/en_us.json +++ b/src/main/resources/assets/target/lang/en_us.json @@ -168,6 +168,9 @@ "death.attack.shock": "%1$s was shocked", "death.attack.shock.entity": "%1$s was shocked by %2$s", "death.attack.shock.item": "%1$s was shocked by %2$s", + "death.attack.projectile_boom": "%1$s被轰上了天", + "death.attack.projectile_boom.entity": "%1$s被%2$s轰上了天", + "death.attack.projectile_boom.item": "%1$s被%2$s用%3$s轰上了天", "gui.target.gun_recycle_gui.tooltip_if_guns_level_10you_will_get": "If gun\u0027s level \u003e 10,you will get soul nuggets", "gui.target.gun_recycle_gui.button_dismantle": "Dismantle", diff --git a/src/main/resources/assets/target/lang/zh_cn.json b/src/main/resources/assets/target/lang/zh_cn.json index 0f7ba60c7..c83769c40 100644 --- a/src/main/resources/assets/target/lang/zh_cn.json +++ b/src/main/resources/assets/target/lang/zh_cn.json @@ -168,6 +168,9 @@ "death.attack.shock": "%1$s被电麻了", "death.attack.shock.entity": "%1$s被%2$s电麻了", "death.attack.shock.item": "%1$s被%2$s电麻了", + "death.attack.projectile_boom": "%1$s被轰上了天", + "death.attack.projectile_boom.entity": "%1$s被%2$s轰上了天", + "death.attack.projectile_boom.item": "%1$s被%2$s用%3$s轰上了天", "gui.target.gun_recycle_gui.tooltip_if_guns_level_10you_will_get": "如果枪械熟练度大于10级,你将会获得魂钢粒", "gui.target.gun_recycle_gui.button_dismantle": "拆解", 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 new file mode 100644 index 000000000..27229837a --- /dev/null +++ b/src/main/resources/data/minecraft/tags/damage_type/always_hurts_ender_dragons.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "target:projectile_boom" + ] +} \ 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 new file mode 100644 index 000000000..27229837a --- /dev/null +++ b/src/main/resources/data/minecraft/tags/damage_type/is_explosion.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "target:projectile_boom" + ] +} \ 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 new file mode 100644 index 000000000..27229837a --- /dev/null +++ b/src/main/resources/data/minecraft/tags/damage_type/no_knockback.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "target:projectile_boom" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/target/damage_type/projectile_boom.json b/src/main/resources/data/target/damage_type/projectile_boom.json new file mode 100644 index 000000000..c872cdb8b --- /dev/null +++ b/src/main/resources/data/target/damage_type/projectile_boom.json @@ -0,0 +1,5 @@ +{ + "exhaustion": 0.1, + "message_id": "projectile_boom", + "scaling": "never" +} \ No newline at end of file