From 935d0c7e6619f77f81c53cadf930becedcd73a14 Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Sun, 17 Nov 2024 22:09:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=B7=A6=E8=BD=AE=E6=89=A3?= =?UTF-8?q?=E6=89=B3=E6=9C=BA=E7=9A=84=E8=BF=87=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/projectile/ProjectileEntity.java | 32 +++++- .../superbwarfare/event/GunEventHandler.java | 5 +- .../superbwarfare/init/ModMobEffects.java | 2 + .../mcreator/superbwarfare/init/ModPerks.java | 6 +- .../mobeffect/BurnMobEffect.java | 106 ++++++++++++++++++ .../assets/superbwarfare/lang/en_us.json | 3 + .../assets/superbwarfare/lang/zh_cn.json | 3 + .../models/item/dimension_magazine.json | 6 - .../models/item/incendiary_bullet.json | 6 + .../textures/item/perk/dimension_magazine.png | Bin 706 -> 0 bytes .../textures/item/perk/incendiary_bullet.png | Bin 0 -> 1044 bytes .../textures/mob_effect/burn.png | Bin 0 -> 232 bytes .../textures/mob_effect/doublejumpeffect.png | Bin 158 -> 0 bytes .../perk/incendiary_bullet_perk_crafting.json | 24 ++++ 14 files changed, 183 insertions(+), 10 deletions(-) create mode 100644 src/main/java/net/mcreator/superbwarfare/mobeffect/BurnMobEffect.java delete mode 100644 src/main/resources/assets/superbwarfare/models/item/dimension_magazine.json create mode 100644 src/main/resources/assets/superbwarfare/models/item/incendiary_bullet.json delete mode 100644 src/main/resources/assets/superbwarfare/textures/item/perk/dimension_magazine.png create mode 100644 src/main/resources/assets/superbwarfare/textures/item/perk/incendiary_bullet.png create mode 100644 src/main/resources/assets/superbwarfare/textures/mob_effect/burn.png delete mode 100644 src/main/resources/assets/superbwarfare/textures/mob_effect/doublejumpeffect.png create mode 100644 src/main/resources/data/superbwarfare/recipes/perk/incendiary_bullet_perk_crafting.json diff --git a/src/main/java/net/mcreator/superbwarfare/entity/projectile/ProjectileEntity.java b/src/main/java/net/mcreator/superbwarfare/entity/projectile/ProjectileEntity.java index f7d2910c5..58c85a454 100644 --- a/src/main/java/net/mcreator/superbwarfare/entity/projectile/ProjectileEntity.java +++ b/src/main/java/net/mcreator/superbwarfare/entity/projectile/ProjectileEntity.java @@ -100,6 +100,9 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa private int jhpLevel = 0; private boolean heBullet = false; private int heLevel = 0; + private boolean fireBullet = false; + private int fireLevel = 0; + private boolean dragonBreath = false; private Supplier mobEffect = () -> null; public ProjectileEntity(EntityType p_i50159_1_, Level p_i50159_2_) { @@ -294,9 +297,19 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa this.setDeltaMovement(vec.x, vec.y - 0.02, vec.z); - if (this.tickCount > 40) { + if (this.tickCount > (fireBullet ? 10 : 40)) { this.discard(); } + + if (fireBullet && dragonBreath && this.level() instanceof ServerLevel serverLevel) { + for (int index0 = 0; index0 < 1; index0++) { + double randomPos = 2 * (Math.random() - 0.5); + ParticleTool.sendParticle(serverLevel, ParticleTypes.FLAME, this.getX(), this.getY(), this.getZ(), + 1, randomPos, randomPos, randomPos, 0.001, true); + ParticleTool.sendParticle(serverLevel, ModParticleTypes.FIRE_STAR.get(), this.getX(), this.getY(), this.getZ(), + 1, randomPos, randomPos, randomPos, 0.001, true); + } + } } @Override @@ -339,6 +352,10 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa if (heBullet) { explosionBulletBlock(this, this.damage, heLevel, monsterMultiple + 1, hitVec); } + if (fireBullet && this.level() instanceof ServerLevel serverLevel) { + ParticleTool.sendParticle(serverLevel, ParticleTypes.LAVA, hitVec.x, hitVec.y, hitVec.z, + 3, 0, 0, 0, 0.5, true); + } } if (result instanceof ExtendedEntityRayTraceResult entityHitResult) { @@ -502,6 +519,12 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa explosionBulletEntity(this, entity, this.damage, heLevel, mMultiple); } + if (fireBullet) { + if (!entity.level().isClientSide() && entity instanceof LivingEntity living) { + living.addEffect(new MobEffectInstance(ModMobEffects.BURN.get(), 60 + fireLevel * 20, fireLevel, false , false), this.shooter); + } + } + if (headshot) { if (!this.shooter.level().isClientSide() && this.shooter instanceof ServerPlayer player) { var holder = Holder.direct(ModSounds.HEADSHOT.get()); @@ -802,6 +825,13 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa return this; } + public ProjectileEntity fireBullet(boolean fireBullet, int fireLevel, boolean dragonBreath) { + this.fireBullet = true; + this.fireLevel = fireLevel; + this.dragonBreath = dragonBreath; + return this; + } + public ProjectileEntity zoom(boolean zoom) { this.zoom = zoom; return this; diff --git a/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java index 736e6d54e..1b2b5ef69 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java @@ -219,6 +219,9 @@ public class GunEventHandler { } else if (perk == ModPerks.HE_BULLET.get()) { int level = PerkHelper.getItemPerkLevel(perk, heldItem); projectile.heBullet(true, level); + } else if (perk == ModPerks.INCENDIARY_BULLET.get()) { + int level = PerkHelper.getItemPerkLevel(perk, heldItem); + projectile.fireBullet(true, level, heldItem.is(ModTags.Items.SHOTGUN)); } var dmgPerk = PerkHelper.getPerkByType(heldItem, Perk.Type.DAMAGE); @@ -228,7 +231,7 @@ public class GunEventHandler { } 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.001f, player.getLookAngle().z, velocity, + projectile.shoot(player.getLookAngle().x, player.getLookAngle().y + 0.001f, player.getLookAngle().z, heldItem.is(ModTags.Items.SHOTGUN) && perk == ModPerks.INCENDIARY_BULLET.get() ? 4.5f : velocity, (float) spared); player.level().addFreshEntity(projectile); } diff --git a/src/main/java/net/mcreator/superbwarfare/init/ModMobEffects.java b/src/main/java/net/mcreator/superbwarfare/init/ModMobEffects.java index 610d5df70..8cf798be2 100644 --- a/src/main/java/net/mcreator/superbwarfare/init/ModMobEffects.java +++ b/src/main/java/net/mcreator/superbwarfare/init/ModMobEffects.java @@ -1,6 +1,7 @@ package net.mcreator.superbwarfare.init; import net.mcreator.superbwarfare.ModUtils; +import net.mcreator.superbwarfare.mobeffect.BurnMobEffect; import net.mcreator.superbwarfare.mobeffect.ShockMobEffect; import net.minecraft.world.effect.MobEffect; import net.minecraftforge.registries.DeferredRegister; @@ -11,4 +12,5 @@ public class ModMobEffects { public static final DeferredRegister REGISTRY = DeferredRegister.create(ForgeRegistries.MOB_EFFECTS, ModUtils.MODID); public static final RegistryObject SHOCK = REGISTRY.register("shock", ShockMobEffect::new); + public static final RegistryObject BURN = REGISTRY.register("burn", BurnMobEffect::new); } diff --git a/src/main/java/net/mcreator/superbwarfare/init/ModPerks.java b/src/main/java/net/mcreator/superbwarfare/init/ModPerks.java index de115ead7..5e06faae9 100644 --- a/src/main/java/net/mcreator/superbwarfare/init/ModPerks.java +++ b/src/main/java/net/mcreator/superbwarfare/init/ModPerks.java @@ -31,9 +31,9 @@ public class ModPerks { public static final RegistryObject AP_BULLET = AMMO_PERKS.register("ap_bullet", () -> new AmmoPerk(new AmmoPerk.Builder("ap_bullet", Perk.Type.AMMO).bypassArmorRate(0.4f).damageRate(0.9f).speedRate(1.2f).slug(true).rgb(230, 70, 35))); public static final RegistryObject JHP_BULLET = AMMO_PERKS.register("jhp_bullet", - () -> new AmmoPerk(new AmmoPerk.Builder("jhp_bullet", Perk.Type.AMMO).bypassArmorRate(-0.2f).damageRate(1.1f).speedRate(0.9f).slug(true).rgb(230, 131, 65))); + () -> new AmmoPerk(new AmmoPerk.Builder("jhp_bullet", Perk.Type.AMMO).bypassArmorRate(-0.2f).damageRate(1.1f).speedRate(0.95f).slug(true).rgb(230, 131, 65))); public static final RegistryObject HE_BULLET = AMMO_PERKS.register("he_bullet", - () -> new AmmoPerk(new AmmoPerk.Builder("he_bullet", Perk.Type.AMMO).bypassArmorRate(-0.3f).damageRate(0.5f).speedRate(0.6f).slug(true).rgb(240, 20, 10))); + () -> new AmmoPerk(new AmmoPerk.Builder("he_bullet", Perk.Type.AMMO).bypassArmorRate(-0.3f).damageRate(0.5f).speedRate(0.85f).slug(true).rgb(240, 20, 10))); public static final RegistryObject SILVER_BULLET = AMMO_PERKS.register("silver_bullet", () -> new AmmoPerk(new AmmoPerk.Builder("silver_bullet", Perk.Type.AMMO).bypassArmorRate(0.05f).damageRate(0.8f).speedRate(1.1f).rgb(87, 166, 219))); public static final RegistryObject POISONOUS_BULLET = AMMO_PERKS.register("poisonous_bullet", @@ -42,6 +42,8 @@ public class ModPerks { public static final RegistryObject BEAST_BULLET = AMMO_PERKS.register("beast_bullet", () -> new AmmoPerk(new AmmoPerk.Builder("beast_bullet", Perk.Type.AMMO).bypassArmorRate(0.0f).rgb(134, 65, 14))); public static final RegistryObject LONGER_WIRE = AMMO_PERKS.register("longer_wire", () -> new Perk("longer_wire", Perk.Type.AMMO)); + public static final RegistryObject INCENDIARY_BULLET = AMMO_PERKS.register("incendiary_bullet", + () -> new AmmoPerk(new AmmoPerk.Builder("incendiary_bullet", Perk.Type.AMMO).bypassArmorRate(-0.4f).damageRate(0.7f).speedRate(0.75f).slug(false).rgb(230, 131, 65))); /** * Functional Perks diff --git a/src/main/java/net/mcreator/superbwarfare/mobeffect/BurnMobEffect.java b/src/main/java/net/mcreator/superbwarfare/mobeffect/BurnMobEffect.java new file mode 100644 index 000000000..e82016bac --- /dev/null +++ b/src/main/java/net/mcreator/superbwarfare/mobeffect/BurnMobEffect.java @@ -0,0 +1,106 @@ +package net.mcreator.superbwarfare.mobeffect; + +import net.mcreator.superbwarfare.ModUtils; +import net.mcreator.superbwarfare.init.ModMobEffects; +import net.mcreator.superbwarfare.init.ModSounds; +import net.mcreator.superbwarfare.network.message.ClientIndicatorMessage; +import net.minecraft.core.registries.Registries; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundSource; +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; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraftforge.event.entity.living.LivingEvent; +import net.minecraftforge.event.entity.living.MobEffectEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.network.PacketDistributor; + +@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.FORGE) +public class BurnMobEffect extends MobEffect { + public BurnMobEffect() { + super(MobEffectCategory.HARMFUL, -12708330); + } + + @Override + public void applyEffectTick(LivingEntity entity, int amplifier) { + Entity attacker; + if (!entity.getPersistentData().contains("BurnAttacker")) { + attacker = null; + } else { + attacker = entity.level().getEntity(entity.getPersistentData().getInt("BurnAttacker")); + } + + entity.hurt(new DamageSource(entity.level().registryAccess().registryOrThrow(Registries.DAMAGE_TYPE).getHolderOrThrow(DamageTypes.IN_FIRE), attacker), 0.6f + (0.3f * amplifier)); + entity.invulnerableTime = 0; + + if (attacker instanceof ServerPlayer player) { + player.level().playSound(null, player.blockPosition(), ModSounds.INDICATION.get(), SoundSource.VOICE, 1, 1); + ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(0, 5)); + } + + } + + @Override + public boolean isDurationEffectTick(int duration, int amplifier) { + return duration % 20 == 0; + } + + @SubscribeEvent + public static void onEffectAdded(MobEffectEvent.Added event) { + LivingEntity living = event.getEntity(); + + MobEffectInstance instance = event.getEffectInstance(); + if (!instance.getEffect().equals(ModMobEffects.BURN.get())) { + return; + } + + living.hurt(new DamageSource(living.level().registryAccess().registryOrThrow(Registries.DAMAGE_TYPE).getHolderOrThrow(DamageTypes.IN_FIRE), event.getEffectSource()), 0.6f + (0.3f * instance.getAmplifier())); + living.invulnerableTime = 0; + + if (event.getEffectSource() instanceof LivingEntity source) { + living.getPersistentData().putInt("BurnAttacker", source.getId()); + } + } + + @SubscribeEvent + public static void onEffectExpired(MobEffectEvent.Expired event) { + LivingEntity living = event.getEntity(); + + MobEffectInstance instance = event.getEffectInstance(); + if (instance == null) { + return; + } + + if (instance.getEffect().equals(ModMobEffects.BURN.get())) { + living.getPersistentData().remove("BurnAttacker"); + } + } + + @SubscribeEvent + public static void onEffectRemoved(MobEffectEvent.Remove event) { + LivingEntity living = event.getEntity(); + + MobEffectInstance instance = event.getEffectInstance(); + if (instance == null) { + return; + } + + if (instance.getEffect().equals(ModMobEffects.BURN.get())) { + living.getPersistentData().remove("BurnAttacker"); + } + } + + @SubscribeEvent + public static void onLivingTick(LivingEvent.LivingTickEvent event) { + LivingEntity living = event.getEntity(); + + if (living.hasEffect(ModMobEffects.BURN.get())) { + living.setSecondsOnFire(1); + } + } +} diff --git a/src/main/resources/assets/superbwarfare/lang/en_us.json b/src/main/resources/assets/superbwarfare/lang/en_us.json index a07fffeda..00678cf3f 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -247,6 +247,8 @@ "des.superbwarfare.jhp_bullet": "Increases damage against unarmored targets, but the damage decreases rapidly as the armor value rises", "item.superbwarfare.he_bullet": "Explosion Bullet", "des.superbwarfare.he_bullet": "The bullet will explode after hitting the target", + "item.superbwarfare.incendiary_bullet": "Incendiary Bullet", + "des.superbwarfare.incendiary_bullet": "The bullet will ignites the target after hitting the target", "item.superbwarfare.heal_clip": "Heal Clip", "des.superbwarfare.heal_clip": "Reloading after dealing a final blow will heal you and your nearby allies", @@ -340,6 +342,7 @@ "key.superbwarfare.edit_grip": "Switch Grip", "effect.superbwarfare.shock": "Shock", + "effect.superbwarfare.burn": "Burn", "item.minecraft.potion.effect.superbwarfare_shock": "Potion of Shock", "item.minecraft.splash_potion.effect.superbwarfare_shock": "Splash Potion of Shock", "item.minecraft.lingering_potion.effect.superbwarfare_shock": "Lingering Potion of Shock", diff --git a/src/main/resources/assets/superbwarfare/lang/zh_cn.json b/src/main/resources/assets/superbwarfare/lang/zh_cn.json index 953bc467f..2375abf02 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -247,6 +247,8 @@ "des.superbwarfare.jhp_bullet": "增加对无护甲目标的伤害,但伤害会随着护甲值上升而迅速降低", "item.superbwarfare.he_bullet": "爆炸子弹", "des.superbwarfare.he_bullet": "子弹在命中后会爆炸", + "item.superbwarfare.incendiary_bullet": "燃烧弹", + "des.superbwarfare.incendiary_bullet": "子弹在命中后点燃目标", "item.superbwarfare.heal_clip": "治疗弹匣", "des.superbwarfare.heal_clip": "最后一击后短时间内填装,可治疗自身和附近队友", @@ -340,6 +342,7 @@ "key.superbwarfare.edit_grip": "切换握把", "effect.superbwarfare.shock": "电击", + "effect.superbwarfare.burn": "点燃", "item.minecraft.potion.effect.superbwarfare_shock": "电击药水", "item.minecraft.splash_potion.effect.superbwarfare_shock": "喷溅型电击药水", "item.minecraft.lingering_potion.effect.superbwarfare_shock": "滞留型电击药水", diff --git a/src/main/resources/assets/superbwarfare/models/item/dimension_magazine.json b/src/main/resources/assets/superbwarfare/models/item/dimension_magazine.json deleted file mode 100644 index 85842381b..000000000 --- a/src/main/resources/assets/superbwarfare/models/item/dimension_magazine.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "superbwarfare:item/perk/dimension_magazine" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/superbwarfare/models/item/incendiary_bullet.json b/src/main/resources/assets/superbwarfare/models/item/incendiary_bullet.json new file mode 100644 index 000000000..5e2f7c675 --- /dev/null +++ b/src/main/resources/assets/superbwarfare/models/item/incendiary_bullet.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "superbwarfare:item/perk/incendiary_bullet" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/superbwarfare/textures/item/perk/dimension_magazine.png b/src/main/resources/assets/superbwarfare/textures/item/perk/dimension_magazine.png deleted file mode 100644 index 0d83a37d0fbe3b6651ff2b46df1a859be3a9270b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 706 zcmV;z0zLhSP)D<=Ygx^}0SE zHqF5r#RCA#fGCOp01xN0)D6D(dv;vcwV9|avfJ(M&bI^YNVLU2zkFSE?l%P=Z;vs5 zu55s3;$r|8;6KwFlnihzJ{C8jBW=Kp#8ZA(XqJ=#0`W$BhDwnqF#x1lrPL7{ag!UK zjd?Pp447fh8#7;MfUfu=Po#rNvxydBU4; zXE^seaqD|`=hQi2&;Xe+Kh|4~7%F`4PXT)xEXxwWtrQ*+-%0r?g5`R%llp>HptEd# zzCW>RbzMiD3{aizWqO&)fVo5SPW!sv5RhH!EN6nXm8Q22Sjak0GOd#VzKI_hdTfOn zqmu!;;?t}e3`+Ggn~+Q4r4kHq9e``RH=rq0o+0M`MyCK%v40M`TqTnAv0PzO*NE!hAPt2aPvqhudb{%zj`Ap>-8(0=(qd|^2o zj1K`BL*{^S1KLpE)><%1ZGV7GCe9Ah{(wmhXyY(D7)}k~v5+0}8v-&I-Yqg%7Rwqi zv|rE3PH`fm&jdOdFlW(#0*g}h+t0VV*qrZgM__q-t7sx5U->q48?;oCrXwI~h~0uZ0K44wu?4RY;0NXWWC$?StN6~U{BpqRCP&3!BZsL$_r>(QSE zX#1Qp;d-qVObE~fJZ|pJ0S#v9wQ$~QMwk$wO=<5Ro+tjT5jNMBbF&t)K$QzCKU`g)uePiLjbNk$_SzZ;9f$_L2-O!A*ms z1~ul@$~q7^GIF1u9`A-(uJ8L!bOFxXYo3ZnDvJb9v@8e3fK+H}^e(LiQ6Tw)W*j&O z);@Kw{*d^hvDB))K?I)4=TNhr5D6&xtJQ>S38+yx1r!8pP!sTw>@aSdPR)zE0GicV z`jGl{+Zd4siea4%Y9UpkTxJ2Z!;(-Q?u3-#(yX)uH33%T8C|}5<`^mhIKef`&Ui^J}c8;AJUig=2KnL@J|Mh?pfA3eXf)k#Rj_f?U8e7)e6sim7Q$&`TyL8ERdYBAN!s zR0i(42Sf|-9Mn=PY^gla4D|pl(6xXUnr)7vDEajqu2*dV9!ZZ?QI8d&nSd6R9W6X^ z2(t@#nP&?#*Yvq)44A{mC0yJrphWfS@+}F72loDk0C|rIde?~~0DVQ~;=d0 O0000U;qFB diff --git a/src/main/resources/data/superbwarfare/recipes/perk/incendiary_bullet_perk_crafting.json b/src/main/resources/data/superbwarfare/recipes/perk/incendiary_bullet_perk_crafting.json new file mode 100644 index 000000000..b69452ebd --- /dev/null +++ b/src/main/resources/data/superbwarfare/recipes/perk/incendiary_bullet_perk_crafting.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "bbb", + "cac", + "bbb" + ], + "key": { + "a": { + "item": "superbwarfare:empty_perk" + }, + "b": { + "item":"minecraft:blaze_powder" + }, + "c": { + "item":"minecraft:dragon_breath" + } + }, + "result": { + "item": "superbwarfare:incendiary_bullet", + "count": 1 + } +} \ No newline at end of file