From 0f100318758d6e4545250bd7cc30558072a6469d Mon Sep 17 00:00:00 2001 From: Light_Quanta Date: Sun, 30 Mar 2025 10:42:03 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E6=9B=B4=E6=96=B0=E5=86=85?= =?UTF-8?q?=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/entity/WaterMaskEntityModel.java | 24 +++++++++ .../renderer/entity/SpeedboatRenderer.java | 11 +++++ .../entity/WaterMaskEntityRenderer.java | 40 +++++++++++++++ .../config/server/ExplosionConfig.java | 4 +- .../superbwarfare/entity/WaterMaskEntity.java | 49 +++++++++++++++++++ .../projectile/FastThrowableProjectile.java | 10 +++- .../entity/projectile/RpgRocketEntity.java | 26 +++++++--- .../entity/vehicle/DroneEntity.java | 24 ++++----- .../entity/vehicle/SpeedboatEntity.java | 2 +- .../entity/vehicle/Yx100Entity.java | 4 +- .../event/ClientEventHandler.java | 14 +++--- .../superbwarfare/init/ModEntities.java | 26 +++++----- .../init/ModEntityRenderers.java | 1 + .../item/gun/launcher/RpgItem.java | 4 +- .../mixins/GameRendererMixin.java | 4 +- .../superbwarfare/tools/CustomExplosion.java | 2 +- 16 files changed, 196 insertions(+), 49 deletions(-) create mode 100644 src/main/java/com/atsuishio/superbwarfare/client/model/entity/WaterMaskEntityModel.java create mode 100644 src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/WaterMaskEntityRenderer.java create mode 100644 src/main/java/com/atsuishio/superbwarfare/entity/WaterMaskEntity.java diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/entity/WaterMaskEntityModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/entity/WaterMaskEntityModel.java new file mode 100644 index 000000000..e160b2717 --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/entity/WaterMaskEntityModel.java @@ -0,0 +1,24 @@ +package com.atsuishio.superbwarfare.client.model.entity; + +import com.atsuishio.superbwarfare.Mod; +import com.atsuishio.superbwarfare.entity.WaterMaskEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class WaterMaskEntityModel extends GeoModel { + + @Override + public ResourceLocation getAnimationResource(WaterMaskEntity entity) { + return null; + } + + @Override + public ResourceLocation getModelResource(WaterMaskEntity entity) { + return Mod.loc("geo/water_mask_entity.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(WaterMaskEntity entity) { + return Mod.loc("textures/entity/mortar_shell.png"); + } +} 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 faaccec2e..05c24efdd 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 @@ -4,7 +4,9 @@ import com.atsuishio.superbwarfare.client.layer.vehicle.SpeedBoatHeatLayer; import com.atsuishio.superbwarfare.client.layer.vehicle.SpeedBoatLayer; import com.atsuishio.superbwarfare.client.layer.vehicle.SpeedBoatPowerLayer; import com.atsuishio.superbwarfare.client.model.entity.SpeedboatModel; +import com.atsuishio.superbwarfare.entity.WaterMaskEntity; import com.atsuishio.superbwarfare.entity.vehicle.SpeedboatEntity; +import com.atsuishio.superbwarfare.init.ModEntities; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Axis; @@ -13,6 +15,7 @@ import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; +import net.minecraft.world.entity.Entity; import net.minecraft.world.phys.Vec3; import software.bernie.geckolib.cache.object.BakedGeoModel; import software.bernie.geckolib.cache.object.GeoBone; @@ -50,6 +53,14 @@ public class SpeedboatRenderer extends GeoEntityRenderer { poseStack.rotateAround(Axis.XP.rotationDegrees(Mth.lerp(partialTicks, entityIn.xRotO, entityIn.getXRot())), (float) root.x, (float) root.y, (float) root.z); poseStack.rotateAround(Axis.ZP.rotationDegrees(Mth.lerp(partialTicks, entityIn.prevRoll, entityIn.getRoll())), (float) root.x, (float) root.y, (float) root.z); super.render(entityIn, entityYaw, partialTicks, poseStack, bufferIn, packedLightIn); + + poseStack.pushPose(); + poseStack.scale(2.4f, 0.4f, 4.05f); + poseStack.translate(0, 1.5, -0.22); + Entity entity = new WaterMaskEntity(ModEntities.WATER_MASK.get(), entityIn.level()); + entityRenderDispatcher.render(entity, 0, 0, 0, entityYaw, partialTicks, poseStack, bufferIn, packedLightIn); + poseStack.popPose(); + poseStack.popPose(); } diff --git a/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/WaterMaskEntityRenderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/WaterMaskEntityRenderer.java new file mode 100644 index 000000000..0e3c23a35 --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/WaterMaskEntityRenderer.java @@ -0,0 +1,40 @@ +package com.atsuishio.superbwarfare.client.renderer.entity; + +import com.atsuishio.superbwarfare.client.model.entity.WaterMaskEntityModel; +import com.atsuishio.superbwarfare.entity.WaterMaskEntity; +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.entity.EntityRendererProvider; +import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.NotNull; +import software.bernie.geckolib.cache.object.BakedGeoModel; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class WaterMaskEntityRenderer extends GeoEntityRenderer { + + public WaterMaskEntityRenderer(EntityRendererProvider.Context renderManager) { + super(renderManager, new WaterMaskEntityModel()); + } + + @Override + public RenderType getRenderType(WaterMaskEntity animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) { + return RenderType.waterMask(); + } + + @Override + public void preRender(PoseStack poseStack, WaterMaskEntity entity, BakedGeoModel model, MultiBufferSource bufferSource, VertexConsumer buffer, boolean isReRender, float partialTick, int packedLight, int packedOverlay, int color) { + float scale = 1f; + this.scaleHeight = scale; + this.scaleWidth = scale; + super.preRender(poseStack, entity, model, bufferSource, buffer, isReRender, partialTick, 15, packedOverlay, color); + } + + @Override + public void render(@NotNull WaterMaskEntity entityIn, float entityYaw, float partialTicks, PoseStack poseStack, MultiBufferSource bufferIn, int packedLightIn) { + poseStack.pushPose(); + super.render(entityIn, entityYaw, partialTicks, poseStack, bufferIn, packedLightIn); + poseStack.popPose(); + } +} diff --git a/src/main/java/com/atsuishio/superbwarfare/config/server/ExplosionConfig.java b/src/main/java/com/atsuishio/superbwarfare/config/server/ExplosionConfig.java index ef09fb1b3..61e20bb0e 100644 --- a/src/main/java/com/atsuishio/superbwarfare/config/server/ExplosionConfig.java +++ b/src/main/java/com/atsuishio/superbwarfare/config/server/ExplosionConfig.java @@ -122,10 +122,10 @@ public class ExplosionConfig { builder.push("RPG"); - builder.comment("The explosion damage of RPG"); + builder.comment("The explosion damage of RPG in the drone"); RPG_EXPLOSION_DAMAGE = builder.defineInRange("rpg_explosion_damage", 130, 1, Integer.MAX_VALUE); - builder.comment("The explosion radius of RPG"); + builder.comment("The explosion radius of RPG in the drone"); RPG_EXPLOSION_RADIUS = builder.defineInRange("rpg_explosion_radius", 10, 1, Integer.MAX_VALUE); builder.pop(); diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/WaterMaskEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/WaterMaskEntity.java new file mode 100644 index 000000000..a3c18e834 --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/entity/WaterMaskEntity.java @@ -0,0 +1,49 @@ +package com.atsuishio.superbwarfare.entity; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.Level; +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 WaterMaskEntity extends Entity implements GeoEntity { + private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); + + public WaterMaskEntity(EntityType type, Level level) { + super(type, level); + noPhysics = true; + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar data) { + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.cache; + } + + + @Override + protected void defineSynchedData(SynchedEntityData.@NotNull Builder builder) { + } + + @Override + public void baseTick() { + discard(); + } + + @Override + protected void readAdditionalSaveData(@NotNull CompoundTag compound) { + } + + @Override + protected void addAdditionalSaveData(@NotNull CompoundTag compound) { + + } +} \ No newline at end of file diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/FastThrowableProjectile.java b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/FastThrowableProjectile.java index 911807664..1144f0eb1 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/FastThrowableProjectile.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/FastThrowableProjectile.java @@ -9,6 +9,8 @@ import net.minecraft.world.level.Level; import net.neoforged.neoforge.entity.IEntityWithComplexSpawn; import net.neoforged.neoforge.network.PacketDistributor; +import javax.annotation.Nullable; + public abstract class FastThrowableProjectile extends ThrowableItemProjectile implements CustomSyncMotionEntity, IEntityWithComplexSpawn { public FastThrowableProjectile(EntityType pEntityType, Level pLevel) { @@ -19,8 +21,12 @@ public abstract class FastThrowableProjectile extends ThrowableItemProjectile im super(pEntityType, pX, pY, pZ, pLevel); } - public FastThrowableProjectile(EntityType pEntityType, LivingEntity pShooter, Level pLevel) { - super(pEntityType, pShooter, pLevel); + public FastThrowableProjectile(EntityType pEntityType, @Nullable LivingEntity pShooter, Level pLevel) { + super(pEntityType, pLevel); + this.setOwner(pShooter); + if (pShooter != null) { + this.setPos(pShooter.getX(), pShooter.getEyeY() - (double) 0.1F, pShooter.getZ()); + } } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/RpgRocketEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/RpgRocketEntity.java index 348eafd22..6f9ca50c4 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/RpgRocketEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/RpgRocketEntity.java @@ -1,6 +1,5 @@ package com.atsuishio.superbwarfare.entity.projectile; -import com.atsuishio.superbwarfare.config.server.ExplosionConfig; import com.atsuishio.superbwarfare.init.ModDamageTypes; import com.atsuishio.superbwarfare.init.ModEntities; import com.atsuishio.superbwarfare.init.ModItems; @@ -38,7 +37,8 @@ public class RpgRocketEntity extends FastThrowableProjectile implements GeoEntit private float monsterMultiplier = 0.0f; private float damage = 250f; - private float explosionRadius = 1; + private float explosionDamage = 200f; + private float explosionRadius = 10; public RpgRocketEntity(EntityType type, Level world) { super(type, world); @@ -50,11 +50,21 @@ public class RpgRocketEntity extends FastThrowableProjectile implements GeoEntit this.noCulling = true; } - public RpgRocketEntity(LivingEntity entity, Level level, float damage) { + public RpgRocketEntity(LivingEntity entity, Level level) { super(ModEntities.RPG_ROCKET.get(), entity, level); + } + + public RpgRocketEntity(LivingEntity entity, Level level, float damage) { + this(entity, level); this.damage = damage; } + public RpgRocketEntity(LivingEntity entity, Level level, float damage, float explosionDamage, float explosionRadius) { + this(entity, level, damage); + this.explosionDamage = explosionDamage; + this.explosionRadius = explosionRadius; + } + public void setExplosionRadius(float explosionRadius) { this.explosionRadius = explosionRadius; } @@ -63,6 +73,10 @@ public class RpgRocketEntity extends FastThrowableProjectile implements GeoEntit this.damage = damage; } + public void setExplosionDamage(float explosionDamage) { + this.explosionDamage = explosionDamage; + } + public void setMonsterMultiplier(float monsterMultiplier) { this.monsterMultiplier = monsterMultiplier; @@ -109,7 +123,7 @@ public class RpgRocketEntity extends FastThrowableProjectile implements GeoEntit if (this.tickCount > 1) { if (this.level() instanceof ServerLevel) { - ProjectileTool.causeCustomExplode(this, ExplosionConfig.RPG_EXPLOSION_DAMAGE.get(), ExplosionConfig.RPG_EXPLOSION_RADIUS.get() * explosionRadius, this.monsterMultiplier); + ProjectileTool.causeCustomExplode(this, this.explosionDamage, this.explosionRadius, this.monsterMultiplier); } } @@ -128,7 +142,7 @@ public class RpgRocketEntity extends FastThrowableProjectile implements GeoEntit if (this.tickCount > 1) { if (this.level() instanceof ServerLevel) { - ProjectileTool.causeCustomExplode(this, ExplosionConfig.RPG_EXPLOSION_DAMAGE.get(), ExplosionConfig.RPG_EXPLOSION_RADIUS.get() * explosionRadius, this.monsterMultiplier); + ProjectileTool.causeCustomExplode(this, this.explosionDamage, this.explosionRadius, this.monsterMultiplier); } } @@ -155,7 +169,7 @@ public class RpgRocketEntity extends FastThrowableProjectile implements GeoEntit if (this.tickCount > 100 || this.isInWater()) { if (this.level() instanceof ServerLevel) { - ProjectileTool.causeCustomExplode(this, ExplosionConfig.RPG_EXPLOSION_DAMAGE.get(), ExplosionConfig.RPG_EXPLOSION_RADIUS.get() * explosionRadius, this.monsterMultiplier); + ProjectileTool.causeCustomExplode(this, this.explosionDamage, this.explosionRadius, this.monsterMultiplier); } this.discard(); } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/DroneEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/DroneEntity.java index 3adb5494c..dc505ef9a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/DroneEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/DroneEntity.java @@ -473,33 +473,33 @@ public class DroneEntity extends MobileVehicleEntity implements GeoEntity { } } - public void hitEntityCrash(Player controller, Entity target) { + public void hitEntityCrash(Player player, Entity target) { if (lastTickSpeed > 0.12) { if (this.entityData.get(KAMIKAZE_MODE) != 0 && 20 * lastTickSpeed > this.getHealth()) { if (this.entityData.get(KAMIKAZE_MODE) == 1) { - Entity mortarShell = new MortarShellEntity(controller, controller.level()); - target.hurt(ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), mortarShell, controller), ExplosionConfig.DRONE_KAMIKAZE_HIT_DAMAGE.get()); + var mortarShell = new MortarShellEntity(player, this.level()); + target.hurt(ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), mortarShell, player), ExplosionConfig.DRONE_KAMIKAZE_HIT_DAMAGE.get()); target.invulnerableTime = 0; } else if (this.entityData.get(KAMIKAZE_MODE) == 2) { - Entity c4 = new C4Entity(controller, controller.level()); - target.hurt(ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), c4, controller), ExplosionConfig.DRONE_KAMIKAZE_HIT_DAMAGE_C4.get()); + var c4 = new C4Entity(player, this.level()); + target.hurt(ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), c4, player), ExplosionConfig.DRONE_KAMIKAZE_HIT_DAMAGE_C4.get()); target.invulnerableTime = 0; } else if (this.entityData.get(KAMIKAZE_MODE) == 3) { - Entity rpg = new RpgRocketEntity(controller, controller.level(), ExplosionConfig.RPG_EXPLOSION_DAMAGE.get()); - target.hurt(ModDamageTypes.causeCannonFireDamage(this.level().registryAccess(), rpg, controller), ExplosionConfig.DRONE_KAMIKAZE_HIT_DAMAGE_RPG.get()); + var rpg = new RpgRocketEntity(player, this.level()); + target.hurt(ModDamageTypes.causeCannonFireDamage(this.level().registryAccess(), rpg, player), ExplosionConfig.DRONE_KAMIKAZE_HIT_DAMAGE_RPG.get()); target.invulnerableTime = 0; } - if (controller != null && controller.getMainHandItem().is(ModItems.MONITOR.get())) { - var stack = controller.getMainHandItem(); + if (player != null && player.getMainHandItem().is(ModItems.MONITOR.get())) { + var stack = player.getMainHandItem(); var tag = NBTTool.getTag(stack); - Monitor.disLink(tag, controller); + Monitor.disLink(tag, player); NBTTool.saveTag(stack, tag); } } - target.hurt(ModDamageTypes.causeDroneHitDamage(this.level().registryAccess(), this, controller), (float) (5 * lastTickSpeed)); + target.hurt(ModDamageTypes.causeDroneHitDamage(this.level().registryAccess(), this, player), (float) (5 * lastTickSpeed)); - this.hurt(new DamageSource(level().registryAccess().registryOrThrow(Registries.DAMAGE_TYPE).getHolderOrThrow(DamageTypes.EXPLOSION), Objects.requireNonNullElse(controller, this)), (float) (((this.entityData.get(KAMIKAZE_MODE) != 0) ? 20 : 4) * lastTickSpeed)); + this.hurt(new DamageSource(level().registryAccess().registryOrThrow(Registries.DAMAGE_TYPE).getHolderOrThrow(DamageTypes.EXPLOSION), Objects.requireNonNullElse(player, this)), (float) (((this.entityData.get(KAMIKAZE_MODE) != 0) ? 20 : 4) * lastTickSpeed)); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java index d5fa777e7..56ef98b7a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java @@ -292,7 +292,7 @@ public class SpeedboatEntity extends ContainerMobileVehicleEntity implements Geo this.entityData.set(POWER, this.entityData.get(POWER) * 0.96f); this.entityData.set(DELTA_ROT, this.entityData.get(DELTA_ROT) * 0.8f); - this.setRotorRot(this.getRotorRot() + 10 * this.entityData.get(POWER)); + this.setRotorRot(this.getRotorRot() + 30 * this.entityData.get(POWER)); this.setRudderRot(Mth.clamp(this.getRudderRot() - this.entityData.get(DELTA_ROT), -1.25f, 1.25f) * 0.7f * (this.entityData.get(POWER) > 0 ? 1 : -1)); if (this.isInWater() || this.isUnderWater()) { 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 a84f1a368..020768bd9 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Yx100Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Yx100Entity.java @@ -403,7 +403,7 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti for (Entity target : level.getEntitiesOfClass(Entity.class, new AABB(center, center).inflate(8), e -> true).stream().sorted(Comparator.comparingDouble(e -> e.distanceToSqr(center))).toList()) { if (target instanceof ServerPlayer serverPlayer) { - PacketDistributor.sendToPlayer(serverPlayer, new ShakeClientMessage(10, 8, 40, this.getX(), this.getEyeY(), this.getZ())); + PacketDistributor.sendToPlayer(serverPlayer, new ShakeClientMessage(10, 8, 60, this.getX(), this.getEyeY(), this.getZ())); } } } @@ -439,7 +439,7 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti for (Entity target : level.getEntitiesOfClass(Entity.class, new AABB(center, center).inflate(4), e -> true).stream().sorted(Comparator.comparingDouble(e -> e.distanceToSqr(center))).toList()) { if (target instanceof ServerPlayer serverPlayer) { - PacketDistributor.sendToPlayer(serverPlayer, new ShakeClientMessage(6, 4, 8, this.getX(), this.getEyeY(), this.getZ())); + PacketDistributor.sendToPlayer(serverPlayer, new ShakeClientMessage(6, 4, 6, this.getX(), this.getEyeY(), this.getZ())); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java index ef9eaf770..ddb2bff19 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java @@ -870,7 +870,7 @@ public class ClientEventHandler { float pitch = event.getPitch(); float roll = event.getRoll(); - shakeTime = Mth.lerp(0.175 * times, shakeTime, 0); + shakeTime = Mth.lerp(0.05 * event.getPartialTick(), shakeTime, 0); if (player != null && shakeTime > 0) { float shakeRadiusAmplitude = (float) Mth.clamp(1 - player.position().distanceTo(new Vec3(shakePos[0], shakePos[1], shakePos[2])) / shakeRadius, 0, 1); @@ -878,13 +878,13 @@ public class ClientEventHandler { boolean onVehicle = player.getVehicle() != null; if (shakeType > 0) { - event.setYaw((float) (yaw + (shakeTime * Math.sin(0.5 * Math.PI * shakeTime) * shakeAmplitude * shakeRadiusAmplitude * shakeType * (onVehicle ? 0.4 : 1)))); - event.setPitch((float) (pitch - (shakeTime * Math.sin(0.5 * Math.PI * shakeTime) * shakeAmplitude * shakeRadiusAmplitude * shakeType * (onVehicle ? 0.4 : 1)))); - event.setRoll((float) (roll - (shakeTime * Math.sin(0.5 * Math.PI * shakeTime) * shakeAmplitude * shakeRadiusAmplitude * (onVehicle ? 0.4 : 1)))); + event.setYaw((float) (yaw + (shakeTime * Math.sin(0.5 * Math.PI * shakeTime) * shakeAmplitude * shakeRadiusAmplitude * shakeType * (onVehicle ? 0.1 : 1)))); + event.setPitch((float) (pitch - (shakeTime * Math.sin(0.5 * Math.PI * shakeTime) * shakeAmplitude * shakeRadiusAmplitude * shakeType * (onVehicle ? 0.1 : 1)))); + event.setRoll((float) (roll - (shakeTime * Math.sin(0.5 * Math.PI * shakeTime) * shakeAmplitude * shakeRadiusAmplitude * (onVehicle ? 0.1 : 1)))); } else { - event.setYaw((float) (yaw - (shakeTime * Math.sin(0.5 * Math.PI * shakeTime) * shakeAmplitude * shakeRadiusAmplitude * shakeType * (onVehicle ? 0.4 : 1)))); - event.setPitch((float) (pitch + (shakeTime * Math.sin(0.5 * Math.PI * shakeTime) * shakeAmplitude * shakeRadiusAmplitude * shakeType * (onVehicle ? 0.4 : 1)))); - event.setRoll((float) (roll + (shakeTime * Math.sin(0.5 * Math.PI * shakeTime) * shakeAmplitude * shakeRadiusAmplitude * (onVehicle ? 0.4 : 1)))); + event.setYaw((float) (yaw - (shakeTime * Math.sin(0.5 * Math.PI * shakeTime) * shakeAmplitude * shakeRadiusAmplitude * shakeType * (onVehicle ? 0.1 : 1)))); + event.setPitch((float) (pitch + (shakeTime * Math.sin(0.5 * Math.PI * shakeTime) * shakeAmplitude * shakeRadiusAmplitude * shakeType * (onVehicle ? 0.1 : 1)))); + event.setRoll((float) (roll + (shakeTime * Math.sin(0.5 * Math.PI * shakeTime) * shakeAmplitude * shakeRadiusAmplitude * (onVehicle ? 0.1 : 1)))); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModEntities.java b/src/main/java/com/atsuishio/superbwarfare/init/ModEntities.java index 2af4b8682..eced4b1bd 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModEntities.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModEntities.java @@ -2,10 +2,7 @@ package com.atsuishio.superbwarfare.init; import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.config.server.SpawnConfig; -import com.atsuishio.superbwarfare.entity.ClaymoreEntity; -import com.atsuishio.superbwarfare.entity.MortarEntity; -import com.atsuishio.superbwarfare.entity.SenpaiEntity; -import com.atsuishio.superbwarfare.entity.TargetEntity; +import com.atsuishio.superbwarfare.entity.*; import com.atsuishio.superbwarfare.entity.projectile.*; import com.atsuishio.superbwarfare.entity.vehicle.*; import net.minecraft.core.registries.BuiltInRegistries; @@ -43,6 +40,9 @@ public class ModEntities { EntityType.Builder.of(ClaymoreEntity::new, MobCategory.MISC).setTrackingRange(64).setUpdateInterval(1).sized(0.5f, 0.5f)); public static final DeferredHolder, EntityType> C_4 = register("c4", EntityType.Builder.of(C4Entity::new, MobCategory.MISC).setTrackingRange(64).setUpdateInterval(1).sized(0.5f, 0.5f)); + public static final DeferredHolder, EntityType> WATER_MASK = register("water_mask", + EntityType.Builder.of(WaterMaskEntity::new, MobCategory.MISC).setTrackingRange(64).setUpdateInterval(3).sized(1f, 1f)); + // Projectiles public static final DeferredHolder, EntityType> TASER_BULLET = register("taser_bullet", @@ -84,24 +84,24 @@ public class ModEntities { EntityType.Builder.of(AnnihilatorEntity::new, MobCategory.MISC).setTrackingRange(64).setUpdateInterval(3).fireImmune().sized(13f, 4.2f)); public static final DeferredHolder, EntityType> SPEEDBOAT = register("speedboat", - EntityType.Builder.of(SpeedboatEntity::new, MobCategory.MISC).setTrackingRange(64).setUpdateInterval(3).fireImmune().sized(3.0f, 2.0f)); + EntityType.Builder.of(SpeedboatEntity::new, MobCategory.MISC).setTrackingRange(64).setUpdateInterval(1).fireImmune().sized(3.0f, 2.0f)); public static final DeferredHolder, EntityType> WHEEL_CHAIR = register("wheel_chair", - EntityType.Builder.of(WheelChairEntity::new, MobCategory.MISC).setTrackingRange(64).setUpdateInterval(3).fireImmune().sized(1.0f, 1.0f)); + EntityType.Builder.of(WheelChairEntity::new, MobCategory.MISC).setTrackingRange(64).setUpdateInterval(1).fireImmune().sized(1.0f, 1.0f)); public static final DeferredHolder, EntityType> AH_6 = register("ah_6", - EntityType.Builder.of(Ah6Entity::new, MobCategory.MISC).setTrackingRange(64).setUpdateInterval(3).fireImmune().sized(2.8f, 2.9f)); + EntityType.Builder.of(Ah6Entity::new, MobCategory.MISC).setTrackingRange(64).setUpdateInterval(1).fireImmune().sized(2.8f, 2.9f)); public static final DeferredHolder, EntityType> LAV_150 = register("lav_150", - EntityType.Builder.of(Lav150Entity::new, MobCategory.MISC).setTrackingRange(64).setUpdateInterval(3).fireImmune().sized(2.8f, 3.1f)); + EntityType.Builder.of(Lav150Entity::new, MobCategory.MISC).setTrackingRange(64).setUpdateInterval(1).fireImmune().sized(2.8f, 3.1f)); public static final DeferredHolder, EntityType> TOM_6 = register("tom_6", - EntityType.Builder.of(Tom6Entity::new, MobCategory.MISC).setTrackingRange(64).setUpdateInterval(3).fireImmune().sized(1.05f, 1.0f)); + EntityType.Builder.of(Tom6Entity::new, MobCategory.MISC).setTrackingRange(64).setUpdateInterval(1).fireImmune().sized(1.05f, 1.0f)); public static final DeferredHolder, EntityType> BMP_2 = register("bmp_2", - EntityType.Builder.of(Bmp2Entity::new, MobCategory.MISC).setTrackingRange(64).setUpdateInterval(3).fireImmune().sized(4f, 3f)); + EntityType.Builder.of(Bmp2Entity::new, MobCategory.MISC).setTrackingRange(64).setUpdateInterval(1).fireImmune().sized(4f, 3f)); public static final DeferredHolder, EntityType> YX_100 = register("yx_100", - EntityType.Builder.of(Yx100Entity::new, MobCategory.MISC).setTrackingRange(64).setUpdateInterval(3).fireImmune().sized(5.5f, 3.25f)); + EntityType.Builder.of(Yx100Entity::new, MobCategory.MISC).setTrackingRange(64).setUpdateInterval(1).fireImmune().sized(5.5f, 3.25f)); public static final DeferredHolder, EntityType> DRONE = register("drone", - EntityType.Builder.of(DroneEntity::new, MobCategory.MISC).setTrackingRange(64).setUpdateInterval(3).sized(0.6f, 0.2f)); + EntityType.Builder.of(DroneEntity::new, MobCategory.MISC).setTrackingRange(64).setUpdateInterval(1).sized(0.6f, 0.2f)); public static final DeferredHolder, EntityType> LASER_TOWER = register("laser_tower", - EntityType.Builder.of(LaserTowerEntity::new, MobCategory.MISC).setTrackingRange(64).setUpdateInterval(3).fireImmune().sized(0.9f, 1.65f)); + EntityType.Builder.of(LaserTowerEntity::new, MobCategory.MISC).setTrackingRange(64).setUpdateInterval(1).fireImmune().sized(0.9f, 1.65f)); private static DeferredHolder, EntityType> register(String name, EntityType.Builder entityTypeBuilder) { return REGISTRY.register(name, () -> entityTypeBuilder.build(name)); diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModEntityRenderers.java b/src/main/java/com/atsuishio/superbwarfare/init/ModEntityRenderers.java index 23e8e1d42..f7dbbc0e3 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModEntityRenderers.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModEntityRenderers.java @@ -44,5 +44,6 @@ public class ModEntityRenderers { event.registerEntityRenderer(ModEntities.WG_MISSILE.get(), WgMissileRenderer::new); event.registerEntityRenderer(ModEntities.LASER_TOWER.get(), LaserTowerRenderer::new); event.registerEntityRenderer(ModEntities.YX_100.get(), Yx100Renderer::new); + event.registerEntityRenderer(ModEntities.WATER_MASK.get(), WaterMaskEntityRenderer::new); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/RpgItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/RpgItem.java index 0f11a9851..34b5b232c 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/RpgItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/RpgItem.java @@ -196,7 +196,9 @@ public class RpgItem extends GunItem implements GeoItem, SpecialFireWeapon { if (player.level() instanceof ServerLevel serverLevel) { RpgRocketEntity rocket = new RpgRocketEntity(player, level, - (float) GunsTool.getGunDoubleTag(tag, "Damage", 0)); + (float) GunsTool.getGunDoubleTag(tag, "Damage", 0), + (float) GunsTool.getGunDoubleTag(tag, "ExplosionDamage", 0), + (float) GunsTool.getGunDoubleTag(tag, "ExplosionRadius", 0)); var dmgPerk = PerkHelper.getPerkByType(tag, Perk.Type.DAMAGE); if (dmgPerk == ModPerks.MONSTER_HUNTER.get()) { diff --git a/src/main/java/com/atsuishio/superbwarfare/mixins/GameRendererMixin.java b/src/main/java/com/atsuishio/superbwarfare/mixins/GameRendererMixin.java index da74ba8ba..9b37f9f72 100644 --- a/src/main/java/com/atsuishio/superbwarfare/mixins/GameRendererMixin.java +++ b/src/main/java/com/atsuishio/superbwarfare/mixins/GameRendererMixin.java @@ -1,7 +1,7 @@ package com.atsuishio.superbwarfare.mixins; +import com.atsuishio.superbwarfare.entity.vehicle.SpeedboatEntity; import com.atsuishio.superbwarfare.entity.vehicle.base.VehicleEntity; -import com.atsuishio.superbwarfare.event.ClientEventHandler; import com.atsuishio.superbwarfare.init.ModTags; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; @@ -70,7 +70,7 @@ public class GameRendererMixin { // TODO game render mixin matrices // matrices.mulPose(Axis.ZP.rotationDegrees(-r * vehicle.getRoll(tickDelta) + r2 * vehicle.getViewXRot(tickDelta))); - if (!ClientEventHandler.zoomVehicle) { + if (!(vehicle instanceof SpeedboatEntity)) { // fetch eye offset float eye = entity.getEyeHeight(); diff --git a/src/main/java/com/atsuishio/superbwarfare/tools/CustomExplosion.java b/src/main/java/com/atsuishio/superbwarfare/tools/CustomExplosion.java index 9074dabd6..3b2228ef6 100644 --- a/src/main/java/com/atsuishio/superbwarfare/tools/CustomExplosion.java +++ b/src/main/java/com/atsuishio/superbwarfare/tools/CustomExplosion.java @@ -74,7 +74,7 @@ public class CustomExplosion extends Explosion { final Vec3 center = new Vec3(pToBlowX, pToBlowY, pToBlowZ); for (Entity target : level.getEntitiesOfClass(Entity.class, new AABB(center, center).inflate(4 * radius), e -> true).stream().sorted(Comparator.comparingDouble(e -> e.distanceToSqr(center))).toList()) { if (target instanceof ServerPlayer serverPlayer) { - PacketDistributor.sendToPlayer(serverPlayer, new ShakeClientMessage(20 + 0.02 * damage, 3 * pRadius, 50 + 0.05 * damage, pToBlowX, pToBlowY, pToBlowZ)); + PacketDistributor.sendToPlayer(serverPlayer, new ShakeClientMessage(10 + 0.02 * damage, 0.75 * pRadius, 4 + 0.02 * damage, pToBlowX, pToBlowY, pToBlowZ)); } } }