From 68f985227aa12f225635edaf9e7a8a2ba7869672 Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Thu, 12 Dec 2024 15:45:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=92=9E=E5=87=BB=E4=BC=A4?= =?UTF-8?q?=E5=AE=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/model/entity/SpeedboatModel.java | 7 +- .../renderer/entity/SpeedboatRenderer.java | 2 - .../client/screens/KillMessageOverlay.java | 3 + .../superbwarfare/entity/SpeedboatEntity.java | 112 ++++++++++-------- .../superbwarfare/init/ModDamageTypes.java | 5 + .../superbwarfare/init/ModSounds.java | 1 + .../animations/speedboat.animation.json | 32 +++++ .../assets/superbwarfare/lang/en_us.json | 3 + .../assets/superbwarfare/lang/zh_cn.json | 3 + .../assets/superbwarfare/sounds.json | 8 ++ .../superbwarfare/sounds/speedboat/engine.ogg | Bin 6727 -> 9663 bytes .../superbwarfare/sounds/vehicle_strike.ogg | Bin 0 -> 12813 bytes .../screens/damage_types/vehicle_strike.png | Bin 0 -> 552 bytes .../tags/damage_type/bypasses_armor.json | 3 +- .../tags/damage_type/bypasses_effects.json | 3 +- .../damage_type/bypasses_enchantments.json | 3 +- .../tags/damage_type/bypasses_resistance.json | 3 +- .../damage_type/vehicle_strike.json | 5 + 18 files changed, 135 insertions(+), 58 deletions(-) create mode 100644 src/main/resources/assets/superbwarfare/animations/speedboat.animation.json create mode 100644 src/main/resources/assets/superbwarfare/sounds/vehicle_strike.ogg create mode 100644 src/main/resources/assets/superbwarfare/textures/screens/damage_types/vehicle_strike.png create mode 100644 src/main/resources/data/superbwarfare/damage_type/vehicle_strike.json diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/entity/SpeedboatModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/entity/SpeedboatModel.java index 1fc68ad5c..8f1f403e9 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/entity/SpeedboatModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/entity/SpeedboatModel.java @@ -24,7 +24,7 @@ public class SpeedboatModel extends GeoModel { @Override public ResourceLocation getModelResource(SpeedboatEntity entity) { - return ModUtils.loc("geo/speedboat.geo.json"); + return new ResourceLocation(ModUtils.MODID, "geo/speedboat.geo.json"); } @Override @@ -42,9 +42,8 @@ public class SpeedboatModel extends GeoModel { rotorSpeed = Mth.lerp(0.1f * times, rotorSpeed, 10 * animatable.getEntityData().get(POWER)); rotor.setRotZ(rotor.getRotZ() + rotorSpeed); + lerpRotY = Mth.lerp(0.5f * times, lerpRotY, animatable.getEntityData().get(POWER) > 0 ? animatable.getEntityData().get(DELTA_ROT) : -animatable.getEntityData().get(DELTA_ROT)); - lerpRotY = Mth.lerp(0.5f * times, lerpRotY, animatable.getEntityData().get(DELTA_ROT)); - - duo.setRotY((animatable.getEntityData().get(POWER) > 0 ? 0.5f : -0.5f) * lerpRotY); + duo.setRotY(0.5f * lerpRotY); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/SpeedboatRenderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/SpeedboatRenderer.java index 79e5fee21..1d2d0249a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/SpeedboatRenderer.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/SpeedboatRenderer.java @@ -15,8 +15,6 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class SpeedboatRenderer extends GeoEntityRenderer { - public static float lerpRotY = 0f; - public SpeedboatRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new SpeedboatModel()); } diff --git a/src/main/java/com/atsuishio/superbwarfare/client/screens/KillMessageOverlay.java b/src/main/java/com/atsuishio/superbwarfare/client/screens/KillMessageOverlay.java index c0ead8e1c..5c2618406 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/screens/KillMessageOverlay.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/screens/KillMessageOverlay.java @@ -44,6 +44,7 @@ public class KillMessageOverlay { private static final ResourceLocation BURN = ModUtils.loc("textures/screens/damage_types/burn.png"); private static final ResourceLocation DRONE = ModUtils.loc("textures/screens/damage_types/drone.png"); private static final ResourceLocation LASER = ModUtils.loc("textures/screens/damage_types/laser.png"); + private static final ResourceLocation VEHICLE = ModUtils.loc("textures/screens/damage_types/vehicle_strike.png"); private static final ResourceLocation WORLD_PEACE_STAFF = ModUtils.loc("textures/gun_icon/compat/world_peace_staff.png"); @@ -278,6 +279,8 @@ public class KillMessageOverlay { icon = DRONE; } else if (record.damageType == ModDamageTypes.LASER || record.damageType == ModDamageTypes.LASER_HEADSHOT) { icon = LASER; + } else if (record.damageType == ModDamageTypes.VEHICLE_STRIKE) { + icon = VEHICLE; } else { icon = GENERIC; } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/SpeedboatEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/SpeedboatEntity.java index b4bd4781f..208e90965 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/SpeedboatEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/SpeedboatEntity.java @@ -87,11 +87,15 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity, public void addAdditionalSaveData(CompoundTag compound) { compound.putFloat("Health", this.entityData.get(HEALTH)); compound.putFloat("Energy", this.entityData.get(ENERGY)); + compound.putFloat("Power", this.entityData.get(POWER)); + compound.putFloat("DeltaRot", this.entityData.get(DELTA_ROT)); } @Override public void readAdditionalSaveData(CompoundTag compound) { this.entityData.set(ENERGY, compound.getFloat("Energy")); + this.entityData.set(POWER, compound.getFloat("Power")); + this.entityData.set(DELTA_ROT, compound.getFloat("DeltaRot")); if (compound.contains("Health")) { this.entityData.set(HEALTH, compound.getFloat("Health")); } else { @@ -109,13 +113,14 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity, } //TODO 创飞碰到的碰撞箱小于该船的实体,且本体速度不会减少太多 + public static boolean canVehicleCollide(Entity pVehicle, Entity pEntity) { return (pEntity.canBeCollidedWith() || pEntity.isPushable()) && !pVehicle.isPassengerOfSameVehicle(pEntity); } @Override public boolean canBeCollidedWith() { - return super.canBeCollidedWith(); + return false; } @Override @@ -212,10 +217,7 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity, // player.displayClientMessage(Component.literal("Angle" + new java.text.DecimalFormat("##.##").format(Mth.abs(90 - (float)calculateAngle(this.getDeltaMovement(), this.getViewVector(1))) / 90)), true); // } - this.inputLeft = this.getPersistentData().getBoolean("left"); - this.inputRight = this.getPersistentData().getBoolean("right"); - this.inputUp = this.getPersistentData().getBoolean("forward"); - this.inputDown = this.getPersistentData().getBoolean("backward"); + double fluidFloat = -0.04; @@ -223,7 +225,7 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity, if (this.isInWater()) { fluidFloat = -0.025 + 0.05 * getSubmergedHeight(this); - float f = 0.85f + 0.09f * Mth.abs(90 - (float) calculateAngle(this.getDeltaMovement(), this.getViewVector(1))) / 90; + float f = 0.87f + 0.09f * Mth.abs(90 - (float) calculateAngle(this.getDeltaMovement(), this.getViewVector(1))) / 90; this.setDeltaMovement(this.getDeltaMovement().add(this.getViewVector(1).normalize().scale(0.04 * this.getDeltaMovement().length()))); this.setDeltaMovement(this.getDeltaMovement().multiply(f, 0.85, f)); } else if (this.onGround()) { @@ -255,7 +257,7 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity, crushEntities(this.getDeltaMovement()); } - collideBlock(); + collBlock(); this.refreshDimensions(); } @@ -267,73 +269,86 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity, double entitySize = entity.getBbWidth() * entity.getBbHeight(); double thisSize = this.getBbWidth() * this.getBbHeight(); - double f = Math.min(entitySize / thisSize, 2); - double f1 = thisSize / entitySize; + double f = Math.min(entitySize / thisSize, 2); + double f1 = Math.min(thisSize / entitySize, 4); entity.push(f1 * velAdd.x, f1 * velAdd.y, f1 * velAdd.z); - this.push(-f * velAdd.x, -f * velAdd.y, -f * velAdd.z); + if (!(entity instanceof TargetEntity)) { + this.push(-f * velAdd.x, -f * velAdd.y, -f * velAdd.z); + } + + if (velocity.length() > 0.2 && entity.isAlive()) { + if (!this.level().isClientSide) { + this.level().playSound(null, this, ModSounds.VEHICLE_STRIKE.get(), this.getSoundSource(), 1, 1); + } + entity.hurt(ModDamageTypes.causeVehicleStrikeDamage(this.level().registryAccess(), this, this.getFirstPassenger() == null ? this : this.getFirstPassenger() ), (float) (25 * velocity.length())); + entity.invulnerableTime = 10; + } + } } - public void collideBlock() { + public void collBlock() { AABB aabb = AABB.ofSize(new Vec3(this.getX(), this.getY() + this.getBbHeight() * 0.5, this.getZ()), 5, 2.6, 5); - BlockPos.betweenClosedStream(aabb).forEach((pos) -> { - BlockState blockstate = this.level().getBlockState(pos); + BlockPos.betweenClosedStream(aabb).forEach((block) -> { + BlockState blockstate = this.level().getBlockState(block); if (blockstate.is(Blocks.LILY_PAD)) { - this.level().destroyBlock(pos, true); + BlockPos blockPos = BlockPos.containing(new Vec3(block.getX(), block.getY(), block.getY())); + this.level().destroyBlock(blockPos, true); } + }); } private void controlBoat() { - if (this.isVehicle()) { - Entity passenger0 = this.getPassengers().isEmpty() ? null : this.getPassengers().get(0); + Entity passenger0 = this.getPassengers().isEmpty() ? null : this.getPassengers().get(0); - float diffY = 0; + float diffY = 0; - diffY = (float) Mth.lerp(0.1 * diffY, diffY, 0); + diffY = (float) Mth.lerp(0.1 * diffY, diffY, 0); - if (this.inputUp) { - this.entityData.set(POWER, this.entityData.get(POWER) + 0.08f); + if (this.getPersistentData().getBoolean("forward")) { + this.entityData.set(POWER, this.entityData.get(POWER) + 0.08f); + } + + if (this.getPersistentData().getBoolean("backward")) { + this.entityData.set(POWER, this.entityData.get(POWER) - 0.12f); + if (this.getPersistentData().getBoolean("left")) { + diffY = Mth.clamp(diffY + 1f, 0, 5); + handleSetDiffY(diffY); + } else if (this.getPersistentData().getBoolean("right")) { + diffY = Mth.clamp(diffY - 1f, -5, 0); + handleSetDiffY(diffY); } - - if (this.inputDown) { - this.entityData.set(POWER, this.entityData.get(POWER) - 0.12f); - if (this.inputLeft) { - diffY = Mth.clamp(diffY + 1f, 0, 5); - handleSetDiffY(diffY); - } else if (this.inputRight) { - diffY = Mth.clamp(diffY - 1f, -5, 0); - handleSetDiffY(diffY); - } - } else { - if (this.inputLeft) { - diffY = Mth.clamp(diffY - 1f, -5, 0); - handleSetDiffY(diffY); - } else if (this.inputRight) { - diffY = Mth.clamp(diffY + 1f, 0, 5); - handleSetDiffY(diffY); - } + } else { + if (this.getPersistentData().getBoolean("left")) { + diffY = Mth.clamp(diffY - 1f, -5, 0); + handleSetDiffY(diffY); + } else if (this.getPersistentData().getBoolean("right")) { + diffY = Mth.clamp(diffY + 1f, 0, 5); + handleSetDiffY(diffY); } + } - if (level().isClientSide) { - level().playLocalSound(this.getX(), this.getY() + this.getBbHeight() * 0.5, this.getZ(), this.getEngineSound(), this.getSoundSource(), Math.min((this.inputUp || this.inputDown ? 7.5f : 5f) * 2 * Mth.abs(this.entityData.get(POWER)), 0.25f), (random.nextFloat() * 0.1f + 0.7f), false); - } + if (level().isClientSide) { + level().playLocalSound(this.getX(), this.getY() + this.getBbHeight() * 0.5, this.getZ(), this.getEngineSound(), this.getSoundSource(), Math.min((this.inputUp || this.inputDown ? 7.5f : 5f) * 2 * Mth.abs(this.entityData.get(POWER)), 0.25f), (random.nextFloat() * 0.1f + 1f), false); + } - this.entityData.set(POWER, this.entityData.get(POWER) * 0.3f); + this.entityData.set(POWER, this.entityData.get(POWER) * 0.3f); - this.entityData.set(DELTA_ROT, this.entityData.get(DELTA_ROT) * 0.8f); + this.flyDist = this.entityData.get(POWER); - if (this.isInWater() || this.isUnderWater()) { - this.setYRot(this.entityData.get(ROT_Y) + this.entityData.get(DELTA_ROT)); - this.setDeltaMovement(this.getDeltaMovement().add(this.getViewVector(1).scale(this.entityData.get(POWER)))); - } + this.entityData.set(DELTA_ROT, this.entityData.get(DELTA_ROT) * 0.8f); + + if (this.isInWater() || this.isUnderWater()) { + this.setYRot(this.entityData.get(ROT_Y) + this.entityData.get(DELTA_ROT)); + this.setDeltaMovement(this.getDeltaMovement().add(this.getViewVector(1).scale(this.entityData.get(POWER)))); } } private void handleSetDiffY(float diffY) { - this.entityData.set(DELTA_ROT, (float) Mth.clamp(diffY * 1.3 * Math.max(4 * this.getDeltaMovement().length(), 0.5), -2, 2)); + this.entityData.set(DELTA_ROT, (float) Mth.clamp(diffY * 1.3 * Math.max(4 * this.getDeltaMovement().length(), 0.5), -2 ,2)); } private void handleClientSync() { @@ -440,6 +455,7 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity, this.clampRotation(entity); } + @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModDamageTypes.java b/src/main/java/com/atsuishio/superbwarfare/init/ModDamageTypes.java index 6c653e65c..345f316fe 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModDamageTypes.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModDamageTypes.java @@ -30,6 +30,7 @@ public class ModDamageTypes { public static final ResourceKey DRONE_HIT = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "drone_hit")); public static final ResourceKey LASER = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "laser")); public static final ResourceKey LASER_HEADSHOT = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "laser_headshot")); + public static final ResourceKey VEHICLE_STRIKE = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "vehicle_strike")); public static DamageSource causeGunFireDamage(RegistryAccess registryAccess, @Nullable Entity directEntity, @Nullable Entity attacker) { return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(GUN_FIRE), directEntity, attacker); @@ -83,6 +84,10 @@ public class ModDamageTypes { return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(LASER_HEADSHOT), directEntity, attacker); } + public static DamageSource causeVehicleStrikeDamage(RegistryAccess registryAccess, @Nullable Entity directEntity, @Nullable Entity attacker) { + return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(VEHICLE_STRIKE), directEntity, attacker); + } + private static class DamageMessages extends DamageSource { public DamageMessages(Holder.Reference typeReference) { super(typeReference); diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java b/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java index 90e727077..2a0bf9154 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java @@ -344,5 +344,6 @@ public class ModSounds { public static final RegistryObject ANNIHILATOR_RELOAD = REGISTRY.register("annihilator_reload", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "annihilator_reload"))); public static final RegistryObject BOAT_ENGINE = REGISTRY.register("boat_engine", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "boat_engine"))); + public static final RegistryObject VEHICLE_STRIKE = REGISTRY.register("vehicle_strike", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "vehicle_strike"))); } diff --git a/src/main/resources/assets/superbwarfare/animations/speedboat.animation.json b/src/main/resources/assets/superbwarfare/animations/speedboat.animation.json new file mode 100644 index 000000000..934dbe5df --- /dev/null +++ b/src/main/resources/assets/superbwarfare/animations/speedboat.animation.json @@ -0,0 +1,32 @@ +{ + "format_version": "1.8.0", + "animations": { + "animation.speedboat.idle": { + "loop": true + }, + "animation.speedboat.forward": { + "loop": true, + "animation_length": 0.5, + "bones": { + "Rotor": { + "rotation": { + "0.0": [0, 0, 0], + "0.5": [0, 0, 720] + } + } + } + }, + "animation.speedboat.backward": { + "loop": true, + "animation_length": 0.5, + "bones": { + "Rotor": { + "rotation": { + "0.0": [0, 0, 0], + "0.5": [0, 0, -720] + } + } + } + } + } +} \ 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 ab8acc52b..96a96bafd 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -335,6 +335,9 @@ "death.attack.laser_headshot": "%1$s的脑子被激光洞穿了", "death.attack.laser_headshot.entity": "%1$s被%2$s用激光射穿了脑袋", "death.attack.laser_headshot.item": "%1$s的脑子被%2$s用%3$s发射的激光洞穿了", + "death.attack.vehicle_strike": "%1$s被创死了", + "death.attack.vehicle_strike.entity": "%1$s被%2$s创死了", + "death.attack.vehicle_strike.item": "%1$s的被%2$s用%3$s创死了", "entity.superbwarfare.projectile": "Bullet", "entity.superbwarfare.projectile_mortar_shell": "Mortar Shell", diff --git a/src/main/resources/assets/superbwarfare/lang/zh_cn.json b/src/main/resources/assets/superbwarfare/lang/zh_cn.json index 059687680..4e83da58d 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -335,6 +335,9 @@ "death.attack.laser_headshot": "%1$s的脑子被激光洞穿了", "death.attack.laser_headshot.entity": "%1$s被%2$s用激光射穿了脑袋", "death.attack.laser_headshot.item": "%1$s的脑子被%2$s用%3$s发射的激光洞穿了", + "death.attack.vehicle_strike": "%1$s被创死了", + "death.attack.vehicle_strike.entity": "%1$s被%2$s创死了", + "death.attack.vehicle_strike.item": "%1$s的被%2$s用%3$s创死了", "entity.superbwarfare.projectile": "子弹", "entity.superbwarfare.projectile_mortar_shell": "迫击炮弹", diff --git a/src/main/resources/assets/superbwarfare/sounds.json b/src/main/resources/assets/superbwarfare/sounds.json index 3361c5184..93642f6de 100644 --- a/src/main/resources/assets/superbwarfare/sounds.json +++ b/src/main/resources/assets/superbwarfare/sounds.json @@ -2437,5 +2437,13 @@ "stream": false } ] + }, + "vehicle_strike": { + "sounds": [ + { + "name": "superbwarfare:vehicle_strike", + "stream": false + } + ] } } \ No newline at end of file diff --git a/src/main/resources/assets/superbwarfare/sounds/speedboat/engine.ogg b/src/main/resources/assets/superbwarfare/sounds/speedboat/engine.ogg index 171079285aa91210ed220327690d604db5ae316d..b20383a231b978d19b33ae3807bb8a3559c4bbef 100644 GIT binary patch literal 9663 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