From c69536f32c85c422e5055fcda28b3bd2859c519d Mon Sep 17 00:00:00 2001 From: Atsuishio <842960157@qq.com> Date: Mon, 7 Jul 2025 16:22:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90M18=E7=83=9F=E9=9B=BE?= =?UTF-8?q?=E5=BC=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/M18SmokeGrenadeEntityModel.java | 6 +- .../client/particle/CustomSmokeParticle.java | 2 +- .../entity/projectile/HandGrenadeEntity.java | 4 +- .../projectile/M18SmokeGrenadeEntity.java | 128 +++++-- .../entity/projectile/RgoGrenadeEntity.java | 3 +- .../entity/projectile/SmokeDecoyEntity.java | 32 +- .../superbwarfare/init/ModEntities.java | 6 +- .../superbwarfare/init/ModSounds.java | 1 + .../superbwarfare/item/M18SmokeGrenade.java | 7 +- .../geo/m18_smoke_grenade.geo.json | 243 ++++++++++++ .../assets/superbwarfare/lang/en_us.json | 1 + .../assets/superbwarfare/lang/zh_cn.json | 1 + .../models/item/m18_smoke_grenade.json | 346 ++++++++++++++++++ .../assets/superbwarfare/sounds.json | 8 + .../sounds/smoke_grenade_release.ogg | Bin 0 -> 28211 bytes .../superbwarfare/textures/item/m_18.png | Bin 0 -> 973 bytes ...afting.json => hand_grenade_crafting.json} | 0 .../recipe/m18_smoke_grenade_crafting.json | 27 ++ 18 files changed, 758 insertions(+), 57 deletions(-) create mode 100644 src/main/resources/assets/superbwarfare/geo/m18_smoke_grenade.geo.json create mode 100644 src/main/resources/assets/superbwarfare/models/item/m18_smoke_grenade.json create mode 100644 src/main/resources/assets/superbwarfare/sounds/smoke_grenade_release.ogg create mode 100644 src/main/resources/assets/superbwarfare/textures/item/m_18.png rename src/main/resources/data/superbwarfare/recipe/{hang_grenade_crafting.json => hand_grenade_crafting.json} (100%) create mode 100644 src/main/resources/data/superbwarfare/recipe/m18_smoke_grenade_crafting.json diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/entity/M18SmokeGrenadeEntityModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/entity/M18SmokeGrenadeEntityModel.java index f8fdab78b..8fa30eab4 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/entity/M18SmokeGrenadeEntityModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/entity/M18SmokeGrenadeEntityModel.java @@ -12,15 +12,13 @@ public class M18SmokeGrenadeEntityModel extends GeoModel return null; } - // TODO 添加烟雾手雷资源文件 - @Override public ResourceLocation getModelResource(M18SmokeGrenadeEntity entity) { - return Mod.loc("geo/rgo_grenade.geo.json"); + return Mod.loc("geo/m18_smoke_grenade.geo.json"); } @Override public ResourceLocation getTextureResource(M18SmokeGrenadeEntity entity) { - return Mod.loc("textures/item/rgo_grenade.png"); + return Mod.loc("textures/item/m_18.png"); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/client/particle/CustomSmokeParticle.java b/src/main/java/com/atsuishio/superbwarfare/client/particle/CustomSmokeParticle.java index 173288320..04ee02e11 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/particle/CustomSmokeParticle.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/particle/CustomSmokeParticle.java @@ -34,7 +34,7 @@ public class CustomSmokeParticle extends TextureSheetParticle { this.quadSize *= 10f; this.lifetime = this.random.nextInt(200) + 600; this.gravity = 0.001f; - this.hasPhysics = false; + this.hasPhysics = true; this.xd = vx * 0.9; this.yd = vy * 0.9; this.zd = vz * 0.9; diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/HandGrenadeEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/HandGrenadeEntity.java index 2a5fc3389..9466bf340 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/HandGrenadeEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/HandGrenadeEntity.java @@ -18,6 +18,7 @@ import net.minecraft.sounds.SoundSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.projectile.ThrowableItemProjectile; import net.minecraft.world.item.Item; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.BellBlock; @@ -32,7 +33,7 @@ import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.animation.AnimatableManager; import software.bernie.geckolib.util.GeckoLibUtil; -public class HandGrenadeEntity extends FastThrowableProjectile implements GeoEntity, ExplosiveProjectile { +public class HandGrenadeEntity extends ThrowableItemProjectile implements GeoEntity, ExplosiveProjectile { private float damage = 1f; private float explosionDamage = ExplosionConfig.M67_GRENADE_EXPLOSION_DAMAGE.get(); @@ -53,7 +54,6 @@ public class HandGrenadeEntity extends FastThrowableProjectile implements GeoEnt public HandGrenadeEntity(LivingEntity entity, Level level, int fuse) { super(ModEntities.HAND_GRENADE.get(), entity, level); this.noCulling = true; - this.fuse = fuse; } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/M18SmokeGrenadeEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/M18SmokeGrenadeEntity.java index 476fa3bf8..62538587d 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/M18SmokeGrenadeEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/M18SmokeGrenadeEntity.java @@ -1,14 +1,27 @@ package com.atsuishio.superbwarfare.entity.projectile; +import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.init.ModEntities; import com.atsuishio.superbwarfare.init.ModItems; +import com.atsuishio.superbwarfare.init.ModParticleTypes; import com.atsuishio.superbwarfare.init.ModSounds; +import com.atsuishio.superbwarfare.network.message.receive.ClientIndicatorMessage; +import com.atsuishio.superbwarfare.tools.ParticleTool; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundSource; import net.minecraft.util.Mth; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.projectile.ThrowableItemProjectile; import net.minecraft.world.item.Item; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.BellBlock; @@ -17,16 +30,18 @@ import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.EntityHitResult; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; +import net.minecraftforge.network.NetworkHooks; +import net.minecraftforge.network.PacketDistributor; +import net.minecraftforge.network.PlayMessages; import org.jetbrains.annotations.NotNull; import software.bernie.geckolib.animatable.GeoEntity; import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.animation.AnimatableManager; import software.bernie.geckolib.util.GeckoLibUtil; -public class M18SmokeGrenadeEntity extends FastThrowableProjectile implements GeoEntity { - - private int fuse = 80; +public class M18SmokeGrenadeEntity extends ThrowableItemProjectile implements GeoEntity { private int count = 8; + private int fuse = 100; private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); public M18SmokeGrenadeEntity(EntityType type, Level world) { @@ -42,7 +57,6 @@ public class M18SmokeGrenadeEntity extends FastThrowableProjectile implements Ge public M18SmokeGrenadeEntity(LivingEntity entity, Level level, int fuse) { super(ModEntities.M18_SMOKE_GRENADE.get(), entity, level); this.noCulling = true; - this.fuse = fuse; } @@ -65,8 +79,13 @@ public class M18SmokeGrenadeEntity extends FastThrowableProjectile implements Ge } @Override - protected @NotNull Item getDefaultItem() { - return ModItems.RGO_GRENADE.get(); + public Packet getAddEntityPacket() { + return NetworkHooks.getEntitySpawningPacket(this); + } + + @Override + protected Item getDefaultItem() { + return ModItems.M18_SMOKE_GRENADE.get(); } @Override @@ -75,30 +94,60 @@ public class M18SmokeGrenadeEntity extends FastThrowableProjectile implements Ge } @Override - protected void onHit(@NotNull HitResult result) { - if (level().isClientSide) return; - + protected void onHit(HitResult result) { switch (result.getType()) { case BLOCK: BlockHitResult blockResult = (BlockHitResult) result; BlockPos resultPos = blockResult.getBlockPos(); BlockState state = this.level().getBlockState(resultPos); + SoundEvent event = state.getBlock().getSoundType(state, this.level(), resultPos, this).getBreakSound(); + double speed = this.getDeltaMovement().length(); + if (speed > 0.1) { + this.level().playSound(null, result.getLocation().x, result.getLocation().y, result.getLocation().z, event, SoundSource.AMBIENT, 1.0F, 1.0F); + } + this.bounce(blockResult.getDirection()); + if (state.getBlock() instanceof BellBlock bell) { bell.attemptToRing(this.level(), resultPos, blockResult.getDirection()); } - releaseSmoke(); break; case ENTITY: EntityHitResult entityResult = (EntityHitResult) result; Entity entity = entityResult.getEntity(); - if (this.getOwner() != null - && this.getOwner().getVehicle() != null - && entity == this.getOwner().getVehicle() - || entity == this.getOwner() - ) return; + if (entity == this.getOwner() || entity == this.getVehicle()) return; + double speed_e = this.getDeltaMovement().length(); + if (speed_e > 0.1) { + if (this.getOwner() instanceof LivingEntity living) { + if (!living.level().isClientSide() && living instanceof ServerPlayer player) { + living.level().playSound(null, living.blockPosition(), ModSounds.INDICATION.get(), SoundSource.VOICE, 1, 1); - releaseSmoke(); + Mod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(0, 5)); + } + } + entity.hurt(entity.damageSources().thrown(this, this.getOwner()), 1); + } + this.bounce(Direction.getNearest(this.getDeltaMovement().x(), this.getDeltaMovement().y(), this.getDeltaMovement().z()).getOpposite()); + this.setDeltaMovement(this.getDeltaMovement().multiply(0.25, 1.0, 0.25)); + break; + default: + break; + } + } + + private void bounce(Direction direction) { + switch (direction.getAxis()) { + case X: + this.setDeltaMovement(this.getDeltaMovement().multiply(-0.5, 0.75, 0.75)); + break; + case Y: + this.setDeltaMovement(this.getDeltaMovement().multiply(0.75, -0.25, 0.75)); + if (this.getDeltaMovement().y() < this.getGravity()) { + this.setDeltaMovement(this.getDeltaMovement().multiply(1, 0, 1)); + } + break; + case Z: + this.setDeltaMovement(this.getDeltaMovement().multiply(0.75, 0.75, -0.5)); break; } } @@ -108,31 +157,40 @@ public class M18SmokeGrenadeEntity extends FastThrowableProjectile implements Ge super.tick(); --this.fuse; - if (this.fuse <= 0) { + if (tickCount > 200) { this.discard(); + } + + if (fuse == -20) { releaseSmoke(); } - } - - // TODO 优化烟雾效果 - public void releaseSmoke() { - var vec3 = new Vec3(1, 1, 0); - - for (int i = 0; i < this.count; i++) { - var decoy = new SmokeDecoyEntity(this.level()); - decoy.setPos(this.getX(), this.getY() + getBbHeight(), this.getZ()); - decoy.decoyShoot(this, vec3.yRot(i * (360f / this.count) * Mth.DEG_TO_RAD), 3, 2); - this.level().addFreshEntity(decoy); + if (fuse == 0) { + this.level().playSound(null, this, ModSounds.SM0KE_GRENADE_RELEASE.get(), this.getSoundSource(), 2, 1); } - this.level().playSound(null, this, ModSounds.DECOY_FIRE.get(), this.getSoundSource(), 1, 1); - this.discard(); + if (fuse <= 0 && tickCount % 2 == 0) { + if (this.level() instanceof ServerLevel serverLevel) { + ParticleTool.sendParticle(serverLevel, ModParticleTypes.CUSTOM_SMOKE.get(), this.getX(), this.getY() + getBbHeight(), this.getZ(), + 8, 0.075, 0.01, 0.075, 0.08, true); + } + } + + if (!this.level().isClientSide() && this.level() instanceof ServerLevel serverLevel) { + ParticleTool.sendParticle(serverLevel, ParticleTypes.SMOKE, this.xo, this.yo, this.zo, + 1, 0, 0, 0, 0.01, true); + } } - @Override - protected double getDefaultGravity() { - return 0.07F; + public void releaseSmoke() { + var vec3 = new Vec3(1, 0.05, 0); + + for (int i = 0; i < this.count; i++) { + var decoy = new SmokeDecoyEntity(ModEntities.SMOKE_DECOY.get(), this.level(), false); + decoy.setPos(this.getX(), this.getY() + getBbHeight(), this.getZ()); + decoy.decoyShoot(this, vec3.yRot(i * (360f / this.count) * Mth.DEG_TO_RAD), 1.5f, 5); + this.level().addFreshEntity(decoy); + } } @Override @@ -144,4 +202,8 @@ public class M18SmokeGrenadeEntity extends FastThrowableProjectile implements Ge return this.cache; } + @Override + protected float getGravity() { + return 0.07F; + } } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/RgoGrenadeEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/RgoGrenadeEntity.java index 4d938d695..2f6cdffaa 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/RgoGrenadeEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/RgoGrenadeEntity.java @@ -17,6 +17,7 @@ import net.minecraft.sounds.SoundSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.projectile.ThrowableItemProjectile; import net.minecraft.world.item.Item; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.BellBlock; @@ -31,7 +32,7 @@ import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.animation.AnimatableManager; import software.bernie.geckolib.util.GeckoLibUtil; -public class RgoGrenadeEntity extends FastThrowableProjectile implements GeoEntity, ExplosiveProjectile { +public class RgoGrenadeEntity extends ThrowableItemProjectile implements GeoEntity, ExplosiveProjectile { private float explosionDamage = ExplosionConfig.RGO_GRENADE_EXPLOSION_DAMAGE.get(); private float explosionRadius = ExplosionConfig.RGO_GRENADE_EXPLOSION_RADIUS.get(); diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/SmokeDecoyEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/SmokeDecoyEntity.java index de856e5c8..c77993d52 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/SmokeDecoyEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/SmokeDecoyEntity.java @@ -17,15 +17,29 @@ import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.NotNull; public class SmokeDecoyEntity extends Entity { - + public boolean releaseSmoke = true; public SmokeDecoyEntity(EntityType type, Level world) { super(type, world); } - public SmokeDecoyEntity(Level level) { + public SmokeDecoyEntity(EntityType type, Level world, boolean release) { + super(type, world); + releaseSmoke = release; + } + + public SmokeDecoyEntity(LivingEntity entity, Level level) { super(ModEntities.SMOKE_DECOY.get(), level); } + public SmokeDecoyEntity(PlayMessages.SpawnEntity spawnEntity, Level level) { + this(ModEntities.SMOKE_DECOY.get(), level, true); + } + + @Override + public @NotNull Packet getAddEntityPacket() { + return NetworkHooks.getEntitySpawningPacket(this); + } + public int life = 400; public int igniteTime = 4; @@ -54,13 +68,15 @@ public class SmokeDecoyEntity extends Entity { super.tick(); this.move(MoverType.SELF, this.getDeltaMovement()); if (tickCount == this.igniteTime) { - if (this.level() instanceof ServerLevel serverLevel) { - ParticleTool.sendParticle(serverLevel, ModParticleTypes.CUSTOM_SMOKE.get(), this.xo, this.yo, this.zo, - 50, 0, 0, 0, 0.07, true); - ParticleTool.sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, this.xo, this.yo, this.zo, 10, 1, 1, 1, 0.1, true); - ParticleTool.sendParticle(serverLevel, ModParticleTypes.FIRE_STAR.get(), this.xo, this.yo, this.zo, 30, 0, 0, 0, 0.2, true); + if (releaseSmoke) { + if (this.level() instanceof ServerLevel serverLevel) { + ParticleTool.sendParticle(serverLevel, ModParticleTypes.CUSTOM_SMOKE.get(), this.xo, this.yo, this.zo, + 50, 0, 0, 0, 0.07, true); + ParticleTool.sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, this.xo, this.yo, this.zo, 10, 1, 1, 1, 0.1, true); + ParticleTool.sendParticle(serverLevel, ModParticleTypes.FIRE_STAR.get(), this.xo, this.yo, this.zo, 30, 0, 0, 0, 0.2, true); + } + this.level().playSound(null, this, ModSounds.SMOKE_FIRE.get(), this.getSoundSource(), 2, random.nextFloat() * 0.05f + 1); } - this.level().playSound(null, this, ModSounds.SMOKE_FIRE.get(), this.getSoundSource(), 2, random.nextFloat() * 0.05f + 1); this.setDeltaMovement(Vec3.ZERO); } diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModEntities.java b/src/main/java/com/atsuishio/superbwarfare/init/ModEntities.java index 8ec86c10b..e590d0d20 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModEntities.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModEntities.java @@ -73,11 +73,11 @@ public class ModEntities { public static final DeferredHolder, EntityType> MELON_BOMB = register("melon_bomb", EntityType.Builder.of(MelonBombEntity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(false).noSave().setTrackingRange(64).setUpdateInterval(1).sized(1f, 1f)); public static final DeferredHolder, EntityType> HAND_GRENADE = register("hand_grenade", - EntityType.Builder.of(HandGrenadeEntity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(false).noSave().setTrackingRange(64).setUpdateInterval(1).sized(0.3f, 0.3f)); + EntityType.Builder.of(HandGrenadeEntity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(true).noSave().setTrackingRange(64).setUpdateInterval(1).sized(0.3f, 0.3f)); public static final DeferredHolder, EntityType> RGO_GRENADE = register("rgo_grenade", - EntityType.Builder.of(RgoGrenadeEntity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(false).noSave().setTrackingRange(64).setUpdateInterval(1).sized(0.3f, 0.3f)); + EntityType.Builder.of(RgoGrenadeEntity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(true).noSave().setTrackingRange(64).setUpdateInterval(1).sized(0.3f, 0.3f)); public static final DeferredHolder, EntityType> M18_SMOKE_GRENADE = register("m18_smoke_grenade", - EntityType.Builder.of(M18SmokeGrenadeEntity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(false).noSave().setTrackingRange(64).setUpdateInterval(1).sized(0.3f, 0.3f)); + EntityType.Builder.of(M18SmokeGrenadeEntity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(true).noSave().setTrackingRange(64).setUpdateInterval(1).sized(0.3f, 0.3f)); public static final DeferredHolder, EntityType> JAVELIN_MISSILE = register("javelin_missile", EntityType.Builder.of(JavelinMissileEntity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(false).noSave().setTrackingRange(64).setUpdateInterval(1).sized(0.5f, 0.5f)); public static final DeferredHolder, EntityType> AGM_65 = register("agm_65", diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java b/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java index 554d5e2b6..033715ce3 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java @@ -494,6 +494,7 @@ public class ModSounds { public static final DeferredHolder DPS_GENERATOR_EVOLVE = REGISTRY.register("dps_generator_evolve", () -> SoundEvent.createVariableRangeEvent(Mod.loc("dps_generator_evolve"))); public static final DeferredHolder STEEL_PIPE_HIT = REGISTRY.register("steel_pipe_hit", () -> SoundEvent.createVariableRangeEvent(Mod.loc("steel_pipe_hit"))); public static final DeferredHolder STEEL_PIPE_DROP = REGISTRY.register("steel_pipe_drop", () -> SoundEvent.createVariableRangeEvent(Mod.loc("steel_pipe_drop"))); + public static final DeferredHolder SM0KE_GRENADE_RELEASE = REGISTRY.register("smoke_grenade_release", () -> SoundEvent.createVariableRangeEvent(Mod.loc("smoke_grenade_release"))); } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/M18SmokeGrenade.java b/src/main/java/com/atsuishio/superbwarfare/item/M18SmokeGrenade.java index 02fe56247..d38f7ae9f 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/M18SmokeGrenade.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/M18SmokeGrenade.java @@ -21,8 +21,6 @@ import org.jetbrains.annotations.NotNull; import javax.annotation.ParametersAreNonnullByDefault; -// TODO 物品图标,合成配方等资源 - public class M18SmokeGrenade extends Item implements ProjectileItem { public M18SmokeGrenade() { @@ -73,9 +71,8 @@ public class M18SmokeGrenade extends Item implements ProjectileItem { @ParametersAreNonnullByDefault public @NotNull ItemStack finishUsingItem(ItemStack pStack, Level pLevel, LivingEntity pLivingEntity) { if (!pLevel.isClientSide) { - var grenade = new M18SmokeGrenadeEntity(pLivingEntity, pLevel, 100); - grenade.setPos(pLivingEntity.position()); - grenade.releaseSmoke(); + M18SmokeGrenadeEntity grenade = new M18SmokeGrenadeEntity(pLivingEntity, pLevel, 2); + pLevel.addFreshEntity(grenade); if (pLivingEntity instanceof Player player) { player.getCooldowns().addCooldown(pStack.getItem(), 20); diff --git a/src/main/resources/assets/superbwarfare/geo/m18_smoke_grenade.geo.json b/src/main/resources/assets/superbwarfare/geo/m18_smoke_grenade.geo.json new file mode 100644 index 000000000..d486238ab --- /dev/null +++ b/src/main/resources/assets/superbwarfare/geo/m18_smoke_grenade.geo.json @@ -0,0 +1,243 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.m18_smoke_grenade - Converted", + "texture_width": 16, + "texture_height": 16, + "visible_bounds_width": 2, + "visible_bounds_height": 1.5, + "visible_bounds_offset": [0, 0.25, 0] + }, + "bones": [ + { + "name": "group", + "pivot": [0, 1.75, 1.75], + "rotation": [90, 0, -90] + }, + { + "name": "bone4", + "parent": "group", + "pivot": [0, 3.14219, -17.07809], + "cubes": [ + { + "origin": [-1.91426, 0.35254, 1.2125], + "size": [2.59528, 5.575, 1.075], + "uv": { + "east": {"uv": [0, 0], "uv_size": [1, 5.5]}, + "west": {"uv": [1, 0], "uv_size": [1, 5.5]}, + "up": {"uv": [3, 6], "uv_size": [2.5, 1]}, + "down": {"uv": [6, 7], "uv_size": [2.5, -1]} + } + }, + { + "origin": [-1.91426, 0.35254, 1.2125], + "size": [2.59528, 5.575, 1.075], + "pivot": [-0.61662, 3.14004, 1.75], + "rotation": [0, 45, 0], + "uv": { + "east": {"uv": [2, 0], "uv_size": [1, 5.5]}, + "west": {"uv": [3, 0], "uv_size": [1, 5.5]}, + "up": {"uv": [7, 0], "uv_size": [2.5, 1]}, + "down": {"uv": [7, 2], "uv_size": [2.5, -1]} + } + }, + { + "origin": [-1.15412, 0.35254, 0.45236], + "size": [1.075, 5.575, 2.59528], + "uv": { + "north": {"uv": [4, 0], "uv_size": [1, 5.5]}, + "south": {"uv": [5, 0], "uv_size": [1, 5.5]}, + "up": {"uv": [7, 2], "uv_size": [1, 2.5]}, + "down": {"uv": [3, 9.5], "uv_size": [1, -2.5]} + } + }, + { + "origin": [-1.15412, 0.35254, 0.45236], + "size": [1.075, 5.575, 2.59528], + "pivot": [-0.61662, 3.14004, 1.75], + "rotation": [0, 45, 0], + "uv": { + "north": {"uv": [0, 6], "uv_size": [1, 5.5]}, + "south": {"uv": [6, 0], "uv_size": [1, 5.5]}, + "up": {"uv": [4, 7], "uv_size": [1, 2.5]}, + "down": {"uv": [5, 9.5], "uv_size": [1, -2.5]} + } + } + ] + }, + { + "name": "bone175", + "parent": "group", + "pivot": [0, 3.14219, -17.07809], + "cubes": [ + { + "origin": [-1.52497, 5.92754, 1.37375], + "size": [1.8167, 0.25, 0.7525], + "uv": { + "east": {"uv": [10, 5], "uv_size": [1, 0.5]}, + "west": {"uv": [6, 10], "uv_size": [1, 0.5]}, + "up": {"uv": [7, 5], "uv_size": [2, 1]} + } + }, + { + "origin": [-1.52497, 5.92754, 1.37375], + "size": [1.8167, 0.25, 0.7525], + "pivot": [-0.61662, 3.97629, 1.75], + "rotation": [0, 45, 0], + "uv": { + "east": {"uv": [10, 6], "uv_size": [1, 0.5]}, + "west": {"uv": [7, 10], "uv_size": [1, 0.5]}, + "up": {"uv": [6, 7], "uv_size": [2, 1]} + } + }, + { + "origin": [-0.99287, 5.92754, 0.84165], + "size": [0.7525, 0.25, 1.8167], + "uv": { + "north": {"uv": [10, 7], "uv_size": [1, 0.5]}, + "south": {"uv": [10, 8], "uv_size": [1, 0.5]}, + "up": {"uv": [8, 2], "uv_size": [1, 2]} + } + }, + { + "origin": [-0.99287, 5.92754, 0.84165], + "size": [0.7525, 0.25, 1.8167], + "pivot": [-0.61662, 3.97629, 1.75], + "rotation": [0, 45, 0], + "uv": { + "north": {"uv": [9, 10], "uv_size": [1, 0.5]}, + "south": {"uv": [10, 9], "uv_size": [1, 0.5]}, + "up": {"uv": [6, 8], "uv_size": [1, 2]} + } + } + ] + }, + { + "name": "bone2", + "parent": "group", + "pivot": [1, 6.78847, 1.92961], + "cubes": [ + { + "origin": [-1.05412, 6.03768, 1.2125], + "size": [0.875, 0.3, 1.075], + "uv": { + "north": {"uv": [10, 10], "uv_size": [1, 0.5]}, + "east": {"uv": [11, 0], "uv_size": [1, 0.5]}, + "south": {"uv": [1, 11], "uv_size": [1, 0.5]}, + "west": {"uv": [2, 11], "uv_size": [1, 0.5]} + } + }, + { + "origin": [-1.06662, 6.34004, 1.15], + "size": [0.9, 0.85, 1.35], + "uv": { + "east": {"uv": [8, 4], "uv_size": [1.5, 1]}, + "south": {"uv": [9, 3], "uv_size": [1, 1]}, + "west": {"uv": [9, 2], "uv_size": [1.5, 1]}, + "down": {"uv": [9, 6.5], "uv_size": [1, -1.5]} + } + }, + { + "origin": [-1.06662, 6.34004, 2.5], + "size": [0.9, 0.85, 0.3], + "uv": { + "east": {"uv": [11, 2], "uv_size": [0.5, 1]}, + "west": {"uv": [3, 11], "uv_size": [0.5, 1]}, + "down": {"uv": [11, 3.5], "uv_size": [1, -0.5]} + } + }, + { + "origin": [-1.06662, 6.34004, 2.8], + "size": [0.9, 0.35, 0.3], + "uv": { + "east": {"uv": [6, 12], "uv_size": [0.5, 0.5]}, + "south": {"uv": [4, 11], "uv_size": [1, 0.5]}, + "west": {"uv": [12, 6], "uv_size": [0.5, 0.5]}, + "down": {"uv": [11, 4.5], "uv_size": [1, -0.5]} + } + }, + { + "origin": [-1.06662, 6.69004, 2.8], + "size": [0.9, 0.3, 0.2], + "uv": { + "east": {"uv": [7, 12], "uv_size": [0.5, 0.5]}, + "south": {"uv": [11, 5], "uv_size": [1, 0.5]}, + "west": {"uv": [12, 7], "uv_size": [0.5, 0.5]}, + "down": {"uv": [6, 11.5], "uv_size": [1, -0.5]} + } + }, + { + "origin": [-1.06662, 6.21741, 1.33352], + "size": [0.9, 0.93907, 0.35078], + "pivot": [0.38338, 5.81741, 0.93352], + "rotation": [22.5, 0, 0], + "uv": { + "north": {"uv": [10, 0], "uv_size": [1, 1]}, + "east": {"uv": [11, 6], "uv_size": [0.5, 1]}, + "west": {"uv": [7, 11], "uv_size": [0.5, 1]}, + "up": {"uv": [11, 7], "uv_size": [1, 0.5]}, + "down": {"uv": [11, 8.5], "uv_size": [1, -0.5]} + } + }, + { + "origin": [-1.11662, 7.19004, 0.65], + "size": [1, 0.2, 2.2], + "uv": { + "north": {"uv": [9, 11], "uv_size": [1, 0.5]}, + "east": {"uv": [10, 1], "uv_size": [2, 0.5]}, + "west": {"uv": [3, 10], "uv_size": [2, 0.5]}, + "up": {"uv": [7, 8], "uv_size": [1, 2]}, + "down": {"uv": [8, 9], "uv_size": [1, -2]} + } + }, + { + "origin": [-1.11662, 6.0047, 2.85594], + "size": [1, 0.75, 0.2], + "pivot": [0.38338, 6.5547, 1.35594], + "rotation": [22.5, 0, 0], + "uv": { + "north": {"uv": [1, 9], "uv_size": [1, 2]}, + "east": {"uv": [10, 3], "uv_size": [0.5, 2]}, + "south": {"uv": [2, 9], "uv_size": [1, 2]}, + "west": {"uv": [5, 10], "uv_size": [0.5, 2]}, + "up": {"uv": [4, 12], "uv_size": [1, 0.5]}, + "down": {"uv": [12, 4.5], "uv_size": [1, -0.5]} + } + } + ] + } + ], + "item_display_transforms": { + "firstperson_righthand": { + "rotation": [-3, -19, -7.25], + "translation": [5.5, -0.75, -3.5], + "scale": [2, 2, 2] + }, + "firstperson_lefthand": { + "rotation": [-3, -19, -7.25], + "translation": [5.5, -0.75, -3.5], + "scale": [2, 2, 2] + }, + "ground": { + "translation": [0, 1, 0] + }, + "gui": { + "rotation": [-140.06, -16.8, -135.22], + "translation": [1.75, 1.5, 0], + "scale": [2.25, 2.25, 2.25] + }, + "head": { + "translation": [0, -1.75, -6.75], + "scale": [1.5, 1.5, 1.5] + }, + "fixed": { + "rotation": [90, -45, 90], + "translation": [-1.25, 1.5, 0], + "scale": [2, 2, 2] + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/superbwarfare/lang/en_us.json b/src/main/resources/assets/superbwarfare/lang/en_us.json index 57c0f3234..393682b01 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -496,6 +496,7 @@ "entity.superbwarfare.dps_generator": "DPS Generator", "entity.superbwarfare.blu_43": "BLU-43B DragonTooth", "entity.superbwarfare.tm_62": "TM-62 Anti-tank Mine", + "entity.superbwarfare.m18_smoke_grenade": "M-18 Smoke Grenade", "key.categories.superbwarfare": "Superb Warfare", "key.superbwarfare.hold_zoom": "Zoom (Hold)", diff --git a/src/main/resources/assets/superbwarfare/lang/zh_cn.json b/src/main/resources/assets/superbwarfare/lang/zh_cn.json index 8fe38ba06..7237e09e7 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -495,6 +495,7 @@ "entity.superbwarfare.dps_generator": "DPS发电机", "entity.superbwarfare.blu_43": "BLU-43蝴蝶雷", "entity.superbwarfare.tm_62": "TM-62反坦克地雷", + "entity.superbwarfare.m18_smoke_grenade": "M-18烟雾弹", "key.categories.superbwarfare": "卓越前线", "key.superbwarfare.hold_zoom": "瞄准(按住)", diff --git a/src/main/resources/assets/superbwarfare/models/item/m18_smoke_grenade.json b/src/main/resources/assets/superbwarfare/models/item/m18_smoke_grenade.json new file mode 100644 index 000000000..2003002c6 --- /dev/null +++ b/src/main/resources/assets/superbwarfare/models/item/m18_smoke_grenade.json @@ -0,0 +1,346 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "1": "superbwarfare:item/m_18" + }, + "elements": [ + { + "name": "bone177", + "from": [6.70236, 3.6125, 7.4625], + "to": [9.29764, 9.1875, 8.5375], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6.4, 8]}, + "faces": { + "east": {"uv": [0, 0, 1, 5.5], "texture": "#1"}, + "west": {"uv": [1, 0, 2, 5.5], "texture": "#1"}, + "up": {"uv": [5.5, 7, 3, 6], "texture": "#1"}, + "down": {"uv": [8.5, 6, 6, 7], "texture": "#1"} + } + }, + { + "name": "bone178", + "from": [6.70236, 3.6125, 7.4625], + "to": [9.29764, 9.1875, 8.5375], + "rotation": {"angle": -45, "axis": "y", "origin": [8, 6.4, 8]}, + "faces": { + "east": {"uv": [2, 0, 3, 5.5], "texture": "#1"}, + "west": {"uv": [3, 0, 4, 5.5], "texture": "#1"}, + "up": {"uv": [9.5, 1, 7, 0], "texture": "#1"}, + "down": {"uv": [9.5, 1, 7, 2], "texture": "#1"} + } + }, + { + "name": "bone179", + "from": [7.4625, 3.6125, 6.70236], + "to": [8.5375, 9.1875, 9.29764], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6.4, 8]}, + "faces": { + "north": {"uv": [4, 0, 5, 5.5], "texture": "#1"}, + "south": {"uv": [5, 0, 6, 5.5], "texture": "#1"}, + "up": {"uv": [8, 4.5, 7, 2], "texture": "#1"}, + "down": {"uv": [4, 7, 3, 9.5], "texture": "#1"} + } + }, + { + "name": "bone180", + "from": [7.4625, 3.6125, 6.70236], + "to": [8.5375, 9.1875, 9.29764], + "rotation": {"angle": -45, "axis": "y", "origin": [8, 6.4, 8]}, + "faces": { + "north": {"uv": [0, 6, 1, 11.5], "texture": "#1"}, + "south": {"uv": [6, 0, 7, 5.5], "texture": "#1"}, + "up": {"uv": [5, 9.5, 4, 7], "texture": "#1"}, + "down": {"uv": [6, 7, 5, 9.5], "texture": "#1"} + } + }, + { + "name": "bone178", + "from": [7.09165, 9.1875, 7.62375], + "to": [8.90835, 9.4375, 8.37625], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 7.23625, 8]}, + "faces": { + "east": {"uv": [10, 5, 11, 5.5], "texture": "#1"}, + "west": {"uv": [6, 10, 7, 10.5], "texture": "#1"}, + "up": {"uv": [9, 6, 7, 5], "texture": "#1"} + } + }, + { + "name": "bone179", + "from": [7.09165, 9.1875, 7.62375], + "to": [8.90835, 9.4375, 8.37625], + "rotation": {"angle": -45, "axis": "y", "origin": [8, 7.23625, 8]}, + "faces": { + "east": {"uv": [10, 6, 11, 6.5], "texture": "#1"}, + "west": {"uv": [7, 10, 8, 10.5], "texture": "#1"}, + "up": {"uv": [8, 8, 6, 7], "texture": "#1"} + } + }, + { + "name": "bone180", + "from": [7.62375, 9.1875, 7.09165], + "to": [8.37625, 9.4375, 8.90835], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 7.23625, 8]}, + "faces": { + "north": {"uv": [10, 7, 11, 7.5], "texture": "#1"}, + "south": {"uv": [10, 8, 11, 8.5], "texture": "#1"}, + "up": {"uv": [9, 4, 8, 2], "texture": "#1"} + } + }, + { + "name": "bone181", + "from": [7.62375, 9.1875, 7.09165], + "to": [8.37625, 9.4375, 8.90835], + "rotation": {"angle": -45, "axis": "y", "origin": [8, 7.23625, 8]}, + "faces": { + "north": {"uv": [9, 10, 10, 10.5], "texture": "#1"}, + "south": {"uv": [10, 9, 11, 9.5], "texture": "#1"}, + "up": {"uv": [7, 10, 6, 8], "texture": "#1"} + } + }, + { + "name": "bone177", + "from": [7.5625, 9.29764, 7.4625], + "to": [8.4375, 9.59764, 8.5375], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [10, 10, 11, 10.5], "texture": "#1"}, + "east": {"uv": [11, 0, 12, 0.5], "texture": "#1"}, + "south": {"uv": [1, 11, 2, 11.5], "texture": "#1"}, + "west": {"uv": [2, 11, 3, 11.5], "texture": "#1"} + } + }, + { + "from": [7.55, 9.6, 7.4], + "to": [8.45, 10.45, 8.75], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 9.2, 7]}, + "faces": { + "east": {"uv": [8, 4, 9.5, 5], "texture": "#1"}, + "south": {"uv": [9, 3, 10, 4], "texture": "#1"}, + "west": {"uv": [9, 2, 10.5, 3], "texture": "#1"}, + "down": {"uv": [10, 5, 9, 6.5], "texture": "#1"} + } + }, + { + "from": [7.55, 9.6, 8.75], + "to": [8.45, 10.45, 9.05], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 9.2, 7]}, + "faces": { + "east": {"uv": [11, 2, 11.5, 3], "texture": "#1"}, + "west": {"uv": [3, 11, 3.5, 12], "texture": "#1"}, + "down": {"uv": [12, 3, 11, 3.5], "texture": "#1"} + } + }, + { + "from": [7.55, 9.6, 9.05], + "to": [8.45, 9.95, 9.35], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 9.2, 7]}, + "faces": { + "east": {"uv": [6, 12, 6.5, 12.5], "texture": "#1"}, + "south": {"uv": [4, 11, 5, 11.5], "texture": "#1"}, + "west": {"uv": [12, 6, 12.5, 6.5], "texture": "#1"}, + "down": {"uv": [12, 4, 11, 4.5], "texture": "#1"} + } + }, + { + "from": [7.55, 9.95, 9.05], + "to": [8.45, 10.25, 9.25], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 10.1, 9.15]}, + "faces": { + "east": {"uv": [7, 12, 7.5, 12.5], "texture": "#1"}, + "south": {"uv": [11, 5, 12, 5.5], "texture": "#1"}, + "west": {"uv": [12, 7, 12.5, 7.5], "texture": "#1"}, + "down": {"uv": [7, 11, 6, 11.5], "texture": "#1"} + } + }, + { + "from": [7.55, 9.47737, 7.58352], + "to": [8.45, 10.41644, 7.9343], + "rotation": {"angle": -22.5, "axis": "x", "origin": [7, 9.07737, 7.18352]}, + "faces": { + "north": {"uv": [10, 0, 11, 1], "texture": "#1"}, + "east": {"uv": [11, 6, 11.5, 7], "texture": "#1"}, + "west": {"uv": [7, 11, 7.5, 12], "texture": "#1"}, + "up": {"uv": [12, 7.5, 11, 7], "texture": "#1"}, + "down": {"uv": [12, 8, 11, 8.5], "texture": "#1"} + } + }, + { + "from": [7.5, 10.45, 6.9], + "to": [8.5, 10.65, 9.1], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 8.95, 7]}, + "faces": { + "north": {"uv": [9, 11, 10, 11.5], "texture": "#1"}, + "east": {"uv": [10, 1, 12, 1.5], "texture": "#1"}, + "west": {"uv": [3, 10, 5, 10.5], "texture": "#1"}, + "up": {"uv": [8, 10, 7, 8], "texture": "#1"}, + "down": {"uv": [9, 7, 8, 9], "texture": "#1"} + } + }, + { + "from": [7.4, 10.32266, 8.87031], + "to": [8.6, 10.42266, 8.97031], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 10.37266, 8.92031]}, + "faces": { + "north": {"uv": [11, 9, 12, 9.5], "texture": "#1"}, + "east": {"uv": [8, 12, 8.5, 12.5], "texture": "#1"}, + "south": {"uv": [10, 11, 11, 11.5], "texture": "#1"}, + "west": {"uv": [12, 8, 12.5, 8.5], "texture": "#1"}, + "up": {"uv": [12, 10.5, 11, 10], "texture": "#1"}, + "down": {"uv": [12, 11, 11, 11.5], "texture": "#1"} + } + }, + { + "from": [7.35, 10.32266, 8.57031], + "to": [7.45, 10.42266, 9.27031], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.4, 10.37266, 8.92031]}, + "faces": { + "north": {"uv": [9, 12, 9.5, 12.5], "texture": "#1"}, + "east": {"uv": [12, 9, 12.5, 9.5], "texture": "#1"}, + "south": {"uv": [10, 12, 10.5, 12.5], "texture": "#1"}, + "west": {"uv": [12, 10, 12.5, 10.5], "texture": "#1"}, + "up": {"uv": [11.5, 12.5, 11, 12], "texture": "#1"}, + "down": {"uv": [12.5, 11, 12, 11.5], "texture": "#1"} + } + }, + { + "from": [7.04385, 9.58355, 8.57031], + "to": [7.14385, 9.68355, 9.27031], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.09385, 9.63355, 8.92031]}, + "faces": { + "north": {"uv": [12, 12, 12.5, 12.5], "texture": "#1"}, + "east": {"uv": [0, 13, 0.5, 13.5], "texture": "#1"}, + "south": {"uv": [13, 0, 13.5, 0.5], "texture": "#1"}, + "west": {"uv": [1, 13, 1.5, 13.5], "texture": "#1"}, + "up": {"uv": [13.5, 1.5, 13, 1], "texture": "#1"}, + "down": {"uv": [2.5, 13, 2, 13.5], "texture": "#1"} + } + }, + { + "from": [7.21606, 9.5493, 9.27031], + "to": [7.31606, 10.4493, 9.37031], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.26606, 10.0493, 9.32031]}, + "faces": { + "north": {"uv": [0, 12, 0.5, 13], "texture": "#1"}, + "east": {"uv": [12, 0, 12.5, 1], "texture": "#1"}, + "south": {"uv": [1, 12, 1.5, 13], "texture": "#1"}, + "west": {"uv": [12, 1, 12.5, 2], "texture": "#1"}, + "up": {"uv": [13.5, 2.5, 13, 2], "texture": "#1"}, + "down": {"uv": [3.5, 13, 3, 13.5], "texture": "#1"} + } + }, + { + "from": [7.21606, 9.5493, 8.47031], + "to": [7.31606, 10.4493, 8.57031], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.26606, 10.0493, 8.52031]}, + "faces": { + "north": {"uv": [2, 12, 2.5, 13], "texture": "#1"}, + "east": {"uv": [12, 2, 12.5, 3], "texture": "#1"}, + "south": {"uv": [3, 12, 3.5, 13], "texture": "#1"}, + "west": {"uv": [12, 3, 12.5, 4], "texture": "#1"}, + "up": {"uv": [13.5, 3.5, 13, 3], "texture": "#1"}, + "down": {"uv": [4.5, 13, 4, 13.5], "texture": "#1"} + } + }, + { + "from": [7.5, 8.06466, 9.10594], + "to": [8.5, 10.01466, 9.30594], + "rotation": {"angle": -22.5, "axis": "x", "origin": [7, 9.81466, 7.60594]}, + "faces": { + "north": {"uv": [1, 9, 2, 11], "texture": "#1"}, + "east": {"uv": [10, 3, 10.5, 5], "texture": "#1"}, + "south": {"uv": [2, 9, 3, 11], "texture": "#1"}, + "west": {"uv": [5, 10, 5.5, 12], "texture": "#1"}, + "up": {"uv": [5, 12.5, 4, 12], "texture": "#1"}, + "down": {"uv": [13, 4, 12, 4.5], "texture": "#1"} + } + }, + { + "from": [7.5, 5.64843, 9.64623], + "to": [8.5, 8.84843, 9.84623], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 8.64843, 8.14623]}, + "faces": { + "north": {"uv": [1, 6, 2, 9], "texture": "#1"}, + "east": {"uv": [9, 7, 9.5, 10], "texture": "#1"}, + "south": {"uv": [2, 6, 3, 9], "texture": "#1"}, + "west": {"uv": [8, 9, 8.5, 12], "texture": "#1"}, + "up": {"uv": [6, 12.5, 5, 12], "texture": "#1"}, + "down": {"uv": [13, 5, 12, 5.5], "texture": "#1"} + } + } + ], + "display": { + "firstperson_righthand": { + "rotation": [-3, -19, -7.25], + "translation": [5.5, -0.75, -3.5], + "scale": [2, 2, 2] + }, + "firstperson_lefthand": { + "rotation": [-3, -19, -7.25], + "translation": [5.5, -0.75, -3.5], + "scale": [2, 2, 2] + }, + "ground": { + "translation": [0, 1, 0] + }, + "gui": { + "rotation": [-140.06, -16.8, -135.22], + "translation": [1.75, 1.5, 0], + "scale": [2.25, 2.25, 2.25] + }, + "head": { + "translation": [0, -1.75, -6.75], + "scale": [1.5, 1.5, 1.5] + }, + "fixed": { + "rotation": [90, -45, 90], + "translation": [-1.25, 1.5, 0], + "scale": [2, 2, 2] + } + }, + "groups": [ + { + "name": "group", + "origin": [8, 8, 8], + "color": 0, + "children": [ + { + "name": "bone175", + "origin": [8, 7.99219, -17.72809], + "color": 2, + "children": [] + }, + { + "name": "bone175", + "origin": [8, 7.99219, -17.72809], + "color": 2, + "children": [] + }, + { + "name": "bone175", + "origin": [8, 7.99219, -17.72809], + "color": 2, + "children": [0, 1, 2, 3] + }, + { + "name": "bone175", + "origin": [8, 7.99219, -17.72809], + "color": 2, + "children": [4, 5, 6, 7] + }, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21 + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/superbwarfare/sounds.json b/src/main/resources/assets/superbwarfare/sounds.json index 414876d87..44b753419 100644 --- a/src/main/resources/assets/superbwarfare/sounds.json +++ b/src/main/resources/assets/superbwarfare/sounds.json @@ -3386,5 +3386,13 @@ "stream": false } ] + }, + "smoke_grenade_release": { + "sounds": [ + { + "name": "superbwarfare:smoke_grenade_release", + "stream": false + } + ] } } \ No newline at end of file diff --git a/src/main/resources/assets/superbwarfare/sounds/smoke_grenade_release.ogg b/src/main/resources/assets/superbwarfare/sounds/smoke_grenade_release.ogg new file mode 100644 index 0000000000000000000000000000000000000000..0b8404ca79bf09283724f1488d6dd33fbb2aa69e GIT binary patch literal 28211 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 W@j2S|82}CzspcpE literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/superbwarfare/textures/item/m_18.png b/src/main/resources/assets/superbwarfare/textures/item/m_18.png new file mode 100644 index 0000000000000000000000000000000000000000..aea0eec35be4f6f1ec101a1ee2ae48d11e52fbb3 GIT binary patch literal 973 zcmV;;12X)HP)Px&heR{%g`V09v<(&2f*z*&qj$fx(m~1>%66*p2M$1CM~euFQA{ zf`|omiMDP4WE5g?!%d!O>n73GjlS4KIJ}Bfq?uHtnU8OpNp>cUWM|R&yLMlRXAv+U6?zwwiHO$?g6S9h@ z!1p5rD3x>?8dOgVprJwK&ct&7>g%mNpiOE@@8Lbh$Z*E02YV0x48W=WOa3XalLgi-;Q3q^XtY-S#S_MIC6crsh?ES^fIm9G5>!><5ID)!ZfEkW9( zrX)L)MkP_UUNB#aa1Vq;Gv^|xnj<01nm@s9#|<@Fc0gZjvgTd;6Gm^b1tMS9J>3;$ z$F8l${G%s~3}+Nc&DEt3%MuYP7K)y;U3&N4s`FvfZOitE=N%3l7#pkU8wg2vvy(3e zPdlQ%ak~T9{s#gDthBbPs*0|A>xSC_ZBp~BaR`u7drQj#uyIrQPv-Tj2LR}ctH9Rp zF`J{V>!_+q_U?T~hBHd<;d1{M2Yxzz#v-ZcK+p}p-VV@f5=5ixDERy*SPqPhRouBH zU^;uJ%cl{HgtEa~pdR4A`moENkJy+EMzaC&GvkP+P zI4B;Ew+C@L1-vVk`}dodO90H?SOBw-NF^&TEm?7S*nYl6$jQDT2f@vox9ICTR(r{J zcR6=TE6= v8g=f#!omwMa|dwY!XN*Mkni}8{|#RN(IUOF%-lrH00000NkvXXu0mjfJF&st literal 0 HcmV?d00001 diff --git a/src/main/resources/data/superbwarfare/recipe/hang_grenade_crafting.json b/src/main/resources/data/superbwarfare/recipe/hand_grenade_crafting.json similarity index 100% rename from src/main/resources/data/superbwarfare/recipe/hang_grenade_crafting.json rename to src/main/resources/data/superbwarfare/recipe/hand_grenade_crafting.json diff --git a/src/main/resources/data/superbwarfare/recipe/m18_smoke_grenade_crafting.json b/src/main/resources/data/superbwarfare/recipe/m18_smoke_grenade_crafting.json new file mode 100644 index 000000000..6a8bb0080 --- /dev/null +++ b/src/main/resources/data/superbwarfare/recipe/m18_smoke_grenade_crafting.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "pattern": [ + " a ", + "bcb", + "bdb" + ], + "key": { + "a": { + "item": "minecraft:tripwire_hook" + }, + "b": { + "item": "minecraft:iron_nugget" + }, + "c": { + "item": "minecraft:wheat" + }, + "d": { + "item": "minecraft:gunpowder" + } + }, + "result": { + "item": "superbwarfare:m18_smoke_grenade", + "count": 2 + } +} \ No newline at end of file