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 000000000..0b8404ca7 Binary files /dev/null and b/src/main/resources/assets/superbwarfare/sounds/smoke_grenade_release.ogg differ 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 000000000..aea0eec35 Binary files /dev/null and b/src/main/resources/assets/superbwarfare/textures/item/m_18.png differ 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