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 000000000..2a37c6712 Binary files /dev/null and b/src/main/resources/assets/superbwarfare/sounds/yx100/yx100_far.ogg differ diff --git a/src/main/resources/assets/superbwarfare/sounds/yx100/yx100_fire_1p.ogg b/src/main/resources/assets/superbwarfare/sounds/yx100/yx100_fire_1p.ogg index b8433e046..4f1accec4 100644 Binary files a/src/main/resources/assets/superbwarfare/sounds/yx100/yx100_fire_1p.ogg and b/src/main/resources/assets/superbwarfare/sounds/yx100/yx100_fire_1p.ogg differ diff --git a/src/main/resources/assets/superbwarfare/sounds/yx100/yx100_fire_3p.ogg b/src/main/resources/assets/superbwarfare/sounds/yx100/yx100_fire_3p.ogg new file mode 100644 index 000000000..3765b8f35 Binary files /dev/null and b/src/main/resources/assets/superbwarfare/sounds/yx100/yx100_fire_3p.ogg differ diff --git a/src/main/resources/assets/superbwarfare/sounds/yx100/yx100_veryfar.ogg b/src/main/resources/assets/superbwarfare/sounds/yx100/yx100_veryfar.ogg new file mode 100644 index 000000000..256e7a4c3 Binary files /dev/null and b/src/main/resources/assets/superbwarfare/sounds/yx100/yx100_veryfar.ogg differ diff --git a/src/main/resources/assets/superbwarfare/textures/entity/yx_100.png b/src/main/resources/assets/superbwarfare/textures/entity/yx_100.png index 7080eb168..44d2248c0 100644 Binary files a/src/main/resources/assets/superbwarfare/textures/entity/yx_100.png and b/src/main/resources/assets/superbwarfare/textures/entity/yx_100.png differ diff --git a/src/main/resources/assets/superbwarfare/textures/entity/yx_100_glow.png b/src/main/resources/assets/superbwarfare/textures/entity/yx_100_glow.png new file mode 100644 index 000000000..ef299d26c Binary files /dev/null and b/src/main/resources/assets/superbwarfare/textures/entity/yx_100_glow.png differ