diff --git a/src/main/java/com/atsuishio/superbwarfare/client/layer/AnnihilatorGlowLayer.java b/src/main/java/com/atsuishio/superbwarfare/client/layer/AnnihilatorGlowLayer.java new file mode 100644 index 000000000..4c018c970 --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/client/layer/AnnihilatorGlowLayer.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.AnnihilatorEntity; +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 AnnihilatorGlowLayer extends GeoRenderLayer { + + private static final ResourceLocation LAYER = ModUtils.loc("textures/entity/annihilator_glow_e.png"); + + public AnnihilatorGlowLayer(GeoRenderer entityRenderer) { + super(entityRenderer); + } + + @Override + public void render(PoseStack poseStack, AnnihilatorEntity 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/layer/AnnihilatorLayer.java b/src/main/java/com/atsuishio/superbwarfare/client/layer/AnnihilatorLayer.java index 09c204b9d..8c955be8f 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/layer/AnnihilatorLayer.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/layer/AnnihilatorLayer.java @@ -22,7 +22,7 @@ public class AnnihilatorLayer extends GeoRenderLayer { @Override public void render(PoseStack poseStack, AnnihilatorEntity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) { - RenderType glowRenderType = RenderType.energySwirl(LAYER,1,1); + RenderType glowRenderType = RenderType.energySwirl(LAYER, 1, 1); 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/model/entity/AnnihilatorModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/entity/AnnihilatorModel.java index 60992b0c3..0975921b8 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/entity/AnnihilatorModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/entity/AnnihilatorModel.java @@ -10,6 +10,8 @@ import software.bernie.geckolib.core.animation.AnimationState; import software.bernie.geckolib.model.GeoModel; import software.bernie.geckolib.model.data.EntityModelData; +import static com.atsuishio.superbwarfare.entity.AnnihilatorEntity.*; + public class AnnihilatorModel extends GeoModel { @Override @@ -50,12 +52,12 @@ public class AnnihilatorModel extends GeoModel { EntityModelData entityData = animationState.getData(DataTickets.ENTITY_MODEL_DATA); bone.setRotX((entityData.headPitch()) * Mth.DEG_TO_RAD); - CoreGeoBone laser1 = getAnimationProcessor().getBone("laser1"); - CoreGeoBone laser2 = getAnimationProcessor().getBone("laser2"); - CoreGeoBone laser3 = getAnimationProcessor().getBone("laser3"); + CoreGeoBone laserLeft = getAnimationProcessor().getBone("laser1"); + CoreGeoBone laserMiddle = getAnimationProcessor().getBone("laser2"); + CoreGeoBone laserRight = getAnimationProcessor().getBone("laser3"); - laser1.setScaleZ(512); - laser2.setScaleZ(512); - laser3.setScaleZ(512); + laserLeft.setScaleZ(animatable.getEntityData().get(LASER_LEFT_LENGTH) + 0.5f); + laserMiddle.setScaleZ(animatable.getEntityData().get(LASER_MIDDLE_LENGTH) + 0.5f); + laserRight.setScaleZ(animatable.getEntityData().get(LASER_RIGHT_LENGTH) + 0.5f); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/AnnihilatorRenderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/AnnihilatorRenderer.java index 7dd0f369a..14018da00 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/AnnihilatorRenderer.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/AnnihilatorRenderer.java @@ -1,5 +1,6 @@ package com.atsuishio.superbwarfare.client.renderer.entity; +import com.atsuishio.superbwarfare.client.layer.AnnihilatorGlowLayer; import com.atsuishio.superbwarfare.client.layer.AnnihilatorLayer; import com.atsuishio.superbwarfare.client.model.entity.AnnihilatorModel; import com.atsuishio.superbwarfare.entity.AnnihilatorEntity; @@ -18,9 +19,9 @@ public class AnnihilatorRenderer extends GeoEntityRenderer { public AnnihilatorRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new AnnihilatorModel()); - this.shadowRadius = 2f; + this.shadowRadius = 7.5f; this.addRenderLayer(new AnnihilatorLayer(this)); -// this.addRenderLayer(new Mk42DamageLayer(this)); + this.addRenderLayer(new AnnihilatorGlowLayer(this)); } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/client/screens/CannonHudOverlay.java b/src/main/java/com/atsuishio/superbwarfare/client/screens/CannonHudOverlay.java index 6be9e62ae..3f619d391 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/screens/CannonHudOverlay.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/screens/CannonHudOverlay.java @@ -3,6 +3,7 @@ package com.atsuishio.superbwarfare.client.screens; import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.client.RenderHelper; import com.atsuishio.superbwarfare.config.server.CannonConfig; +import com.atsuishio.superbwarfare.entity.AnnihilatorEntity; import com.atsuishio.superbwarfare.entity.ICannonEntity; import com.atsuishio.superbwarfare.entity.Mk42Entity; import com.atsuishio.superbwarfare.entity.Mle1934Entity; @@ -120,6 +121,11 @@ public class CannonHudOverlay { maxHealth = CannonConfig.MLE1934_HP.get(); } + if (cannon instanceof AnnihilatorEntity) { + health = cannon.getEntityData().get(AnnihilatorEntity.HEALTH); + maxHealth = CannonConfig.ANNIHILATOR_HP.get(); + } + GuiGraphics guiGraphics = event.getGuiGraphics(); guiGraphics.pose().pushPose(); guiGraphics.blit(ARMOR, w - 96, h - 14, 0, 0, 12, 12, 12, 12); diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/AnnihilatorEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/AnnihilatorEntity.java index bc9296be4..a0d0f78c3 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/AnnihilatorEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/AnnihilatorEntity.java @@ -31,6 +31,7 @@ import net.minecraft.world.entity.*; import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.projectile.ThrownPotion; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.ClipContext; import net.minecraft.world.level.Explosion; import net.minecraft.world.level.Level; import net.minecraft.world.phys.AABB; @@ -51,6 +52,9 @@ public class AnnihilatorEntity extends Entity implements GeoEntity, ICannonEntit public static final EntityDataAccessor COOL_DOWN = SynchedEntityData.defineId(AnnihilatorEntity.class, EntityDataSerializers.INT); public static final EntityDataAccessor TYPE = SynchedEntityData.defineId(AnnihilatorEntity.class, EntityDataSerializers.INT); public static final EntityDataAccessor HEALTH = SynchedEntityData.defineId(AnnihilatorEntity.class, EntityDataSerializers.FLOAT); + public static final EntityDataAccessor LASER_LEFT_LENGTH = SynchedEntityData.defineId(AnnihilatorEntity.class, EntityDataSerializers.FLOAT); + public static final EntityDataAccessor LASER_MIDDLE_LENGTH = SynchedEntityData.defineId(AnnihilatorEntity.class, EntityDataSerializers.FLOAT); + public static final EntityDataAccessor LASER_RIGHT_LENGTH= SynchedEntityData.defineId(AnnihilatorEntity.class, EntityDataSerializers.FLOAT); private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); public static final float MAX_HEALTH = CannonConfig.ANNIHILATOR_HP.get(); @@ -73,6 +77,9 @@ public class AnnihilatorEntity extends Entity implements GeoEntity, ICannonEntit this.entityData.define(COOL_DOWN, 0); this.entityData.define(TYPE, 0); this.entityData.define(HEALTH, MAX_HEALTH); + this.entityData.define(LASER_LEFT_LENGTH, 0f); + this.entityData.define(LASER_MIDDLE_LENGTH, 0f); + this.entityData.define(LASER_RIGHT_LENGTH, 0f); } @Override @@ -80,6 +87,9 @@ public class AnnihilatorEntity extends Entity implements GeoEntity, ICannonEntit compound.putInt("CoolDown", this.entityData.get(COOL_DOWN)); compound.putInt("Type", this.entityData.get(TYPE)); compound.putFloat("Health", this.entityData.get(HEALTH)); + compound.putFloat("LaserLeftLength", this.entityData.get(LASER_LEFT_LENGTH)); + compound.putFloat("LaserMiddleLength", this.entityData.get(LASER_MIDDLE_LENGTH)); + compound.putFloat("LaserRightLength", this.entityData.get(LASER_RIGHT_LENGTH)); } @Override @@ -91,6 +101,9 @@ public class AnnihilatorEntity extends Entity implements GeoEntity, ICannonEntit } else { this.entityData.set(HEALTH, MAX_HEALTH); } + this.entityData.set(LASER_LEFT_LENGTH, compound.getFloat("LaserLeftLength")); + this.entityData.set(LASER_MIDDLE_LENGTH, compound.getFloat("LaserMiddleLength")); + this.entityData.set(LASER_RIGHT_LENGTH, compound.getFloat("LaserRightLength")); } @Override @@ -153,7 +166,7 @@ public class AnnihilatorEntity extends Entity implements GeoEntity, ICannonEntit } this.level().playSound(null, this.getOnPos(), ModSounds.HIT.get(), SoundSource.PLAYERS, 1, 1); - this.entityData.set(HEALTH, this.entityData.get(HEALTH) - 0.5f * Math.max(amount - 150, 0)); + this.entityData.set(HEALTH, this.entityData.get(HEALTH) - 0.5f * Math.max(amount - 40, 0)); return true; } @@ -248,10 +261,49 @@ public class AnnihilatorEntity extends Entity implements GeoEntity, ICannonEntit destroy(); } + float yRot = this.getYRot(); + if (yRot < 0) { + yRot += 360; + } + yRot = yRot + 90 % 360; + + var BarrelRoot = new Vector3d(4.95, 2.25, 0); + BarrelRoot.rotateY(-yRot * Mth.DEG_TO_RAD); + + Vec3 BarrelRootPos = new Vec3(this.getX() + BarrelRoot.x, this.getY() + BarrelRoot.y, this.getZ() + BarrelRoot.z); + + var leftPos = new Vector3d(16, 0, -2.703125); + leftPos.rotateZ(-this.getXRot() * Mth.DEG_TO_RAD); + leftPos.rotateY(-yRot * Mth.DEG_TO_RAD); + + Vec3 BarrelLeftPos = new Vec3(BarrelRootPos.x + leftPos.x, BarrelRootPos.y + leftPos.y, BarrelRootPos.z + leftPos.z); + + var middlePos = new Vector3d(16, 0, 0); + middlePos.rotateZ(-this.getXRot() * Mth.DEG_TO_RAD); + middlePos.rotateY(-yRot * Mth.DEG_TO_RAD); + + Vec3 BarrelMiddlePos = new Vec3(BarrelRootPos.x + middlePos.x, BarrelRootPos.y + middlePos.y, BarrelRootPos.z + middlePos.z); + + var rightPos = new Vector3d(16, 0, 2.703125); + rightPos.rotateZ(-this.getXRot() * Mth.DEG_TO_RAD); + rightPos.rotateY(-yRot * Mth.DEG_TO_RAD); + + Vec3 BarrelRightPos = new Vec3(BarrelRootPos.x + rightPos.x, BarrelRootPos.y + rightPos.y, BarrelRootPos.z + rightPos.z); + + this.entityData.set(LASER_LEFT_LENGTH, laserLength(BarrelLeftPos ,this)); + this.entityData.set(LASER_MIDDLE_LENGTH, laserLength(BarrelMiddlePos ,this)); + this.entityData.set(LASER_RIGHT_LENGTH, laserLength(BarrelRightPos ,this)); + travel(); this.refreshDimensions(); } + private float laserLength (Vec3 pos, Entity cannon) { + return (float) pos.distanceTo((Vec3.atLowerCornerOf(cannon.level().clip( + new ClipContext(pos, pos.add(cannon.getViewVector(1).scale(512)), + ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, cannon)).getBlockPos()))); + } + private void destroy() { CustomExplosion explosion = new CustomExplosion(this.level(), this, ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this), 140f, diff --git a/src/main/resources/assets/superbwarfare/geo/annihilator.geo.json b/src/main/resources/assets/superbwarfare/geo/annihilator.geo.json index 4a0d5810b..c0892374e 100644 --- a/src/main/resources/assets/superbwarfare/geo/annihilator.geo.json +++ b/src/main/resources/assets/superbwarfare/geo/annihilator.geo.json @@ -6,7 +6,7 @@ "identifier": "geometry.annihilator", "texture_width": 128, "texture_height": 128, - "visible_bounds_width": 43, + "visible_bounds_width": 45, "visible_bounds_height": 7.5, "visible_bounds_offset": [0, 3.25, 0] }, @@ -23,7 +23,7 @@ { "name": "PaoGuan", "parent": "main", - "pivot": [0, 30, -66], + "pivot": [0, 36, -79.2], "cubes": [ { "origin": [-50.4, 34.56, -80.64], @@ -42,6 +42,453 @@ "parent": "PaoGuan", "pivot": [43.25, 36.0004, -275] }, + { + "name": "bone5", + "parent": "laser", + "pivot": [43.25, 35.2538, -330.9], + "cubes": [ + { + "origin": [7.25, 35.2538, -366.9], + "size": [72, 0, 72], + "pivot": [43.25, 35.2538, -330.9], + "rotation": [90, 0, -90], + "uv": { + "up": {"uv": [115.75, 127.5], "uv_size": [-46, -46]} + } + }, + { + "origin": [7.25, 35.2538, -366.9], + "size": [72, 0, 72], + "pivot": [43.25, 35.2538, -330.9], + "rotation": [0, -90, -90], + "uv": { + "up": {"uv": [115.75, 127.5], "uv_size": [-46, -46]} + } + }, + { + "origin": [7.25, 35.2538, -366.9], + "size": [72, 0, 72], + "pivot": [43.25, 35.2538, -330.9], + "rotation": [0, -90, -180], + "uv": { + "up": {"uv": [115.75, 127.5], "uv_size": [-46, -46]} + } + } + ] + }, + { + "name": "bone7", + "parent": "bone5", + "pivot": [45.759, 35.33301, -305.2], + "cubes": [ + { + "origin": [17.215, 37.877, -307.745], + "size": [36, 0, 5.09], + "pivot": [43.215, 37.877, -305.2], + "rotation": [0, -90, 0], + "uv": { + "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} + } + }, + { + "origin": [17.215, 32.624, -307.745], + "size": [36, 0, 5.09], + "pivot": [43.215, 32.624, -305.2], + "rotation": [0, -90, -180], + "uv": { + "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} + } + }, + { + "origin": [19.759, 35.25051, -307.8275], + "size": [36, 0, 5.255], + "pivot": [45.759, 35.25051, -305.2], + "rotation": [0, -90, 90], + "uv": { + "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} + } + }, + { + "origin": [14.671, 35.2505, -307.8275], + "size": [36, 0, 5.255], + "pivot": [40.671, 35.2505, -305.2], + "rotation": [0, -90, -90], + "uv": { + "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} + } + }, + { + "origin": [14.671, 35.2505, -307.8275], + "size": [36, 0, 5.255], + "pivot": [40.671, 35.2505, -305.2], + "rotation": [0, -90, -90], + "uv": { + "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} + } + }, + { + "origin": [17.215, 37.877, -307.745], + "size": [36, 0, 5.09], + "pivot": [43.215, 37.877, -305.2], + "rotation": [0, -90, 0], + "uv": { + "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} + } + }, + { + "origin": [17.215, 32.624, -307.745], + "size": [36, 0, 5.09], + "pivot": [43.215, 32.624, -305.2], + "rotation": [0, -90, -180], + "uv": { + "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} + } + }, + { + "origin": [19.759, 35.25051, -307.8275], + "size": [36, 0, 5.255], + "pivot": [45.759, 35.25051, -305.2], + "rotation": [0, -90, 90], + "uv": { + "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} + } + }, + { + "origin": [14.671, 35.2505, -307.8275], + "size": [36, 0, 5.255], + "pivot": [40.671, 35.2505, -305.2], + "rotation": [0, -90, -90], + "uv": { + "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} + } + }, + { + "origin": [17.215, 37.877, -307.745], + "size": [36, 0, 5.09], + "pivot": [43.215, 37.877, -305.2], + "rotation": [0, -90, 0], + "uv": { + "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} + } + }, + { + "origin": [17.215, 32.624, -307.745], + "size": [36, 0, 5.09], + "pivot": [43.215, 32.624, -305.2], + "rotation": [0, -90, -180], + "uv": { + "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} + } + }, + { + "origin": [19.759, 35.25051, -307.8275], + "size": [36, 0, 5.255], + "pivot": [45.759, 35.25051, -305.2], + "rotation": [0, -90, 90], + "uv": { + "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} + } + } + ] + }, + { + "name": "bone8", + "parent": "laser", + "pivot": [-43.25, 35.2538, -330.9], + "cubes": [ + { + "origin": [-79.25, 35.2538, -366.9], + "size": [72, 0, 72], + "pivot": [-43.25, 35.2538, -330.9], + "rotation": [90, 0, 90], + "uv": { + "up": {"uv": [69.75, 127.5], "uv_size": [46, -46]} + } + }, + { + "origin": [-79.25, 35.2538, -366.9], + "size": [72, 0, 72], + "pivot": [-43.25, 35.2538, -330.9], + "rotation": [0, 90, 90], + "uv": { + "up": {"uv": [69.75, 127.5], "uv_size": [46, -46]} + } + }, + { + "origin": [-79.25, 35.2538, -366.9], + "size": [72, 0, 72], + "pivot": [-43.25, 35.2538, -330.9], + "rotation": [0, 90, 180], + "uv": { + "up": {"uv": [69.75, 127.5], "uv_size": [46, -46]} + } + } + ] + }, + { + "name": "bone9", + "parent": "bone8", + "pivot": [-45.759, 35.33301, -305.2], + "cubes": [ + { + "origin": [-53.215, 37.877, -307.745], + "size": [36, 0, 5.09], + "pivot": [-43.215, 37.877, -305.2], + "rotation": [0, 90, 0], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-53.215, 32.624, -307.745], + "size": [36, 0, 5.09], + "pivot": [-43.215, 32.624, -305.2], + "rotation": [0, 90, 180], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-55.759, 35.25051, -307.8275], + "size": [36, 0, 5.255], + "pivot": [-45.759, 35.25051, -305.2], + "rotation": [0, 90, -90], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-50.671, 35.2505, -307.8275], + "size": [36, 0, 5.255], + "pivot": [-40.671, 35.2505, -305.2], + "rotation": [0, 90, 90], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-50.671, 35.2505, -307.8275], + "size": [36, 0, 5.255], + "pivot": [-40.671, 35.2505, -305.2], + "rotation": [0, 90, 90], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-53.215, 37.877, -307.745], + "size": [36, 0, 5.09], + "pivot": [-43.215, 37.877, -305.2], + "rotation": [0, 90, 0], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-53.215, 32.624, -307.745], + "size": [36, 0, 5.09], + "pivot": [-43.215, 32.624, -305.2], + "rotation": [0, 90, 180], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-55.759, 35.25051, -307.8275], + "size": [36, 0, 5.255], + "pivot": [-45.759, 35.25051, -305.2], + "rotation": [0, 90, -90], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-50.671, 35.2505, -307.8275], + "size": [36, 0, 5.255], + "pivot": [-40.671, 35.2505, -305.2], + "rotation": [0, 90, 90], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-53.215, 37.877, -307.745], + "size": [36, 0, 5.09], + "pivot": [-43.215, 37.877, -305.2], + "rotation": [0, 90, 0], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-53.215, 32.624, -307.745], + "size": [36, 0, 5.09], + "pivot": [-43.215, 32.624, -305.2], + "rotation": [0, 90, 180], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-55.759, 35.25051, -307.8275], + "size": [36, 0, 5.255], + "pivot": [-45.759, 35.25051, -305.2], + "rotation": [0, 90, -90], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + } + ] + }, + { + "name": "bone10", + "parent": "laser", + "pivot": [-0.035, 35.2538, -330.9], + "cubes": [ + { + "origin": [-36.035, 35.2538, -366.9], + "size": [72, 0, 72], + "pivot": [-0.035, 35.2538, -330.9], + "rotation": [90, 0, 90], + "uv": { + "up": {"uv": [69.75, 127.5], "uv_size": [46, -46]} + } + }, + { + "origin": [-36.035, 35.2538, -366.9], + "size": [72, 0, 72], + "pivot": [-0.035, 35.2538, -330.9], + "rotation": [0, 90, 90], + "uv": { + "up": {"uv": [69.75, 127.5], "uv_size": [46, -46]} + } + }, + { + "origin": [-36.035, 35.2538, -366.9], + "size": [72, 0, 72], + "pivot": [-0.035, 35.2538, -330.9], + "rotation": [0, 90, 180], + "uv": { + "up": {"uv": [69.75, 127.5], "uv_size": [46, -46]} + } + } + ] + }, + { + "name": "bone11", + "parent": "bone10", + "pivot": [-2.544, 35.33301, -305.2], + "cubes": [ + { + "origin": [-10, 37.877, -307.745], + "size": [36, 0, 5.09], + "pivot": [0, 37.877, -305.2], + "rotation": [0, 90, 0], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-10, 32.624, -307.745], + "size": [36, 0, 5.09], + "pivot": [0, 32.624, -305.2], + "rotation": [0, 90, 180], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-12.544, 35.25051, -307.8275], + "size": [36, 0, 5.255], + "pivot": [-2.544, 35.25051, -305.2], + "rotation": [0, 90, -90], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-7.456, 35.2505, -307.8275], + "size": [36, 0, 5.255], + "pivot": [2.544, 35.2505, -305.2], + "rotation": [0, 90, 90], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-7.456, 35.2505, -307.8275], + "size": [36, 0, 5.255], + "pivot": [2.544, 35.2505, -305.2], + "rotation": [0, 90, 90], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-10, 37.877, -307.745], + "size": [36, 0, 5.09], + "pivot": [0, 37.877, -305.2], + "rotation": [0, 90, 0], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-10, 32.624, -307.745], + "size": [36, 0, 5.09], + "pivot": [0, 32.624, -305.2], + "rotation": [0, 90, 180], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-12.544, 35.25051, -307.8275], + "size": [36, 0, 5.255], + "pivot": [-2.544, 35.25051, -305.2], + "rotation": [0, 90, -90], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-7.456, 35.2505, -307.8275], + "size": [36, 0, 5.255], + "pivot": [2.544, 35.2505, -305.2], + "rotation": [0, 90, 90], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-10, 37.877, -307.745], + "size": [36, 0, 5.09], + "pivot": [0, 37.877, -305.2], + "rotation": [0, 90, 0], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-10, 32.624, -307.745], + "size": [36, 0, 5.09], + "pivot": [0, 32.624, -305.2], + "rotation": [0, 90, 180], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-12.544, 35.25051, -307.8275], + "size": [36, 0, 5.255], + "pivot": [-2.544, 35.25051, -305.2], + "rotation": [0, 90, -90], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + } + ] + }, { "name": "laser1", "parent": "laser", diff --git a/src/main/resources/assets/superbwarfare/textures/entity/annihilator_e.png b/src/main/resources/assets/superbwarfare/textures/entity/annihilator_e.png index b632f713e..dc0c9c475 100644 Binary files a/src/main/resources/assets/superbwarfare/textures/entity/annihilator_e.png and b/src/main/resources/assets/superbwarfare/textures/entity/annihilator_e.png differ diff --git a/src/main/resources/assets/superbwarfare/textures/entity/annihilator_glow_e.png b/src/main/resources/assets/superbwarfare/textures/entity/annihilator_glow_e.png new file mode 100644 index 000000000..13c74739e Binary files /dev/null and b/src/main/resources/assets/superbwarfare/textures/entity/annihilator_glow_e.png differ