added wistful wanderings, nightmare reowork, lucid bolt, etc
This commit is contained in:
1 parent
68a823d5ff
commit
b81dcc3bef
76 files changed
+1917
-331
No files matched your search
@@ -68,9 +68,9 @@ public final class AntarchySettings {
|
||||
private static boolean krakensGraspInnateLoyalty = true;
|
||||
private static int krakensGraspInnateLoyaltyLevel = 3;
|
||||
private static int krakensGraspTentacleDurationTicks = 100;
|
||||
private static double krakensGraspTentacleDamage = 3.0D;
|
||||
private static double krakensGraspTentacleRadius = 3.0D;
|
||||
private static int krakensGraspTentacleDamageIntervalTicks = 20;
|
||||
private static int krakensGraspTentacleSlownessAmplifier = 8;
|
||||
private static int krakensGraspTentacleSlownessRefreshTicks = 5;
|
||||
private static double scorpionWhipBaseDamage = 10.0D;
|
||||
private static double scorpionWhipReachBonus = 5.0D;
|
||||
private static int scorpionWhipPoisonDurationTicks = 100;
|
||||
@@ -87,6 +87,8 @@ public final class AntarchySettings {
|
||||
private static double bigBerthaBasiliskCooldownSeconds = 7.0D;
|
||||
private static double bigBerthaLucidInvertedDurationSeconds = 3.0D;
|
||||
private static double bigBerthaLucidInvertedDamageBonusPercent = 25.0D;
|
||||
private static double bigBerthaNoneModeDamageBonusPercent = 15.0D;
|
||||
private static double bigBerthaNightmareDamageBonusPercent = 30.0D;
|
||||
private static double potentNyxiteInvertedDurationSeconds = 60.0D;
|
||||
private static int ultimateToolEnchantability = 25;
|
||||
private static int ultimateArmorEnchantability = 10;
|
||||
@@ -288,6 +290,8 @@ public final class AntarchySettings {
|
||||
private static int emperorScorpionMaxSummonedScorpions = 4;
|
||||
private static int emperorScorpionMaxNearbyScorpions = 3;
|
||||
private static int emperorScorpionHardenCooldownTicks = 2400;
|
||||
private static double emperorScorpionDamageRange = 80.0D;
|
||||
private static int emperorScorpionMinDespawnTicks = 6000;
|
||||
private static double scorpionHealth = 30.0D;
|
||||
private static double scorpionAttackDamage = 5.0D;
|
||||
private static double scorpionMovementSpeed = 0.29D;
|
||||
@@ -317,6 +321,12 @@ public final class AntarchySettings {
|
||||
private static double krakenArmor = 8.0D;
|
||||
private static double krakenProjectileDamageTakenMultiplier = 0.5D;
|
||||
private static double krakenBossBarRange = 40.0D;
|
||||
private static double krakenFollowRange = 96.0D;
|
||||
private static double krakenDamageRange = 96.0D;
|
||||
private static double herculesBeetleDamageRange = 48.0D;
|
||||
private static double toreterrorDamageRange = 48.0D;
|
||||
private static double brutalflyDamageRange = 48.0D;
|
||||
private static double alphaMantisDamageRange = 48.0D;
|
||||
private static float krakenLightningDamagePhaseOne = 6.0F;
|
||||
private static double lucidHealth = 30.0D;
|
||||
private static double lucidAttackDamage = 4.0D;
|
||||
@@ -662,6 +672,14 @@ public final class AntarchySettings {
|
||||
return bigBerthaLucidInvertedDamageBonusPercent;
|
||||
}
|
||||
|
||||
public static double bigBerthaNoneModeDamageBonusPercent() {
|
||||
return bigBerthaNoneModeDamageBonusPercent;
|
||||
}
|
||||
|
||||
public static double bigBerthaNightmareDamageBonusPercent() {
|
||||
return bigBerthaNightmareDamageBonusPercent;
|
||||
}
|
||||
|
||||
public static double potentNyxiteInvertedDurationSeconds() {
|
||||
return potentNyxiteInvertedDurationSeconds;
|
||||
}
|
||||
@@ -756,9 +774,9 @@ public final class AntarchySettings {
|
||||
public static boolean krakensGraspInnateLoyalty() { return krakensGraspInnateLoyalty; }
|
||||
public static int krakensGraspInnateLoyaltyLevel() { return krakensGraspInnateLoyaltyLevel; }
|
||||
public static int krakensGraspTentacleDurationTicks() { return krakensGraspTentacleDurationTicks; }
|
||||
public static double krakensGraspTentacleDamage() { return krakensGraspTentacleDamage; }
|
||||
public static double krakensGraspTentacleRadius() { return krakensGraspTentacleRadius; }
|
||||
public static int krakensGraspTentacleDamageIntervalTicks() { return krakensGraspTentacleDamageIntervalTicks; }
|
||||
public static int krakensGraspTentacleSlownessAmplifier() { return krakensGraspTentacleSlownessAmplifier; }
|
||||
public static int krakensGraspTentacleSlownessRefreshTicks() { return krakensGraspTentacleSlownessRefreshTicks; }
|
||||
|
||||
public static double octopusBombHealth() {
|
||||
return octopusBombHealth;
|
||||
@@ -1255,6 +1273,14 @@ public final class AntarchySettings {
|
||||
bigBerthaLucidInvertedDamageBonusPercent = value;
|
||||
}
|
||||
|
||||
public static void setBigBerthaNoneModeDamageBonusPercent(double value) {
|
||||
bigBerthaNoneModeDamageBonusPercent = value;
|
||||
}
|
||||
|
||||
public static void setBigBerthaNightmareDamageBonusPercent(double value) {
|
||||
bigBerthaNightmareDamageBonusPercent = value;
|
||||
}
|
||||
|
||||
public static void setPotentNyxiteInvertedDurationSeconds(double value) {
|
||||
potentNyxiteInvertedDurationSeconds = value;
|
||||
}
|
||||
@@ -1350,9 +1376,9 @@ public final class AntarchySettings {
|
||||
public static void setKrakensGraspInnateLoyalty(boolean value) { krakensGraspInnateLoyalty = value; }
|
||||
public static void setKrakensGraspInnateLoyaltyLevel(int value) { krakensGraspInnateLoyaltyLevel = value; }
|
||||
public static void setKrakensGraspTentacleDurationTicks(int value) { krakensGraspTentacleDurationTicks = value; }
|
||||
public static void setKrakensGraspTentacleDamage(double value) { krakensGraspTentacleDamage = value; }
|
||||
public static void setKrakensGraspTentacleRadius(double value) { krakensGraspTentacleRadius = value; }
|
||||
public static void setKrakensGraspTentacleDamageIntervalTicks(int value) { krakensGraspTentacleDamageIntervalTicks = value; }
|
||||
public static void setKrakensGraspTentacleSlownessAmplifier(int value) { krakensGraspTentacleSlownessAmplifier = value; }
|
||||
public static void setKrakensGraspTentacleSlownessRefreshTicks(int value) { krakensGraspTentacleSlownessRefreshTicks = value; }
|
||||
|
||||
public static void setBrutalflyHealth(double value) {
|
||||
brutalflyHealth = value;
|
||||
@@ -2057,6 +2083,12 @@ public final class AntarchySettings {
|
||||
public static int emperorScorpionHardenCooldownTicks() { return emperorScorpionHardenCooldownTicks; }
|
||||
public static void setEmperorScorpionHardenCooldownTicks(int value) { emperorScorpionHardenCooldownTicks = value; }
|
||||
|
||||
public static double emperorScorpionDamageRange() { return emperorScorpionDamageRange; }
|
||||
public static void setEmperorScorpionDamageRange(double value) { emperorScorpionDamageRange = value; }
|
||||
|
||||
public static int emperorScorpionMinDespawnTicks() { return emperorScorpionMinDespawnTicks; }
|
||||
public static void setEmperorScorpionMinDespawnTicks(int value) { emperorScorpionMinDespawnTicks = value; }
|
||||
|
||||
public static double scorpionHealth() { return scorpionHealth; }
|
||||
public static void setScorpionHealth(double value) { scorpionHealth = value; }
|
||||
|
||||
@@ -2142,6 +2174,24 @@ public final class AntarchySettings {
|
||||
public static double krakenBossBarRange() { return krakenBossBarRange; }
|
||||
public static void setKrakenBossBarRange(double value) { krakenBossBarRange = value; }
|
||||
|
||||
public static double krakenFollowRange() { return krakenFollowRange; }
|
||||
public static void setKrakenFollowRange(double value) { krakenFollowRange = value; }
|
||||
|
||||
public static double krakenDamageRange() { return krakenDamageRange; }
|
||||
public static void setKrakenDamageRange(double value) { krakenDamageRange = value; }
|
||||
|
||||
public static double herculesBeetleDamageRange() { return herculesBeetleDamageRange; }
|
||||
public static void setHerculesBeetleDamageRange(double value) { herculesBeetleDamageRange = value; }
|
||||
|
||||
public static double toreterrorDamageRange() { return toreterrorDamageRange; }
|
||||
public static void setToreterrorDamageRange(double value) { toreterrorDamageRange = value; }
|
||||
|
||||
public static double brutalflyDamageRange() { return brutalflyDamageRange; }
|
||||
public static void setBrutalflyDamageRange(double value) { brutalflyDamageRange = value; }
|
||||
|
||||
public static double alphaMantisDamageRange() { return alphaMantisDamageRange; }
|
||||
public static void setAlphaMantisDamageRange(double value) { alphaMantisDamageRange = value; }
|
||||
|
||||
public static float krakenLightningDamagePhaseOne() { return krakenLightningDamagePhaseOne; }
|
||||
public static void setKrakenLightningDamagePhaseOne(float value) { krakenLightningDamagePhaseOne = value; }
|
||||
|
||||
|
||||
@@ -335,6 +335,10 @@ public final class AntarchyObjects {
|
||||
@SuppressWarnings("unchecked")
|
||||
public static Supplier<SimpleParticleType> LOTUS_POLLEN = (Supplier<SimpleParticleType>) UNBOUND;
|
||||
@SuppressWarnings("unchecked")
|
||||
public static Supplier<SimpleParticleType> LUCID_BOLT_IMPACT_SMALL = (Supplier<SimpleParticleType>) UNBOUND;
|
||||
@SuppressWarnings("unchecked")
|
||||
public static Supplier<SimpleParticleType> LUCID_BOLT_IMPACT_LARGE = (Supplier<SimpleParticleType>) UNBOUND;
|
||||
@SuppressWarnings("unchecked")
|
||||
public static Supplier<net.minecraft.core.component.DataComponentType<net.minecraft.util.Unit>> AMERICAN_COMPONENT =
|
||||
(Supplier<net.minecraft.core.component.DataComponentType<net.minecraft.util.Unit>>) UNBOUND;
|
||||
@SuppressWarnings("unchecked")
|
||||
@@ -697,6 +701,14 @@ public final class AntarchyObjects {
|
||||
LOTUS_POLLEN = supplier;
|
||||
}
|
||||
|
||||
public static void setLucidBoltImpactSmall(Supplier<SimpleParticleType> supplier) {
|
||||
LUCID_BOLT_IMPACT_SMALL = supplier;
|
||||
}
|
||||
|
||||
public static void setLucidBoltImpactLarge(Supplier<SimpleParticleType> supplier) {
|
||||
LUCID_BOLT_IMPACT_LARGE = supplier;
|
||||
}
|
||||
|
||||
public static void setPeachLeavesParticle(Supplier<SimpleParticleType> supplier) {
|
||||
PEACH_LEAVES_PARTICLE = supplier;
|
||||
}
|
||||
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
package com.craisinlord.antarchy.content.client.model;
|
||||
|
||||
import com.craisinlord.antarchy.Antarchy;
|
||||
import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import software.bernie.geckolib.model.GeoModel;
|
||||
|
||||
public class LucidBoltModel extends GeoModel<LucidBoltEntity> {
|
||||
@Override
|
||||
public ResourceLocation getModelResource(LucidBoltEntity animatable) {
|
||||
return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/lucid_bolt.geo.json");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getTextureResource(LucidBoltEntity animatable) {
|
||||
return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/vfx/lucid_bolt.png");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getAnimationResource(LucidBoltEntity animatable) {
|
||||
return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/lucid_bolt.animation.json");
|
||||
}
|
||||
}
|
||||
+11
-131
@@ -1,144 +1,24 @@
|
||||
package com.craisinlord.antarchy.content.client.renderer;
|
||||
|
||||
import com.craisinlord.antarchy.content.client.model.LucidBoltModel;
|
||||
import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity;
|
||||
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.EntityRenderer;
|
||||
import com.mojang.math.Axis;
|
||||
import net.minecraft.client.renderer.entity.EntityRendererProvider;
|
||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import org.joml.Matrix4f;
|
||||
|
||||
public class LucidBoltRenderer extends EntityRenderer<LucidBoltEntity> {
|
||||
private static final ResourceLocation BEAM_TEXTURE = ResourceLocation.withDefaultNamespace("textures/entity/beacon_beam.png");
|
||||
private static final Vec3 WORLD_UP = new Vec3(0.0D, 1.0D, 0.0D);
|
||||
private static final Vec3 WORLD_RIGHT = new Vec3(1.0D, 0.0D, 0.0D);
|
||||
private static final Vec3 WORLD_FORWARD = new Vec3(0.0D, 0.0D, 1.0D);
|
||||
import software.bernie.geckolib.renderer.GeoEntityRenderer;
|
||||
|
||||
public class LucidBoltRenderer extends GeoEntityRenderer<LucidBoltEntity> {
|
||||
public LucidBoltRenderer(EntityRendererProvider.Context context) {
|
||||
super(context);
|
||||
super(context, new LucidBoltModel());
|
||||
this.shadowRadius = 0.0F;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getBlockLightLevel(LucidBoltEntity entity, BlockPos pos) {
|
||||
return 15;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(LucidBoltEntity entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource buffer, int packedLight) {
|
||||
poseStack.pushPose();
|
||||
|
||||
Vec3 forward = getRenderDirection(entity, partialTick);
|
||||
Vec3 right = createPerpendicular(forward, WORLD_UP);
|
||||
Vec3 up = forward.cross(right);
|
||||
if (up.lengthSqr() < 1.0E-6D) {
|
||||
up = WORLD_UP;
|
||||
} else {
|
||||
up = up.normalize();
|
||||
}
|
||||
|
||||
float pulse = 0.85F + 0.15F * Mth.sin((entity.tickCount + partialTick) * 0.55F);
|
||||
float alpha = 0.92F * pulse;
|
||||
Vec3 delta = entity.getDeltaMovement();
|
||||
float length = (float) Mth.clamp(delta.length() * 2.3D + 0.95D, 0.9D, 2.5D);
|
||||
|
||||
VertexConsumer vertexConsumer = buffer.getBuffer(RenderType.entityTranslucent(BEAM_TEXTURE));
|
||||
PoseStack.Pose pose = poseStack.last();
|
||||
|
||||
renderBeamRibbon(pose, vertexConsumer, packedLight, 1.0F, 0.18F, 0.08F, alpha, 0.13F, forward, right, length);
|
||||
renderBeamRibbon(pose, vertexConsumer, packedLight, 1.0F, 0.48F, 0.18F, alpha * 0.58F, 0.24F, forward, up, length);
|
||||
|
||||
poseStack.popPose();
|
||||
super.render(entity, entityYaw, partialTick, poseStack, buffer, packedLight);
|
||||
}
|
||||
|
||||
private static Vec3 getRenderDirection(LucidBoltEntity entity, float partialTick) {
|
||||
Vec3 delta = entity.getDeltaMovement();
|
||||
if (delta.lengthSqr() > 1.0E-6D) {
|
||||
return delta.normalize();
|
||||
}
|
||||
|
||||
float yaw = Mth.rotLerp(partialTick, entity.yRotO, entity.getYRot()) * ((float) Math.PI / 180.0F);
|
||||
float pitch = Mth.lerp(partialTick, entity.xRotO, entity.getXRot()) * ((float) Math.PI / 180.0F);
|
||||
float cosPitch = Mth.cos(pitch);
|
||||
Vec3 direction = new Vec3(
|
||||
-Mth.sin(yaw) * cosPitch,
|
||||
-Mth.sin(pitch),
|
||||
Mth.cos(yaw) * cosPitch
|
||||
);
|
||||
return direction.lengthSqr() > 1.0E-6D ? direction.normalize() : WORLD_FORWARD;
|
||||
}
|
||||
|
||||
private static Vec3 createPerpendicular(Vec3 forward, Vec3 preferredAxis) {
|
||||
Vec3 perpendicular = forward.cross(preferredAxis);
|
||||
if (perpendicular.lengthSqr() < 1.0E-6D) {
|
||||
perpendicular = forward.cross(WORLD_RIGHT);
|
||||
}
|
||||
if (perpendicular.lengthSqr() < 1.0E-6D) {
|
||||
perpendicular = WORLD_UP;
|
||||
}
|
||||
return perpendicular.normalize();
|
||||
}
|
||||
|
||||
private static void renderBeamRibbon(
|
||||
PoseStack.Pose pose,
|
||||
VertexConsumer vertexConsumer,
|
||||
int packedLight,
|
||||
float red,
|
||||
float green,
|
||||
float blue,
|
||||
float alpha,
|
||||
float halfWidth,
|
||||
Vec3 forward,
|
||||
Vec3 sideways,
|
||||
float length
|
||||
) {
|
||||
Matrix4f matrix4f = pose.pose();
|
||||
Vec3 offset = sideways.scale(halfWidth);
|
||||
Vec3 end = forward.scale(length);
|
||||
Vec3 normal = sideways.cross(forward);
|
||||
if (normal.lengthSqr() < 1.0E-6D) {
|
||||
normal = WORLD_UP;
|
||||
} else {
|
||||
normal = normal.normalize();
|
||||
}
|
||||
|
||||
emitVertex(vertexConsumer, pose, matrix4f, offset.scale(-1.0D), red, green, blue, alpha, 0.0F, 0.0F, normal, packedLight);
|
||||
emitVertex(vertexConsumer, pose, matrix4f, offset, red, green, blue, alpha, 1.0F, 0.0F, normal, packedLight);
|
||||
emitVertex(vertexConsumer, pose, matrix4f, end.add(offset), red, green, blue, alpha, 1.0F, 1.0F, normal, packedLight);
|
||||
emitVertex(vertexConsumer, pose, matrix4f, end.add(offset.scale(-1.0D)), red, green, blue, alpha, 0.0F, 1.0F, normal, packedLight);
|
||||
}
|
||||
|
||||
private static void emitVertex(
|
||||
VertexConsumer vertexConsumer,
|
||||
PoseStack.Pose pose,
|
||||
Matrix4f matrix4f,
|
||||
Vec3 position,
|
||||
float red,
|
||||
float green,
|
||||
float blue,
|
||||
float alpha,
|
||||
float u,
|
||||
float v,
|
||||
Vec3 normal,
|
||||
int packedLight
|
||||
) {
|
||||
vertexConsumer
|
||||
.addVertex(matrix4f, (float) position.x, (float) position.y, (float) position.z)
|
||||
.setColor(red, green, blue, alpha)
|
||||
.setUv(u, v)
|
||||
.setOverlay(OverlayTexture.NO_OVERLAY)
|
||||
.setLight(packedLight)
|
||||
.setNormal(pose, (float) normal.x, (float) normal.y, (float) normal.z);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getTextureLocation(LucidBoltEntity entity) {
|
||||
return BEAM_TEXTURE;
|
||||
protected void applyRotations(LucidBoltEntity animatable, PoseStack poseStack, float ageInTicks, float rotationYaw, float partialTick, float nativeScale) {
|
||||
float appliedYaw = Mth.rotLerp(partialTick, animatable.yRotO, animatable.getYRot());
|
||||
float appliedPitch = Mth.lerp(partialTick, animatable.xRotO, animatable.getXRot());
|
||||
poseStack.mulPose(Axis.YP.rotationDegrees(180.0F - appliedYaw));
|
||||
poseStack.mulPose(Axis.XP.rotationDegrees(-appliedPitch));
|
||||
}
|
||||
}
|
||||
+27
@@ -1,10 +1,37 @@
|
||||
package com.craisinlord.antarchy.content.effect;
|
||||
|
||||
import com.craisinlord.antarchy.config.AntarchySettings;
|
||||
import com.craisinlord.antarchy.content.entity.nightmare.NightmareBiteEntity;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.world.effect.MobEffect;
|
||||
import net.minecraft.world.effect.MobEffectCategory;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
public final class DreadMobEffect extends MobEffect {
|
||||
public DreadMobEffect() {
|
||||
super(MobEffectCategory.HARMFUL, 0x1A0A1A);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applyEffectTick(LivingEntity entity, int amplifier) {
|
||||
if (AntarchySettings.dreadHallucinationMobsEnabled()
|
||||
&& entity instanceof Player player
|
||||
&& entity.level() instanceof ServerLevel serverLevel) {
|
||||
int minTicks = Math.max(1, (int) Math.round(AntarchySettings.dreadHallucinationMobMinInterval() * 20.0D));
|
||||
int maxTicks = Math.max(minTicks, (int) Math.round(AntarchySettings.dreadHallucinationMobMaxInterval() * 20.0D));
|
||||
int averageTicks = (minTicks + maxTicks) / 2;
|
||||
if (player.getRandom().nextInt(averageTicks) == 0) {
|
||||
Vec3 spawnPos = player.position().add(0.0D, player.getBbHeight() * 0.6D, 0.0D);
|
||||
NightmareBiteEntity.spawnAt(serverLevel, spawnPos, player.getYRot(), false);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldApplyEffectTickThisTick(int duration, int amplifier) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
+15
@@ -3,6 +3,7 @@ package com.craisinlord.antarchy.content.entity;
|
||||
import com.craisinlord.antarchy.config.AntarchySettings;
|
||||
import com.craisinlord.antarchy.content.AntarchyObjects;
|
||||
import com.craisinlord.antarchy.content.AntarchyTags;
|
||||
import com.craisinlord.antarchy.content.boss.BossCombatUtil;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.network.chat.Component;
|
||||
@@ -12,6 +13,7 @@ import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.util.RandomSource;
|
||||
import net.minecraft.world.BossEvent;
|
||||
import net.minecraft.world.Difficulty;
|
||||
import net.minecraft.world.damagesource.DamageSource;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.EntityType;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
@@ -51,6 +53,19 @@ public class AlphaMantisEntity extends MantisEntity {
|
||||
.add(Attributes.KNOCKBACK_RESISTANCE, 0.8D);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInvulnerableTo(DamageSource source) {
|
||||
if (super.isInvulnerableTo(source)) {
|
||||
return true;
|
||||
}
|
||||
return BossCombatUtil.isOutOfDamageRange(this, AntarchySettings.alphaMantisDamageRange());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hurt(DamageSource source, float amount) {
|
||||
return super.hurt(source, BossCombatUtil.capSingleHitAtHalfHealth(this, amount));
|
||||
}
|
||||
|
||||
public static boolean checkAlphaMantisSpawnRules(EntityType<AlphaMantisEntity> entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) {
|
||||
if (spawnReason == MobSpawnType.SPAWN_EGG
|
||||
|| spawnReason == MobSpawnType.SPAWNER
|
||||
|
||||
+24
-2
@@ -4,6 +4,7 @@ import com.craisinlord.antarchy.Antarchy;
|
||||
import com.craisinlord.antarchy.config.AntarchySettings;
|
||||
import com.craisinlord.antarchy.content.AntarchySoundEvents;
|
||||
import com.craisinlord.antarchy.content.AntarchyObjects;
|
||||
import com.craisinlord.antarchy.content.boss.BossCombatUtil;
|
||||
import com.craisinlord.antarchy.content.damage.AntarchyDamageSources;
|
||||
import com.craisinlord.antarchy.content.entity.ScorpionEntity;
|
||||
import net.minecraft.core.BlockPos;
|
||||
@@ -142,6 +143,7 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity {
|
||||
@Nullable private BlockPos encounterHome;
|
||||
@Nullable private LivingEntity attackTarget;
|
||||
private final Set<UUID> summonedScorpionIds = new HashSet<>();
|
||||
private boolean hasTakenDamage;
|
||||
|
||||
public EmperorScorpionEntity(EntityType<? extends EmperorScorpionEntity> entityType, Level level) {
|
||||
super(entityType, level);
|
||||
@@ -195,12 +197,28 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity {
|
||||
if (this.isHardenedStateActive()) {
|
||||
return false;
|
||||
}
|
||||
return super.hurt(source, amount);
|
||||
amount = BossCombatUtil.capSingleHitAtHalfHealth(this, amount);
|
||||
boolean hurt = super.hurt(source, amount);
|
||||
if (hurt) {
|
||||
this.hasTakenDamage = true;
|
||||
}
|
||||
return hurt;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInvulnerableTo(DamageSource source) {
|
||||
return this.isHardenedStateActive() || super.isInvulnerableTo(source);
|
||||
if (this.isHardenedStateActive() || super.isInvulnerableTo(source)) {
|
||||
return true;
|
||||
}
|
||||
return BossCombatUtil.isOutOfDamageRange(this, AntarchySettings.emperorScorpionDamageRange());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeWhenFarAway(double distanceToClosestPlayer) {
|
||||
if (this.hasTakenDamage || this.tickCount < AntarchySettings.emperorScorpionMinDespawnTicks()) {
|
||||
return false;
|
||||
}
|
||||
return super.removeWhenFarAway(distanceToClosestPlayer);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -684,6 +702,7 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity {
|
||||
tag.putInt("HardenDurationTicks", this.hardenDurationTicks);
|
||||
tag.putInt("HardenHealTicks", this.hardenHealTicks);
|
||||
tag.putInt("HardenSummonedScorpions", this.hardenSummonedScorpions);
|
||||
tag.putBoolean("HasTakenDamage", this.hasTakenDamage);
|
||||
if (this.encounterHome != null) {
|
||||
tag.putInt("EncounterHomeX", this.encounterHome.getX());
|
||||
tag.putInt("EncounterHomeY", this.encounterHome.getY());
|
||||
@@ -720,6 +739,9 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity {
|
||||
if (tag.contains("HardenSummonedScorpions")) {
|
||||
this.hardenSummonedScorpions = tag.getInt("HardenSummonedScorpions");
|
||||
}
|
||||
if (tag.contains("HasTakenDamage")) {
|
||||
this.hasTakenDamage = tag.getBoolean("HasTakenDamage");
|
||||
}
|
||||
if (tag.contains("EncounterHomeX") && tag.contains("EncounterHomeY") && tag.contains("EncounterHomeZ")) {
|
||||
this.encounterHome = new BlockPos(tag.getInt("EncounterHomeX"), tag.getInt("EncounterHomeY"), tag.getInt("EncounterHomeZ"));
|
||||
}
|
||||
|
||||
+11
@@ -1,6 +1,7 @@
|
||||
package com.craisinlord.antarchy.content.entity;
|
||||
|
||||
import com.craisinlord.antarchy.config.AntarchySettings;
|
||||
import com.craisinlord.antarchy.content.boss.BossCombatUtil;
|
||||
import com.craisinlord.antarchy.content.AntarchyGameRules;
|
||||
import com.craisinlord.antarchy.content.AntarchySoundEvents;
|
||||
import com.craisinlord.antarchy.content.AntarchyTags;
|
||||
@@ -593,6 +594,8 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl
|
||||
amount *= 0.5F;
|
||||
}
|
||||
|
||||
amount = BossCombatUtil.capSingleHitAtHalfHealth(this, amount);
|
||||
|
||||
if (!this.level().isClientSide && !this.isTame() && !this.isKnockedDown() && !this.isDeadOrDying()) {
|
||||
float knockThreshold = Math.max(1.0F, this.getMaxHealth() * 0.05F);
|
||||
if (this.getHealth() - amount <= knockThreshold) {
|
||||
@@ -608,6 +611,14 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl
|
||||
return super.hurt(source, amount);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInvulnerableTo(DamageSource source) {
|
||||
if (super.isInvulnerableTo(source)) {
|
||||
return true;
|
||||
}
|
||||
return BossCombatUtil.isOutOfDamageRange(this, AntarchySettings.herculesBeetleDamageRange());
|
||||
}
|
||||
|
||||
private void enterKnockedDown() {
|
||||
if (this.isKnockedDown()) {
|
||||
return;
|
||||
|
||||
+9
@@ -1,6 +1,7 @@
|
||||
package com.craisinlord.antarchy.content.entity;
|
||||
|
||||
import com.craisinlord.antarchy.config.AntarchySettings;
|
||||
import com.craisinlord.antarchy.content.boss.BossCombatUtil;
|
||||
import com.craisinlord.antarchy.content.AntarchyObjects;
|
||||
import com.craisinlord.antarchy.content.AntarchySoundEvents;
|
||||
import com.craisinlord.antarchy.content.damage.AntarchyDamageSources;
|
||||
@@ -285,6 +286,14 @@ public class ToreterrorEntity extends Monster implements GeoEntity {
|
||||
return super.hurt(source, amount);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInvulnerableTo(DamageSource source) {
|
||||
if (super.isInvulnerableTo(source)) {
|
||||
return true;
|
||||
}
|
||||
return BossCombatUtil.isOutOfDamageRange(this, AntarchySettings.toreterrorDamageRange());
|
||||
}
|
||||
|
||||
private void enterPhase2() {
|
||||
this.entityData.set(PHASE_2, true);
|
||||
}
|
||||
|
||||
+6
-2
@@ -1,6 +1,7 @@
|
||||
package com.craisinlord.antarchy.content.entity.brutalfly;
|
||||
|
||||
import com.craisinlord.antarchy.config.AntarchySettings;
|
||||
import com.craisinlord.antarchy.content.boss.BossCombatUtil;
|
||||
import com.craisinlord.antarchy.content.AntarchyObjects;
|
||||
import com.craisinlord.antarchy.content.AntarchySoundEvents;
|
||||
import java.util.EnumSet;
|
||||
@@ -383,12 +384,15 @@ public class BrutalflyEntity extends Monster implements GeoEntity {
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return super.hurt(source, amount);
|
||||
return super.hurt(source, BossCombatUtil.capSingleHitAtHalfHealth(this, amount));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInvulnerableTo(DamageSource source) {
|
||||
return this.postCocoonInvulnerableTicks > 0 || super.isInvulnerableTo(source);
|
||||
if (this.postCocoonInvulnerableTicks > 0 || super.isInvulnerableTo(source)) {
|
||||
return true;
|
||||
}
|
||||
return BossCombatUtil.isOutOfDamageRange(this, AntarchySettings.brutalflyDamageRange());
|
||||
}
|
||||
|
||||
private void tickCombat(LivingEntity target) {
|
||||
|
||||
+5
-5
@@ -130,9 +130,9 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity {
|
||||
private static final double SHOULDER_HEAD_Y_OFFSET = 0.26D;
|
||||
|
||||
private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle");
|
||||
private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walking");
|
||||
private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk");
|
||||
private static final RawAnimation CLIMB_ANIM = RawAnimation.begin().thenLoop("climbing");
|
||||
private static final RawAnimation GLIDE_ANIM = RawAnimation.begin().thenLoop("gliding");
|
||||
private static final RawAnimation GLIDE_ANIM = RawAnimation.begin().thenLoop("fly");
|
||||
private static final RawAnimation PICKUP_ANIM = RawAnimation.begin().thenPlay("item_pickup");
|
||||
private static final String QUIRK_CONTROLLER = "quirk_controller";
|
||||
private static final String QUIRK_1_TRIGGER = "quirk1";
|
||||
@@ -2146,10 +2146,10 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity {
|
||||
@Nullable
|
||||
protected Vec3 getPosition() {
|
||||
BlockPos target = this.findBestArborealDestination();
|
||||
if (target == null) {
|
||||
return null;
|
||||
if (target != null) {
|
||||
return Vec3.atBottomCenterOf(target);
|
||||
}
|
||||
return Vec3.atBottomCenterOf(target);
|
||||
return super.getPosition();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+11
-2
@@ -4,6 +4,7 @@ import com.craisinlord.antarchy.Antarchy;
|
||||
import com.craisinlord.antarchy.config.AntarchySettings;
|
||||
import com.craisinlord.antarchy.content.AntarchyObjects;
|
||||
import com.craisinlord.antarchy.content.AntarchySoundEvents;
|
||||
import com.craisinlord.antarchy.content.boss.BossCombatUtil;
|
||||
import com.craisinlord.antarchy.content.damage.AntarchyDamageSources;
|
||||
import com.craisinlord.antarchy.content.entity.MissileSquidEntity;
|
||||
import com.craisinlord.antarchy.content.entity.OctopusBombEntity;
|
||||
@@ -150,7 +151,7 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO
|
||||
.add(Attributes.ATTACK_DAMAGE, AntarchySettings.krakenAttackDamage())
|
||||
.add(Attributes.MOVEMENT_SPEED, AntarchySettings.krakenMovementSpeed())
|
||||
.add(Attributes.FLYING_SPEED, AntarchySettings.krakenFlyingSpeed())
|
||||
.add(Attributes.FOLLOW_RANGE, 64.0D)
|
||||
.add(Attributes.FOLLOW_RANGE, AntarchySettings.krakenFollowRange())
|
||||
.add(Attributes.KNOCKBACK_RESISTANCE, AntarchySettings.krakenKnockbackResistance())
|
||||
.add(Attributes.ARMOR, AntarchySettings.krakenArmor());
|
||||
}
|
||||
@@ -368,7 +369,15 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO
|
||||
return false;
|
||||
}
|
||||
|
||||
return super.hurt(source, amount);
|
||||
return super.hurt(source, BossCombatUtil.capSingleHitAtHalfHealth(this, amount));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInvulnerableTo(DamageSource source) {
|
||||
if (super.isInvulnerableTo(source)) {
|
||||
return true;
|
||||
}
|
||||
return BossCombatUtil.isOutOfDamageRange(this, AntarchySettings.krakenDamageRange());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+7
-11
@@ -128,27 +128,23 @@ public class TentacleEntity extends Mob implements GeoEntity {
|
||||
return;
|
||||
}
|
||||
|
||||
int interval = Math.max(1, AntarchySettings.krakensGraspTentacleDamageIntervalTicks());
|
||||
if (this.lifetimeTicks % interval == 0) {
|
||||
this.grabNearbyEntities();
|
||||
int refreshTicks = Math.max(1, AntarchySettings.krakensGraspTentacleSlownessRefreshTicks());
|
||||
if (this.lifetimeTicks % refreshTicks == 0) {
|
||||
this.slowNearbyEntities(refreshTicks);
|
||||
}
|
||||
}
|
||||
|
||||
private void grabNearbyEntities() {
|
||||
private void slowNearbyEntities(int refreshTicks) {
|
||||
double radius = AntarchySettings.krakensGraspTentacleRadius();
|
||||
AABB area = this.getBoundingBox().inflate(radius, radius * 0.6D, radius);
|
||||
List<LivingEntity> victims = this.level().getEntitiesOfClass(LivingEntity.class, area,
|
||||
entity -> entity.isAlive() && !entity.isSpectator() && !entity.getUUID().equals(this.ownerId)
|
||||
&& !(entity instanceof Player player && player.isCreative()));
|
||||
|
||||
for (LivingEntity victim : victims) {
|
||||
if (this.level() instanceof ServerLevel serverLevel) {
|
||||
victim.hurt(this.damageSources().mobAttack(this), (float) AntarchySettings.krakensGraspTentacleDamage());
|
||||
serverLevel.sendParticles(net.minecraft.core.particles.ParticleTypes.SPLASH,
|
||||
victim.getX(), victim.getY(0.6D), victim.getZ(), 8, 0.2D, 0.2D, 0.2D, 0.05D);
|
||||
}
|
||||
int amplifier = Math.max(0, AntarchySettings.krakensGraspTentacleSlownessAmplifier());
|
||||
|
||||
victim.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, AntarchySettings.krakensGraspTentacleDamageIntervalTicks() + 10, 1, false, true, true));
|
||||
for (LivingEntity victim : victims) {
|
||||
victim.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, refreshTicks + 4, amplifier, false, true, true));
|
||||
|
||||
Vec3 pull = this.position().subtract(victim.position()).multiply(1.0D, 0.0D, 1.0D);
|
||||
if (pull.lengthSqr() > 1.0E-4D) {
|
||||
|
||||
+64
-16
@@ -1,6 +1,7 @@
|
||||
package com.craisinlord.antarchy.content.entity.lucid;
|
||||
|
||||
import com.craisinlord.antarchy.content.AntarchySoundEvents;
|
||||
import com.craisinlord.antarchy.content.AntarchyObjects;
|
||||
import com.craisinlord.antarchy.content.AntarchyTags;
|
||||
import net.minecraft.core.Holder;
|
||||
import net.minecraft.network.syncher.SynchedEntityData;
|
||||
@@ -11,18 +12,30 @@ import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.EntityType;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.entity.projectile.ThrowableProjectile;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.phys.BlockHitResult;
|
||||
import net.minecraft.world.phys.EntityHitResult;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
import software.bernie.geckolib.animatable.GeoEntity;
|
||||
import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache;
|
||||
import software.bernie.geckolib.animation.AnimatableManager;
|
||||
import software.bernie.geckolib.animation.AnimationController;
|
||||
import software.bernie.geckolib.animation.AnimationState;
|
||||
import software.bernie.geckolib.animation.PlayState;
|
||||
import software.bernie.geckolib.animation.RawAnimation;
|
||||
import software.bernie.geckolib.util.GeckoLibUtil;
|
||||
|
||||
public class LucidBoltEntity extends ThrowableProjectile {
|
||||
public class LucidBoltEntity extends ThrowableProjectile implements GeoEntity {
|
||||
private static final int MAX_LIFETIME_TICKS = 40;
|
||||
private static final int INVERTED_EFFECT_DURATION = 100;
|
||||
private static final double BASE_DAMAGE = 3.0D;
|
||||
private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle");
|
||||
|
||||
public static Supplier<Holder<MobEffect>> invertedEffectSupplier;
|
||||
private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this);
|
||||
|
||||
public LucidBoltEntity(EntityType<? extends LucidBoltEntity> entityType, Level level) {
|
||||
super(entityType, level);
|
||||
@@ -36,6 +49,7 @@ public class LucidBoltEntity extends ThrowableProjectile {
|
||||
|
||||
private void configureBolt() {
|
||||
this.setNoGravity(true);
|
||||
this.noCulling = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -54,26 +68,29 @@ public class LucidBoltEntity extends ThrowableProjectile {
|
||||
return;
|
||||
}
|
||||
super.tick();
|
||||
this.realignToMotion();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onHitEntity(EntityHitResult result) {
|
||||
if (!this.level().isClientSide() && result.getEntity() instanceof LivingEntity target
|
||||
&& target.getType().is(AntarchyTags.Entities.LUCID_BOLT_IMMUNE)) {
|
||||
this.discard();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this.level().isClientSide() && result.getEntity() instanceof LivingEntity target) {
|
||||
Entity owner = this.getOwner();
|
||||
if (owner instanceof LivingEntity shooter) {
|
||||
target.hurt(this.damageSources().mobAttack(shooter), (float) BASE_DAMAGE);
|
||||
} else {
|
||||
target.hurt(this.damageSources().magic(), (float) BASE_DAMAGE);
|
||||
if (!this.level().isClientSide() && this.level() instanceof ServerLevel serverLevel) {
|
||||
spawnImpactParticles(serverLevel, result.getLocation());
|
||||
if (result.getEntity() instanceof LivingEntity target && target.getType().is(AntarchyTags.Entities.LUCID_BOLT_IMMUNE)) {
|
||||
this.discard();
|
||||
return;
|
||||
}
|
||||
|
||||
if (invertedEffectSupplier != null) {
|
||||
target.addEffect(new MobEffectInstance(invertedEffectSupplier.get(), INVERTED_EFFECT_DURATION, 0, false, true));
|
||||
if (result.getEntity() instanceof LivingEntity target) {
|
||||
Entity owner = this.getOwner();
|
||||
if (owner instanceof LivingEntity shooter) {
|
||||
target.hurt(this.damageSources().mobAttack(shooter), (float) BASE_DAMAGE);
|
||||
} else {
|
||||
target.hurt(this.damageSources().magic(), (float) BASE_DAMAGE);
|
||||
}
|
||||
|
||||
if (invertedEffectSupplier != null) {
|
||||
target.addEffect(new MobEffectInstance(invertedEffectSupplier.get(), INVERTED_EFFECT_DURATION, 0, false, true));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,9 +99,40 @@ public class LucidBoltEntity extends ThrowableProjectile {
|
||||
|
||||
@Override
|
||||
protected void onHitBlock(BlockHitResult result) {
|
||||
if (!this.level().isClientSide()) {
|
||||
if (!this.level().isClientSide() && this.level() instanceof ServerLevel serverLevel) {
|
||||
spawnImpactParticles(serverLevel, result.getLocation());
|
||||
this.level().playSound(null, result.getBlockPos(), AntarchySoundEvents.LUCID_BOLT_SOUND.get(), SoundSource.HOSTILE, 0.8F, 1.0F);
|
||||
}
|
||||
this.discard();
|
||||
}
|
||||
|
||||
public static void spawnImpactParticles(ServerLevel level, Vec3 position) {
|
||||
level.sendParticles(AntarchyObjects.LUCID_BOLT_IMPACT_LARGE.get(), position.x, position.y, position.z, 2, 0.08D, 0.08D, 0.08D, 0.01D);
|
||||
level.sendParticles(AntarchyObjects.LUCID_BOLT_IMPACT_SMALL.get(), position.x, position.y, position.z, 10, 0.16D, 0.16D, 0.16D, 0.065D);
|
||||
}
|
||||
|
||||
private void realignToMotion() {
|
||||
net.minecraft.world.phys.Vec3 motion = this.getDeltaMovement();
|
||||
if (motion.lengthSqr() < 1.0E-6D) {
|
||||
return;
|
||||
}
|
||||
|
||||
double horizontal = Math.sqrt(motion.x * motion.x + motion.z * motion.z);
|
||||
this.setYRot((float) (net.minecraft.util.Mth.atan2(motion.z, motion.x) * (180.0D / Math.PI)) - 90.0F);
|
||||
this.setXRot((float) (-(net.minecraft.util.Mth.atan2(motion.y, horizontal) * (180.0D / Math.PI))));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerControllers(AnimatableManager.ControllerRegistrar controllers) {
|
||||
controllers.add(new AnimationController<>(this, "bolt_controller", 0, this::boltController));
|
||||
}
|
||||
|
||||
private PlayState boltController(AnimationState<LucidBoltEntity> state) {
|
||||
return state.setAndContinue(IDLE_ANIM);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AnimatableInstanceCache getAnimatableInstanceCache() {
|
||||
return this.geoCache;
|
||||
}
|
||||
}
|
||||
+42
-30
@@ -102,7 +102,9 @@ public class NightmareEntity extends Monster implements GeoEntity {
|
||||
private static final int SPECIAL_ROAR = 5;
|
||||
private static final int SPECIAL_ROAR_P2 = 6;
|
||||
private static final int SPECIAL_PHASE_TWO = 7;
|
||||
private static final int SPECIAL_PORTAL = 8;
|
||||
private static final int SPECIAL_PORTAL_ENTER = 8;
|
||||
private static final int SPECIAL_PORTAL_EXIT = 9;
|
||||
private static final int SPECIAL_DEATH = 10;
|
||||
private static final int ATTACK_TOTAL_TICKS = 20;
|
||||
private static final int ATTACK_DAMAGE_TICK = 10;
|
||||
private static final int INTRO_ROAR_TICKS = 30;
|
||||
@@ -136,12 +138,14 @@ public class NightmareEntity extends Monster implements GeoEntity {
|
||||
private static final double PHASE_TWO_HEALTH_FRACTION = 0.5D;
|
||||
private static final double PORTAL_RANGE = 32.0D;
|
||||
private static final double PORTAL_MIN_RANGE_SQR = 49.0D;
|
||||
private static final double PORTAL_ENTRY_EXIT_MIN_RANGE_SQR = 49.0D;
|
||||
private static final double PORTAL_EXIT_OFFSET = 2.35D;
|
||||
private static final double PORTAL_TRANSPORT_RADIUS = 1.25D;
|
||||
private static final double FLYING_APPROACH_STRAFE_OFFSET = 2.1D;
|
||||
private static final double FLYING_APPROACH_HEIGHT = 0.45D;
|
||||
private static final double FLYING_APPROACH_HEIGHT_PHASE_TWO = 0.8D;
|
||||
private static final double FLYING_APPROACH_TOO_CLOSE_RANGE_SQR = 9.0D;
|
||||
private static final double FLYING_OVERHEAD_STALL_RANGE_SQR = 4.0D;
|
||||
private static final double FLYING_OVERHEAD_STALL_HEIGHT = 2.1D;
|
||||
private static final double ANIMATION_MOVEMENT_THRESHOLD_SQR = 0.01D;
|
||||
|
||||
private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle");
|
||||
@@ -159,7 +163,8 @@ public class NightmareEntity extends Monster implements GeoEntity {
|
||||
private static final String SPECIAL_ROAR_TRIGGER = "roar";
|
||||
private static final String SPECIAL_ROAR_P2_TRIGGER = "roar_P2";
|
||||
private static final String SPECIAL_PHASE_TWO_TRIGGER = "phase2";
|
||||
private static final String SPECIAL_PORTAL_TRIGGER = "portal_out";
|
||||
private static final String SPECIAL_PORTAL_ENTER_TRIGGER = "portal_enter";
|
||||
private static final String SPECIAL_PORTAL_EXIT_TRIGGER = "portal_out";
|
||||
private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlayAndHold("attack");
|
||||
private static final RawAnimation ATTACK_P2_ANIM = RawAnimation.begin().thenPlayAndHold("attack_P2");
|
||||
private static final RawAnimation FLY_ATTACK_ANIM = RawAnimation.begin().thenPlayAndHold("attack2");
|
||||
@@ -167,7 +172,9 @@ public class NightmareEntity extends Monster implements GeoEntity {
|
||||
private static final RawAnimation ROAR_ANIM = RawAnimation.begin().thenPlayAndHold("roar");
|
||||
private static final RawAnimation ROAR_P2_ANIM = RawAnimation.begin().thenPlayAndHold("roar_P2");
|
||||
private static final RawAnimation PHASE_TWO_TRANSITION_ANIM = RawAnimation.begin().thenPlayAndHold("phase2");
|
||||
private static final RawAnimation PORTAL_ATTACK_ANIM = RawAnimation.begin().thenPlayAndHold("portal_out");
|
||||
private static final RawAnimation PORTAL_ENTER_ANIM = RawAnimation.begin().thenPlayAndHold("portal_enter");
|
||||
private static final RawAnimation PORTAL_EXIT_ANIM = RawAnimation.begin().thenPlayAndHold("portal_out");
|
||||
private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlayAndHold("death");
|
||||
|
||||
private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this);
|
||||
|
||||
@@ -264,7 +271,9 @@ public class NightmareEntity extends Monster implements GeoEntity {
|
||||
.triggerableAnim(SPECIAL_ROAR_TRIGGER, ROAR_ANIM)
|
||||
.triggerableAnim(SPECIAL_ROAR_P2_TRIGGER, ROAR_P2_ANIM)
|
||||
.triggerableAnim(SPECIAL_PHASE_TWO_TRIGGER, PHASE_TWO_TRANSITION_ANIM)
|
||||
.triggerableAnim(SPECIAL_PORTAL_TRIGGER, PORTAL_ATTACK_ANIM));
|
||||
.triggerableAnim(SPECIAL_PORTAL_ENTER_TRIGGER, PORTAL_ENTER_ANIM)
|
||||
.triggerableAnim(SPECIAL_PORTAL_EXIT_TRIGGER, PORTAL_EXIT_ANIM)
|
||||
.triggerableAnim("death", DEATH_ANIM));
|
||||
}
|
||||
|
||||
private PlayState mainAnimController(AnimationState<NightmareEntity> state) {
|
||||
@@ -555,6 +564,9 @@ public class NightmareEntity extends Monster implements GeoEntity {
|
||||
@Override
|
||||
protected void tickDeath() {
|
||||
this.deathTime++;
|
||||
if (this.deathTime == 1) {
|
||||
this.selectSpecialAnimation(SPECIAL_DEATH);
|
||||
}
|
||||
if (this.deathTime >= DEATH_TICKS) {
|
||||
this.remove(RemovalReason.KILLED);
|
||||
this.dropExperience(this);
|
||||
@@ -678,7 +690,6 @@ public class NightmareEntity extends Monster implements GeoEntity {
|
||||
if (!this.attackHitApplied && elapsed >= ATTACK_DAMAGE_TICK) {
|
||||
this.attackHitApplied = true;
|
||||
this.playNightmareBiteSound();
|
||||
this.spawnBiteEffect();
|
||||
this.performAttackHit();
|
||||
}
|
||||
if (--this.attackAnimationTicks <= 0) {
|
||||
@@ -731,14 +742,16 @@ public class NightmareEntity extends Monster implements GeoEntity {
|
||||
}
|
||||
|
||||
private boolean canStartPortalAttack(LivingEntity target) {
|
||||
Vec3 entryPos = this.getPortalEntryPosition();
|
||||
if (!this.isPhaseTwo() || this.isPhaseTransitioning() || this.portalCooldown > 0 || this.attackAnimationTicks > 0 || this.roarTicks > 0) return false;
|
||||
if (!this.hasLineOfSight(target) || this.distanceToSqr(target) > PORTAL_RANGE * PORTAL_RANGE) return false;
|
||||
if (this.horizontalDistanceToSqr(target) < PORTAL_MIN_RANGE_SQR) return false;
|
||||
return this.portalAttackTicks <= 0 && this.findPortalExitPos(target) != null;
|
||||
return this.portalAttackTicks <= 0 && this.findPortalExitPos(target, entryPos) != null;
|
||||
}
|
||||
|
||||
private void startPortalAttack(LivingEntity target) {
|
||||
Vec3 exitPos = this.findPortalExitPos(target);
|
||||
Vec3 entryPos = this.getPortalEntryPosition();
|
||||
Vec3 exitPos = this.findPortalExitPos(target, entryPos);
|
||||
if (exitPos == null || !(this.level() instanceof ServerLevel serverLevel)) return;
|
||||
this.clearNightmarePortals();
|
||||
this.portalExitPos = exitPos;
|
||||
@@ -749,9 +762,9 @@ public class NightmareEntity extends Monster implements GeoEntity {
|
||||
this.attackHitApplied = false;
|
||||
this.attackCooldown = 24;
|
||||
this.portalCooldown = 180 + this.random.nextInt(100);
|
||||
this.selectSpecialAnimation(SPECIAL_PORTAL);
|
||||
this.selectSpecialAnimation(SPECIAL_PORTAL_ENTER);
|
||||
this.getNavigation().stop();
|
||||
this.entryPortal = NightmarePortalEntity.spawnAt(serverLevel, this.position().add(this.getViewVector(1.0F).multiply(1.6D, 0.0D, 1.6D)), this, this.position(), PORTAL_LIFETIME_TICKS);
|
||||
this.entryPortal = NightmarePortalEntity.spawnAt(serverLevel, entryPos, this, this.position(), PORTAL_LIFETIME_TICKS);
|
||||
this.exitPortal = NightmarePortalEntity.spawnAt(serverLevel, exitPos, this, this.position(), PORTAL_LIFETIME_TICKS);
|
||||
if (this.entryPortal != null && this.exitPortal != null) {
|
||||
this.entryPortal.linkTo(this.exitPortal);
|
||||
@@ -771,7 +784,6 @@ public class NightmareEntity extends Monster implements GeoEntity {
|
||||
}
|
||||
if (!this.portalAttackHitApplied && elapsed >= PORTAL_DAMAGE_TICK) {
|
||||
this.portalAttackHitApplied = true;
|
||||
this.spawnBiteEffect();
|
||||
this.performPortalExitHit();
|
||||
}
|
||||
if (--this.portalAttackTicks <= 0) {
|
||||
@@ -786,6 +798,7 @@ public class NightmareEntity extends Monster implements GeoEntity {
|
||||
if (this.portalExitPos == null) return;
|
||||
this.portalTravelTicks = PORTAL_TRAVEL_INVULNERABLE_TICKS;
|
||||
this.setPortalCooldown();
|
||||
this.selectSpecialAnimation(SPECIAL_PORTAL_EXIT);
|
||||
this.teleportTo(this.portalExitPos.x, this.portalExitPos.y, this.portalExitPos.z);
|
||||
if (target != null) {
|
||||
this.faceTowardTarget(target, 180.0F);
|
||||
@@ -820,7 +833,6 @@ public class NightmareEntity extends Monster implements GeoEntity {
|
||||
List<LivingEntity> victims = this.level().getEntitiesOfClass(LivingEntity.class, hitBox, this::canTargetEntity);
|
||||
for (LivingEntity victim : victims) {
|
||||
if (victim.hurt(this.nightmareDamageSource(), damage)) {
|
||||
this.spawnBiteEffectAt(victim);
|
||||
this.applyNightmareStrikeEffects(victim);
|
||||
this.knockAway(victim, 1.35D, 0.35D);
|
||||
}
|
||||
@@ -831,20 +843,6 @@ public class NightmareEntity extends Monster implements GeoEntity {
|
||||
}
|
||||
}
|
||||
|
||||
private void spawnBiteEffect() {
|
||||
if (!(this.level() instanceof ServerLevel serverLevel)) return;
|
||||
Vec3 forward = this.getViewVector(1.0F).normalize();
|
||||
Vec3 spawnPos = this.getEyePosition().add(forward.scale(this.getBbWidth() * 0.65D)).add(0.0D, -0.45D, 0.0D);
|
||||
NightmareBiteEntity.spawnAt(serverLevel, spawnPos, this.getYRot(), this.isPhaseTwo());
|
||||
}
|
||||
|
||||
private void spawnBiteEffectAt(LivingEntity target) {
|
||||
if (!(this.level() instanceof ServerLevel serverLevel)) return;
|
||||
float yaw = target.getYRot() + 180.0F;
|
||||
Vec3 spawnPos = target.getEyePosition().add(0.0D, -0.35D, 0.0D);
|
||||
NightmareBiteEntity.spawnAt(serverLevel, spawnPos, yaw, this.isPhaseTwo());
|
||||
}
|
||||
|
||||
private void playNightmareBiteSound() {
|
||||
this.playSound(AntarchySoundEvents.NIGHTMARE_BITE.get(), 1.3F, 0.72F + this.random.nextFloat() * 0.08F);
|
||||
}
|
||||
@@ -941,8 +939,14 @@ public class NightmareEntity extends Monster implements GeoEntity {
|
||||
Vec3 right = new Vec3(-forward.z, 0.0D, forward.x);
|
||||
double strafe = this.tickCount % 32 < 16 ? FLYING_APPROACH_STRAFE_OFFSET : -FLYING_APPROACH_STRAFE_OFFSET;
|
||||
double height = this.isPhaseTwo() ? FLYING_APPROACH_HEIGHT_PHASE_TWO : FLYING_APPROACH_HEIGHT;
|
||||
double horizontalDistanceSqr = this.horizontalDistanceToSqr(target);
|
||||
double overheadGap = this.getY() - target.getY();
|
||||
Vec3 anchor = target.position().subtract(forward.scale(1.4D)).add(right.scale(strafe));
|
||||
if (this.horizontalDistanceToSqr(target) <= FLYING_APPROACH_TOO_CLOSE_RANGE_SQR) {
|
||||
if (horizontalDistanceSqr <= FLYING_OVERHEAD_STALL_RANGE_SQR && overheadGap >= FLYING_OVERHEAD_STALL_HEIGHT) {
|
||||
anchor = target.position().add(right.scale(strafe * 1.4D)).subtract(forward.scale(0.6D));
|
||||
return new Vec3(anchor.x, target.getEyeY() + 0.15D, anchor.z);
|
||||
}
|
||||
if (horizontalDistanceSqr <= FLYING_APPROACH_TOO_CLOSE_RANGE_SQR) {
|
||||
anchor = target.position().subtract(forward.scale(2.4D));
|
||||
}
|
||||
return new Vec3(anchor.x, target.getEyeY() + height, anchor.z);
|
||||
@@ -985,8 +989,12 @@ public class NightmareEntity extends Monster implements GeoEntity {
|
||||
return false;
|
||||
}
|
||||
|
||||
private Vec3 getPortalEntryPosition() {
|
||||
return this.position().add(this.getViewVector(1.0F).multiply(1.6D, 0.0D, 1.6D));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private Vec3 findPortalExitPos(LivingEntity target) {
|
||||
private Vec3 findPortalExitPos(LivingEntity target, Vec3 entryPos) {
|
||||
Vec3 forward = target.getLookAngle().multiply(1.0D, 0.0D, 1.0D);
|
||||
if (forward.lengthSqr() < 1.0E-4D) {
|
||||
forward = this.getViewVector(1.0F).multiply(1.0D, 0.0D, 1.0D);
|
||||
@@ -1004,7 +1012,9 @@ public class NightmareEntity extends Monster implements GeoEntity {
|
||||
};
|
||||
for (Vec3 candidate : candidates) {
|
||||
Vec3 adjusted = this.findValidPortalPosition(candidate);
|
||||
if (adjusted != null && adjusted.distanceToSqr(this.position()) <= PORTAL_RANGE * PORTAL_RANGE) {
|
||||
if (adjusted != null
|
||||
&& adjusted.distanceToSqr(this.position()) <= PORTAL_RANGE * PORTAL_RANGE
|
||||
&& adjusted.distanceToSqr(entryPos) >= PORTAL_ENTRY_EXIT_MIN_RANGE_SQR) {
|
||||
return adjusted;
|
||||
}
|
||||
}
|
||||
@@ -1172,7 +1182,9 @@ public class NightmareEntity extends Monster implements GeoEntity {
|
||||
case SPECIAL_ROAR -> SPECIAL_ROAR_TRIGGER;
|
||||
case SPECIAL_ROAR_P2 -> SPECIAL_ROAR_P2_TRIGGER;
|
||||
case SPECIAL_PHASE_TWO -> SPECIAL_PHASE_TWO_TRIGGER;
|
||||
case SPECIAL_PORTAL -> SPECIAL_PORTAL_TRIGGER;
|
||||
case SPECIAL_PORTAL_ENTER -> SPECIAL_PORTAL_ENTER_TRIGGER;
|
||||
case SPECIAL_PORTAL_EXIT -> SPECIAL_PORTAL_EXIT_TRIGGER;
|
||||
case SPECIAL_DEATH -> "death";
|
||||
default -> null;
|
||||
};
|
||||
}
|
||||
|
||||
-31
@@ -9,9 +9,7 @@ import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.world.damagesource.DamageSource;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.EntityType;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.phys.AABB;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import software.bernie.geckolib.animatable.GeoEntity;
|
||||
import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache;
|
||||
@@ -22,7 +20,6 @@ import software.bernie.geckolib.animation.PlayState;
|
||||
import software.bernie.geckolib.animation.RawAnimation;
|
||||
import software.bernie.geckolib.util.GeckoLibUtil;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
public class NightmarePortalEntity extends Entity implements GeoEntity {
|
||||
@@ -103,26 +100,6 @@ public class NightmarePortalEntity extends Entity implements GeoEntity {
|
||||
this.discard();
|
||||
return;
|
||||
}
|
||||
this.transportEntities();
|
||||
}
|
||||
|
||||
private void transportEntities() {
|
||||
NightmarePortalEntity other = this.getLinkedPortal();
|
||||
Vec3 destination = other != null ? other.position() : this.fallbackDestination;
|
||||
AABB area = this.getBoundingBox().inflate(1.05D, 0.75D, 1.05D);
|
||||
List<LivingEntity> entities = this.level().getEntitiesOfClass(LivingEntity.class, area, entity -> entity.isAlive() && !entity.isSpectator());
|
||||
for (LivingEntity entity : entities) {
|
||||
if (entity.getUUID().equals(this.ownerId)) {
|
||||
continue;
|
||||
}
|
||||
if (entity.isOnPortalCooldown()) {
|
||||
continue;
|
||||
}
|
||||
entity.teleportTo(destination.x, destination.y, destination.z);
|
||||
entity.setPortalCooldown();
|
||||
entity.setDeltaMovement(entity.getDeltaMovement().multiply(1.0D, 0.0D, 1.0D));
|
||||
entity.hurtMarked = true;
|
||||
}
|
||||
}
|
||||
|
||||
public void linkTo(NightmarePortalEntity other) {
|
||||
@@ -130,14 +107,6 @@ public class NightmarePortalEntity extends Entity implements GeoEntity {
|
||||
this.fallbackDestination = other.position();
|
||||
}
|
||||
|
||||
private NightmarePortalEntity getLinkedPortal() {
|
||||
if (!(this.level() instanceof ServerLevel serverLevel) || this.linkedPortalId == null) {
|
||||
return null;
|
||||
}
|
||||
Entity entity = serverLevel.getEntity(this.linkedPortalId);
|
||||
return entity instanceof NightmarePortalEntity portal ? portal : null;
|
||||
}
|
||||
|
||||
public boolean isClosing() {
|
||||
return this.getEntityData().get(CLOSING);
|
||||
}
|
||||
|
||||
+39
-7
@@ -156,9 +156,10 @@ public class BigBerthaItem extends SwordItem implements GeoItem {
|
||||
}
|
||||
|
||||
switch (getMode(stack)) {
|
||||
case NONE -> applyNoneHit(player, target);
|
||||
case BASILISK -> applyBasiliskHit(target, serverLevel);
|
||||
case LUCID -> applyLucidHit(target, player, serverLevel);
|
||||
case NIGHTMARE -> applyNightmareHit(target, serverLevel);
|
||||
case NIGHTMARE -> applyNightmareHit(player, target, serverLevel);
|
||||
case KRAKEN -> applyKrakenHit(player, target, serverLevel);
|
||||
case HERCULES -> applyHerculesHit(player, target, serverLevel);
|
||||
case MOLEVORE, TORETERROR -> {
|
||||
@@ -249,6 +250,22 @@ public class BigBerthaItem extends SwordItem implements GeoItem {
|
||||
player.awardStat(Stats.ITEM_USED.get(this));
|
||||
}
|
||||
|
||||
private void applyNoneHit(Player attacker, LivingEntity target) {
|
||||
double bonusPercent = AntarchySettings.bigBerthaNoneModeDamageBonusPercent();
|
||||
if (bonusPercent <= 0.0D) {
|
||||
return;
|
||||
}
|
||||
|
||||
float bonusDamage = (float) (attacker.getAttributeValue(Attributes.ATTACK_DAMAGE) * (bonusPercent / 100.0D));
|
||||
if (bonusDamage <= 0.0F) {
|
||||
return;
|
||||
}
|
||||
|
||||
target.invulnerableTime = 0;
|
||||
target.hurt(attacker.damageSources().playerAttack(attacker), bonusDamage);
|
||||
target.hurtMarked = true;
|
||||
}
|
||||
|
||||
private void applyBasiliskHit(LivingEntity target, ServerLevel level) {
|
||||
target.addEffect(new MobEffectInstance(
|
||||
MobEffects.POISON,
|
||||
@@ -273,7 +290,9 @@ public class BigBerthaItem extends SwordItem implements GeoItem {
|
||||
true));
|
||||
}
|
||||
|
||||
level.sendParticles(ParticleTypes.PORTAL, target.getX(), target.getY(0.8D), target.getZ(), 12, 0.25D, 0.25D, 0.25D, 0.08D);
|
||||
Vec3 impactPos = new Vec3(target.getX(), target.getY(0.8D), target.getZ());
|
||||
LucidBoltEntity.spawnImpactParticles(level, impactPos);
|
||||
level.sendParticles(ParticleTypes.PORTAL, impactPos.x, impactPos.y, impactPos.z, 12, 0.25D, 0.25D, 0.25D, 0.08D);
|
||||
if (!AntarchyGravityApi.isGravityInverted(player)) {
|
||||
return;
|
||||
}
|
||||
@@ -293,11 +312,22 @@ public class BigBerthaItem extends SwordItem implements GeoItem {
|
||||
target.hurtMarked = true;
|
||||
}
|
||||
|
||||
private void applyNightmareHit(LivingEntity target, ServerLevel level) {
|
||||
private void applyNightmareHit(Player attacker, LivingEntity target, ServerLevel level) {
|
||||
if (target instanceof Player) {
|
||||
target.addEffect(new MobEffectInstance(AntarchyObjects.DREAD.get(), AntarchySettings.nightmareDreadTicks(), 0));
|
||||
}
|
||||
target.addEffect(new MobEffectInstance(MobEffects.WEAKNESS, AntarchySettings.nightmareWeaknessTicks(), 0));
|
||||
|
||||
double bonusPercent = AntarchySettings.bigBerthaNightmareDamageBonusPercent();
|
||||
if (bonusPercent > 0.0D) {
|
||||
float bonusDamage = (float) (attacker.getAttributeValue(Attributes.ATTACK_DAMAGE) * (bonusPercent / 100.0D));
|
||||
if (bonusDamage > 0.0F) {
|
||||
target.invulnerableTime = 0;
|
||||
target.hurt(attacker.damageSources().playerAttack(attacker), bonusDamage);
|
||||
target.hurtMarked = true;
|
||||
}
|
||||
}
|
||||
|
||||
level.sendParticles(ParticleTypes.SOUL_FIRE_FLAME, target.getX(), target.getY(0.8D), target.getZ(), 12, 0.3D, 0.3D, 0.3D, 0.01D);
|
||||
level.sendParticles(ParticleTypes.SMOKE, target.getX(), target.getY(0.8D), target.getZ(), 6, 0.2D, 0.2D, 0.2D, 0.02D);
|
||||
}
|
||||
@@ -545,7 +575,7 @@ public class BigBerthaItem extends SwordItem implements GeoItem {
|
||||
|
||||
private static void setMode(ItemStack stack, BossMode mode) {
|
||||
CustomData.update(DataComponents.CUSTOM_DATA, stack, tag -> {
|
||||
if (mode == BossMode.BASILISK) {
|
||||
if (mode == BossMode.NONE) {
|
||||
tag.remove(MODE_TAG);
|
||||
} else {
|
||||
tag.putInt(MODE_TAG, mode.id);
|
||||
@@ -616,7 +646,8 @@ public class BigBerthaItem extends SwordItem implements GeoItem {
|
||||
}
|
||||
|
||||
private enum BossMode {
|
||||
BASILISK(0, "tooltip.antarchy.big_bertha.mode.basilisk", "message.antarchy.big_bertha.mode.basilisk"),
|
||||
NONE(0, "tooltip.antarchy.big_bertha.mode.none", "message.antarchy.big_bertha.mode.none"),
|
||||
BASILISK(7, "tooltip.antarchy.big_bertha.mode.basilisk", "message.antarchy.big_bertha.mode.basilisk"),
|
||||
NIGHTMARE(1, "tooltip.antarchy.big_bertha.mode.nightmare", "message.antarchy.big_bertha.mode.nightmare"),
|
||||
KRAKEN(2, "tooltip.antarchy.big_bertha.mode.kraken", "message.antarchy.big_bertha.mode.kraken"),
|
||||
MOLEVORE(3, "tooltip.antarchy.big_bertha.mode.molevore", "message.antarchy.big_bertha.mode.molevore"),
|
||||
@@ -636,13 +667,14 @@ public class BigBerthaItem extends SwordItem implements GeoItem {
|
||||
|
||||
private BossMode next() {
|
||||
return switch (this) {
|
||||
case NONE -> BASILISK;
|
||||
case BASILISK -> LUCID;
|
||||
case LUCID -> NIGHTMARE;
|
||||
case NIGHTMARE -> KRAKEN;
|
||||
case KRAKEN -> HERCULES;
|
||||
case HERCULES -> MOLEVORE;
|
||||
case MOLEVORE -> TORETERROR;
|
||||
case TORETERROR -> BASILISK;
|
||||
case TORETERROR -> NONE;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -652,7 +684,7 @@ public class BigBerthaItem extends SwordItem implements GeoItem {
|
||||
return mode;
|
||||
}
|
||||
}
|
||||
return BASILISK;
|
||||
return NONE;
|
||||
}
|
||||
}
|
||||
}
|
||||
+653
-24
@@ -7,72 +7,72 @@
|
||||
"bones": {
|
||||
"left_leg": {
|
||||
"rotation": {
|
||||
"vector": ["5+math.cos(query.anim_time*2)*2", 0, -2.5]
|
||||
"vector": ["5+math.cos(q.anim_time*90*2)*2", 0, -2.5]
|
||||
},
|
||||
"position": {
|
||||
"vector": [0, "0.15+math.cos(query.anim_time*2)/14", "-math.cos(query.anim_time*2)/5"]
|
||||
"vector": [0, "0.15+math.cos(q.anim_time*90*2)/14", "-math.cos(q.anim_time*90*2)/5"]
|
||||
}
|
||||
},
|
||||
"right_leg": {
|
||||
"rotation": {
|
||||
"vector": ["5+math.cos(query.anim_time*2)*2", 0, 2.5]
|
||||
"vector": ["5+math.cos(q.anim_time*90*2)*2", 0, 2.5]
|
||||
},
|
||||
"position": {
|
||||
"vector": [0, "0.15+math.cos(query.anim_time*2)/14", "-math.cos(query.anim_time*2)/5"]
|
||||
"vector": [0, "0.15+math.cos(q.anim_time*90*2)/14", "-math.cos(q.anim_time*90*2)/5"]
|
||||
}
|
||||
},
|
||||
"torso": {
|
||||
"rotation": {
|
||||
"vector": ["-math.cos(query.anim_time*2-60)", 0, 0]
|
||||
"vector": ["-math.cos(q.anim_time*90*2-60)", 0, 0]
|
||||
},
|
||||
"position": {
|
||||
"vector": [0, "math.cos(query.anim_time*2)/5", 0]
|
||||
"vector": [0, "math.cos(q.anim_time*90*2)/5", 0]
|
||||
}
|
||||
},
|
||||
"head": {
|
||||
"rotation": {
|
||||
"vector": ["-math.cos(query.anim_time*2-160)*2", 0, 0]
|
||||
"vector": ["-math.cos(q.anim_time*90*2-160)*2", 0, 0]
|
||||
}
|
||||
},
|
||||
"left_ear": {
|
||||
"rotation": {
|
||||
"vector": ["math.cos(query.anim_time*2)*6", "math.cos(query.anim_time*2-40)*5", "7.5+math.cos(query.anim_time*2+30)*5"]
|
||||
"vector": ["math.cos(q.anim_time*90*2)*6", "math.cos(q.anim_time*90*2-40)*5", "7.5+math.cos(q.anim_time*90*2+30)*5"]
|
||||
}
|
||||
},
|
||||
"right_ear": {
|
||||
"rotation": {
|
||||
"vector": ["math.cos(query.anim_time*2)*6", "-math.cos(query.anim_time*2-40)*5", "-7.5-math.cos(query.anim_time*2+30)*5"]
|
||||
"vector": ["math.cos(q.anim_time*90*2)*6", "-math.cos(q.anim_time*90*2-40)*5", "-7.5-math.cos(q.anim_time*90*2+30)*5"]
|
||||
}
|
||||
},
|
||||
"tail": {
|
||||
"rotation": {
|
||||
"vector": ["math.cos(query.anim_time*2+50)*4", 0, 0]
|
||||
"vector": ["math.cos(q.anim_time*90*2+50)*4", 0, 0]
|
||||
}
|
||||
},
|
||||
"left_arm": {
|
||||
"rotation": {
|
||||
"vector": ["math.cos(query.anim_time*2-60)*3-3", 0, -5]
|
||||
"vector": ["math.cos(q.anim_time*90*2-60)*3-3", 0, -5]
|
||||
},
|
||||
"position": {
|
||||
"vector": [0, "-math.cos(query.anim_time*2-30)/4", "-math.cos(query.anim_time*2-50)/5"]
|
||||
"vector": [0, "-math.cos(q.anim_time*90*2-30)/4", "-math.cos(q.anim_time*90*2-50)/5"]
|
||||
}
|
||||
},
|
||||
"right_arm": {
|
||||
"rotation": {
|
||||
"vector": ["math.cos(query.anim_time*2-60)*3-3", 0, 5]
|
||||
"vector": ["math.cos(q.anim_time*90*2-60)*3-3", 0, 5]
|
||||
},
|
||||
"position": {
|
||||
"vector": [0, "-math.cos(query.anim_time*2-30)/4", "-math.cos(query.anim_time*2-50)/5"]
|
||||
"vector": [0, "-math.cos(q.anim_time*90*2-30)/4", "-math.cos(q.anim_time*90*2-50)/5"]
|
||||
}
|
||||
},
|
||||
"left_leg2": {
|
||||
"rotation": {
|
||||
"vector": ["-5-math.cos(query.anim_time*2)*2", 0, 2.5]
|
||||
"vector": ["-5-math.cos(q.anim_time*90*2)*2", 0, 2.5]
|
||||
}
|
||||
},
|
||||
"right_leg2": {
|
||||
"rotation": {
|
||||
"vector": ["-5-math.cos(query.anim_time*2)*2", 0, -2.5]
|
||||
"vector": ["-5-math.cos(q.anim_time*90*2)*2", 0, -2.5]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1478,7 +1478,7 @@
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"0.7917": {
|
||||
"vector": ["-math.cos(query.anim_time*32-60)*20", "-math.cos(query.anim_time*32)*20", "math.cos(query.anim_time*32-50)*20"]
|
||||
"vector": ["-math.cos(q.anim_time*90*32-60)*20", "-math.cos(q.anim_time*90*32)*20", "math.cos(q.anim_time*90*32-50)*20"]
|
||||
},
|
||||
"0.9167": {
|
||||
"vector": [0, 0, 0]
|
||||
@@ -1491,7 +1491,7 @@
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"0.4583": {
|
||||
"vector": ["-math.cos(query.anim_time*32-60)*20", "math.cos(query.anim_time*32)*20", "-math.cos(query.anim_time*32-50)*20"]
|
||||
"vector": ["-math.cos(q.anim_time*90*32-60)*20", "math.cos(q.anim_time*90*32)*20", "-math.cos(q.anim_time*90*32-50)*20"]
|
||||
},
|
||||
"0.5833": {
|
||||
"vector": [0, 0, 0]
|
||||
@@ -1500,7 +1500,7 @@
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"1.2917": {
|
||||
"vector": ["-math.cos(query.anim_time*32-60)*20", "math.cos(query.anim_time*32)*20", "-math.cos(query.anim_time*32-50)*20"]
|
||||
"vector": ["-math.cos(q.anim_time*90*32-60)*20", "math.cos(q.anim_time*90*32)*20", "-math.cos(q.anim_time*90*32-50)*20"]
|
||||
},
|
||||
"1.4167": {
|
||||
"vector": [0, 0, 0]
|
||||
@@ -1547,13 +1547,13 @@
|
||||
},
|
||||
"1.0": {
|
||||
"post": {
|
||||
"vector": [67.5, "-math.cos(query.anim_time*16)*10", "-17.5+math.cos(query.anim_time*16-60)*10"]
|
||||
"vector": [67.5, "-math.cos(q.anim_time*90*16)*10", "-17.5+math.cos(q.anim_time*90*16-60)*10"]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.1667": {
|
||||
"post": {
|
||||
"vector": [67.5, "-math.cos(query.anim_time*16)*10", "-17.5+math.cos(query.anim_time*16-60)*10"]
|
||||
"vector": [67.5, "-math.cos(q.anim_time*90*16)*10", "-17.5+math.cos(q.anim_time*90*16-60)*10"]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
@@ -2145,13 +2145,13 @@
|
||||
},
|
||||
"0.5": {
|
||||
"post": {
|
||||
"vector": ["85-math.clamp(math.cos(query.anim_time*10-80)*10,0,10)", "math.cos(query.anim_time*8)*20", "math.cos(query.anim_time*8-80)*10"]
|
||||
"vector": [78, 14, 4]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.0": {
|
||||
"post": {
|
||||
"vector": ["85-math.clamp(math.cos(query.anim_time*10-80)*10,0,10)", "math.cos(query.anim_time*8)*20", "math.cos(query.anim_time*8-80)*10"]
|
||||
"vector": [78, 14, 4]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
@@ -2740,6 +2740,635 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"item_pickup": {
|
||||
"animation_length": 3,
|
||||
"bones": {
|
||||
"body": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [-65, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": {
|
||||
"post": {
|
||||
"vector": [-15, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.0": {
|
||||
"post": {
|
||||
"vector": [-65, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"left_arm": {
|
||||
"rotation": {
|
||||
"0.25": {
|
||||
"pre": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"post": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": {
|
||||
"post": {
|
||||
"vector": [0, 0, 22.5]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.75": {
|
||||
"post": {
|
||||
"vector": [0, 0, 22.5]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.0": {
|
||||
"post": {
|
||||
"vector": [0, 0, 22.5]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": {
|
||||
"post": {
|
||||
"vector": [-44.8924, 3.2116, 26.3342]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.375": {
|
||||
"post": {
|
||||
"vector": [-49.8924, 3.2116, 26.3342]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.5": {
|
||||
"post": {
|
||||
"vector": [-42.3924, 3.2116, 26.3342]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.625": {
|
||||
"post": {
|
||||
"vector": [-44.8924, 3.2116, 26.3342]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.75": {
|
||||
"post": {
|
||||
"vector": [-49.8924, 3.2116, 26.3342]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.875": {
|
||||
"post": {
|
||||
"vector": [-42.3924, 3.2116, 26.3342]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.0": {
|
||||
"post": {
|
||||
"vector": [-44.8924, 3.2116, 26.3342]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.25": {
|
||||
"post": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.25": {
|
||||
"pre": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"post": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tail": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [42.5, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"head": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [60, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [0, -1.0425, -1.31366]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"left_flying_part": {
|
||||
"scale": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"right_arm": {
|
||||
"rotation": {
|
||||
"0.25": {
|
||||
"pre": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"post": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": {
|
||||
"post": {
|
||||
"vector": [0, 0, -22.5]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.75": {
|
||||
"post": {
|
||||
"vector": [0, 0, -22.5]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.0": {
|
||||
"post": {
|
||||
"vector": [0, 0, -22.5]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": {
|
||||
"post": {
|
||||
"vector": [-44.8924, -3.2116, -26.3342]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.375": {
|
||||
"post": {
|
||||
"vector": [-49.8924, -3.2116, -26.3342]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.5": {
|
||||
"post": {
|
||||
"vector": [-42.3924, -3.2116, -26.3342]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.625": {
|
||||
"post": {
|
||||
"vector": [-44.8924, -3.2116, -26.3342]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.75": {
|
||||
"post": {
|
||||
"vector": [-49.8924, -3.2116, -26.3342]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.875": {
|
||||
"post": {
|
||||
"vector": [-42.3924, -3.2116, -26.3342]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.0": {
|
||||
"post": {
|
||||
"vector": [-44.8924, -3.2116, -26.3342]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.25": {
|
||||
"post": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.25": {
|
||||
"pre": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"post": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"right_flying_part": {
|
||||
"scale": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"left_cheeks": {
|
||||
"scale": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": {
|
||||
"post": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.125": {
|
||||
"post": {
|
||||
"vector": [1, 1, 1]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"right_cheeks": {
|
||||
"scale": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": {
|
||||
"post": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.125": {
|
||||
"post": {
|
||||
"vector": [1, 1, 1]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"climbing": {
|
||||
"loop": true,
|
||||
"animation_length": 1,
|
||||
"bones": {
|
||||
"left_leg": {
|
||||
"rotation": {
|
||||
"0.25": {
|
||||
"pre": {
|
||||
"vector": [108.1133, 33.6443, 10.272]
|
||||
},
|
||||
"post": {
|
||||
"vector": [108.1133, 33.6443, 10.272]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": {
|
||||
"post": {
|
||||
"vector": [118.1133, 33.6443, 10.272]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.75": {
|
||||
"post": {
|
||||
"vector": [108.1133, 33.6443, 10.272]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.0": {
|
||||
"post": {
|
||||
"vector": [108.1133, 33.6443, 10.272]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.25": {
|
||||
"pre": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"post": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": {
|
||||
"post": {
|
||||
"vector": [0, -1, -2]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.75": {
|
||||
"post": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.0": {
|
||||
"post": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"right_leg": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [108.1133, -33.6443, -10.272]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.25": {
|
||||
"post": {
|
||||
"vector": [118.1133, -33.6443, -10.272]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": {
|
||||
"post": {
|
||||
"vector": [108.1133, -33.6443, -10.272]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.75": {
|
||||
"post": {
|
||||
"vector": [108.1133, -33.6443, -10.272]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.25": {
|
||||
"post": {
|
||||
"vector": [0, -1, -2]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": {
|
||||
"post": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.75": {
|
||||
"post": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"head": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.25": {
|
||||
"post": {
|
||||
"vector": [-5, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": {
|
||||
"post": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.75": {
|
||||
"post": {
|
||||
"vector": [-5, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.0": {
|
||||
"post": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"left_cheeks": {
|
||||
"scale": {
|
||||
"vector": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"right_cheeks": {
|
||||
"scale": {
|
||||
"vector": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"tail": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.25": {
|
||||
"post": {
|
||||
"vector": [-5, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": {
|
||||
"post": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.75": {
|
||||
"post": {
|
||||
"vector": [-5, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.0": {
|
||||
"post": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"left_arm": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [-90, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.25": {
|
||||
"post": {
|
||||
"vector": [-110, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": {
|
||||
"post": {
|
||||
"vector": [-90, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.75": {
|
||||
"post": {
|
||||
"vector": [-90, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [0, -2, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.25": {
|
||||
"post": {
|
||||
"vector": [0, -1.06031, 0.34202]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": {
|
||||
"post": {
|
||||
"vector": [0, -2.06, -0.66]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.75": {
|
||||
"post": {
|
||||
"vector": [0, -2, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"left_flying_part": {
|
||||
"scale": {
|
||||
"vector": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"right_arm": {
|
||||
"rotation": {
|
||||
"0.25": {
|
||||
"pre": {
|
||||
"vector": [-90, 0, 0]
|
||||
},
|
||||
"post": {
|
||||
"vector": [-90, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": {
|
||||
"post": {
|
||||
"vector": [-110, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.75": {
|
||||
"post": {
|
||||
"vector": [-90, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.0": {
|
||||
"post": {
|
||||
"vector": [-90, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.25": {
|
||||
"pre": {
|
||||
"vector": [0, -2, 0]
|
||||
},
|
||||
"post": {
|
||||
"vector": [0, -2, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": {
|
||||
"post": {
|
||||
"vector": [0, -1.06031, 0.34202]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.75": {
|
||||
"post": {
|
||||
"vector": [0, -2.06, -0.66]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.0": {
|
||||
"post": {
|
||||
"vector": [0, -2, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"right_flying_part": {
|
||||
"scale": {
|
||||
"vector": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"squirrel": {
|
||||
"rotation": {
|
||||
"vector": [-90, 0, 0]
|
||||
},
|
||||
"position": {
|
||||
"vector": [0, 6.75, 7]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+469
-5
@@ -7984,7 +7984,7 @@
|
||||
},
|
||||
"0.2917": {
|
||||
"post": {
|
||||
"vector": [0, "-1+math.cos(query.anim_time*32)*2", 6]
|
||||
"vector": [0, "-1+math.cos(q.anim_time*90*32)*2", 6]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
@@ -8014,7 +8014,7 @@
|
||||
},
|
||||
"0.7917": {
|
||||
"post": {
|
||||
"vector": [0, "-1+math.cos(query.anim_time*32)*2", 6]
|
||||
"vector": [0, "-1+math.cos(q.anim_time*90*32)*2", 6]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
@@ -8044,7 +8044,7 @@
|
||||
},
|
||||
"1.2917": {
|
||||
"post": {
|
||||
"vector": [0, "-1+math.cos(query.anim_time*32)*2", 6]
|
||||
"vector": [0, "-1+math.cos(q.anim_time*90*32)*2", 6]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
@@ -9176,13 +9176,13 @@
|
||||
},
|
||||
"1.6667": {
|
||||
"post": {
|
||||
"vector": ["35-math.cos(query.anim_time*32-50)*5", 0, 0]
|
||||
"vector": ["35-math.cos(q.anim_time*90*32-50)*5", 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.875": {
|
||||
"post": {
|
||||
"vector": ["35-math.cos(query.anim_time*32-50)*5", 0, 0]
|
||||
"vector": ["35-math.cos(q.anim_time*90*32-50)*5", 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
@@ -11470,6 +11470,470 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"death": {
|
||||
"animation_length": 1,
|
||||
"bones": {
|
||||
"head": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [22.5, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.1667": {
|
||||
"post": {
|
||||
"vector": [-55, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4167": {
|
||||
"post": {
|
||||
"vector": [7.5, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5417": {
|
||||
"post": {
|
||||
"vector": [7.15656, 2.24944, -17.35932]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"neck": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [15, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.1667": {
|
||||
"post": {
|
||||
"vector": [-40, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4167": {
|
||||
"post": {
|
||||
"vector": [2.5, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5417": {
|
||||
"post": {
|
||||
"vector": [22.01816, 4.75113, -11.57518]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"torso": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [-27.5, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.1667": {
|
||||
"vector": [-90, 0, 0]
|
||||
},
|
||||
"0.4167": {
|
||||
"vector": [-65, 0, 0]
|
||||
},
|
||||
"0.5417": {
|
||||
"vector": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"L_Tight": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [-27.5, -20, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.1667": {
|
||||
"post": {
|
||||
"vector": [-27.5, -37.5, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4167": {
|
||||
"post": {
|
||||
"vector": [-27.5, -37.5, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5417": {
|
||||
"post": {
|
||||
"vector": [55.06424, 30.58184, -17.91705]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"L_leg": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [27.5, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Tail": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [20, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.1667": {
|
||||
"post": {
|
||||
"vector": [37.5, 0, -52.5]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4167": {
|
||||
"post": {
|
||||
"vector": [37.5, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5417": {
|
||||
"post": {
|
||||
"vector": [-25, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Tail2": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [20, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.1667": {
|
||||
"post": {
|
||||
"vector": [36.39498, -17.72091, -24.60981]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4167": {
|
||||
"post": {
|
||||
"vector": [32.5, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5417": {
|
||||
"post": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Tail3": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [20, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.1667": {
|
||||
"post": {
|
||||
"vector": [53.55239, -54.46865, -30.64234]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4167": {
|
||||
"post": {
|
||||
"vector": [37.5, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5417": {
|
||||
"post": {
|
||||
"vector": [17.5, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"R_Tight": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [-27.5, 20, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.1667": {
|
||||
"post": {
|
||||
"vector": [-80, 20, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4167": {
|
||||
"post": {
|
||||
"vector": [-80, 20, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5417": {
|
||||
"post": {
|
||||
"vector": [44.19476, -22.13991, 4.11405]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"R_leg": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [27.5, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.1667": {
|
||||
"post": {
|
||||
"vector": [62.5, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4167": {
|
||||
"post": {
|
||||
"vector": [62.5, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"R_foot": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"0.1667": {
|
||||
"vector": [40, 0, 0]
|
||||
},
|
||||
"0.4167": {
|
||||
"vector": [40, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"L_Wing": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [-2.56152, 6.42053, -28.46504]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5417": {
|
||||
"post": {
|
||||
"vector": [-2.56152, 6.42053, 16.53496]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"L_Wing2": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [0, -17.5, 7.5]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.1667": {
|
||||
"post": {
|
||||
"vector": [16.24074, -6.60796, -60.94387]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4167": {
|
||||
"post": {
|
||||
"vector": [2.14498, 17.78381, 79.71688]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5417": {
|
||||
"post": {
|
||||
"vector": [-5.14352, -8.08642, 3.86612]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"L_Wing3": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [-6.15491, -16.41371, 35.88852]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4167": {
|
||||
"post": {
|
||||
"vector": [16.63598, -5.01987, 94.75926]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5417": {
|
||||
"post": {
|
||||
"vector": [-2.83416, 4.94206, -18.16209]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"R_Wing": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [-2.56152, -6.42053, 28.46504]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5417": {
|
||||
"post": {
|
||||
"vector": [-2.56152, -6.42053, -16.53496]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"R_Wing2": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [0, 17.5, -7.5]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.1667": {
|
||||
"post": {
|
||||
"vector": [16.24074, 6.60796, 60.94387]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4167": {
|
||||
"post": {
|
||||
"vector": [2.14498, -17.78381, -79.71688]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5417": {
|
||||
"post": {
|
||||
"vector": [-5.14352, 8.08642, -3.86612]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"R_Wing3": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [-6.15491, 16.41371, -35.88852]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4167": {
|
||||
"post": {
|
||||
"vector": [16.63598, 5.01987, -94.75926]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5417": {
|
||||
"post": {
|
||||
"vector": [-2.83416, -4.94206, 18.16209]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"jaw": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [12.5, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.1667": {
|
||||
"post": {
|
||||
"vector": [45, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4583": {
|
||||
"post": {
|
||||
"vector": [43.931, 4.14085, 0.75952]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5417": {
|
||||
"post": {
|
||||
"vector": [10, 0, 0]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Nightmare": {
|
||||
"rotation": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"position": {
|
||||
"0.0": {
|
||||
"post": {
|
||||
"vector": [0, -0.5, -6]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.1667": {
|
||||
"post": {
|
||||
"vector": [0, -0.5, -2]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5417": {
|
||||
"post": {
|
||||
"vector": [0, -10.5, -21]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5833": {
|
||||
"post": {
|
||||
"vector": [0, -8.5, -21]
|
||||
},
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,37 +13,56 @@
|
||||
"bones": [
|
||||
{
|
||||
"name": "squirrel",
|
||||
"pivot": [0, 1, 0]
|
||||
"pivot": [0, 0, 0]
|
||||
},
|
||||
{
|
||||
"name": "body",
|
||||
"parent": "squirrel",
|
||||
"pivot": [0, 6, 0]
|
||||
},
|
||||
{
|
||||
"name": "left_leg",
|
||||
"parent": "squirrel",
|
||||
"parent": "body",
|
||||
"pivot": [3, 5, 3.25],
|
||||
"cubes": [
|
||||
{"origin": [2, 0, 1.25], "size": [2, 5, 4], "uv": [0, 30]},
|
||||
{"origin": [2, 0, 1.25], "size": [2, 5, 4], "uv": [0, 30]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "left_leg2",
|
||||
"parent": "left_leg",
|
||||
"pivot": [3, 0, 1.25],
|
||||
"cubes": [
|
||||
{"origin": [2, 0, -0.75], "size": [2, 1, 2], "uv": [35, 8]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "right_leg",
|
||||
"parent": "squirrel",
|
||||
"parent": "body",
|
||||
"pivot": [-3, 5, 3.25],
|
||||
"cubes": [
|
||||
{"origin": [-4, 0, 1.25], "size": [2, 5, 4], "uv": [0, 30], "mirror": true},
|
||||
{"origin": [-4, 0, 1.25], "size": [2, 5, 4], "uv": [0, 30], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "right_leg2",
|
||||
"parent": "right_leg",
|
||||
"pivot": [-3, 0, 1.25],
|
||||
"cubes": [
|
||||
{"origin": [-4, 0, -0.75], "size": [2, 1, 2], "uv": [35, 8], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "body",
|
||||
"parent": "squirrel",
|
||||
"pivot": [0, 4, 2],
|
||||
"name": "torso",
|
||||
"parent": "body",
|
||||
"pivot": [0, 4, 3],
|
||||
"cubes": [
|
||||
{"origin": [0, 8.5, -6], "size": [0, 3, 11], "uv": [23, 30]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "body_2",
|
||||
"parent": "body",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 6, -0.5],
|
||||
"cubes": [
|
||||
{"origin": [-3, 3.5, -6], "size": [6, 5, 11], "uv": [0, 0]},
|
||||
@@ -52,7 +71,7 @@
|
||||
},
|
||||
{
|
||||
"name": "head",
|
||||
"parent": "body",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 7.33333, -5.91667],
|
||||
"cubes": [
|
||||
{"origin": [-2, 4.5, -11], "size": [4, 5, 5], "uv": [17, 17]},
|
||||
@@ -78,7 +97,7 @@
|
||||
{
|
||||
"name": "left_ear",
|
||||
"parent": "head",
|
||||
"pivot": [1, 9.5, -6.5],
|
||||
"pivot": [1, 9.5, -7],
|
||||
"cubes": [
|
||||
{"origin": [1, 9.5, -7], "size": [2, 2, 0], "uv": [36, 13]}
|
||||
]
|
||||
@@ -86,14 +105,14 @@
|
||||
{
|
||||
"name": "right_ear",
|
||||
"parent": "head",
|
||||
"pivot": [-1, 9.5, -6.5],
|
||||
"pivot": [-1, 9.5, -7],
|
||||
"cubes": [
|
||||
{"origin": [-3, 9.5, -7], "size": [2, 2, 0], "uv": [36, 13], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "tail",
|
||||
"parent": "body",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 6, 5],
|
||||
"cubes": [
|
||||
{"origin": [-1.5, 5, 5], "size": [3, 11, 3], "uv": [14, 27]},
|
||||
@@ -103,7 +122,7 @@
|
||||
},
|
||||
{
|
||||
"name": "left_arm",
|
||||
"parent": "body",
|
||||
"parent": "torso",
|
||||
"pivot": [3, 5, -4.5],
|
||||
"cubes": [
|
||||
{"origin": [2, 0, -5.5], "size": [2, 5, 2], "uv": [35, 0]}
|
||||
@@ -112,14 +131,14 @@
|
||||
{
|
||||
"name": "left_flying_part",
|
||||
"parent": "left_arm",
|
||||
"pivot": [3, 5, -1],
|
||||
"pivot": [3, 1, -3.5],
|
||||
"cubes": [
|
||||
{"origin": [3, 0, -3.5], "size": [0, 5, 5], "inflate": 0.01, "uv": [26, 22]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "right_arm",
|
||||
"parent": "body",
|
||||
"parent": "torso",
|
||||
"pivot": [-3, 5, -4.5],
|
||||
"cubes": [
|
||||
{"origin": [-4, 0, -5.5], "size": [2, 5, 2], "uv": [35, 0], "mirror": true}
|
||||
@@ -128,7 +147,7 @@
|
||||
{
|
||||
"name": "right_flying_part",
|
||||
"parent": "right_arm",
|
||||
"pivot": [-3, 5, -1],
|
||||
"pivot": [-3, 1, -3.5],
|
||||
"cubes": [
|
||||
{"origin": [-3, 0, -3.5], "size": [0, 5, 5], "inflate": 0.01, "uv": [26, 22], "mirror": true}
|
||||
]
|
||||
|
||||
@@ -554,6 +554,7 @@
|
||||
"death.attack.jumpy_bug_jump": "%1$s was jumped by Jumpy Bug",
|
||||
"death.attack.hercules_beetle_obliteration": "%1$s was obliterated by Hercules Beetle",
|
||||
"message.antarchy.big_bertha.mode": "Big Bertha Mode: %s",
|
||||
"message.antarchy.big_bertha.mode.none": "None",
|
||||
"message.antarchy.big_bertha.mode.basilisk": "Basilisk",
|
||||
"message.antarchy.big_bertha.mode.lucid": "Lucid",
|
||||
"message.antarchy.big_bertha.mode.nightmare": "Nightmare",
|
||||
@@ -591,9 +592,10 @@
|
||||
"potion.antarchy.strong_haste": "Strong Haste Potion",
|
||||
"tooltip.antarchy.big_bertha.mode": "Mode: %s",
|
||||
"tooltip.antarchy.big_bertha.toggle_mode": "Shift + use to cycle boss modes.",
|
||||
"tooltip.antarchy.big_bertha.mode.none": "Hits deal a small amount of bonus damage.",
|
||||
"tooltip.antarchy.big_bertha.mode.basilisk": "Usage paralyzes a target. Hits inflict poison and slow.",
|
||||
"tooltip.antarchy.big_bertha.mode.lucid": "Hits invert targets for a few seconds. Hits deal more damage while you are inverted.",
|
||||
"tooltip.antarchy.big_bertha.mode.nightmare": "Players suffer Dread; hits inflict weakness.",
|
||||
"tooltip.antarchy.big_bertha.mode.nightmare": "Hits deal bonus damage; players suffer Dread and hits inflict weakness.",
|
||||
"tooltip.antarchy.big_bertha.mode.kraken": "Hits slam targets back and call lightning.",
|
||||
"tooltip.antarchy.big_bertha.mode.hercules": "Hits deal bonus damage and launch targets high into the air.",
|
||||
"tooltip.antarchy.big_bertha.mode.molevore": "Use to spin forward and drill through Molevore blocks.",
|
||||
@@ -1044,6 +1046,8 @@
|
||||
"music.antarchy.lucid_lullaby.credit": "hewo_",
|
||||
"music.antarchy.venenatus": "Venenatus",
|
||||
"music.antarchy.venenatus.credit": "hewo_",
|
||||
"music.antarchy.wistful_wanderings": "Wistful Wanderings",
|
||||
"music.antarchy.wistful_wanderings.credit": "hewo_",
|
||||
"tooltip.antarchy.lucid_anchor.pyramid": "Requires an Antimetal Beacon pyramid above it",
|
||||
"tooltip.antarchy.lucid_anchor.path": "Projects Inverted downward while it has an unobstructed path to the world below"
|
||||
}
|
||||
@@ -924,6 +924,14 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"music.game.thoraxis": {
|
||||
"sounds": [
|
||||
{
|
||||
"name": "antarchy:lucid_lullaby",
|
||||
"stream": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"venenatus": {
|
||||
"sounds": [
|
||||
{
|
||||
@@ -932,6 +940,30 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"music.game.cavaryn": {
|
||||
"sounds": [
|
||||
{
|
||||
"name": "antarchy:venenatus",
|
||||
"stream": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"wistful_wanderings": {
|
||||
"sounds": [
|
||||
{
|
||||
"name": "antarchy:music/game/elythia/wistful_wanderings",
|
||||
"stream": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"music.game.elythia": {
|
||||
"sounds": [
|
||||
{
|
||||
"name": "antarchy:wistful_wanderings",
|
||||
"stream": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"lucid_ambient": {
|
||||
"subtitle": "subtitles.antarchy.lucid_ambient",
|
||||
"sounds": [
|
||||
|
||||
BIN
Binary file not shown.
+13
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"antarchy:uranium_ore",
|
||||
"antarchy:deepslate_uranium_ore",
|
||||
"antarchy:broodstone_uranium_ore",
|
||||
"antarchy:titanium_ore",
|
||||
"antarchy:deepslate_titanium_ore",
|
||||
"antarchy:broodstone_titanium_ore",
|
||||
"antarchy:uranium_block",
|
||||
"antarchy:titanium_block"
|
||||
]
|
||||
}
|
||||
@@ -23,7 +23,7 @@
|
||||
}
|
||||
},
|
||||
"music": {
|
||||
"sound": "antarchy:venenatus",
|
||||
"sound": "antarchy:music.game.cavaryn",
|
||||
"min_delay": 12000,
|
||||
"max_delay": 24000,
|
||||
"replace_current_music": true
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
}
|
||||
},
|
||||
"music": {
|
||||
"sound": "antarchy:venenatus",
|
||||
"sound": "antarchy:music.game.cavaryn",
|
||||
"min_delay": 12000,
|
||||
"max_delay": 24000,
|
||||
"replace_current_music": true
|
||||
|
||||
@@ -15,6 +15,12 @@
|
||||
"tick_delay": 8000,
|
||||
"block_search_extent": 8,
|
||||
"offset": 2.0
|
||||
},
|
||||
"music": {
|
||||
"sound": "antarchy:music.game.elythia",
|
||||
"min_delay": 12000,
|
||||
"max_delay": 24000,
|
||||
"replace_current_music": true
|
||||
}
|
||||
},
|
||||
"spawn_costs": {
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
}
|
||||
},
|
||||
"music": {
|
||||
"sound": "antarchy:venenatus",
|
||||
"sound": "antarchy:music.game.cavaryn",
|
||||
"min_delay": 12000,
|
||||
"max_delay": 24000,
|
||||
"replace_current_music": true
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@
|
||||
}
|
||||
},
|
||||
"music": {
|
||||
"sound": "antarchy:venenatus",
|
||||
"sound": "antarchy:music.game.cavaryn",
|
||||
"min_delay": 12000,
|
||||
"max_delay": 24000,
|
||||
"replace_current_music": true
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
"offset": 2.0
|
||||
},
|
||||
"music": {
|
||||
"sound": "antarchy:lucid_lullaby",
|
||||
"sound": "antarchy:music.game.thoraxis",
|
||||
"min_delay": 12000,
|
||||
"max_delay": 24000,
|
||||
"replace_current_music": true
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"offset": 2.0
|
||||
},
|
||||
"music": {
|
||||
"sound": "minecraft:music.game",
|
||||
"sound": "antarchy:music.game.elythia",
|
||||
"min_delay": 12000,
|
||||
"max_delay": 24000,
|
||||
"replace_current_music": true
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@
|
||||
"offset": 2.0
|
||||
},
|
||||
"music": {
|
||||
"sound": "minecraft:music.game",
|
||||
"sound": "antarchy:music.game.elythia",
|
||||
"min_delay": 12000,
|
||||
"max_delay": 24000,
|
||||
"replace_current_music": true
|
||||
|
||||
+1
-1
@@ -23,7 +23,7 @@
|
||||
"offset": 2.0
|
||||
},
|
||||
"music": {
|
||||
"sound": "minecraft:music.game",
|
||||
"sound": "antarchy:music.game.elythia",
|
||||
"min_delay": 12000,
|
||||
"max_delay": 24000,
|
||||
"replace_current_music": true
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"offset": 2.0
|
||||
},
|
||||
"music": {
|
||||
"sound": "minecraft:music.game",
|
||||
"sound": "antarchy:music.game.elythia",
|
||||
"min_delay": 12000,
|
||||
"max_delay": 24000,
|
||||
"replace_current_music": true
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"offset": 2.0
|
||||
},
|
||||
"music": {
|
||||
"sound": "minecraft:music.game",
|
||||
"sound": "antarchy:music.game.elythia",
|
||||
"min_delay": 12000,
|
||||
"max_delay": 24000,
|
||||
"replace_current_music": true
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"offset": 2.0
|
||||
},
|
||||
"music": {
|
||||
"sound": "minecraft:music.game",
|
||||
"sound": "antarchy:music.game.elythia",
|
||||
"min_delay": 12000,
|
||||
"max_delay": 24000,
|
||||
"replace_current_music": true
|
||||
|
||||
+1
-1
@@ -23,7 +23,7 @@
|
||||
"offset": 2.0
|
||||
},
|
||||
"music": {
|
||||
"sound": "minecraft:music.game",
|
||||
"sound": "antarchy:music.game.elythia",
|
||||
"min_delay": 12000,
|
||||
"max_delay": 24000,
|
||||
"replace_current_music": true
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"offset": 2.0
|
||||
},
|
||||
"music": {
|
||||
"sound": "minecraft:music.game",
|
||||
"sound": "antarchy:music.game.elythia",
|
||||
"min_delay": 12000,
|
||||
"max_delay": 24000,
|
||||
"replace_current_music": true
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
}
|
||||
},
|
||||
"music": {
|
||||
"sound": "antarchy:venenatus",
|
||||
"sound": "antarchy:music.game.cavaryn",
|
||||
"min_delay": 12000,
|
||||
"max_delay": 24000,
|
||||
"replace_current_music": true
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
"offset": 2.0
|
||||
},
|
||||
"music": {
|
||||
"sound": "antarchy:lucid_lullaby",
|
||||
"sound": "antarchy:music.game.thoraxis",
|
||||
"min_delay": 12000,
|
||||
"max_delay": 24000,
|
||||
"replace_current_music": true
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
}
|
||||
},
|
||||
"music": {
|
||||
"sound": "minecraft:music.game",
|
||||
"sound": "antarchy:music.game.elythia",
|
||||
"min_delay": 12000,
|
||||
"max_delay": 24000,
|
||||
"replace_current_music": true
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
"offset": 2.0
|
||||
},
|
||||
"music": {
|
||||
"sound": "antarchy:lucid_lullaby",
|
||||
"sound": "antarchy:music.game.thoraxis",
|
||||
"min_delay": 12000,
|
||||
"max_delay": 24000,
|
||||
"replace_current_music": true
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"offset": 2.0
|
||||
},
|
||||
"music": {
|
||||
"sound": "minecraft:music.game",
|
||||
"sound": "antarchy:music.game.elythia",
|
||||
"min_delay": 12000,
|
||||
"max_delay": 24000,
|
||||
"replace_current_music": true
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"offset": 2.0
|
||||
},
|
||||
"music": {
|
||||
"sound": "minecraft:music.game",
|
||||
"sound": "antarchy:music.game.elythia",
|
||||
"min_delay": 12000,
|
||||
"max_delay": 24000,
|
||||
"replace_current_music": true
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
}
|
||||
},
|
||||
"music": {
|
||||
"sound": "antarchy:venenatus",
|
||||
"sound": "antarchy:music.game.cavaryn",
|
||||
"min_delay": 12000,
|
||||
"max_delay": 24000,
|
||||
"replace_current_music": true
|
||||
|
||||
+1
-1
@@ -23,7 +23,7 @@
|
||||
"offset": 2.0
|
||||
},
|
||||
"music": {
|
||||
"sound": "minecraft:music.game",
|
||||
"sound": "antarchy:music.game.elythia",
|
||||
"min_delay": 12000,
|
||||
"max_delay": 24000,
|
||||
"replace_current_music": true
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
"offset": 2.0
|
||||
},
|
||||
"music": {
|
||||
"sound": "antarchy:lucid_lullaby",
|
||||
"sound": "antarchy:music.game.thoraxis",
|
||||
"min_delay": 12000,
|
||||
"max_delay": 24000,
|
||||
"replace_current_music": true
|
||||
|
||||
Reference in new issue
Block a user