同步更新内容

This commit is contained in:
Light_Quanta 2025-03-30 10:42:03 +08:00
parent 25f708cf46
commit 0f10031875
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959
16 changed files with 196 additions and 49 deletions

View file

@ -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<WaterMaskEntity> {
@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");
}
}

View file

@ -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<SpeedboatEntity> {
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();
}

View file

@ -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<WaterMaskEntity> {
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();
}
}

View file

@ -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();

View file

@ -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<WaterMaskEntity> 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) {
}
}

View file

@ -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<? extends ThrowableItemProjectile> pEntityType, Level pLevel) {
@ -19,8 +21,12 @@ public abstract class FastThrowableProjectile extends ThrowableItemProjectile im
super(pEntityType, pX, pY, pZ, pLevel);
}
public FastThrowableProjectile(EntityType<? extends ThrowableItemProjectile> pEntityType, LivingEntity pShooter, Level pLevel) {
super(pEntityType, pShooter, pLevel);
public FastThrowableProjectile(EntityType<? extends ThrowableItemProjectile> 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

View file

@ -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<? extends RpgRocketEntity> 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();
}

View file

@ -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));
}
}

View file

@ -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()) {

View file

@ -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()));
}
}

View file

@ -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))));
}
}

View file

@ -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.<ClaymoreEntity>of(ClaymoreEntity::new, MobCategory.MISC).setTrackingRange(64).setUpdateInterval(1).sized(0.5f, 0.5f));
public static final DeferredHolder<EntityType<?>, EntityType<C4Entity>> C_4 = register("c4",
EntityType.Builder.<C4Entity>of(C4Entity::new, MobCategory.MISC).setTrackingRange(64).setUpdateInterval(1).sized(0.5f, 0.5f));
public static final DeferredHolder<EntityType<?>, EntityType<WaterMaskEntity>> 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<?>, EntityType<TaserBulletEntity>> 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<?>, EntityType<SpeedboatEntity>> 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<?>, EntityType<WheelChairEntity>> 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<?>, EntityType<Ah6Entity>> 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<?>, EntityType<Lav150Entity>> 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<?>, EntityType<Tom6Entity>> 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<?>, EntityType<Bmp2Entity>> 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<?>, EntityType<Yx100Entity>> 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<?>, EntityType<DroneEntity>> DRONE = register("drone",
EntityType.Builder.<DroneEntity>of(DroneEntity::new, MobCategory.MISC).setTrackingRange(64).setUpdateInterval(3).sized(0.6f, 0.2f));
EntityType.Builder.<DroneEntity>of(DroneEntity::new, MobCategory.MISC).setTrackingRange(64).setUpdateInterval(1).sized(0.6f, 0.2f));
public static final DeferredHolder<EntityType<?>, EntityType<LaserTowerEntity>> LASER_TOWER = register("laser_tower",
EntityType.Builder.<LaserTowerEntity>of(LaserTowerEntity::new, MobCategory.MISC).setTrackingRange(64).setUpdateInterval(3).fireImmune().sized(0.9f, 1.65f));
EntityType.Builder.<LaserTowerEntity>of(LaserTowerEntity::new, MobCategory.MISC).setTrackingRange(64).setUpdateInterval(1).fireImmune().sized(0.9f, 1.65f));
private static <T extends Entity> DeferredHolder<EntityType<?>, EntityType<T>> register(String name, EntityType.Builder<T> entityTypeBuilder) {
return REGISTRY.register(name, () -> entityTypeBuilder.build(name));

View file

@ -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);
}
}

View file

@ -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()) {

View file

@ -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();

View file

@ -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));
}
}
}