From ae56b6414a1694f2e6a093310b0f675a68eab72d Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Tue, 4 Mar 2025 20:50:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0YX100=E7=AC=AC=E4=B8=89?= =?UTF-8?q?=E4=BA=BA=E7=A7=B0=E5=BC=80=E7=81=AB=E9=9F=B3=E6=95=88=E5=92=8C?= =?UTF-8?q?=E7=82=AE=E5=8F=A3=E5=85=89=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/layer/Yx100GlowLayer.java | 29 +++++ .../client/overlay/VehicleHudOverlay.java | 25 ++++- .../client/renderer/entity/Yx100Renderer.java | 5 +- .../entity/vehicle/Bmp2Entity.java | 2 +- .../entity/vehicle/Yx100Entity.java | 70 +++++++++++- .../superbwarfare/init/ModSounds.java | 3 + .../mixins/MouseHandlerMixin.java | 2 +- .../animations/yx_100.animation.json | 24 +++- .../assets/superbwarfare/geo/yx_100.geo.json | 106 +++++++++++++++++- .../assets/superbwarfare/lang/en_us.json | 1 + .../assets/superbwarfare/lang/zh_cn.json | 1 + .../assets/superbwarfare/sounds.json | 24 ++++ .../superbwarfare/sounds/yx100/yx100_far.ogg | Bin 0 -> 63858 bytes .../sounds/yx100/yx100_fire_1p.ogg | Bin 84315 -> 55263 bytes .../sounds/yx100/yx100_fire_3p.ogg | Bin 0 -> 21245 bytes .../sounds/yx100/yx100_veryfar.ogg | Bin 0 -> 57384 bytes .../superbwarfare/textures/entity/yx_100.png | Bin 186934 -> 188452 bytes .../textures/entity/yx_100_glow.png | Bin 0 -> 61146 bytes 18 files changed, 274 insertions(+), 18 deletions(-) create mode 100644 src/main/java/com/atsuishio/superbwarfare/client/layer/Yx100GlowLayer.java create mode 100644 src/main/resources/assets/superbwarfare/sounds/yx100/yx100_far.ogg create mode 100644 src/main/resources/assets/superbwarfare/sounds/yx100/yx100_fire_3p.ogg create mode 100644 src/main/resources/assets/superbwarfare/sounds/yx100/yx100_veryfar.ogg create mode 100644 src/main/resources/assets/superbwarfare/textures/entity/yx_100_glow.png diff --git a/src/main/java/com/atsuishio/superbwarfare/client/layer/Yx100GlowLayer.java b/src/main/java/com/atsuishio/superbwarfare/client/layer/Yx100GlowLayer.java new file mode 100644 index 000000000..1771e5c02 --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/client/layer/Yx100GlowLayer.java @@ -0,0 +1,29 @@ +package com.atsuishio.superbwarfare.client.layer; + +import com.atsuishio.superbwarfare.ModUtils; +import com.atsuishio.superbwarfare.client.ModRenderTypes; +import com.atsuishio.superbwarfare.entity.vehicle.Yx100Entity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.cache.object.BakedGeoModel; +import software.bernie.geckolib.renderer.GeoRenderer; +import software.bernie.geckolib.renderer.layer.GeoRenderLayer; + +public class Yx100GlowLayer extends GeoRenderLayer { + + private static final ResourceLocation LAYER = ModUtils.loc("textures/entity/yx_100_glow.png"); + + public Yx100GlowLayer(GeoRenderer entityRenderer) { + super(entityRenderer); + } + + @Override + public void render(PoseStack poseStack, Yx100Entity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) { + RenderType glowRenderType = ModRenderTypes.LASER.apply(LAYER); + getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1); + } +} diff --git a/src/main/java/com/atsuishio/superbwarfare/client/overlay/VehicleHudOverlay.java b/src/main/java/com/atsuishio/superbwarfare/client/overlay/VehicleHudOverlay.java index dc2b92bf5..725110b38 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/overlay/VehicleHudOverlay.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/overlay/VehicleHudOverlay.java @@ -35,6 +35,7 @@ import org.joml.Math; import static com.atsuishio.superbwarfare.client.RenderHelper.preciseBlit; import static com.atsuishio.superbwarfare.client.overlay.CrossHairOverlay.*; +import static com.atsuishio.superbwarfare.entity.vehicle.Bmp2Entity.LOADED_MISSILE; import static com.atsuishio.superbwarfare.entity.vehicle.Lav150Entity.COAX_HEAT; import static com.atsuishio.superbwarfare.entity.vehicle.Lav150Entity.HEAT; import static com.atsuishio.superbwarfare.entity.vehicle.Yx100Entity.AMMO; @@ -284,6 +285,7 @@ public class VehicleHudOverlay { } // 武器名称 + //LAV-150 if (player.getVehicle() instanceof Lav150Entity lav) { if (multiWeaponVehicle.getWeaponType() == 0) { double heat = 1 - lav.getEntityData().get(HEAT) / 100.0F; @@ -294,6 +296,7 @@ public class VehicleHudOverlay { } } + //BMP-2 if (player.getVehicle() instanceof Bmp2Entity bmp2) { if (multiWeaponVehicle.getWeaponType() == 0) { double heat = 1 - bmp2.getEntityData().get(HEAT) / 100.0F; @@ -302,16 +305,17 @@ public class VehicleHudOverlay { double heat = 1 - bmp2.getEntityData().get(COAX_HEAT) / 100.0F; guiGraphics.drawString(mc.font, Component.literal(" 7.62MM ПКТ " + (player.getInventory().hasAnyMatching(s -> s.is(ModItems.CREATIVE_AMMO_BOX.get())) ? "∞" : bmp2.getAmmoCount(player))), w / 2 - 33, h - 65, Mth.hsvToRgb((float) heat / 3.745318352059925F, 1.0F, 1.0F), false); } else { - guiGraphics.drawString(mc.font, Component.literal(" 9M113 " + bmp2.getAmmoCount(player)), w / 2 - 33, h - 65, 0x66FF00, false); + guiGraphics.drawString(mc.font, Component.literal(" 9M113 " + bmp2.getEntityData().get(LOADED_MISSILE) + " " + (player.getInventory().hasAnyMatching(s -> s.is(ModItems.CREATIVE_AMMO_BOX.get())) ? "∞" : bmp2.getAmmoCount(player))), w / 2 - 33, h - 65, 0x66FF00, false); } } + //YX-100 if (player.getVehicle() instanceof Yx100Entity yx100) { if (multiWeaponVehicle.getWeaponType() == 0) { - guiGraphics.drawString(mc.font, Component.literal("AP SHELL " + yx100.getAmmoCount(player) + " " + yx100.getEntityData().get(AMMO)), w / 2 - 33, h - 65, 0x66FF00, false); + guiGraphics.drawString(mc.font, Component.literal("AP SHELL " + yx100.getAmmoCount(player) + " " + (player.getInventory().hasAnyMatching(s -> s.is(ModItems.CREATIVE_AMMO_BOX.get())) ? "∞" : yx100.getEntityData().get(AMMO))), w / 2 - 33, h - 65, 0x66FF00, false); } else { - guiGraphics.drawString(mc.font, Component.literal("HE SHELL " + yx100.getAmmoCount(player) + " " + yx100.getEntityData().get(AMMO)), w / 2 - 33, h - 65, 0x66FF00, false); + guiGraphics.drawString(mc.font, Component.literal("HE SHELL " + yx100.getAmmoCount(player) + " " + (player.getInventory().hasAnyMatching(s -> s.is(ModItems.CREATIVE_AMMO_BOX.get())) ? "∞" : yx100.getEntityData().get(AMMO))), w / 2 - 33, h - 65, 0x66FF00, false); } } @@ -323,7 +327,7 @@ public class VehicleHudOverlay { } else if (Minecraft.getInstance().options.getCameraType() == CameraType.THIRD_PERSON_BACK && !ClientEventHandler.zoomVehicle) { Vec3 p = RenderHelper.worldToScreen(new Vec3(player.getX(), player.getY(), player.getZ()).add(iLand.getBarrelVec(event.getPartialTick()).scale(192)), cameraPos); - + // 第三人称准星 if (p != null) { poseStack.pushPose(); float x = (float) p.x; @@ -338,6 +342,7 @@ public class VehicleHudOverlay { poseStack.translate(x, y, 0); poseStack.scale(0.75f, 0.75f, 1); + //LAV-150 if (multiWeaponVehicle instanceof Lav150Entity lav1501) { if (multiWeaponVehicle.getWeaponType() == 0) { double heat = lav1501.getEntityData().get(HEAT) / 100.0F; @@ -347,7 +352,7 @@ public class VehicleHudOverlay { guiGraphics.drawString(Minecraft.getInstance().font, Component.literal("7.62MM COAX " + (player.getInventory().hasAnyMatching(s -> s.is(ModItems.CREATIVE_AMMO_BOX.get())) ? "∞" : lav1501.getAmmoCount(player))), 30, -9, Mth.hsvToRgb(0F, (float) heat2, 1.0F), false); } } - + //BMP-2 if (multiWeaponVehicle instanceof Bmp2Entity bmp201) { if (multiWeaponVehicle.getWeaponType() == 0) { double heat = bmp201.getEntityData().get(HEAT) / 100.0F; @@ -356,7 +361,15 @@ public class VehicleHudOverlay { double heat2 = bmp201.getEntityData().get(COAX_HEAT) / 100.0F; guiGraphics.drawString(Minecraft.getInstance().font, Component.literal("7.62MM ПКТ " + (player.getInventory().hasAnyMatching(s -> s.is(ModItems.CREATIVE_AMMO_BOX.get())) ? "∞" : bmp201.getAmmoCount(player))), 30, -9, Mth.hsvToRgb(0F, (float) heat2, 1.0F), false); } else { - guiGraphics.drawString(Minecraft.getInstance().font, Component.literal("9M113 " + bmp201.getAmmoCount(player)), 30, -9, -1, false); + guiGraphics.drawString(Minecraft.getInstance().font, Component.literal("9M113 " + bmp201.getEntityData().get(LOADED_MISSILE) + " " + (player.getInventory().hasAnyMatching(s -> s.is(ModItems.CREATIVE_AMMO_BOX.get())) ? "∞" : bmp201.getAmmoCount(player))), 30, -9, -1, false); + } + } + //YX-100 + if (multiWeaponVehicle instanceof Yx100Entity yx100) { + if (multiWeaponVehicle.getWeaponType() == 0) { + guiGraphics.drawString(Minecraft.getInstance().font, Component.literal("AP SHELL " + yx100.getAmmoCount(player) + " " + (player.getInventory().hasAnyMatching(s -> s.is(ModItems.CREATIVE_AMMO_BOX.get())) ? "∞" : yx100.getEntityData().get(AMMO))), 30, -9, -1, false); + } else { + guiGraphics.drawString(Minecraft.getInstance().font, Component.literal("HE SHELL " + yx100.getAmmoCount(player) + " " + (player.getInventory().hasAnyMatching(s -> s.is(ModItems.CREATIVE_AMMO_BOX.get())) ? "∞" : yx100.getEntityData().get(AMMO))), 30, -9, -1, false); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/Yx100Renderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/Yx100Renderer.java index 82524f5b9..93254f4d7 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/Yx100Renderer.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/Yx100Renderer.java @@ -1,5 +1,6 @@ package com.atsuishio.superbwarfare.client.renderer.entity; +import com.atsuishio.superbwarfare.client.layer.Yx100GlowLayer; import com.atsuishio.superbwarfare.client.model.entity.Yx100Model; import com.atsuishio.superbwarfare.entity.vehicle.Yx100Entity; import com.mojang.blaze3d.vertex.PoseStack; @@ -20,7 +21,7 @@ public class Yx100Renderer extends GeoEntityRenderer { public Yx100Renderer(EntityRendererProvider.Context renderManager) { super(renderManager, new Yx100Model()); -// this.addRenderLayer(new Yx100Layer(this)); + this.addRenderLayer(new Yx100GlowLayer(this)); } @Override @@ -89,7 +90,7 @@ public class Yx100Renderer extends GeoEntityRenderer { r2 = a / 90f; } else { if (a < 0) { - r2 = (180f + a) / 90f; + r2 = - (180f + a) / 90f; } else { r2 = (180f - a) / 90f; } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Bmp2Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Bmp2Entity.java index 92df5707a..80b36460f 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Bmp2Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Bmp2Entity.java @@ -292,7 +292,7 @@ public class Bmp2Entity extends ContainerMobileVehicleEntity implements GeoEntit } else if (getWeaponType() == 1) { this.entityData.set(AMMO, ammoCount); } else { - this.entityData.set(AMMO, this.getEntityData().get(LOADED_MISSILE)); + this.entityData.set(AMMO, countItem(ModItems.WIRE_GUIDE_MISSILE.get())); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Yx100Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Yx100Entity.java index 6d86d7004..f853421f3 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Yx100Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Yx100Entity.java @@ -12,6 +12,8 @@ import com.atsuishio.superbwarfare.tools.EntityFindUtil; import com.atsuishio.superbwarfare.tools.ParticleTool; import com.atsuishio.superbwarfare.tools.SoundTool; import com.mojang.math.Axis; +import net.minecraft.client.CameraType; +import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; @@ -322,9 +324,9 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti if (!player.level().isClientSide) { if (player instanceof ServerPlayer serverPlayer) { - serverPlayer.playSound(ModSounds.BMP_CANNON_FIRE_3P.get(), 4, 1); - serverPlayer.playSound(ModSounds.LAV_CANNON_FAR.get(), 12, 1); - serverPlayer.playSound(ModSounds.LAV_CANNON_VERYFAR.get(), 24, 1); + serverPlayer.playSound(ModSounds.YX_100_FIRE_3P.get(), 8, 1); + serverPlayer.playSound(ModSounds.YX_100_FAR.get(), 16, 1); + serverPlayer.playSound(ModSounds.YX_100_VERYFAR.get(), 32, 1); } } @@ -335,6 +337,49 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti reloadCoolDown = 80; + if (this.level() instanceof ServerLevel server) { + server.sendParticles(ParticleTypes.CAMPFIRE_COSY_SMOKE, + this.getX() + 5 * getBarrelVector(1).x, + this.getY() + 0.1, + this.getZ() + 5 * getBarrelVector(1).z, + 300, 6, 0.02, 6, 0.005); + + double x = worldPosition.x + 9 * getBarrelVector(1).x; + double y = worldPosition.y + 9 * getBarrelVector(1).y; + double z = worldPosition.z + 9 * getBarrelVector(1).z; + + server.sendParticles(ParticleTypes.CAMPFIRE_COSY_SMOKE, x, y, z, 10, 0.4, 0.4, 0.4, 0.0075); + server.sendParticles(ParticleTypes.CLOUD, x, y, z, 10, 0.4, 0.4, 0.4, 0.0075); + + int count = 6; + + for (float i = 9.5f; i < 23; i += .5f) { + server.sendParticles(ParticleTypes.CAMPFIRE_COSY_SMOKE, + worldPosition.x + i * getBarrelVector(1).x, + worldPosition.y + i * getBarrelVector(1).y, + worldPosition.z + i * getBarrelVector(1).z, + Mth.clamp(count--, 1, 5), 0.15, 0.15, 0.15, 0.0025); + } + + Vector4f worldPositionL = transformPosition(transform, -0.35f, 0, 0); + Vector4f worldPositionR = transformPosition(transform, 0.35f, 0, 0); + + for (float i = 3f; i < 6; i += .5f) { + server.sendParticles(ParticleTypes.CLOUD, + worldPositionL.x + i * getBarrelVector(1).x, + worldPositionL.y + i * getBarrelVector(1).y, + worldPositionL.z + i * getBarrelVector(1).z, + 1, 0.025, 0.025, 0.025, 0.0015); + + server.sendParticles(ParticleTypes.CLOUD, + worldPositionR.x + i * getBarrelVector(1).x, + worldPositionR.y + i * getBarrelVector(1).y, + worldPositionR.z + i * getBarrelVector(1).z, + 1, 0.025, 0.025, 0.025, 0.0015); + } + } + + Level level = player.level(); final Vec3 center = new Vec3(this.getX(), this.getEyeY(), this.getZ()); @@ -430,8 +475,11 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti diffY = Mth.wrapDegrees(gunAngle - getTurretYRot() + 0.05f); diffX = Mth.wrapDegrees(driver.getXRot() - this.getTurretXRot()); - this.setTurretXRot(Mth.clamp(this.getTurretXRot() + Mth.clamp(0.95f * diffX, -5, 5), -30f, 4f)); - this.setTurretYRot(this.getTurretYRot() + Mth.clamp(0.95f * diffY, -8, 8)); + float min = -5 - (float) (isInWater() && !onGround() ? 2.5 : 6) * entityData.get(DELTA_ROT); + float max = 5 - (float) (isInWater() && !onGround() ? 2.5 : 6) * entityData.get(DELTA_ROT); + + this.setTurretXRot(Mth.clamp(this.getTurretXRot() + Mth.clamp(0.95f * diffX, min, max), -30f, 4f)); + this.setTurretYRot(this.getTurretYRot() + Mth.clamp(0.9f * diffY, -4.5f, 4.5f)); } @Override @@ -604,6 +652,18 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti float f1 = Mth.clamp(f, -30F, 4F); entity.xRotO += f1 - f; entity.setXRot(entity.getXRot() + f1 - f); + + if (entity.level().isClientSide && entity == getFirstPassenger()) { + Minecraft mc = Minecraft.getInstance(); + if (mc.options.getCameraType() == CameraType.FIRST_PERSON) { + entity.setYBodyRot(this.getYRot()); + float f2 = Mth.wrapDegrees(entity.getYRot() - this.getBarrelYRot(1)); + float f3 = Mth.clamp(f2, -20.0F, 20.0F); + entity.yRotO += f3 - f2; + entity.setYRot(entity.getYRot() + f3 - f2); + entity.setYBodyRot(this.getYRot()); + } + } } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java b/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java index 8630b4ef4..bcef56edf 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java @@ -419,5 +419,8 @@ public class ModSounds { public static final RegistryObject LASER_TOWER_SHOOT = REGISTRY.register("laser_tower_shoot", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("laser_tower_shoot"))); public static final RegistryObject YX_100_RELOAD = REGISTRY.register("yx_100_reload", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("yx_100_reload"))); public static final RegistryObject YX_100_FIRE_1P = REGISTRY.register("yx_100_fire_1p", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("yx_100_fire_1p"))); + public static final RegistryObject YX_100_FIRE_3P = REGISTRY.register("yx_100_fire_3p", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("yx_100_fire_3p"))); + public static final RegistryObject YX_100_FAR = REGISTRY.register("yx_100_far", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("yx_100_far"))); + public static final RegistryObject YX_100_VERYFAR = REGISTRY.register("yx_100_veryfar", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("yx_100_veryfar"))); } diff --git a/src/main/java/com/atsuishio/superbwarfare/mixins/MouseHandlerMixin.java b/src/main/java/com/atsuishio/superbwarfare/mixins/MouseHandlerMixin.java index a34b94432..90f3f16ec 100644 --- a/src/main/java/com/atsuishio/superbwarfare/mixins/MouseHandlerMixin.java +++ b/src/main/java/com/atsuishio/superbwarfare/mixins/MouseHandlerMixin.java @@ -60,7 +60,7 @@ public class MouseHandlerMixin { } if (player.getVehicle() instanceof Yx100Entity) { - return ClientEventHandler.zoomVehicle ? 0.18 : 0.23; + return ClientEventHandler.zoomVehicle ? 0.17 : 0.22; } if (player.getVehicle() instanceof Ah6Entity ah6Entity && !ah6Entity.onGround() && ah6Entity.getFirstPassenger() == player) { diff --git a/src/main/resources/assets/superbwarfare/animations/yx_100.animation.json b/src/main/resources/assets/superbwarfare/animations/yx_100.animation.json index baf733677..ba17f88a3 100644 --- a/src/main/resources/assets/superbwarfare/animations/yx_100.animation.json +++ b/src/main/resources/assets/superbwarfare/animations/yx_100.animation.json @@ -2,11 +2,17 @@ "format_version": "1.8.0", "animations": { "animation.yx100.idle": { - "loop": true + "loop": true, + "animation_length": 0.5, + "bones": { + "glow": { + "scale": 0 + } + } }, "animation.yx100.fire": { "loop": "hold_on_last_frame", - "animation_length": 1, + "animation_length": 2, "bones": { "bone": { "position": { @@ -28,6 +34,10 @@ "0.4833": { "post": [0, 0, 0], "lerp_mode": "catmullrom" + }, + "2.0": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" } } }, @@ -102,6 +112,16 @@ "lerp_mode": "catmullrom" } } + }, + "glow": { + "scale": { + "0.0": [0, 0, 0], + "0.0083": [1, 1, 1], + "0.1917": [1, 1, 1], + "0.5": [0, 0, 0], + "0.9917": [0, 0, 0], + "2.0": [0, 0, 0] + } } } } diff --git a/src/main/resources/assets/superbwarfare/geo/yx_100.geo.json b/src/main/resources/assets/superbwarfare/geo/yx_100.geo.json index 538c54461..7cae7e70e 100644 --- a/src/main/resources/assets/superbwarfare/geo/yx_100.geo.json +++ b/src/main/resources/assets/superbwarfare/geo/yx_100.geo.json @@ -6,7 +6,7 @@ "identifier": "geometry.unknown", "texture_width": 1024, "texture_height": 1024, - "visible_bounds_width": 20, + "visible_bounds_width": 81, "visible_bounds_height": 15, "visible_bounds_offset": [0, 0.5, 0] }, @@ -1434,6 +1434,110 @@ "parent": "barrel", "pivot": [0.16946, 43.85243, -12.01557] }, + { + "name": "glow", + "parent": "barrelroot", + "pivot": [0.035, 41.7538, -138.23333], + "cubes": [ + { + "origin": [-0.465, 41.7538, -416.4], + "size": [256, 0, 46], + "pivot": [0.035, 41.7538, -393.4], + "rotation": [0, -90, -72.5], + "uv": { + "up": {"uv": [1019.75, 508.75], "uv_size": [-148.5, -298.5]} + } + }, + { + "origin": [-0.465, 41.7538, -416.4], + "size": [256, 0, 46], + "pivot": [0.035, 41.7538, -393.4], + "rotation": [0, -90, -132.5], + "uv": { + "up": {"uv": [1019.75, 508.75], "uv_size": [-148.5, -298.5]} + } + }, + { + "origin": [-0.465, 41.7538, -416.4], + "size": [256, 0, 46], + "pivot": [0.035, 41.7538, -393.4], + "rotation": [0, -90, 167.5], + "uv": { + "up": {"uv": [1019.75, 508.75], "uv_size": [-148.5, -298.5]} + } + }, + { + "origin": [-33.965, 41.7538, -171.9], + "size": [68, 0, 68], + "pivot": [0.035, 41.7538, -137.9], + "rotation": [90, 0, -90], + "uv": { + "up": {"uv": [1019.75, 508.75], "uv_size": [-298.5, -298.5]} + } + }, + { + "origin": [-86.965, 41.7538, -153.9], + "size": [137, 0, 68], + "pivot": [0.035, 41.7538, -119.9], + "rotation": [0, -90, -90], + "uv": { + "up": {"uv": [1019.75, 508.75], "uv_size": [-298.5, -298.5]} + } + }, + { + "origin": [-86.965, 41.7538, -153.9], + "size": [137, 0, 68], + "pivot": [0.035, 41.7538, -119.9], + "rotation": [0, -90, -180], + "uv": { + "up": {"uv": [1019.75, 508.75], "uv_size": [-298.5, -298.5]} + } + } + ] + }, + { + "name": "bone7", + "parent": "glow", + "pivot": [4.75728, 41.90479, -89.24], + "cubes": [ + { + "origin": [-53.37728, 41.7505, -94.15342], + "size": [63.32, 0, 9.82685], + "pivot": [-4.75728, 41.7505, -89.24], + "rotation": [0, -90, -90], + "uv": { + "up": {"uv": [917.625, 397.75], "uv_size": [-195.875, -65.125]} + } + }, + { + "origin": [-48.62, 46.66206, -93.99915], + "size": [63.32, 0, 9.5183], + "pivot": [0, 46.66206, -89.24], + "rotation": [0, -90, 0], + "uv": { + "up": {"uv": [917.625, 397.75], "uv_size": [-195.875, -65.125]} + } + }, + { + "origin": [-48.62, 36.83895, -93.99915], + "size": [63.32, 0, 9.5183], + "pivot": [0, 36.83895, -89.24], + "rotation": [0, -90, -180], + "uv": { + "up": {"uv": [917.625, 397.75], "uv_size": [-195.875, -65.125]} + } + }, + { + "origin": [-43.86272, 41.75052, -94.15342], + "size": [63.32, 0, 9.82685], + "pivot": [4.75728, 41.75052, -89.24], + "rotation": [0, -90, 90], + "uv": { + "up": {"uv": [917.625, 397.75], "uv_size": [-195.875, -65.125]} + } + } + ] + }, { "name": "bb_main", "parent": "barrelroot", diff --git a/src/main/resources/assets/superbwarfare/lang/en_us.json b/src/main/resources/assets/superbwarfare/lang/en_us.json index 34e4e250b..1c2d69434 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -409,6 +409,7 @@ "entity.superbwarfare.tom_6": "Tom F6F", "entity.superbwarfare.melon_bomb": "Melon Bomb", "entity.superbwarfare.bmp_2": "BMP-2", + "entity.superbwarfare.yx_100": "YX-100 MBT", "entity.superbwarfare.wg_missile": "Wire Guide Missile", "entity.superbwarfare.laser_tower": "Laser Defense Tower", diff --git a/src/main/resources/assets/superbwarfare/lang/zh_cn.json b/src/main/resources/assets/superbwarfare/lang/zh_cn.json index d0fc544ea..f267f6b1a 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -407,6 +407,7 @@ "entity.superbwarfare.tom_6": "汤姆 F6F", "entity.superbwarfare.melon_bomb": "西瓜航弹", "entity.superbwarfare.bmp_2": "BMP-2 履带式步兵战车", + "entity.superbwarfare.yx_100": "YX-100 主战坦克", "entity.superbwarfare.wg_missile": "线控导弹", "entity.superbwarfare.laser_tower": "激光防御塔", diff --git a/src/main/resources/assets/superbwarfare/sounds.json b/src/main/resources/assets/superbwarfare/sounds.json index 71fec0554..3b3f37699 100644 --- a/src/main/resources/assets/superbwarfare/sounds.json +++ b/src/main/resources/assets/superbwarfare/sounds.json @@ -2883,5 +2883,29 @@ "stream": false } ] + }, + "yx_100_fire_3p": { + "sounds": [ + { + "name": "superbwarfare:yx100/yx100_fire_3p", + "stream": false + } + ] + }, + "yx_100_far": { + "sounds": [ + { + "name": "superbwarfare:yx100/yx100_far", + "stream": false + } + ] + }, + "yx_100_veryfar": { + "sounds": [ + { + "name": "superbwarfare:yx100/yx100_veryfar", + "stream": false + } + ] } } \ No newline at end of file diff --git a/src/main/resources/assets/superbwarfare/sounds/yx100/yx100_far.ogg b/src/main/resources/assets/superbwarfare/sounds/yx100/yx100_far.ogg new file mode 100644 index 0000000000000000000000000000000000000000..2a37c671239db446c31e5ee37b59b0a5495f7940 GIT binary patch literal 63858 zcmb5VWmsOZvoE@Ew^FRQ7AY>p-L2S*yB2pZTC})3#ogVdxEFUT?pC1qeQE!DpMCC! zd(K@?2(u>1OlC5_$Rd0)GgAg2f&V#Mdae22PYl#QIb7gkVPzf?Spyp*69;N#Wic8OEfyvw z4rXR%CLI!LLjy+>V-i~%5(8TmXH^nI_WzVJv9RgTyefi#`6q}9fCm6yGFjYS z-=EPS06+(Ttg?@Zo`dbTYo2~Z5^p_2Ua74ziJu-J&0y-Zz3`pq2$<(c!e)#G0MLLh z4ScG@hVWtgEfL->hT=QgfmbRplqnuBkS}3L^N2KVMfi|!j|d(`0|o#)Nf4ei;H{D* zY2bflH2KMf-)IVw4Tot82^>e62S~o6a_{HGDF`Fb11I-a(}tva3w z{UHfJ7X}OYuk5cKB;dY)nZ|#auaf`C`)3vj;QMO1RLt9vYJ#yzg0TyN2@FcbHgmr@y9?Kmb|fT(RUdv1Bx{ zTb!}b0YPPufbpwKvZ%jpaYk-SMpBx`nz|>Ng{Bszr0y4IBL1xc9^ilRvElY@&n?o- zJ@#*&T4`=VQP`x(Ne+>e7*ujq=<_9rl-hnvY2~75hX|^#;IYl

HmwQ{MPSpynqcM%`i>0 z@P%iMHu&onU$9u*YQh%mijd7u-?qn6eO`GlxRY`l_T%4TdIL@_~ zZZ(d#mF_rBGn~?wmGU#yaa;;HHUA&w{w58sym$)C!`n+o?Z-0!*E63=g)3fE2e;Mu znYvrl{1!}w#;3inZ&vvy@2^nD@nYTd@ouh7aEs8TG|OfL9WZrgoPIin@X7=0{ZEGQ zH+%%a<7Tjc+n?c2;uQ&N_?EPQG>*tA3N8-EF&LYv$CFX?xU(6bP;6cx+&=o?6ayy5%s&7 zjul*zmihH_nsoW#0H?|ShbZu%k{Cw|!Q%bJM^Lf@7!_Imi2rlo&M77^2q*tXnz$eU z2lKyp{u|67H5Y4*BWL%M3lK(q$B7bp4l1s%>Xv9+eMNV-_=0S1J z{|h-;pT89*e=7|6wigmf9hzt!np)DFV>MiH)bf8!|BW0lV8BUCi9+muLrxbnfe08p zH6P@z{@KVk37#FC#Bl!S002N&G_uU=R6?PsL_e#bl-f@^~C;jV`RB^iF6cr}b3`z_Hmu@yX>)_g~f6N3c(gT;OnJnVita5lS-v*lf?bRfReNshd z8srStyFB+QO0C`m%vnsZURTpuykS>#(wPLAXgGm1R81Cdbu@0A6+vEF2_~t2FI0-iVvMv ztllQ-9tGyh1xNQS2Q3|pM=i`N9hGlEv-2P=j-c6uz%6X=tp%@5PVxU%WU%11?&fXa zmO0-Lv3cV)Y;`0~{N?-QXiLP&L%+iV_nvFy_&G8HIG|o*gDD&N?YkN>AOsW8M|VJF zh9Ol#2G0lisKU}1M(8YidB&qs2>E%~(o*z>$ilnH@uOTc+3|_OH1vUQG?DUqv8Bz+ z>s2i+=;zR-EwkfsMQG>?<}75(XWucyk~+#u@1}!iH*mom%U+Qas?s3|csaMI&U