From 2c4bcef20599a9fa8014277fdb33d9c24f5ebd8d Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Wed, 17 Jul 2024 19:28:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E7=A9=BF=E9=80=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../target/entity/CannonShellEntity.java | 60 ++++++++++++++++-- .../mcreator/target/entity/Mk42Entity.java | 15 ++++- .../mcreator/target/init/TargetModItems.java | 1 + .../target/item/common/ammo/Ap5Inches.java | 20 ++++++ .../mcreator/target/tools/ParticleTool.java | 2 +- .../target/models/item/ap_5_inches.json | 6 ++ .../target/models/item/he_5_inches.json | 2 +- .../textures/item/shells/ap_5_inches.png | Bin 0 -> 3224 bytes .../item/{ => shells}/he_5_inches.png | Bin 9 files changed, 97 insertions(+), 9 deletions(-) create mode 100644 src/main/java/net/mcreator/target/item/common/ammo/Ap5Inches.java create mode 100644 src/main/resources/assets/target/models/item/ap_5_inches.json create mode 100644 src/main/resources/assets/target/textures/item/shells/ap_5_inches.png rename src/main/resources/assets/target/textures/item/{ => shells}/he_5_inches.png (100%) diff --git a/src/main/java/net/mcreator/target/entity/CannonShellEntity.java b/src/main/java/net/mcreator/target/entity/CannonShellEntity.java index a8d06c150..b27771ed7 100644 --- a/src/main/java/net/mcreator/target/entity/CannonShellEntity.java +++ b/src/main/java/net/mcreator/target/entity/CannonShellEntity.java @@ -1,10 +1,7 @@ package net.mcreator.target.entity; import net.mcreator.target.TargetMod; -import net.mcreator.target.init.TargetModDamageTypes; -import net.mcreator.target.init.TargetModEntities; -import net.mcreator.target.init.TargetModItems; -import net.mcreator.target.init.TargetModSounds; +import net.mcreator.target.init.*; import net.mcreator.target.network.message.ClientIndicatorMessage; import net.mcreator.target.tools.CustomExplosion; import net.mcreator.target.tools.ParticleTool; @@ -22,10 +19,13 @@ import net.minecraft.world.entity.projectile.ThrowableItemProjectile; import net.minecraft.world.item.Item; import net.minecraft.world.level.Explosion; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.StonecutterBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.EntityHitResult; +import net.minecraft.world.phys.Vec3; import net.minecraftforge.network.NetworkHooks; import net.minecraftforge.network.PacketDistributor; import net.minecraftforge.network.PlayMessages; @@ -95,7 +95,21 @@ public class CannonShellEntity extends ThrowableItemProjectile { if (this.level() instanceof ServerLevel) { causeExplode(); } - this.discard(); + + Vec3 vec = this.getDeltaMovement(); + double vec_x = vec.x; + double vec_y = vec.y; + double vec_z = vec.z; + + this.setDeltaMovement(vec_x - 0.02 * vec_x, vec_y - 0.02 * vec_y, vec_z - 0.02 * vec_z); + + this.durability -= 2; + if (this.durability <= 0) { + if (!this.level().isClientSide()) { + causeExplode(); + } + this.discard(); + } } @Override @@ -117,6 +131,26 @@ public class CannonShellEntity extends ThrowableItemProjectile { float hardness = this.level().getBlockState(BlockPos.containing(x, y, z)).getBlock().defaultDestroyTime(); this.durability -= (int) hardness; + causeSmallExplode(); + + if (blockState.is(TargetModBlocks.BARBED_WIRE.get()) || blockState.is(Blocks.NETHERITE_BLOCK)) { + this.durability -= 10; + } + + if (blockState.is(Blocks.IRON_BLOCK) || blockState.is(Blocks.COPPER_BLOCK)) { + this.durability -= 5; + } + + if (blockState.is(Blocks.GOLD_BLOCK)) { + this.durability -= 3; + } + + Vec3 vec = this.getDeltaMovement(); + double vec_x = vec.x; + double vec_y = vec.y; + double vec_z = vec.z; + + this.setDeltaMovement(vec_x - 0.02 * vec_x * hardness, vec_y - 0.02 * vec_y * hardness, vec_z - 0.02 * vec_z * hardness); if (this.durability <= 0) { if (!this.level().isClientSide()) { @@ -153,7 +187,21 @@ public class CannonShellEntity extends ThrowableItemProjectile { net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion); explosion.finalizeExplosion(false); - ParticleTool.spawnHugeExplosionParticles(this.level(), this.position()); + if (explosionRadius > 7) { + ParticleTool.spawnHugeExplosionParticles(this.level(), this.position()); + } else { + ParticleTool.spawnMediumExplosionParticles(this.level(), this.position()); + } + } + + private void causeSmallExplode() { + CustomExplosion explosion = new CustomExplosion(this.level(), this, + TargetModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()), 10, + this.getX(), this.getY(), this.getZ(), 3, Explosion.BlockInteraction.KEEP).setDamageMultiplier(1); + explosion.explode(); + net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion); + explosion.finalizeExplosion(false); + ParticleTool.spawnMediumExplosionParticles(this.level(), this.position()); } @Override diff --git a/src/main/java/net/mcreator/target/entity/Mk42Entity.java b/src/main/java/net/mcreator/target/entity/Mk42Entity.java index 4cfa28cf6..f59988fa8 100644 --- a/src/main/java/net/mcreator/target/entity/Mk42Entity.java +++ b/src/main/java/net/mcreator/target/entity/Mk42Entity.java @@ -267,6 +267,7 @@ public class Mk42Entity extends PathfinderMob implements GeoEntity { float explosionDamage = 0; float fireProbability = 0; int fireTime = 0; + int durability = 0; if (player.getMainHandItem().is(TargetModItems.HE_5_INCHES.get())) { hitDamage = 100; @@ -274,17 +275,29 @@ public class Mk42Entity extends PathfinderMob implements GeoEntity { explosionDamage = 200; fireProbability = 0.18F; fireTime = 100; + durability = 0; + } + + if (player.getMainHandItem().is(TargetModItems.AP_5_INCHES.get())) { + hitDamage = 150; + explosionRadius = 3; + explosionDamage = 250; + fireProbability = 0; + fireTime = 0; + durability = 25; } if (!player.isCreative()) { player.getMainHandItem().shrink(1); } - CannonShellEntity entityToSpawn = new CannonShellEntity(TargetModEntities.CANNON_SHELL.get(), player, level, hitDamage, explosionRadius, explosionDamage, fireProbability, fireTime); + CannonShellEntity entityToSpawn = new CannonShellEntity(TargetModEntities.CANNON_SHELL.get(), player, level, hitDamage, explosionRadius, explosionDamage, fireProbability, fireTime).durability(durability); + entityToSpawn.setPos(this.getX(), this.getEyeY(), this.getZ()); entityToSpawn.shoot(this.getLookAngle().x, this.getLookAngle().y, this.getLookAngle().z, 15, 0.1f); level.addFreshEntity(entityToSpawn); + if (player instanceof ServerPlayer serverPlayer) { SoundTool.playLocalSound(serverPlayer, TargetModSounds.MK_42_FIRE_1P.get(), 2, 1); serverPlayer.level().playSound(null, serverPlayer.getOnPos(), TargetModSounds.MK_42_FIRE_3P.get(), SoundSource.PLAYERS, 6, 1); diff --git a/src/main/java/net/mcreator/target/init/TargetModItems.java b/src/main/java/net/mcreator/target/init/TargetModItems.java index 479094937..bf3132115 100644 --- a/src/main/java/net/mcreator/target/init/TargetModItems.java +++ b/src/main/java/net/mcreator/target/init/TargetModItems.java @@ -69,6 +69,7 @@ public class TargetModItems { public static final RegistryObject MORTAR_SHELLS = AMMO.register("mortar_shells", MortarShells::new); public static final RegistryObject ROCKET = AMMO.register("rocket", Rocket::new); public static final RegistryObject HE_5_INCHES = AMMO.register("he_5_inches", He5Inches::new); + public static final RegistryObject AP_5_INCHES = AMMO.register("ap_5_inches", Ap5Inches::new); /** * items diff --git a/src/main/java/net/mcreator/target/item/common/ammo/Ap5Inches.java b/src/main/java/net/mcreator/target/item/common/ammo/Ap5Inches.java new file mode 100644 index 000000000..628fef68d --- /dev/null +++ b/src/main/java/net/mcreator/target/item/common/ammo/Ap5Inches.java @@ -0,0 +1,20 @@ +package net.mcreator.target.item.common.ammo; + +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Rarity; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; + +import java.util.List; + +public class Ap5Inches extends CannonShellItem { + public Ap5Inches() { + super(new Properties().stacksTo(64).rarity(Rarity.RARE)); + } + + @Override + public void appendHoverText(ItemStack itemstack, Level world, List list, TooltipFlag flag) { + super.appendHoverText(itemstack, world, list, flag); + } +} diff --git a/src/main/java/net/mcreator/target/tools/ParticleTool.java b/src/main/java/net/mcreator/target/tools/ParticleTool.java index 473db48b7..627dad12c 100644 --- a/src/main/java/net/mcreator/target/tools/ParticleTool.java +++ b/src/main/java/net/mcreator/target/tools/ParticleTool.java @@ -53,7 +53,7 @@ public class ParticleTool { sendParticle(serverLevel, ParticleTypes.FALLING_WATER, x, y + 3, z, 600, 1.5, 4, 1.5, 1, true); sendParticle(serverLevel, ParticleTypes.BUBBLE_COLUMN_UP, x, y, z, 1000, 3, 0.5, 3, 0.1, true); } - sendParticle(serverLevel, ParticleTypes.EXPLOSION, x, y + 1, z, 100, 1, 1, 1, 1, true); + sendParticle(serverLevel, ParticleTypes.EXPLOSION, x, y + 1, z, 5, 0.7, 0.7, 0.7, 1, true); sendParticle(serverLevel, ParticleTypes.CAMPFIRE_COSY_SMOKE, x, y, z, 80, 0.4, 1, 0.4, 0.02, true); sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, x, y + 1, z, 80, 0.4, 1, 0.4, 0.02, true); sendParticle(serverLevel, ParticleTypes.CAMPFIRE_COSY_SMOKE, x, y, z, 80, 2, 0.001, 2, 0.01, true); diff --git a/src/main/resources/assets/target/models/item/ap_5_inches.json b/src/main/resources/assets/target/models/item/ap_5_inches.json new file mode 100644 index 000000000..073e70b4e --- /dev/null +++ b/src/main/resources/assets/target/models/item/ap_5_inches.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "target:item/shells/ap_5_inches" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/target/models/item/he_5_inches.json b/src/main/resources/assets/target/models/item/he_5_inches.json index c2ee2ae94..dae867c0f 100644 --- a/src/main/resources/assets/target/models/item/he_5_inches.json +++ b/src/main/resources/assets/target/models/item/he_5_inches.json @@ -1,6 +1,6 @@ { "parent": "item/generated", "textures": { - "layer0": "target:item/he_5_inches" + "layer0": "target:item/shells/he_5_inches" } } \ No newline at end of file diff --git a/src/main/resources/assets/target/textures/item/shells/ap_5_inches.png b/src/main/resources/assets/target/textures/item/shells/ap_5_inches.png new file mode 100644 index 0000000000000000000000000000000000000000..596a662829e557d2520a9bca402f7538ca10a121 GIT binary patch literal 3224 zcmc&%35?WK815QHKtVT)V8o*qM2L2JP1|Y1a5%%l5(k$(va=D7x9`2qRA$=Rc6Vnn zL4z3OP{SoeMNtmH6+93%f)LMm6Gg-$2t-Uo1;kARB?ez-W`{+0W#bW>blSf6z5oB- z|Gxi!Z{}1_nK+>TMg1v?8c;PUUPGSe2Y25-86q8eeE;96*cxBNS`HC`W z-*u&zX&f(dqR0{i>$O=v$g!3;tkXgqd(br<-?S|{un3y$W#jLQLs6GD72r92S963%IMGkNC-ayWyt*z!Gs6-rnVr9`3x@78QK zTS9yOgcic6IJa)mUR|4mxf<-*%`U_fT8PJCoy0u92A>Q~FNPC%X|R*FecMahJp`fD zeM%^N)9Arr&~pkD=gc0UK~D+l=rI=q-*)S4JJYG1>P~KSEEZ@*qenKF7P4EtQNi4c zV{jb!ILe5;7-o5u2&qmKbTO=p>Q#J1=lKFOLDY$W5B>mF>x76dD>{EF*hZ$&c3LQc zx?#InK-SL8f)wT)E0y<_Na$6T=K~Aks(6$kR70kTbXgNrQRYQfQDn?U!ePW}s;sgR z7!e}|fK5;oI>*Ot*c|987+**+WJ6-3v>>_&p`vJ_%wi3zERKXD#1KR*R@8_gi&%nK z>$G;AYmzJnnXXm?R)|=H28sYf5Lp0tnH7bAl?X8lQIi1$0T~(~c24?@*%{kS*oeej zV(4JObz+`S1wo2M88U@@V=_={rn%TCgn4ptLhxGzG@cG{vcKLkNsvW`4n(8p8Pt;c zMJOn;EXl?8YBPs3$+$`4<`t+YU3(f&?Fq_Rkf!=1(<8!bD;Atud~5M7W77G|)B!9^ z0tOPrh$%Lk-7InMf>|)zn#Lqtf1%p~%(D%@6}WhOip01#sloNc-vcdw%^o3%s7gdE z0#IN@5XLMpFk&So0whsUkfM^s>xsRnONuT?omuxc*%!^jG_X>b>_;5)_vgbavMQ;3 zm~8^Q!76H4V*xM8tc-xHYKA6Ckf^oW`TV&s{P**Lw$*~&E(&vi3&^<`$TQuAQZU z<77;jPc*K@LdD&xl$*3~(STHW=oF#aFw#04jYLP_BM zSSFbMq&l0(=`46H9Sg}v>0pU1lD#fDHg0<4=?;o2+fo%DUl+M| z`2r!mXzHN5whg`Ni^}x4Gj}|`roMg7&OW1N&3sF>rR@Lw)(d-=DSjg9BwF4zG&WpO{~L`wzRW9M~evoVjdwbRu=^*#0)J&zFz! z{+#=^j-;+z`qS{G4cWD?jm_-)XxiK*cu3okW!u|tYTG-rqI`V4*>U{>q0-(kqw=|F5-tpV=PnOIV zX1tIZvggb5DhA$t@XkeC?eIIxsgDmlPknmHiuF@2J#-kY|N6q(VY|_%KiB&67Ei_t zU%lswUoWSs+jo9;+jkeMl`sGD%*IFKYp-2b_tvcsk8oFRzQDP7;&V@L9284^d;G`) zo40?pai2A!{g#T)@1yvK9$a+GrYAr8daACDIr8rMO@4OvfT{bJHjciu;f`scU4uS* f;fxdW9zEm!*W=k&-%ker9jYcwiEp^(=2^c34F*kd literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/target/textures/item/he_5_inches.png b/src/main/resources/assets/target/textures/item/shells/he_5_inches.png similarity index 100% rename from src/main/resources/assets/target/textures/item/he_5_inches.png rename to src/main/resources/assets/target/textures/item/shells/he_5_inches.png